Usare l'AI per generare codice

Scrittura · 3 mag 2023

Usare l'AI per generare codice

Programmare con i superpoteri

Nell'ambito del mio lavoro di ottimizzazione del software per ridurre i costi del cloud, dovevo sostituire un vecchio software server poco efficiente con qualcosa che sfrutta strumenti più robusti (ma frammentati) disponibili in Debian GNU/Linux. Il modello linguistico GPT4 poteva regalarmi un po' di magia dell'AI? Leggi e scoprilo!

Una parte dei servizi cloud della mia azienda è il cosiddetto "Lemmid Manager", un sistema di gestione dei contenuti integrato che prende materiale grezzo (testi, video, immagini) e genera bellissimi siti web statici ad alte prestazioni. Di fronte all'aumento dei costi del cloud, sto riscrivendo parti del software per renderlo più efficiente: usare meno potenza di calcolo per ottenere gli stessi risultati.

Rotazione delle immagini

Forse non te ne rendi conto, ma ogni volta che scatti una foto con il telefono, questa viene sempre salvata in orizzontale (o in formato panoramico). Quando scatti una foto in verticale, il telefono aggiunge semplicemente un po' di informazione extra che ricorda come tenevi la fotocamera, così quando riguardi la foto appare con l'orientamento giusto. Scrivere un'informazione (extra) di un solo bit è più veloce che ruotare i bit e i byte veri e propri dell'immagine.

Va tutto bene finché la foto non lascia il telefono, ma quando la carichi su un sito web deve essere ottimizzata per il web. A quel punto i bit e i byte dell'immagine devono rispecchiare il contenuto reale della foto. L'immagine può poi essere ulteriormente ottimizzata per la velocità di caricamento e per i diversi viewport.

Rotazione automatica delle immagini in base all'EXIF

Le fotocamere moderne (degli smartphone) salvano l'orientamento nei cosiddetti dati EXIF che accompagnano l'immagine vera e propria. Per far sì che l'immagine (i suoi bit e byte) rifletta correttamente l'orientamento della fotocamera, bisogna leggere i dati EXIF e, in base all'orientamento, applicare un algoritmo di rotazione ai bit e ai byte dell'immagine.

Implementazione attuale

L'implementazione originale (scritta a mano) usa NodeJS e un modulo chiamato "lwip" (LightWeight ImageProcessor). Nella maggior parte dei casi funziona bene, ma con immagini sempre più grandi (grazie ai megapixel in più) il fabbisogno di memoria è aumentato parecchio. Il rovescio della medaglia di fare tutto in un unico processo NodeJS è che il tutto diventa un po' un divoratore di memoria: l'intero backend NodeJS ne soffre quando lo porti al limite elaborando migliaia di foto.

Una strategia comune per ottimizzare i colli di bottiglia di un software è tirarli fuori dal programma principale. Invece di elaborare le immagini direttamente da NodeJS, voglio usare i comuni strumenti di Debian GNU/Linux (dalla comprovata affidabilità) per la rotazione automatica. Da NodeJS posso poi chiamare lo strumento esterno 'auto_rotator' e aspettare che finisca il suo lavoro. Se un processo NodeJS aspetta un risultato/callback asincrono, torna subito disponibile per altre richieste.

GPT4 come generatore di codice

La cosa bella del software libero (nel senso di libertà) è che ci sono tantissimi mattoncini da usare per costruire i propri programmi. Sapevo che Debian GNU/Linux ha strumenti in grado di ruotare le immagini in base ai dati EXIF. La sfida è creare un unico script che usi questi diversi strumenti per fare il lavoro, gestendo le eccezioni in modo robusto.

Invece di immergermi io stesso in tutti i comandi e le opzioni disponibili, ho deciso di chiedere a GPT4 di generare uno script che faccia esattamente quello che volevo, usando gli strumenti standard di Debian GNU/Linux:

Generare codice è facile come scrivere un prompt descrittivo
Generare codice è facile come scrivere un prompt descrittivo

In pochi secondi GPT4 di OpenAI ha generato uno script bash che usa ImageMagick (un comune strumento grafico) per eseguire modifiche in base ai dati EXIF di un dato file immagine. L'AI ha scelto "exiftool" per leggere i dati sull'orientamento e, in base all'output di quello strumento, ha lanciato il comando "convert" di ImageMagick per applicare la rotazione giusta.

Il codice generato da GPT4, "auto_rotate.sh", che ruota le immagini con ImageMagick in base all'orientamento EXIF
Il codice generato da GPT4, "auto_rotate.sh", che ruota le immagini con ImageMagick in base all'orientamento EXIF

Il codice completo (generato in pochi secondi) è commentato in modo splendido e ti dà subito un'idea chiara di cosa succede. È strutturato e ottimizzato per essere letto da esseri umani.

Documentazione

Oltre al codice funzionante, l'AI ha fornito la documentazione che spiega come usare il software appena generato, comprese le istruzioni di installazione. So che la maggior parte dei programmatori lo trascura (la documentazione tecnica è spesso un ripensamento).

Le istruzioni dell'AI su come usare il codice generato: la maggior parte dei programmatori veri può imparare dalla sua chiarezza comunicativa
Le istruzioni dell'AI su come usare il codice generato: la maggior parte dei programmatori veri può imparare dalla sua chiarezza comunicativa

Conclusione

In pochi minuti avevo un pezzo di codice funzionante e documentato, che mi aiuta a risolvere un collo di bottiglia in un software cloud. È semplicemente incredibile: mi ha fatto risparmiare tempo (che ho poi usato per scrivere questo articolo).

Puoi solo chiederti che effetto avranno sul nostro modo di lavorare i grandi modelli linguistici come ChatGPT/GPT4. Io abbraccio senza riserve gli strumenti di AI: saperli usare sarà essenziale nel prossimo futuro (credo)!

Un programmatore del futuro, immaginato da DALL-E di OpenAI
Un programmatore del futuro, immaginato da DALL-E di OpenAI

← Altri scritti