---
title: "Usando IA para generar código"
date: 2023-05-03
language: es
topics: ["AI", "cloud", "data", "programming", "server", "work"]
source_url: https://willem.com/es/2023-05-03_usando-ia-para-generar-codigo/
---
# Usando IA para generar código

*Programar con superpoderes*

> Como parte de mis esfuerzos de optimización de software para reducir los costes de la nube, necesitaba sustituir un software de servidor ineficiente por algo basado en herramientas más robustas (aunque fragmentadas) de Debian GNU/Linux. ¿Podría el modelo de lenguaje GPT4 ofrecerme algo de magia de IA? ¡Sigue leyendo!

Una parte de los servicios en la nube de mi empresa es el llamado "Lemmid Manager", un sistema integrado de gestión de contenidos que toma datos en bruto (texto, vídeos, imágenes) y genera sitios web estáticos preciosos y de alto rendimiento. Ante los costes_de_la_nube_disparados (https://willem.com/en/2023-04-05_cutting-cloud-costs/), estoy reescribiendo partes del software para que sea más eficiente: usar menos potencia de cálculo para conseguir los mismos resultados.

## Rotación de imágenes

Quizá no te hayas dado cuenta, pero cada vez que haces una foto con el móvil, se guarda siempre en horizontal (o panorámico). Cuando haces una foto vertical, el móvil simplemente añade un poco de información extra que recuerda cómo sostenías la cámara, de modo que al volver a mirar la foto aparece bien orientada. Es más rápido escribir un solo dato (extra) que girar los bits y bytes reales que forman tu imagen.

Eso está bien mientras la foto no salga de tu móvil, pero si la subes a un sitio web, tiene que estar optimizada para la web. Entonces los bits y bytes reales de la imagen deben reflejar el contenido real de la foto. Después la imagen se puede seguir optimizando para una_carga_más_rápida (https://willem.com/en/2018-09-26_optimising-images-for-the-web-and-performance/) y para distintos tamaños de pantalla.

## Rotación automática de imágenes según el EXIF

Las cámaras modernas (de smartphone) guardan la orientación en el llamado EXIF que acompaña a los datos de la imagen. Para que la imagen (sus bits y bytes) refleje correctamente la orientación de la cámara, hay que leer los datos EXIF y, según la orientación, aplicar un algoritmo de rotación a los bits y bytes de la imagen.

### Implementación actual

La implementación original (escrita a mano) usa NodeJS y un módulo llamado "lwip" (LightWeight ImageProcessor) para hacerlo. Funciona bien en la mayoría de los casos, pero a medida que las imágenes han ido creciendo (con más megapíxeles), las necesidades de memoria se han disparado. El inconveniente de hacerlo todo en un único proceso de NodeJS es que se convierte en un devorador de memoria, y todo el backend de NodeJS se resiente cuando lo llevas al límite procesando miles de fotos.

Una estrategia habitual para optimizar los cuellos de botella de un software es sacarlos del programa principal. En lugar de procesar las imágenes directamente desde NodeJS, quiero usar herramientas corrientes de Debian GNU/Linux (con un historial probado) para la rotación automática. Desde NodeJS puedo llamar al 'auto_rotator' externo y esperar a que termine su tarea. Si un proceso de NodeJS espera un resultado/callback asíncrono, queda libre otra vez para otras peticiones.

## GPT4 como generador de código

Lo mejor del software libre (libre de verdad) es que hay muchísimas piezas disponibles para construir tus propios programas. Yo sabía que Debian GNU/Linux tiene herramientas que pueden rotar imágenes a partir de los datos EXIF. El reto es crear un único script que combine esas herramientas para hacer el trabajo y que además gestione bien las excepciones.

En lugar de sumergirme yo mismo en todos los comandos y opciones disponibles, decidí pedirle a GPT4 que generara un script que hiciera justo lo que yo quería, con herramientas estándar de Debian GNU/Linux:

![Generar código es tan fácil como escribir una instrucción descriptiva](https://willem.com/global/images/6054ff996aac.webp)

En pocos segundos, GPT4 de OpenAI generó un script bash que usa ImageMagick (https://imagemagick.org/) (una herramienta gráfica muy extendida) para hacer modificaciones a partir de los datos EXIF de un archivo de imagen. La IA eligió "exiftool" para leer la orientación y, según el resultado de esa herramienta, ejecutar el comando "convert" de ImageMagick con la rotación correcta.

![El código "auto_rotate.sh" generado por GPT4, que rota imágenes con ImageMagick según la orientación EXIF](https://willem.com/global/images/03aeba6c5949.webp)

El código completo (generado en segundos) está comentado de maravilla y te da una idea clara de lo que ocurre. Está estructurado y optimizado para que lo lean personas.

## Documentación

Además del código que funciona, la IA entregó documentación que explica cómo usar el software recién generado, con instrucciones de instalación incluidas. Sé que la mayoría de los programadores se olvida de esto (la documentación técnica suele ser lo último en lo que se piensa).

![Las instrucciones de la IA para usar el código generado: la mayoría de los programadores de verdad pueden aprender de su claridad](https://willem.com/global/images/fba52b536d22.webp)

## Conclusión

En unos minutos tenía un código que funciona, documentado, y que me ayuda a resolver un cuello de botella en un software en la nube. Es sencillamente alucinante: me ahorró tiempo (que después usé para escribir este artículo del blog).

Solo cabe preguntarse qué efectos tendrán los grandes modelos de lenguaje como ChatGPT/GPT4 en nuestra forma de trabajar. Yo abrazo por completo las herramientas de IA: saber usarlas será esencial en un futuro cercano (¡creo yo!).

![Un programador del futuro, tal como lo imaginó DALL-E de OpenAI](https://willem.com/global/images/887c6d5c5349.webp)
