Programmazione
Il progetto per far dialogare la mia cassa col bancomat era quasi pronto, e il simulatore diceva sempre di sì. Poi ho attaccato il terminale vero, e ha cominciato a dire di no: tre bug nascosti — uno che avrebbe addebitato la carta mostrando «errore» — e un pagamento da un centesimo per stanarli tutti.
Immagine intera ↗
La settimana è cominciata con una promessa mantenuta: dopo mesi, Banca Sella mi ha finalmente mandato i file tecnici del Protocollo 17, quello con cui le casse parlano ai terminali POS di nuova generazione. Il progetto per far incassare col bancomat direttamente da MyShop 8 era quasi pronto: codice scritto, verificato riga per riga sulla specifica, e un simulatore — un finto POS che gira dentro il computer — che a ogni prova rispondeva tutto a posto. Verde su tutta la linea.
Il guaio è che un simulatore che ti dà sempre ragione non è un collaudo. È un adulatore.
Quando ho aperto quei documenti ho avuto un attimo di tenerezza. Un carattere per aprire il messaggio, uno per chiuderlo, un byte di controllo calcolato mettendo tutto in fila con un’operazione logica, un «ricevuto» e un «rifatti». È esattamente la stessa grammatica con cui, nel 1998, facevo dialogare i miei programmi con una stampantina portatile a raggi infrarossi. Trent’anni fa c’era un fascio di luce invisibile tra due scatolette; oggi c’è un socket di rete. Ma la lingua è quella: cambia il tubo, non le parole. Chi ha domato una stampantina a infrarossi, quel POS lo capisce al volo.
O almeno, così credevo.
Ho attaccato il terminale vero — un PAX di Axerve, il POS fisico di Banca Sella — e ho mandato il primo comando, quello innocuo che chiede soltanto «come stai?». Il simulatore, a quella domanda, aveva sempre risposto con un sorriso. Il terminale vero ha risposto picche: rifatti. E l’ha fatto per ogni singolo comando.
Qui comincia la parte che amo di questo mestiere. Il mio assistente digitale si è messo ad ascoltare di nascosto la conversazione, byte per byte, direttamente dal registro interno del terminale. E il POS, nel rifiutarmi, si è tradito: il suo stesso messaggio di «no» conteneva la ricetta del «sì». Quel byte di controllo, la firma in fondo a ogni frase, il terminale lo calcolava contando anche il carattere di apertura. Il mio codice, no. Una virgola in meno nel conto della firma, e ogni frase finiva nel cestino.
Sistemata quella, ne sono uscite altre due, e la seconda mi ha fatto venire i brividi. Il terminale, dopo avermi mandato l’esito di un pagamento, chiudeva la linea di netto. Il mio codice, in quell’istante, provava a dirgli «grazie, ricevuto» — e falliva, perché non c’era più nessuno ad ascoltare. Risultato: avrei mostrato al cassiere un bel «errore di comunicazione»… con la carta del cliente già addebitata. Il disastro perfetto: soldi presi, e la cassa che giura che non è successo niente.
L’abbiamo scoperto con un centesimo, non con una vendita vera.
E qui sta la morale, quella che vale più del codice. Perché il simulatore non aveva mai visto niente di tutto questo? Perché sbagliava allo stesso identico modo da tutte e due le parti. Firmava male i messaggi e li controllava male, e così, tra sé e sé, andava sempre d’accordo. Un finto POS che parla la mia stessa lingua sbagliata mi darà sempre ragione. Il terminale vero, che parla quella giusta, è l’unico che poteva contraddirmi. E un collaudo serve esattamente a quello: a farsi contraddire finché si è ancora in tempo.
Quando finalmente il dialogo ha funzionato, ho strisciato una carta vera per un centesimo. «PAGAMENTO AUTORIZZATO», verde. Poi lo storno: e qui il terminale ha insegnato l’ultima cosa, quella che nessuna specifica dice a voce alta — per annullare un pagamento pretende la stessa carta del cliente. Ne avvicini una diversa e risponde «carta errata»; riavvicini quella giusta e il centesimo torna indietro.
Alla fine è rimasto un piccolo mucchio di scontrini di carta, un acquisto e uno storno, tutti e due da 0,01 €. Su un tavolo di legno, un po’ storti, fotografati col telefono. A vederli non sono granché. Ma sono la prova che un negoziante, da domani, potrà incassare col bancomat direttamente dalla sua cassa — e che tra il cavo a infrarossi del ’98 e quel POS ci sono trent’anni e nemmeno una parola cambiata.
Un simulatore che non ti contraddice mai è un adulatore. La verità, a volte, costa un centesimo — e te la dice solo il terminale vero.