Comunicare la gravità

databaseMi serve una mano, e questo è un post tecnico. Se non sai cosa sia un database e la differenza che passa tra un campo testo e un campo data saltalo pure, io ti ho avvisato 🙂

Come ho scritto tempo addietro c’è un personaggio in ufficio che ha gestito un database abbastanza grosso usando campi varchar formattati per le date, invece di normali campi data; il problema minore, è noto, è che un campo testo accetta qualsiasi carattere, quindi anche un 39 Ottembraio 1568 o un 12/98-123, un campo data accetta solo date valide. Nonostante ci siano delle maschere di input per limitare i danni, un 31 febbraio è sempre possibile. L’altro problema è che non si possono usare le funzioni di manipolazione delle date, tipo “estrai il mese”, “formatta l’anno in questo modo” e il semplice “ordina le date”. No, bisogna scrivere decine di righe di codice per ricomporre le date in forma umana e poi lavorarci.

Ora, finché ero l’ultimo arrivato e non ci capivo niente potevo anche starmene (in fondo copiavo il codice degli altri, ma per i “miei” siti ci sono arrivato subito da solo, a usare i campi data, non è che ci voglia uno scienziato!), finché lo si usava in pochi anche; ma oggi il bubbone è scoppiato pesantemente, e io mi sono rotto di coprire questo scempio.

Tutto questo preambolo non perché mi serve una mano con la conversione, ma perché prima o poi qualcuno dovrà far capire ai miei superiori che in quel DB c’è un problema, un problema grosso! E siccome se dicessi “HEY! c’è un campo data formattato come testo” – cioè una frase che farebbe inorridire qualsiasi programmatore/db admin/esperto qualsiasi di informatica – i miei capi mi direbbero “e quindi?” con fare interrogativo, mi serve trovare un esempio per fargli capire a pieno la gravità della cosa. qualcosa che inizi con “è come se…“, meglio se non nel campo informatico.

Io è tutto il giorno che ci penso, ma non mi viene niente.

Leave a Reply

31 Comments

  1. E’ come se Mike Tyson infilasse i piedi nelle scarpe di Paris Hilton: il suo è pur sempre un piede, e quelle della Hilton sono pur sempre scarpe, ma gli Dei hanno previsto la scarpa appropriata per ciascun tipo di piede. Dagli un’idea di come si sentirebbero a camminare per un mese con i dieci centimetri di tacco da combattimento della moglie e dovresti aver reso il concetto 😉

  2. qualunque cosa tu gli dica dovrà fare i conti con le conseguenze: modificare il database, modificare tutto il software che c’è intorno… loro si faranno due conti e realizzeranno che gli conviene tenerlo così perchè quando funziona va bene e quando non funziona ci sei tu che ti smazzi i problemi.
    e non gli darei torto, su questa cosa. il torto è dell’incompetente che ha creato la stronzata, e dei suoi superiori che non hanno capito che era un incompetente.
    in questo mestiere alle persone competenti dovrebbe essere concesso (da qualche essere soprannaturale, non umano) un nodoso randello, e il permesso di usarlo su chi fa danni.

  3. @Casper – E se poi ci prendono gusto?? ^_^

    Digli che è un po come se la loro banca tenesse nota dei movimenti del loro cc su dei pezzetti di carta alla rinfusa in un cassetto, con su scritto versamento dell’altro ieri, giroconto di giovedì, interessi di pasqua.. e poi chiedigli come farebbero a trovare i dati per avere un estratto conto.. magari qualcosa trovano, sicuro molto va perso… certo che ci vuole un pazzo per non usare i campi data e imbarcarsi nel controllo dei relativi vincoli semantici a mano….

  4. E’ come pulirsi il culo con la carta-vetro. E’ sempre carta, ma è quella sbagliata.

  5. totanus, per ora il tuo mi sembra renda bene 🙂

  6. esorciccio: infatti non penso che si metterà mai mano allo scempio, ma in virtù di questo il bisogno di far comprendere appieno la portata della cosa è quantomai reale. da qui la mia richiesta 🙂

  7. E’ come utilizzare un giradischi per ascoltare un CD: qualcosa esce, ma non è musica 😀

  8. Quantomeno in un ottica futura non si ripeteranno gli stessi orrori.

    Direi che senza parlare di culi e cartavetro (anche se l’esempio è efficace, lol) puoi sempre dire che, se gestita così è come definire un nuovo tipo di dato, e pertanto c’è bisogno di:

    – routine per la gestione della correttezza e consistenza delle date
    – routine per le operazioni aritmetiche tra date
    – routine per le operazioni di confronto
    – test case mostruoso su queste routine

    Se si cambia – come auspichi – il tipo di dato, tutto questo è built-in, già testato e sicuramente più performante.

  9. …è come se uno bevesse dell’ acquaragia…
    tanto è trasparente come l’acqua????

  10. E` come se ti invertissero le manopole del forno e del timer… Tu sei convinto di aver cotto la torta per un’ora a 200 gradi e invece l’hai cotta per mezz’ora a 600 gradi… (pero` quella della cartavetro… LOL!)

  11. Un’altra:
    E’ come usare il codice fiscale per prelevare al bancomat…

  12. fede: così è ancora più complicato!! 🙂

  13. Usa la metafora dell’auto con solo la retromarcia. Va dappertutto, ma consuma un sacco e ti viene il torcicollo.

    Poi quantifica le ore/uomo di lavoro spese e da spendere semplicemente a causa dell’esistenza di qs scempio, traducile in una cifra, poi quantifica le ore/uomo necessarie per rimediare e i risparmi ottenuti (terza cifra) da dedicare al lavoro vero.

    Infine, certe cose vengono bene quando si verifica un incidente o un intoppo, come un cliente cui viene fatturato due volte qualcosa, una busta paga con detrazioni per ferie il 30 febbraio, etc.

  14. Ma perchè non vi fate uno script per convertire quelle schifezze in un campo dato?
    Basta un programmino che scorra tutti i records, segnalandovi eventuali anomalie (ed i record).
    Provi a prendere il testo, lo “casti” dentro un campo data: se non vengono su Exception è tutto ok, altrimenti segni in un log il record.
    Alla fine ti trovi un report con tutte le schifezze.
    Correggi.
    Ti fai uno script per fare una ALTER COLUMN e non ci pensate più.
    Ovviamente modificando anche il vostro codice che adesso usa un campo “testo” per una data.
    Fai prima a fare così che a provare a spiegare “ai capi” il casino che c’è… IMHO

  15. E’ come usare la forchetta per mangiare i tortellini in brodo, funziona per metà.

  16. zurli

    Innanzi tutto , hai tutta la mia comprensione ed oltre … mi sono trovato ben più di una volta in situazioni simili … le frasi che uso più spesso sono :

    – è una tragedia
    – lago di sangue
    – non funzionerà nulla
    – mi toccherà fare solo questo
    – ma chi è che ha fatto questo scempio ? secondo me voleva farvi un dispetto
    – è come se google accettasse solo numeri , come faresti a cerca il nome della tua azienda ?

    Coraggio !!!

  17. sempre ai soldi devi puntare … è come se il pagamento fosse inserito in soldo romano invece che euro … la banca non pagherebbe essendo la valuta inesistente 😀

  18. guzzo: con quella semplice modifica rimetti a posto il database. e ok. ma quello che tu riassumi con “ovviamente modificando anche…” sono oltre 30 siti che ci accedono, e che si trovano di colpo senza una colonna e con tutte le query sballate perché fasate su un campo testo, con decine di righe da controllare in OGNI PAGINA perché fanno operazioni sul testo e non sulle date.

    la fai facile, ma facile non è 🙂

  19. Mettere la data in un campo di testo e’ come segnare i propri appuntamenti su una pagina a caso di un quaderno normale.
    Costa meno di una agenda e fai veloce a scriverli, ma poi non riesci piu’ a ritrovarli.

  20. è proprio un bel problema quello di campi sbagliati in un db… appena mi viene in mente qualcosa di “è come se” te lo faccio sapere…

  21. Direi che l’ultima di zurli e` la piu` adatta… E` vicina al tipo di problema (integer vs. string), non propone uno swap (come la mia) e propone una cosa fattibile (tu puoi inputare nella search box di google solo numeri… e poi vedi il risultato).

    Se toccasse farlo a me userei questa…

    E poi puoi fare una stima (molto per eccesso) di quanto potrebbe costare sistemare un sito, lo moltiplichi per oltre 30, ci metti la sistemazione del database, un bel po’ di contingency per gli imprevisti e chiudi la metafora “E` come se google…” con “… quel danno non si puo` quantificare. Ad oggi questo, invece, ammonta a Xmila euro”.

    Purtroppo mi sa che e` vero che di solito il portafoglio e` quello che reagisce per primo…

  22. Sugli scaffali di una videoteca puoi sistemare comodamente anche dei libri se vuoi, ma che cosa succederebbe se un bel giorno infili uno di questi libri dentro a un videoregistratore?

    Potrebbe essere calzante 😉

  23. searcher

    Chiedigli se si ricordano quanto hanno speso per Y2K. Da quello che racconti, era un problema minore del tuo.

  24. Anch’io voto per la carta vetrata di Totanus… che se l’amministratore delegato prende in parola quella dei tacchi a spillo e si presenta in ufficio vestito da puttanone poi mi resta sulla coscienza 😀

  25. grazie a tutti. Quando sarà il momento mi ricorderò dei vostri esempi 🙂

  26. …è come prendere le scale invece dell’ascensore e dover andare al 30esimo piano: alla fine ci arrivi lo stesso, per carità…però che fatica!

  27. Noises

    E’ come segnare i propri appuntamenti su un quaderno invece che su un’agenda: per segnarlo su un’agenda cerchi la pagina del giorno e scrivi l’appuntamento, per segnarlo sul quaderno scrivi la data e l’appuntamento sulla prima pagina libera che scrivi..sembra anche più facile!

    Immaginati però a cercare di capire cosa devi fare domani: invece di aprire l’agenda al giorno giusto, sfogli migliaia di pagine… 😉

  28. theo

    Io gli spiegherei semplicemente che se quel DB gestisse i cartellini marcatempo di tutti i dipendenti aziendali e ipoteticamente un software basato su quel DB generasse i cedolini paga e inviasse le relative distinte di bonifico ad una banca, potrebbero trovarsi X mesi da Y giorni lavorativi retribuiti da pagare a ciascun dipendente…

    Penso che con questo esempio se non li uccidi, poco ce manca…

    In ogni caso, per sicurezza, porta con te una scatola da scarpe da donna, con dentro due fogli di carta vetro a grana grossa….. mal che vada, voglio dire.

  29. Michele

    Fatte le debite premesse (anzitutto che ci capisco poco dell’argomento, che non sono proprio un DBA, che non so i numeri in gioco… se parliamo di una o piu’ tabelle, decine di migliaia di record o milioni, ecc.) perche’ non proporre, se fattibile, ovviamente, una soluzione a costo quasi zero?

    Qualcosa del tipo: vengono rimpiazzate la/le tabelle vecchie con delle nuove aventi i campi data come cristo comanda, si creano una o piu’ viste aventi il nome delle vecchie tabelle e con tutti i campi in gioco ma con i campi data restituiti come stringhe, d’ora in poi le nuove procedure utilizeranno le nuove tabelle, mentre tutto il codice gia’ scritto continuera’ a funzionare andando ad usare, in modo trasparente, la/le nuove viste.

    Pour parle’… se ho sbaliato, corigetemi… 😉

Next Articlehardware transessuale