Master

Linguagens & Frameworks

Adote?

  • Há muito tempo, incluímos ReactiveX — uma família de frameworks de código aberto para programação reativa — no anel Adote do Radar. Em 2017, mencionamos a adição do RxSwift, que trouxe a programação reativa para o desenvolvimento iOS com Swift. Desde então, a Apple introduziu sua própria visão da programação reativa na forma do framework Combine. Combine se tornou nossa escolha padrão para aplicativos que suportam iOS 13 como um destino de implantação aceitável. É mais fácil de aprender do que RxSwift e se integra muito bem com SwiftUI. Se você está planejando converter uma aplicação existente de RxSwift para Combine ou trabalhar com os dois no mesmo projeto, você pode se interessar em conferir o RxCombine.

    Histórico
  • Nossos times de desenvolvimento para dispositivos móveis atualmente veem LeakCanary como uma boa escolha padrão para desenvolvimento Android. Ele detecta vazamentos irritantes de memória no Android, é extremamente simples de integrar e fornece notificações com rastreamento claro da causa do vazamento. O LeakCanary pode economizar horas de tédio investigando erros de falta de memória em vários dispositivos, e recomendamos que você o adicione ao seu conjunto de ferramentas.

    Histórico

Experimente?

  • Continuamos desenvolvendo aplicações web em JavaScript e seguimos gostando da abordagem da Testing Library para testar aplicações, e seguimos explorando e ganhando experiência com seus pacotes — além da React Testing Library. A Angular Testing Library traz todos os benefícios de sua família ao testar componentes de UI de uma forma centrada no usuário, impulsionando testes de fácil manutenção com foco principalmente no comportamento do usuário, em vez de testar os detalhes de implementação da UI. Embora sua documentação seja insuficiente, a Angular Testing Library fornece bons exemplos de testes que nos ajudaram a começar mais rápido em vários casos. Tivemos grande sucesso com esta biblioteca de testes em nossos projetos Angular e aconselhamos você a experimentar esta sólida abordagem de testes.

    Histórico
  • A AWS Data Wrangler é uma biblioteca de código aberto que estende os recursos do Pandas para a AWS, conectando frames de dados a serviços da AWS relacionados a dados. Além do Pandas, a biblioteca usa Apache Arrow e Boto3 para expor várias APIs para carregar, transformar e salvar dados em lagos de dados e data warehouses. Uma limitação importante é que você não pode executar grandes pipelines de dados distribuídos com esta biblioteca. No entanto, você pode aproveitar os serviços de dados nativos – como Athena, Redshift e Timestream – para fazer o trabalho pesado e extrair dados a fim de expressar transformações complexas que são adequadas para frames de dados. Usamos o AWS Data Wrangler em produção e, dessa forma, ele permite que você se concentre em escrever transformações sem gastar muito tempo na conectividade com os serviços de dados da AWS.

    Histórico
  • Embora JavaScript e seu ecossistema sejam dominantes no espaço de desenvolvimento de web UI, novas oportunidades estão aparecendo com o surgimento de WebAssembly. O Blazor continua chamando nossa atenção ao produzir bons resultados para nossos times, que estão criando interfaces de usuário ricas e interativas usando C# em cima de WebAssembly. O fato de nossos times poderem usar C# no front-end também permite que compartilhem código e reutilizem as bibliotecas existentes. Isso, junto com as ferramentas existentes para depuração e testes, como bUnit, é o que faz valer a pena experimentar esse framework de código aberto.

    Histórico
  • Temos visto mais times adotando Python como a linguagem preferida para construir soluções, não apenas para ciência de dados, mas também para serviços de back-end. Nesses cenários, temos tido boas experiências com FastAPI — um framework web de alto desempenho, moderno e rápido para construir APIs com Python 3.6 ou posteriores. Além disso, este framework e seu ecossistema incluem recursos como documentação de API usando OpenAPI, que permite que nossos times se concentrem nas funcionalidades do negócio e criem APIs REST rapidamente, tornando FastAPI uma boa alternativa às soluções existentes neste espaço.

    Histórico
  • Temos gostado muito de usar o TypeScript há algum tempo, e adoramos a segurança que a tipagem forte oferece. No entanto, colocar dados dentro dos limites do sistema de tipos, por exemplo, de uma chamada para um serviço de back-end, pode levar a erros de tempo de execução. Uma biblioteca que ajuda a resolver esse problema é io-ts. Ela preenche a lacuna entre a verificação de tipo em tempo de compilação e o consumo em tempo de execução de dados externos, fornecendo funções de codificação e decodificação. Também pode ser usada como uma proteção de tipos personalizados. À medida que ganhamos mais experiência com io-ts, nossas impressões inicialmente positivas vêm sendo confirmadas, e continuamos gostando da elegância de sua abordagem.

    Histórico
  • A introdução de corrotinas no Kotlin abriu portas para várias inovações — o Kotlin Flow é uma delas, integrando-se diretamente à biblioteca de corrotinas. É uma implementação de Reactive Streams com base em corrotinas. Ao contrário do RxJava, os fluxos são uma API Kotlin nativa semelhante à API de sequência familiar, com métodos que incluem map e filter. Assim como as sequências, os fluxos são frios, o que significa que os valores da sequência são construídos apenas quando necessário. Tudo isso torna a programação multithread muito mais simples e fácil de entender do que outras abordagens. O método toList, previsivelmente, converte um fluxo em uma lista, que é um padrão comum em testes.

    Histórico
  • O progresso tem sido constante desde que escrevemos sobre Web Components em 2014. LitElement, parte do Polymer Project, é uma biblioteca simples que pode ser usada para criar componentes web leves. Na verdade, é apenas uma classe base que elimina a necessidade de boa parte do boilerplate comum, tornando a programação de componentes web muito mais fácil. Tivemos sucesso usando-o em projetos e, à medida que vemos a tecnologia amadurecendo e a biblioteca sendo bem aceita, LitElement vem se tornando mais comumente usado em nossos projetos baseados em Web Components.

    Histórico
  • Tivemos mais algumas experiências usando Next.js para bases de código React desde a última vez que escrevemos sobre ele. Next.js é um framework opinativo de configuração zero que inclui roteamento simplificado, compilação automática e empacotamento com Webpack e Babel, recarregamento rápido para um fluxo de trabalho de desenvolvimento conveniente, entre outros recursos. Ele fornece renderização do lado do servidor por padrão, melhora a otimização do mecanismo de pesquisa e o tempo de carregamento inicial, e oferece suporte à geração estática incremental. Recebemos relatos de experiências positivas de times usando Next.js e, devido à sua grande comunidade, seguimos otimistas em relação à evolução do framework.

    Histórico
  • On-demand modules para Android é um framework que permite que APKs personalizados contendo apenas a funcionalidade necessária sejam baixados e instalados em um aplicativo adequadamente estruturado. Pode valer a pena testá-lo com aplicativos maiores, nos quais a velocidade de download pode ser um problema, ou caso um usuário tenda a usar apenas parte da funcionalidade na instalação inicial. Ele também pode simplificar o manuseio de vários dispositivos sem exigir APKs diferentes. Um framework semelhante está disponível para iOS.

    Histórico
  • Streamlit é um framework de código aberto em Python, usado por cientistas de dados para construir aplicações de dados interativas. Ajustar modelos de aprendizado de máquina leva tempo. Em vez de ir e voltar na aplicação principal (que usa esses modelos), encontramos valor em construir protótipos autônomos com rapidez no Streamlit e coletar feedback durante os ciclos de experimentação. O Streamlit se destaca em relação a concorrentes como Dash por seu foco em prototipagem rápida e suporte para uma ampla gama de bibliotecas de visualização, incluindo Plotly e Bokeh. Temos usado em alguns projetos e gostamos da possibilidade de criar visualizações interativas com pouquíssimo esforço.

    Histórico
  • Nossos times descobriram que, quando usada em circunstâncias apropriadas, a biblioteca React Hooks SWR pode resultar em um código mais limpo e um desempenho muito superior. A SWR implementa a estratégia de cache HTTP stale-while-revalidate, primeiro retornando dados do cache (stale), depois enviando a solicitação de busca (revalidate) e, finalmente, atualizando os valores com a resposta atualizada. Aconselhamos os times a usar a estratégia de cache SWR apenas quando for esperado que uma aplicação retorne dados desatualizados. Observe que o HTTP requer que os caches respondam a uma solicitação com a resposta mais atualizada. Somente em circunstâncias cuidadosamente consideradas uma resposta desatualizada pode ser retornada.

    Histórico
  • A fixação de chave pública SSL pode ser complicada. Se você selecionar uma política errada ou não tiver um PIN de backup, sua aplicação irá parar de funcionar inesperadamente. É aqui que TrustKit é útil – é um framework de código aberto que torna a fixação de chave pública SSL mais fácil para aplicações iOS. Há um framework equivalente para Android também. Escolher a estratégia de fixação correta é um tema com muitas nuances, e você pode encontrar mais detalhes sobre isso no guia de primeiros passos. Temos usado o TrustKit em vários projetos em produção, e ele tem funcionado bem.

    Histórico

Avalie?

  • Nós não incluímos cada nova versão do .NET no Radar, mas o .NET 5 representa um passo significativo para unir o .NET Core e o .NET Framework em uma única plataforma. As organizações devem começar a desenvolver uma estratégia para migrar seus ambientes de desenvolvimento — uma mistura fragmentada de frameworks dependendo do destino da implantação — para uma única versão do .NET 5 ou 6 quando estiver disponível. A vantagem dessa abordagem será uma plataforma de desenvolvimento comum, independentemente do ambiente pretendido: Windows, Linux, dispositivos móveis multiplataforma, (com Xamarin), ou navegador, (usando Blazor). Embora o desenvolvimento poliglota continue a ser a abordagem preferida para empresas com a cultura de engenharia necessária para suportá-lo, outras acharão mais eficiente padronizar em uma única plataforma de desenvolvimento .NET. Por enquanto, queremos manter isso no anel Avalie para observarmos o desempenho do framework unificado final no .NET 6.

    Histórico
  • bUnit é uma biblioteca de testes para Blazor que facilita a criação de testes para componentes do Blazor em frameworks de teste de unidade existentes, como NUnit, xUnit ou MSUnit. bUnit fornece uma fachada em torno do componente, permitindo que ele seja executado e testado dentro do paradigma familiar de teste de unidade, permitindo assim feedback e testes muito rápidos do componente de forma isolada. Se você estiver desenvolvendo para o Blazor, recomendamos que você adicione o bUnit à sua lista de ferramentas para experimentar.

    Histórico
  • Dagster é um framework de orquestração de dados de código aberto para aprendizado de máquina, analytics e pipelines de dados ETL simples. Ao contrário de outros frameworks orientados a tarefas, Dagster reconhece os dados que fluem pelo pipeline e pode fornecer segurança de tipagem. Com essa visão unificada de pipelines e ativos produzidos, Dagster pode agendar e orquestrar Pandas, Spark, SQL ou qualquer outra coisa que Python possa invocar. O framework é relativamente novo, e recomendamos que você avalie seus recursos para pipelines de dados.

    Histórico
  • Até o momento, o Flutter ofereceu suporte principalmente a aplicações iOS e Android nativas. No entanto, a visão da equipe do Flutter é apoiar a construção de aplicações em todas as plataformas. O Flutter para Web é um passo nessa direção — nos permite construir aplicações para iOS, Android e navegador a partir da mesma base de código. Ele já está disponível há mais de um ano em "Beta", mas com o lançamento recente do Flutter 2.0, o Flutter para Web atingiu a estabilidade. Na versão inicial do suporte para web, a equipe do Flutter está se concentrando em aplicações web progressivas (PWAs), aplicações de página única (SPAs) e expandindo os aplicativos móveis existentes para a web. A aplicação e o código do framework (todos em Dart) são compilados para JavaScript em vez do código de máquina ARM, que é usado para aplicativos móveis. O mecanismo web do Flutter oferece a escolha entre dois renderizadores: um renderizador HTML, que usa HTML, CSS, Canvas e SVG, e um renderizador CanvasKit que usa WebAssembly e WebGL para renderizar comandos do Skia na tela do navegador. Alguns de nossos times começaram a usar o Flutter para Web e gostaram dos resultados iniciais.

    Histórico
  • Na edição anterior do Radar, comentamos sobre o início de uma fase de experimentação com gerenciamento de estado em aplicações React. Movemos o Redux de volta ao anel Experimente, registrando que não é mais nossa escolha padrão, e mencionando o Recoil do Facebook. Neste volume, queremos destacar Jotai e Zustand: ambas são bibliotecas de gerenciamento de estado para React, ambas pretendem ser pequenas e simples de usar e, talvez não por coincidência, ambos os nomes são traduções da palavra estado em japonês e alemão, respectivamente. Além dessas semelhanças, no entanto, há diferenças em seu design. O design do Jotai é mais próximo ao do Recoil, pois o estado consiste em átomos armazenados na árvore de componentes React, enquanto o Zustand armazena o estado fora do React em um único objeto de estado, de forma muito semelhante à abordagem adotada pelo Redux. Os autores do Jotai fornecem uma lista de verificação útil para decidir quando usar qual.

    Histórico
  • Seguindo a tendência de desenvolvimento móvel multiplataforma, o Kotlin Multiplatform Mobile (KMM) é um novo participante neste espaço. KMM é um SDK fornecido pela JetBrains que aproveita os recursos multiplataforma do Kotlin e inclui ferramentas e funcionalidades projetadas para tornar a experiência de construção ponta a ponta de aplicativos móveis multiplataforma mais agradável e eficiente. Com o KMM, você escreve o código uma vez para a lógica de negócios e o núcleo do aplicativo em Kotlin, e depois o compartilha com os aplicativos Android e iOS. Você escreve o código específico da plataforma apenas quando necessário, por exemplo, para aproveitar as vantagens dos elementos nativos da UI, e o código específico destes elementos é mantido em diferentes views para cada plataforma. Embora ainda em Alpha, o Kotlin Multiplatform Mobile está evoluindo rapidamente. Certamente ficaremos de olho nele, e você também deveria.

    Histórico
  • Com a crescente popularidade de dispositivos smart home e wearables, a demanda por interfaces gráficas de usuário (GUIs) intuitivas está aumentando. No entanto, se você trabalha com desenvolvimento de dispositivos embarcados, e não Android/iOS, o desenvolvimento de GUI pode exigir muito esforço. Uma biblioteca gráfica embarcada de código aberto, a LVGL vem ganhando cada vez mais popularidade. A LVGL foi adaptada para plataformas embarcadas convencionais, como NXP, STM32, PIC, Arduino e ESP32. Ela tem um footprint de memória muito pequeno: 64 kB de flash e 8 kB de RAM são suficientes para fazê-la funcionar, e ela pode ser executada sem problemas em vários MCUs Cortex-M0 de baixo consumo de energia. A LVGL suporta tipos de entrada como touchscreen, mouse e botões, e contém mais de 30 controles, incluindo TileView adequado para relógios inteligentes. A licença do MIT escolhida não restringe o uso empresarial e comercial. O feedback de nossos times sobre essa ferramenta tem sido positivo, e um de nossos projetos usando LVGL já está em produção, mais especificamente na manufatura de pequenos lotes.

    Histórico
  • Criar formulários para a web continua sendo um dos desafios constantes do desenvolvimento front-end, em particular com React. Muitos de nossos times que trabalham com React têm usado o Formik para tornar essa tarefa mais fácil, mas alguns estão avaliando o React Hook Form como uma alternativa potencial. Os React Hooks já existiam quando o React Hook Form foi criado, então ele pôde usá-los como um conceito de primeira classe: o framework registra e rastreia os elementos do formulário como componentes não controlados por meio de um hook, reduzindo significativamente a necessidade de uma nova renderização. Ele também é bem leve em tamanho e na quantidade de código boilerplate necessária.

    Histórico
  • No centro de muitas abordagens de aprendizado de máquina está a criação de um modelo a partir de um conjunto de dados de treinamento. Depois que um modelo é criado, ele pode ser usado repetidamente. No entanto, o mundo não é estático e, muitas vezes, o modelo precisa ser alterado conforme novos dados se tornam disponíveis. A simples reexecução da etapa de criação do modelo pode ser lenta e cara. O aprendizado incremental resolve esse problema, tornando possível aprender a partir de fluxos de dados de forma incremental para reagir às mudanças com mais rapidez. Como bônus, os requisitos de computação e memória são menores e previsíveis. Em nossas implementações, tivemos uma boa experiência com o framework River, mas até o momento adicionamos verificações, às vezes manuais, após atualizações no modelo.

    Histórico
  • O lançamento da funcionalidade Webpack 5 Module Federation foi muito aguardado por pessoas desenvolvedoras de arquiteturas de micro frontends. A funcionalidade apresenta uma maneira mais padronizada de otimizar a forma como as dependências de módulo e o código compartilhado são gerenciados e carregados. A funcionalidade de module federation permite a especificação de módulos compartilhados, o que ajuda na redução de duplicação de dependências entre micro front-ends, carregando o código usado por vários módulos apenas uma vez. Também permite distinguir entre módulos locais e remotos, quando os módulos remotos não são realmente parte do build em si, mas carregados de forma assíncrona. Comparado às dependências de tempo de compilação, como pacotes npm, isso pode simplificar significativamente a implantação de uma atualização de módulo com muitas dependências downstream. Esteja ciente, porém, que isso requer que você empacote todos os seus micro front-ends com o Webpack, ao contrário de abordagens como import maps, que podem eventualmente se tornar parte do padrão W3C.

    Histórico

Evite?

    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 estar faltando um tópico específico porque o Radar reflete nossa experiência, não se baseando em uma análise abrangente do mercado.

    Novo,Modificado,Sem alteração