2 pontos por oksktank 3 시간 전 | Ainda não há comentários. | Compartilhar no WhatsApp

Atualizei para a versão 2.0.0 e publiquei no npm uma biblioteca de gráficos para React Native que eu havia criado 9 anos atrás. A maior parte deste trabalho de atualização foi realizada por um agente de IA, e compartilho aqui o processo.

Primeiro, uma apresentação da biblioteca. Como o nome indica, a identidade do react-native-pure-chart é ser "pure". Ele não usa react-native-svg, nem ART, nem o Skia, que hoje se tornou padrão; desenha gráficos de linha/barra/pizza apenas com os componentes puros View/Text do RN. O princípio de renderização é o seguinte: calcula a distância e o ângulo entre dois pontos de dados usando trigonometria, gira uma View fina e comprida com rotate transform para que ela pareça um segmento de reta e compõe o gráfico inteiro conectando esses pedaços. O valor central é poder usar com uma única linha de npm install, sem se preocupar em vincular uma biblioteca nativa de desenho ou ter o build quebrando durante o pod install — ou seja, zero dependências. No auge, tinha 2.000 downloads semanais no npm, era usado por cerca de 820 projetos e tinha 289 stars. Depois disso, ficou abandonado por 9 anos, e nem dava para saber se funcionava no RN mais recente.

Por acaso, eu ainda tinha uma conta de IA cujo limite seria reiniciado em breve, então deixei um prompt no horário do almoço.

"Já fiz o git clone; faça funcionar bem no ambiente expo/RN mais recente. Consulte a documentação do harness"

Aqui, "harness" é um ambiente de autovalidação que eu já havia configurado. É uma configuração que usa uma ferramenta de e2e mobile como o Maestro para manipular diretamente o simulador iOS e o emulador Android, tirar screenshots e verificar o resultado da renderização. O ponto central deste trabalho está aí.

Para fazer uma base de código RN de 9 anos atrás funcionar no expo/RN mais recente, há muitos pontos a mexer. O estilo de escrita de componentes e as APIs daquela época ainda estavam intactos, então não era uma simples atualização de versão, mas praticamente uma refatoração de modernização. Esse tipo de trabalho não é muito difícil em cada parte isolada, mas tem grande volume, e a cada correção é preciso verificar na tela real se nada quebrou, o que levaria bastante tempo se fosse feito manualmente por uma pessoa.

Enquanto eu fazia outras coisas, o agente rodou sozinho em loop por algumas horas. Ele alterava o código, executava o app no simulador e no emulador, manipulava a tela via e2e, tirava screenshots, julgava problemas de renderização olhando para essas screenshots e então modificava o código novamente, repetindo o ciclo. O importante é que essa validação não ficava no nível de erro de compilação ou testes passando. Em uma biblioteca de gráficos, mesmo que o build tenha sucesso, se uma linha estiver desalinhada ou um eixo deslocado, é falha. Como é um projeto em que a resposta correta é "o que aparece na tela", o loop de regressão visual usando screenshots como critério de julgamento preencheu lacunas que testes unitários não conseguem verificar.

A maior mudança desta versão é o suporte a gráficos de curva (smooth line). Na verdade, 9 anos atrás eu não consegui oferecer suporte a gráficos curvos. Uma linha reta pode ser feita girando uma única View, mas uma curva exige dividir o trecho em partes pequenas, calcular as coordenadas e o ângulo de cada pedaço e aproximá-la com segmentos curtos; na época, não consegui resolver o problema de pequenas interrupções ou cantos aparentes entre um pedaço e outro, então nem incluí a funcionalidade. Desta vez, o agente não parou na verificação da screenshot inteira: ele ampliou e capturou trechos em que a curva parecia estar interrompida para inspecioná-los. Depois ajustou valores de variáveis usadas no cálculo das coordenadas e ângulos dos pedaços, renderizou novamente e voltou a ampliar para verificar, repetindo esse ciclo. Quando uma pessoa repete manualmente um loop de ajuste em que muda parâmetros e confere o resultado visualmente, em algum momento acaba fazendo concessões; o agente continuou repetindo até convergir e, como resultado, um gráfico de curva suave foi adicionado como novo recurso. Ou seja, entrou agora uma funcionalidade que eu não consegui implementar 9 anos atrás.

Como resultado, foram concluídos a compatibilidade com o ambiente expo/RN mais recente, o novo suporte a gráficos de curva, a atualização das screenshots de gráficos no README e o build e a publicação da versão 2.0.0 no npm. É a primeira atualização em 9 anos.

O que senti com este trabalho: passei a achar que o gargalo do coding com agentes está mais no ambiente de validação do que no desempenho do modelo. Quando existe um harness que permite confirmar os resultados por conta própria, ele converge até na qualidade visual, mesmo sem revisão humana. Em especial, em projetos como bibliotecas de UI, em que a resposta correta está na tela, a combinação de manipulação e2e com julgamento por screenshots foi eficaz. Trabalhos como modernização de legado, que têm baixa dificuldade mas alto custo de verificação repetitiva, parecem ter se tornado uma boa categoria para delegar a agentes.

GitHub: https://github.com/oksktank/react-native-pure-chart
npm: https://www.npmjs.com/package/react-native-pure-chart

Ainda não há comentários.

Ainda não há comentários.