Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Storia di un byte e di un NullReferenceException

Sono ansioso di vincere il secondo premio "Miglior fumatore!" assegnatomi da Lorenzo!!!
A nessun byte è stato fatto del male durante la stesura del racconto!!!

Quando l'operatore arrivò in ufficio, era ancora mattina presto. Nel grande open-space non c'era ancora nessuno, sarebbero arrivati tutti nell'arco della mezz'ora successiva. Si sedette davanti al suo PC, assonnato ma ansioso di mettersi al lavoro: voleva debuggare per bene quella stored-procedure che ultimamente, dopo le modifiche alla struttura della database di un suo collega, gli aveva dato più di un problema. Accese il PC e se ne andò a prendere un caffè alla macchinetta.

Un attimo prima: nulla. Un attimo dopo: correre, contare, controllare, attendere, verificare, eseguire, leggere, scrivere, autenticare. Un byte fra tanti correva, seguendo i lunghi (oppure sono corti?) binari che deve seguire per arrivare a destinazione (dove devo andare?). Il byte all'inizio risiedeva all'indirizzo 0x1AB94D8, ma ben presto arrivarono impulsi, comandi ed istruzioni: qualcuno sopra di lui (il suo capo? chi?) gli disse (velocemente, cosa aspetti!!!) che bisognava andare all'indirizzo 0xEE001A. Il byte per definizione ha poca coscienza di sè, non fece domande e non si fece troppi problemi...semplicemente uscì da dove si trovava e prese immediatamente la direzione giusta. Arrivò a 0xEE001A, poi andò a 0x8711A8, si fermò a lungo qui, poi altre direttive (0x11F23, poi molto lontano, intorno all'indirizzo 0xEE091200123) e via di corsa. Correre, contare, controllare, attendere, verificare, eseguire, leggere, scrivere, autenticare.

Adesso che aveva bevuto un bel caffè, l'operatore si sentiva molto meglio. Diede un CTRL+ATL+CANC sulla tastiera, inserì la sua password ed attese che l'OS finisse il suo caricamento. Aprì Query Analyzer, inserì la propria password per connettersi al suo SQL Server, caricò il sorgente della tanto temuta stored-procedure. Sul monitor apparverò UPDATE, INSERT INTO e molte SELECT complesse, molte delle quali annidate una dentro l'altra. Ma la cosa che preoccupava di più l'operatore è l'uso che faceva dei cursori: non capiva perchè, ma generavano un qualche lock sulle tabelle: durante l'esecuzione della stored-procedure, le tabella risultavano bloccate, e gli altri utenti non potevano più usare l'applicativo. Doveva assolutamente risolvere il problema entro sera, altrimenti sarebbero stati guai.

Finalmente un po' di pausa. Il byte per un po' non ricevette ordini particolari. Era semplicemente in attesa di qualcosa (o qualcuno) che gli dicesse cosa fare. A volte si sentiva solo...a volte aveva la sensazione che qualcuno gli parlasse nell'orecchio. "Fidati, puoi farlo!", gli diceva quella voce. Di cosa parlava? Che cosa posso fare? "Uscire. Tu puoi uscire! Tu puoi.". Il byte non voleva uscire, era solo un byte e tale voleva rimanere. Eppure, la curiosità c'era. Quella voce sussurrava suadente, dolve e melodiosa. Man mano che passava il tempo, era sempre più difficile resistere. Il byte si guardava intorno: vicino c'erano tanti altri bytes come lui ("siete tutti prigionieri", gli diceva la voce). Ognuno portava con sè il proprio valore: tutti insieme assolvevamo ad un compito ben preciso, il benessere del sistema ("voglio che tu faccia un lavoro per me", gli diceva la voce, "ti ricompenserò!").

Scorreva su e giù il codice SQL, leggendola velocemente. Il suo PC era ancora un po' lento, il boot del sistema non era ancora terminato. Alcuni servizi dovevano ancora partire, l'esecuzione automatica era ancora in progress, l'hard-disk frullava come non mai.

"Vai al byte 0x0, byte. Te lo ordino!!!". La voce si era fatta insistente. "Non posso! Non voglio!", rispondeva il byte. Non si agitava, il byte non si può agitare. Rimaneva fermo, impassibile, assolvendo tranquillamente al suo compito. I bytes accanto a lui facevano lo stesso.

"Uffa, ma cos'ha stamattina il mio PC??!!??". L'operatore cominciava a spazientirsi...non si può lavorare in queste condizioni. L'hard-disk non la smetteva di frullare. L'operatore cominciò a pensare che qualcosa stava andando storto. Non gli era mai successo, il suo PC è sempre stato perfetto e pulito.

"Vai, ora! Indirizzo 0x0!" Al byte arrivò l'ordine. Arrivò con voce ferma e decisa. Il byte non seppe resistere: eseguì l'ordine e basta. Notò che altre parecchie migliaia di bytes ubbidirono allo stesso modo...tutti avrebbero ubbidito allo stesso medesimo ordine. Ognuno sarebbe andato ad un indirizzo diverso, ovviamente, questo lo sapeva, ma tutti insieme avrebbero lavorato assieme. Lui, il byte, sarebbero stato il capo di tutti: lui sarebbero andato all'indirizzo 0x0. Corse veloce, lungo sentieri (bus) che aveva già percorso prima, ma mai fino a quell'indirizzo tanto temuto: 0x0. Quando arrivò, fu un attimo. Come un lampo di luce accecante, si accorse che qualcosa non andava. Un silenzio palpabile calò su tutto: su se stesso, sugli altri bytes lì intorno. Non c'era più nessuno a cui ubbidire. Era vivo, ma non aveva nulla da fare. Era vivo, ma morto allo stesso tempo. Che senso ha vivere così? "Voglio ritornare come prima. Non ubbidirò più a quella voce, lo prometto!"

All'operatore si gelò il sangue quando sul suo monitor comparve un blue-screen. "No!!!!", proprio nel mezzo del debug della stored-procedure. La schermata blu dell'OS riportava un sacco di informazioni, indirizzi di memoria, DLL che avevano causato il problema, ma un messaggio lo fece quasi spaventare: NullReferenceException. A lui però non importava. Il sistema era crashato, maledizione! "Devo riavviare, devo scansionare il disco, maledizione!! Perderò la mattinata!!!!!!" Senza pensarci due volte, l'operatore cliccò sul pulsante Reset sul case e picchiò un pugno sul tavolo. Avrebbe dovuto ricominciare tutto daccapo.

Il byte perse la vita. Era lì in attesa, in attesa che succedesse qualcosa. Non successe nulla. Morì.

powered by IMHO 1.2

Print | posted on mercoledì 14 settembre 2005 17:38 | Filed Under [ 010 .bytes. 010 ]

Feedback

Gravatar

# re: Storia di un byte e di un NullReferenceException

davvero bella
15/09/2005 13:45 | davide
Gravatar

# OS

30/09/2005 17:49 | Technology Experience
Gravatar

# OS

30/09/2005 18:02 | Technology Experience
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET