Gli "Ospiti" della Sala Macchine


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register


Nota: i miei commenti (quando ci sono) sono in italico

L'Arrotondamento Quasi per Difetto

Ero presso un cliente, un istituto molto grosso e importante. Il SL di turno mi richiede una stampa con una lista di pratiche alla quale associare il saldo espresso in milioni e con un decimale. Alla fine della stampa deve apparire un totale. Per qualche ragione in quell'ufficio usano uno strano arrotondamento: Si arrotonda per difetto tranne che per 0.09. Esempio: 123.58 diventa 123.5 e vuol dire 123 milioni e mezzo; 123.59 diventa 123.6 e vuol dire 123 milioni e seicentomila. Chiamiamo questo arrotondamento arrotondamento-quasi-per-difetto.

Mi metto a fare il programma, e che ci vuole? Mezza giornata di lavoro. Pensando di far bene, totalizzo i valori veri, stampando il totale arrotondato-quasi-per-difetto. Esempio: 123.456.700 diventa 123.4 234.567.800 diventa 234.5 totale: 358.024.500 diventa 358.0

Ok, l'esempio è di soli due numeri, ma la stampa vera conteneva migliaia e migliaia di pratiche con relativo saldo.

Arriva la telefonata.

SL: (convenevoli) abbiamo ricevuto la stampa, ma c'e' un problema.
IO: Mi dica.
SL: Il totale stampato in fondo torna con i nostri saldi contabili, ma purtroppo non corrisponde al totale dei numeri stampati.
IO: Mi scusi, io avevo pensato di totalizzare i valori effettivi. Cambio subito il programma e vi faccio rigirare il programma.
SL: Ok, grazie, attendo il risultato.

"Attendo il risultato" è detto con una espressione che fa capire, "se questa volta non è giusto ti spenno".

Cambio il programma, e stavolta, come richiesto, faccio il totale sui valori stampati, che ovviamente SONO ARROTONDATI-quasi-per-difetto portando ad uno scarto enorme.

Insomma, hanno chiesto così, a me che mi frega, basta che il cliente sia contento.

Tornando all'esempio di prima produco una stampa tipo: 123.456.700 diventa 123.4 234.567.800 diventa 234.5 totale dei valori arrotondati-quasi-per-difetto: 357.9 Notare, è diverso da prima.

Ovviamente trattandosi di migliaia e migliaia di pratiche il totale dei valori arrotondati-quasi-per-difetto è MOLTO DISTANTE dal valore autentico (che è quello che avevo calcolato prima).

Telefonata.

SL: (incazzato) la stampa non è ancora giusta!
IO: Sono costernato, dov'è il problema stavolta?
SL: Il totale è sbagliato!
IO: E' sbagliato? Ma non corrisponde alla somma dei saldi delle pratiche stampate?
SL: Si, adesso il totale è uguale alle pratiche stampate, questo è corretto, ma non torna con i nostri saldi contabili.
IO: Mi perdoni, ma la somma dei numeri arrotondati-quasi-per-difetto, non può essere uguale alla somma dei numeri effettivi.
SL: (Incazzato nero) Non vorrà insegnarmi il mio lavoro! A noi serve la stampa immediatamente, se non è in grado di farla lo dica subito.

Per chi non avesse capito, SL pretende che 0.13 + 0.14 == 0.10 + 0.10

Per niente turbato dalla sfuriata di SL, penso che c'e' un malinteso, e vado dal mio UL, che è una persona gentilissima.

IO: ho un problema.
UL: Dimmi.
IO: SL vuole una stampa di valori arrotondati-quasi-per-difetto, con il totale. Solo che il totale deve corrispondere alla somma dei valori arrotondati-quasi-per-difetto ma anche alla somma dei valori effettivi.
UL: E allora?
IO: Non hai capito? Non è possibile fare quello che chiede.
UL: Non ci riesci?
IO: Non è che non ci riesco. Secondo me dovremmo far cambiare idea a SL.
UL: Mettiamoci a lavorare CL.
IO: Cosa stai dicendo?
UL: Senti CL, puoi fare tu il programma?
CL: Certamente.
IO: Come sarebbe a dire "Certamente"?
CL: Posso lavorarci, ho tempo.
IO: Devi aspettare che cambino le leggi che regolano l'universo. Pensi di avere così tanto tempo?

Insomma, nei tre giorni successivi provano a ottenere l'incredibile risultato, che se raggiunto avrebbe annullato la matematica da Talete in poi.

Nei giorni successivi mi godo brandelli di conversazione tra UL e CL (affranti e con la cravatta allentata):

CL: Potremmo totalizzare uno scarto ogni 100 valori e sommarlo al totale.
UL: Ma poi non torna con i valori arrotondati-quasi-per-difetto.
CL: Perché non facciamo il totale del 10% dei valori e lo sottraiamo ogni 1230 pratiche dal totale effettivo?
UL: No perché poi non viene uguale al saldo contabile.
CL: Allora calcoliamo il totale delle pratiche dispari, lo arrotondiamo-quasi-per-difetto, lo moltiplichiamo per 3.1415, facciamo una piroetta e stampiamo il saldo.
UL: No, non va...

Fine della storia: dopo tre giorni di tentativi UL incarica CL di telefonare a SL, per dirgli che ci sono questioni tecniche, standard da rispettare, fasi da eseguire, bla bla bla...

Se ti puo' consolare ho avuto un problema simile quando lavoravo per $immensoproduttorediformaggio, una volta volevano l'arrotondamento per difetto ed una volta lo volevano per eccesso...

Cancellate quelle Chiavi!

Un giorno $(importante_istituto) e $(grande_istituto) decidono una sorta di fusione. Tra le altre cose, stabiliscono di sviluppare una nuova anagrafe che contenga i clienti di entrambi. L'applicativo sarebbe stato sviluppato da $(importante_istituto) e poi alimentato e usato da tutti e due.

Racconto subito la fine della storia: dopo due anni di lavoro e la messa in produzione del progetto, $(grande_istituto) rifiuta di fornire i dati sui propri clienti a $(importante_istituto) e tutto il progetto viene annullato.

Io ero incaricato di coordinare il lavoro di programmazione e mi ricordo questo singolare episodio che vado a raccontare.

La nuova anagrafe aveva una interessante funzione di ricerca, per la quale il nome, cognome o ragione sociale venivano scomposti in parole, inseriti in una tabella, detta "tabella delle chiavi", e usati per ricomporre i nomi e fare le ricerche.

Un giorno UL se ne esce con una richiesta in apparenza sensata:

UL: Voglio che i clienti estinti non appaiono nei risultati delle ricerche.
IO: E' già così, non appaiono neanche adesso.
UL: Ma i nomi e cognomi degli estinti sono presenti nella tabella delle chiavi.
IO: Si, ma li escludiamo dalla ricerca facendo query opportune.
UL: Ok, ma voglio che cancelliate le sue chiavi dalla tabella delle chiavi.
IO: E perché?
UL: Non voglio correre il rischio che questi clienti estinti rispuntino fuori per errore, quindi ogni volta che un cliente viene estinto, cancellate le sue chiavi.
IO: E' inutile perché vengono escluse con opportune query SQL.
UL: Voglio la cancellazione delle chiavi!
IO: E' anche dannoso perché non potremmo ricostruire il nome di un cliente estinto.
UL: Voglio la cancellazione delle chiavi!
IO: E poi il programma ha una funzione di ricerca apposita per clienti estinti.
UL: Voglio la cancellazione delle chiavi!
IO: Bè, parlane con SL.

Dovete sapere che UL era un tizio all'antica che ha visto solo file VSAM e DL1 e considerava SQL una novità per giovanotti che non conoscono la vera informatica.

Io ho conosciuto un tizio che pretendeva di programmare i PC con file di input/output come un mainframe... strana gente si trova in giro.

Andammo da SL, che poveraccio, comandava meno UL e quindi doveva subirne le decisioni.

IO: UL dice che dovremmo cancellare le chiavi dei clienti estinti.
SL: (saltando sulla sedia) Cosa! E perché mai?
UL: Perché il nome di un cliente estinto potrebbe apparire nei risultati delle ricerche.
SL: Assolutamente no. In tutte le query c'e' la condizione che il cliente non sia estinto.
UL: Voglio la cancellazione delle chiavi!
SL: E poi abbiamo fatto la funzione di ricerca clienti estinti.
UL: Voglio la cancellazione delle chiavi!
SL: Ma se si tolgono le chiavi non potremmo più sapere come si chiama un cliente estinto.
UL: Voglio la cancellazione delle chiavi!
SL: Ti prego!
UL: Voglio la cancellazione delle chiavi!
SL: TI SCONGIURO!
UL: Voglio la cancellazione delle chiavi!

La contesa ando' avanti per parecchi giorni. Il povero SL era inorridito all'idea di cancellare delle chiavi dal database e cercava di convincere UL a non farglielo fare.

SL: ... vedi come SQL permette di fare ricerche con delle condizioni ...
UL: Voglio la cancellazione delle chiavi!
SL: ... guarda qui: ... WHERE CLIENTE.ESTINTO = 0 ...
UL: Voglio la cancellazione delle chiavi!
SL: ... si rovina l'integrità referenziale ...
UL: Voglio la cancellazione delle chiavi!
SL: ... per ricostruire il nome del cliente si concatenano le chiavi ...
UL: Voglio la cancellazione delle chiavi!
SL: ... abbi pietà, ho moglie e figli ...
UL: Voglio la cancellazione delle chiavi!
SL: ... ti regalo la mia macchina ...
UL: Voglio la cancellazione delle chiavi!

Alla fine SL si arrese. Due settimane non bastarono a convincere UL del disastro che la cancellazione comportava. A malinquore facemmo l'infausta modifica e così tutti i clienti estinti rimasero senza nome e irrecuperabili se non col codice cliente.

IL GIORNO DOPO, giuro, il giorno dopo del passaggio della modifica, UL si mise a spippolare con l'applicativo. E candidamente fece una domanda...

UL: Scusate ho un piccolo problema c'e' questo nominativo di un cliente estinto ma non riesco a trovarlo con la funzione di ricerca ho anche il codice cliente ma mi appare senza nome avete un idea di cosa sta succedendo forse il SQL non funziona bene.

SL divento' verde poi nero poi bianco poi rosso, poi farfuglio' qualcosa, provo' a riprendere la calma, prese a spiegare, urlo', poi riprovo' a spiegare, uscì dalla stanza, rientro', si sedette, si rialzo', ando' al suo computer, lo accese ma era già acceso, lo riaccese, partì lo scandisk, mentre UL urlava: "va bene che vi ho fatto cancellare le chiavi ma *IO* le ricerche sui clienti estinti le voglio poter fare".

Per fortuna tengo tutte le vecchie versioni dei sorgenti...

...e' una fortuna? Qualche volta l'unico modo per far capire le cose e' farle pagare...

Dinogen
17/07/2010 08:42

Precedente elenco Successivo

le storie degli ospiti sono in ordine sparso, quindi 'precedente' e 'successiva' possono portare su storie di altri autori

I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli (io o l'autore della storia) e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

In aggiunta: se il vostro commento non viene pubblicato non scrivetemi al riguardo, evidentemente non era degno di pubblicazione.

3 messaggi this document does not accept new posts

Paolo

Paolo Di Paolo postato il 03/06/2008 16:27

> forse il SQL non funziona bene
mi ricorda un tipo che appena arrivato in ditta usava il compilatore come un martello. Se il sorgente su cui stava "lavorando" dava errori, non faceva altro che ricompilarlo ripetutamente senza apportare alcuna modifica aspettando che smettesse di segnalare errore...


sempre meglio di quello che semplicemente cancellava la linea che dava errore e procedeva ad una nuova compilazione, cancellava la nuova linea, altra compilazione... cosa pensi sia rimasto alla fine?


renato gallo (xevilstar)

renato gallo (xevilstar) Di renato gallo (xevilstar) postato il 13/06/2008 08:25

dinogen ... ma sei quello dello slug ?? :D

Stefano Gronchi

Stefano Gronchi Di Stefano Gronchi postato il 16/06/2008 16:39

Dinogen, ma una sparachiodi od un martello sempre sottomano come DB non ce l'hai?

Precedente elenco Successivo


Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gojira