Vai al contenuto

Effettuando alcuni test di generazione di script demandati ad un chat bot di intelligenza artificiale (gpt-6-luna) ho notato che è sì in grado di produrre anche da zero uno script ma se non sai cosa stai facendo corri il serio rischio di ottenere un pessimo codice.

Un primo caso è stato quello di uno script shell che richiedesse delle informazioni relative ad un dominio registrato su dynadot e l'IA ha scritto un codice funzionante ma parecchio complesso. Non riuscivo a capire come mai avesse deciso di fare richieste tramite API facendosi passare un formato xml invece che un json e, dopo avergli fatto rifare il tutto con json e jq, mi è venuta l'idea di chiederlo all'IA stessa e la disarmante risposta è stata:

Ho seguito il primo esempio con api3.xml e xmllint, senza verificare prima se Dynadot offrisse anche una risposta JSON adatta al parsing. È stata una scelta poco pratica: jq è più comodo per questo script, come abbiamo poi visto. Avrei dovuto controllare il formato JSON fin dall’inizio.

Il secondo caso riguarda uno script python che gestisce un foglio di calcolo ODS: anche in questo caso lo script funzionava ma era estremamente lento. Così ho realizzato che operava sul file con UNO riga per riga invece che caricare usando grandi blocchi di righe: questa volta ho evitato di farmi dare dall'IA la sua scusa ufficiale per quella scelta e mi sono limitato a fargli rifare il tutto usando una logica a blocchi invece che a righe e sono passato da un tempo di esecuzione di alcuni minuti a pochi secondi.

La morale è: se vuoi farti scrive del codice dall'IA devi avere la capacità di analizzare quel codice (e quindi devi saper programmare) altrimenti rischi farti produrre una schifezza, funzionante ma pur sempre una porcata.

L'immagine in testa, giusto per rimanere in tema, è stata generata con l'IA

Se avete l'esigenza di monitorare alcuni parametri meteorologici in maniera automatizzata le API gratuite di Open-Meteo tornano utili.

Ad esempio questa richiesta restituisce temperatura e vento attuali delle coordinate indicate che, in questo caso, corrispondono a Milano centro.

https://api.open-meteo.com/v1/forecast?latitude=45.46&longitude=9.19&current=temperature_2m,wind_speed_10m

Sul sito ci sono i dettagli di molte altre richieste possibili tramite API

Capita di dover aprire un tunnel socks5 ma se poi questo tunnel deve restare aperto per ore e magari resistere a vari eventi avversi non basta il semplice comando ssh

ssh -ND 8080 root@192.168.1.1

perché se il server destinazione (il 192.168.1.1) ad esempio viene riavviato il tunnel cade. Per ovviare a questo ed altri inconvenienti basta un breve script che si occupa di verificare che il tunnel sia aperto e, in caso contrario, che lo apra e che faccia tutto questo all'infinito. Quantomeno fino a quando non lo blocchiamo a mano noi.

Questo è lo script bash

#!/bin/bash
# Script che apre e tiene aperto un tunnel socks5
# porta utente e ip o dns sono hardcoded ma volendo potrebbero essere messi come parametri

# Ciclo while infinito
while true
do
# Il comando if verifica l exit code del comando che sta cercando qualcosa in LISTEN sulla porta 8080 che è il mio tunnel 
  if netstat -an | grep 8080 | grep -q LISTEN 
  then
# Se lo ha trovato allora entra qui e attende 1 secodo poi salta il ramo else e ricomincia il coclo infinito
    sleep 1
  else
# Se non lo trova allora entra qui e il comando sotto crea in background il tunnel e poi aspetta 2 secondi poi continua il ciclo infinito
    nohup ssh -ND 8080 root@192.168.1.1 > /dev/null 2>&1 &
    sleep 2
  fi
done

Se state lavorando in Linux su un applicazione che ha molti file di configurazione torna utile poter fare delle modifiche in blocco a tutti questi file, in particolare sostituire tutte le occorrenze di una stringa in tutti file con una stringa sostitutiva.

Si può fare usando find per localizzare tutti i file di configurazione e sed per effettuare le sostituzioni il tutto in una "semplice" e singola riga di comando.

find /dove/sono/i/file/ -type f -name "*.cfg" -print0 | xargs -0 sed -i 's/StringaAttuale/StringaSostitutiva/g'

Mini spiegazione

/dove/sono/i/file/ è il punto a partire dal quale ci sono i file di configurazione e find va a cercare anche nelle sotto cartelle

I file di configurazione terminano tutti con .cfg

StringaAttuale e StringaSostitutiva si spiegano da soli e sappiate che se volete eliminare la StringaAttuale basta non mettere nulla al posto di StringaSostitutiva e che StringaAttuale può anche essere una regular expression.