Storie dalla Sala Macchine |
Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register
Sono circondato da Rattoppatori!
Vi starete probabilmente domandando che cappero e' un 'rattopatore' e perche' sia una brutta cosa. Bene, sedetevi ed allacciate le cinture, che sara' un giretto burrascoso.
Tanto tempo fa, non esistevano "ingegneri" o "scienziati", perche' non avevamo ancora inventato ne' l'ingegneria ne' la scienza, tutti quanti erano dei 'rattoppatori'. Un rattoppatore (minuscolo) e' qualcuno che si diverte ad incollare, avvitare, attaccare, mescolare o assemblare in qualche maniera diverse cose e vedere che cosa succede. Solo per divertimento. E no, in moltissimi casi il rattoppatore in questione non ha la piu' pallida idea di come funzionano le 'cose' in questione o di quali possono essere gli effetti delle sue azioni.
Ora, la cosa non e' proprio negativa di suo. L'umanita' ha cominciato cosi', come ho appena detto. Tanto tempo fa, qualcuno decise di vedere che succedeva a legare insieme una pietra ed un legno ed invento' l'ascia. Qualcun altro decise di provare una pietra di forma diversa e di provare come funzionava per terra ed invento' la zappa, poi passo' uno con una mucca ed ecco che hai inventato l'agricoltura.
Il problema e' che le cose hanno cominciato ad andare rapidamente fuori controllo nei secoli precedenti. Non ci credete? Aprite la finestra e provate ad ascoltare. Che cosa sentite? Rumore di motori. Da tutte le parti. E sempre, 24 ore su 24, c'e' sempre un qualche motore la' fuori che ronza, borbotta o urla istericamente. E tutto perche' un 100 anni fa circa, un paio di tizi stavano ravanando con secchi di metalli, pistoni e parecchi litri di liquidi esplosivi ed infiammabili e sono riusciti a mettere insieme un arnese che funzionava qualche volta, quando ne aveva voglia, e mentre quelli stavano pensando "e adesso cosa cazzo ne facciamo?", qualcun altro passo' di li' e decise di montarlo su una carrozza da cavalli (rimuovendo prima i cavalli per fortuna) e voila', eccoti l'automobile. Che era un rottame assurdo ovviamente. Ma un sacco di altri tizi cominciarono a fare i loro rattoppamenti, aggiungendo o togliendo altra roba e adesso abbiamo automobili fin sopra ai capelli.
Il grosso problema delle auto e' che tendono a scontrarsi tra di loro e con altre cose. Per cercare di arrestare l'inondazione di incidenti i vari governi si resero conto che dovevano fare qualche cosa, percui provarono con la legislazione, che e' quella cosa che i governi fanno quando sentono che devono fare qualche cosa e non possono dichiarare guerra a qualcun altro.
Il problema fu immediatamente identificato ed analizzato: gli esseri umani non sono capaci di guidare manco per il cazzo. E la soluzione fu... Emettere una montagna e mezza di leggi e regolamenti sul come comportarsi che i vari guidatori avrebbero dovuto seguire per minimizzare le possibilita' di sbattere gli uni contro gli altri ogni qualvolta due auto si incrociavano tra di loro. Quando io feci gli esami di guida, un fottio di anni fa, un buon 60% delle regole si riferivano esattamente ad un problema: che cosa fare quando ci si avvicina ad un incrocio.
Tutto il regolamento non miglioro' di molto la situazione, specialmente perche' sempre piu' auto sono in circolazione, percui i vari governi provarono altre "soluzioni", tipo installare semafori (rattoppare le strade) per regolare gli incroci, e quando anche quello si rivelo' non proprio efficiente decisero di rimuovere gli incroci del tutto ed inventarono le Rotonde (altro rattoppamento delle strade).
Ed oggi, dato che i vari governi hanno piu' o meno esaurito le cose che possono rattoppare, qualcun'altro sta pensando di rattoppare le auto, aggiungendo altra roba come "sensori" e "intelligenze artificiali" nel tentativo di risolvere il problema, problema che e' sempre "LA GENTE NON E' CAPACE DI GUIDARE MANCO PER IL CAZZO!". E dato che, nel frattempo, l'industria automobilistica e' diventata un mostro colossale che sposta miliardi di quatrini al giorno, un sacco di rattoppatori sono pronti a buttarsi nella mischia.
"Ok, esattamente dove vuoi andare a parare?" starete pensando voi. Il mio punto e' che "rattoppare" non RISOLVE il problema, non comincia nemmeno a toccarlo. In molti casi (come mostrato dal mio esempio), gli unici effetti sono di aggiungere piu' roba nel tentativo di evitarlo o ridurne gli effetti. Mentre il VERO problema e' semplicemente ignorato o nascosto sotto al tappeto mentre il rattoppatore del momento ci sventola davanti alla faccia tutto entusiasta il suo ultimo rattoppo.
EEEEEEEEeeeeeee... Torniamo sulla Terra. Parliamo di $atomicmushrooms, che e' una ditta che produce... Bhe, in effetti non sono molto sicuro di che cosa facciano, ma hostano la loro roba da noi.
Incredibile come sembra, questa gente ha addirittura un ambiente di TEST separato dall'ambiente di Produzione. Hanno anche una sorta di 'sistema automatico di rilascio' che sostanzialmente e' un mega-scriptone che scarica il loro codice da Git, lo copia sulla macchina in una directory temporanea ed esegue tutta una serie di test automatici e niente sembra rompersi, lo mette dove dovrebbe stare e riavvia i servizi che devono essere riavviati.
Tutto bello e buono, finche' il codice funziona correttamente. Il problema e' quando il codice non funziona. Ed ovviamente, quando succede, il problema non e' il codice ma la persona che avrebbe dovuto scriverlo. Ecco arrivare CL, il nostro rattoppatore.
CL - Ho fatto partire il processo di auto-deploy in test ed ha ritornato un errore.
Io - Bene, lo hai messo a posto?
CL - No, voi dovete metterlo a posto.
Io - Ma lo script ha ritornato un errore o il vostro codice che ha fallito il check?
CL - Non lo so.
Me - Che dice l'errore?
CL - Non lo so, non ho tempo di guardarlo, devo mettere a posto un bug in produzione e ci serve il rilascio per stasera.
Onde percui mi metto a guardare quest'affare, che sostanzialmente scarica una montagna di roba da Git e poi avvia uno script (che sta anche lui in Git) per eseguire il vero e proprio "rilascio". Il download sembra ok, e l'ambiente sembra anche lui Ok, poi verifica/aggiorna/installa tutti i package che sono necessari e poi fa partire una serie di test, ed a quel punto sputa fuori un "failed" e basta.
Io comincio a sospettare che il problema sia nel codice di CL, quindi cambio lo script in modo da avere piu' debugging e lo rilancio.
E che cosa ottengo?
"Error in SomePieceOfCode.php line 397..."
Eccoti il tuo problema mister. Riporto la cosa a CL che non suona molto eccitato dalla cosa.
CL - Quella non e' roba nostra.
Io - Viene dal vostro repository, quindi e' la vostra roba.
CL - No, quello e' parte di un framework che e' usato da una libreria che ci serve per accedere ai dati di un'altro framework...
Io - (tagliando corto) Sicomeno, e' parte del vostro codice e quindi e' un problema vostro.
CL - Lo avete messo a posto?
Io - Quale parte di "e' il vostro codice, e' il vostro problema" non era chiara?
CL - Ma non e' il mio codice, non so neanche come funziona quell'affare.
Io - Quindi chi lo ha messo nel repository?
CL - Ok, quello sono stato io, ma non so come funziona quell'arnese.
Io - ... come fate ad usarlo allora?
CL - Ho copiato un esempio che faceva piu' o meno quello che mi serviva.
Io - Mi stai dicendo che tu non scrivi codice, ti limiti a copiare ed incollare insieme pezzi di roba che trovi on-line?
CL - Bhe', non sempre... Qualche volta... Non avevo il tempo per studiarmi come funziona tutto il framework e quella era l'unica funzione che mi serviva e quindi...
Io - Se ti serviva una unica funzione non era meglio semplicemente scrivere quella funzione invece di ficcare dentro tutto il framework?
CL - Senti, questo non e' il punto, a noi serve il rilascio funzionante stasera.
Io - Il problema e' il tuo framework, o hai aggiunto qualche altra cosa che fa conflitto o magari l'esempio che hai copiato non e' proprio quello giusto. Mettilo a posto.
Ovviamente CL non gradi' molto l'idea di dover "mettere a posto" il suo codice. Mettere a posto richiede per prima cosa capire come le cose funzionano, che richiede tempo ed impegno, mentre acchiappare roba dalla rete e sbatterla insieme alla meno peggio richiede molto meno tempo ed e' (apparentemente) molto piu' figo. In ogni caso, dato che era chiaro che il problema era nel codice e non nel sistema, io mi limitai a lasciar cadere la cosa sulla testa di CL e lo lasciai nel suo brodo.
Un paio di giorni dopo il nostro allarme di sistema ci informo' che il sistema di produzione di $atomic era in coma. Qualcuno controllo' e salto' fuori che l'intero sito stava arrancando su qualche cosa. Dato che le istruzioni erano "nel dubbio: restore", noi restorammo. Un bel rollback alla precedente versione riporto' il sito allo stato di funzionare.
Tuttavia, quello script di "rilascio automatico" fa anche un'altra cosa: scrive tutte le operazioni e chi le ha iniziate in un bellissimo file di log che e' fuori dalla portata degli utenti. E indovina un po'? Negli ultimi due giorni risultano ben 10 "hot fix" iniziati da CL e nessuno risulta prima provato sul sistema di Test. Quindi qualunque cosa CL stava "fixando" non l'ha provata prima in Test. Una RCA venne pertanto preparata e spedita a chi di dovere ad $atomic e noi si continuo' a fare quello che si faceva di solito, fino a che $atomic, nella persona di UL, chiamo' al telefono.
UL - Che e' successo al nostro sistema?
Io - Non avete letto la RCA?
UL - Si ma che vuol dire?
Io - Vuol dire che CL ha lanciato un rilascio di hotfix che ha rotto il sito e noi abbiamo ripristinato la versione precedente.
UL - Come mai l'hotfix ha rotto il sito?
Io - Questo dovreste domandarlo a CL non a noi. Noi non teniamo traccia di quali cambiamenti sono effettuati, solo che vi sono dei cambiamenti.
UL - Perche' funziona in Test?
Io - Di nuovo, questo dovreste domandarlo a CL, ma se controllo lo stato di Test, nessun rilascio e' stato effettuato nella settimana passata, e gli ultimi 3 hanno fallito il check, quindi probabilmente questa roba non e' stata testata e basta.
UL - Eh?
Io - Ha sentito benissimo.
Dopo un po' di ricerche, salto' fuori che CL era rimasto abbastanza scocciato dal nostro "rifiuto" di mettere a posto il suo framework, ed aveva deciso di incollare insieme ancora piu' roba per cercare di aggirare il problema, la cosa non aveva funzionato, quindi per "mettere a posto" il bug, aveva deciso di usare la funzione di "hotfix" per uploadare solo alcuni files senza eseguire un full check, il che aveva mandato in coma l'ambiente di Test. Dato che non era in grado di invertire i cambiamenti, aveva lasciato l'ambiente di test semi-funzionante ed aveva riprovato in produzione, rompendo anche quello.
Ed ecco un altro dei problemi dei rattoppatori. Continuano finche' non e' rotto. E poi cominciano con qualche cosa d'altro.
Davide
09/05/2018 15:52
I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.
Di Tartapowski postato il 04/06/2018 10:16
Non è che questo CL esce con la figlia adottiva del cognato dello zio acquisito della colf di UL? Se no non si spiega perché non l'abbiano mandato a cercarsi un lavoro da spazzino o robe del genere.
-- Tartapowski
Di Messer Franz postato il 05/06/2018 06:24
In veneto diciamo "far el tacòn pegio del buso" , mettere una toppa che è peggio del buco stesso, cioè, ovviamente, cercare di risolvere in fretta un problema e peggiorarlo.
Quando ho inziato a programmare, circa seconda metà anni 90, era affascinante vedere i programmi spagnoli: erano fatti da un patchwork di codici scaricati da internet delle più disparate fonti...ci trovavi pezzi in spagnolo (lo si capiva dai nomi delle variabili/funzioni e dai commenti), russo (frequentissimi, assieme al polacco), inglese, italiano, francese, portoghese e così via, ma il più bello è che no funzionavano MAI e chiedevano sui forum se qualcun altro poteva sistemarglielo...e quel qualcun altro suggeriva di prendere codice da un altro sito e aggiungerlo perchè "a me di solito funziona"... pura poesia... tipo l'inferno di Dante...
-- Messer Franz
Di Massimo m postato il 05/06/2018 23:57
I problemi qui sono due.
Uno: la gente non prende più un manuale in mano, chiede solo su stackoverflow.
Due: perché scriversi una funzione da soli quando si può buttare dentro qualche framework in beta, che a sua volta.si appoggia a n framework in allegato, rendendo tutto un casino?
-- Massimo m
@ Massimo m Di Davide Bianchi postato il 06/06/2018 13:05
Uno: la gente non prende più un manuale in mano, chiede solo su stackoverflow.
Due: perché scriversi una funzione da soli quando si può buttare dentro qualche framework in beta, che a sua volta.si appoggia a n framework in allegato, rendendo tutto un casino?
...E la differenza tra le due e'...?
-- Davide Bianchi
Di Anonymous coward postato il 24/06/2018 15:10
E già bei tempi ho ripescato questa perla dal Furbo Pascal ma c'era anche nel Furbo C/C++ e immagino anche in tutti gli altri compilatori.
{ __ahIncr, ordinal 114, is a 'magic' function. Defining this
function causes Windows to patch the value into the passed
reference. This makes it a type of global variable. To use
the value of AHIncr, use Ofs(AHIncr). }
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".