27 ottobre 2014

Il cliente (NON) ha sempre ragione!

Dovete sapere che sebbene mi concentro sul mio lavoro, spesso e volentieri tendo a captare i dialoghi di lavoro altrui... che potrebbe sembrare una cosa del tipo "Non ti fai i caxxi tuoi" ma è discutibile.

In ogni caso è proprio la mia curiosità che ha salvato il NuovoArrivato dal dover debuggare tutta l'applicazione e costringere il nostro SistemistaTuttoFare a spostare db a destra e a manca.

NuovoArrivato: avrei bisogno di lavorare con il db X avendo l'applicazione DODO in locale.
SistemistaTuttoFare: ok, capisco, ma a che ti serve fare tutto ciò?
NuovoArrivato: devo testare DODO partendo dai dati caricati per capire perché gli Storditi (di questo gruppo comandato dal GrandeStordito ve ne parlerò più in là) non riescono a vedere l'xls prodotto dal backend di DODO. Excel gli dice che è tutto sminchiato.

Sentendo queste parole il mio onesto cervello si mette in moto e decide di mettersi in mezzo alla discussione in aiuto, sebbene potrei pure fottermene considerando che è la mia ultima settimana.

Io: mmm scusami NuovoArrivato potresti spiegarmi meglio il problema che devi risolvere?
NuovoArrivato: si certo dunque bla bla bla xls bla bla bla Excel bla bla bla...
Io: No caxxo! Ho capito! Se stanno usando il frontend vecchio con il backend nuovo allora è quel maledetto bug!

Quel maledetto bug è ovviamente dovuto al fix di un altro bug... che non andava considerato tale!


Una breve spiegazione: molto tempo fa DODO backend produceva dei report che dovevano essere visualizzati su DODO frontend. Tra i tipi possibili di report prodotti c'erano dei file testuali csv creati però erroneamente con estensione .xls. Con Excel è possibile leggere questo tipo di file senza problemi, solo che se tali file hanno in realtà una estensione errata Excel ti avvisa prima di aprire il file che l'estensione è sbagliata, che il contenuto potrebbe essere corrotto, che ci potrebbe essere uno Tsunami se per puro caso apri il file ecc... insomma un semplice warning forse un po' esagerato dovuto ad un controllo sul formato del file. Dopo il warning il file si apre senza problemi.

Peccato che al cliente questo non piaccia e inviano un ticket per "risolvere il problema". Ora dal mio punto di vista le soluzioni possibili erano solo due:

  1. Rigettare il ticket, considerando il fatto che DODO produce dei file ed è responsabile del formato dello stesso, ma non può esserlo sul client usato per aprire tale file. Per cui si fot***sero e si lamentassero con la Microsoft o cambiassero programma per aprire in realtà quello che è un file testuale csv.
  2. Modificare il backend per creare il file con estensione .csv (come si doveva fare dal principio) e gestire tale modifica sul frontend.
Io sarei stato molto predisposto per l'opzione 1 semplicemente perché NON POSSIAMO STARE APPRESSO A TUTTE LE RICHIESTE DEL CAXXO DEL CLIENTE, soprattutto se quest'ultimo ha un'approccio all'IT come se fosse Topo Gigio. Noi sviluppiamo e manuteniamo DODO e rendiamo compatibile il suo frontend a quella fetenzia di browser partorita dalla Microsoft, ma per il resto ci dovremmo fermare qui.

D'altro canto il cliente paga per cui... se proprio fossi stato costretto, avrei adottato l'opzione 2.

Il problema fu che non mi occupai io del problema, ma il tutto fu assegnato al fantastico duo MasterBugProducer e SeniorPigro che riuscirono a risolvere il problema modificando solo il frontend di DODO con un fantastico porkworkaround. Al tempo ero impegnato in altro e non avevo alcuna voglia di sapere come avessero "risolto" il problema.

Poco tempo dopo il backend di DODO venne rifatto completamente e fu in grado di produrre dei veri fogli excel, niente di testuale. Durante lo stesso periodo il cliente aprì un ticket riguardo l'illeggibilità dei report xls e mi fu assegnato codesto ticket.

Ci misi parecchio tempo a debuggare poiché partì ovviamente dal monte, cioè dal backend di DODO che produceva direttamente il report xls senza trovare alcuna magagna. Per pura curiosità allora andai ad aprire la action Struts con il quale si permetteva all'utonto di scaricare i report selezionati dalla GUI e scoprì qualcosa che mai avrei voluto leggere:


if (format.getName().equals("xls")) {
    InputStream is = file.getInputStream();
    MagicNumber mn = MagicNumber.parse(is);
    is.close();
    String encoding = null;
    if (mn == null) {
       encoding = "ISO-8859-1";
    } else {
       encoding = ((TextMagicNumber) mn).getCharacterEncoding();
         }
   ...
    new InputStreamReader(bc.getInputStream(), encoding)).writeTo(new OutputStreamWriter(lengthOut,"UnicodeLittle"));
}


A parte la gestione fatta a caxxo sugli stream, questo schifo consiste nel fix sul warning di Excel. Non si sa come ma SeniorPigro riuscì a scoprire che modificando il character encoding di un file csv con estensione .xls in UTF16-LE (UnicodeLittle sta per "Unicode Little Endian"), il warning su Excel spariva. Quella gran coppia di intelligentoni ebbe così la grande idea di convertire qualsiasi file .xls proveniente dal backend in UTF16-LE, cercando di scoprire l'encoding originario con una cagata di classe MagicNumber che non mappa nemmeno 1/3 di tutti i character encoding esistenti.

Che succede se provate a leggere il contenuto di un file binario con un InputStreamReader tramite un certo character encoding e a scriverlo con OutputStreamWriter con un altro character encoding? 

Succede che sputtanate tutto il file!

Ne parlo quindi con il mio responsabile e decidiamo stavolta in maniera intelligente di eliminare questo accrocchio (che non ho il coraggio di chiamare fix) e che eventuali future lamentele su messaggi di warning di Excel verranno cestinati e nel caso peggiore gestiti direttamente a monte sul backend.

Peccato che NuovoArrivato stesse lavorando su un branch SVN in cui il bug di cui sopra non era ancora stato fixato.

In conclusione per rincorrere le pretese idiote del cliente, grazie anche all'incompetenza di una coppia di programmatori è stato introdotto un bug che si è diffuso come un virus in tutte le installazioni di DODO.

Nessun commento:

Posta un commento