Overload di operatori, unit testing e altre considerazioni

Ho appena perso un paio d’ore per trovare un bug in questa funzione:

public static InheritedCost operator – ( InheritedCost a ) {
return new InheritedCost( -a.Last, a.Inherited );
}


La versione corretta è questa:

public static InheritedCost operator – ( InheritedCost a ) {
return new InheritedCost( -a.Last, -a.Inherited );
}

Tanto per essere chiari: il codice è mio, il responsabile sono io. Il programma (anzi il componente!) esaminato non ha unit testing (non è molto recente). Se mai ve ne fosse bisogno, questa è un’ulteriore lezione da trarre: lo unit testing non fa aumentare i tempi di sviluppo, li fa diminuire, sempre che si guardi la cosa dal punto di vista del tempo totale (analisi + codifica + debug + manutenzione per richieste modifiche) e non limitandosi al tempo necessario per arrivare alla Beta 1.


Questo bug ha richiesto ore perché causava un problema nel risultato finale di un’elaborazione estremamente lunga e complessa che poteva avere altre decine di spiegazioni tutte plausibili, anche aritmeticamente (un caso particolare di applicazione della legge di Murphy). Poiché si tratta di un operatore in overload, non era mai stato usato fino a poche settimane fa, e solo adesso i nodi vengono al pettine.


Bene, se mai ve ne fosse stato bisogno, io la lezione l’ho imparata (non che non la sapessi già, ma non avevo mai applicato lo unit testing ai progetti più vecchi già realizzati). Programmatore avvisato…

Funzioni Find in Process Explorer

Mark Russinovich racconta come ha individuato un bug (o forse due) di MSN Desktop Search usando Process Explorer.


Segnalo il post più che altro perché suggerisce come usare le funzioni Find disponibili: devo ammettere che non avevo ancora realizzato che tali funzioni lavorano sul nome assegnato agli oggetti kernel, che nel caso dei file corrisponde al nome completo del file. Bisogna abituarcisi, è molto potente.

Riviste su carta: hanno ancora senso?

La domanda che pongo nel titolo di questo post è il riassunto del post di Francesco Quaratino che ho letto stasera. Stavo per rispondere con un commento ma la lunghezza della risposta mi ha suggerito di dedicare un intero post all’argomento. In sintesi, Francesco si chiede se ha ancora senso acquistare (e leggere) riviste dedicate all’IT.


Io continuo a comprare alcune riviste. Alla fine però MSDN Magazine e SQL Server Magazine sono le due che leggo di più. PocketPC Magazine è un piacevole passatempo (vedi un sacco di gadget nuovi). PC Professionale per avere un’idea di cosa c’è di nuovo sull’hardware (anche se ultimamente lo spazio occupato dalle macchine digitali è enorme).
Sono abbonato ad altre riviste (italiane e straniere) ma spesso dopo un’occhiata al sommario non trovo molto che stuzzichi l’attenzione. Una menzione particolare però devo farla a .NET Developer’s Journal, che non eccelle per gli articoli strettamente tecnici ma dove ho letto eccellenti interviste ed editoriali molto interessanti.
Il problema è anche questo: scrivere è un’attività faticosa e mal remunerata. In Italia, poi, il discorso si estremizza. Inevitabile quindi che chi non può fare a meno di scrivere lo faccia per grosse testate americante, e chi vuole pubblicare in Italia faccia fatica a trovare chi scrive, visti i compensi.
Io ho sempre pensato che in Italia ci sarebbe posto per una rivista dedicata all’IT (sviluppatori e sistemisti) ad alto livello, ma dovrebbe farla un editore “importante”, che però con i numeri di questo genere di riviste probabilmente non alza nemmeno un telefono.
Una rivista, poi, per i tempi tecnici, non può puntare all’ultima moda del momento, ma è il luogo ideale dove ragionare a mente fredda. Un senso ce l’ha ancora. La rivista non la leggo quando sono al PC, infatti leggo più volentieri gli articoli più teorici che non quelli più da “smanettiamo sul codice”. Per fare un esempio, Don Box è uno che quando scrive, per come scrive, non richiede che tu sia alla tastiera, anche se parla di dettagli molto tecnici. Alla fine la qualità conta.


Cerco di riassumere i miei pensieri illustrandoti la sequenza di escalation ideale di un problema: se ho un presunto bug o devo capire meglio in che modo di usare un componente/libreria, cerco sui newsgroup; se devo usare un componente/libreria per la prima volta, cerco un articolo (se l’help non è sufficiente) e un articolo o un blog spesso sono risolutivi; se invece devo accostarmi a concetti nuovi o voglio degli approfondimenti anche teorici, probabilmente devo cercare una rivista o un libro, qualche volta trovo un articolo ma poi subentra la potenziale difficoltà di lettura (al PC si è sempre un po’ dispersivi).


Morale (mia): la rivista continua ad avere senso, solo dovrebbe tarare i contenuti in base all’uso che se ne fa.

Mercati in controtendenza: TechEd esaurito

La notizia è che il TechEd 2005 a Orlando è esaurito (sold out, come si dice). La vera notizia è che è esaurito oltre 45 giorni prima dell’inizio della conferenza (5 giugno 2005).


Spesso ho pensato (e non ero il solo) che il cartello “sold out” venisse appeso al sito pochi giorni prima dell’evento proprio per gonfiare la cosa. Oggi mi trovo a pensare che forse hanno fatto delle stime di affluenza fin troppo conservative (infatti c’è già una lista di attesa, non appena definiscono gli accordi con il centro congressi per allargare lo spazio).


Al di là dei pensieri malevoli, però, resta il fatto di un’alta affluenza a conferenze tecniche a pagamento oltreoceano. Dato in controtendenza rispetto a quanto avviene in Europa ma soprattutto a quanto avviene in Italia. Noi (DevLeap) abbiamo scelto di puntare a piccoli eventi più mirati e specializzati, per giustificare più facilmente il rapporto costi-benefici per i partecipanti (sempre che si tratti di eventi a pagamento, perché spesso facciamo eventi gratuiti come il prossimo FWC 2005).


Una ragione può essere il costo: negli USA il TechEd costa 1.695$ (iscrizione prima del 15 aprile, ma praticamente finora si sono iscritti tutti così); per andare al TechEd 2005 di Amsterdam bisogna invece spendere 1.950€ (prima del 20 maggio, che diventano 2.250€ dopo tale data). A cui bisogna aggiungere l’IVA del 19% (non deducibile per chi ha partita IVA in Italia, spero di non sbagliarmi…) che portano il tutto a 2.320€ nel caso migliore. Al cambio attuale andare a Orlando costerebbe (costava) 1.300€ circa, con 1.000€ ci si paga abbondantemente un biglietto aereo dall’Italia (ok, non in business) senza contare che per andare ad Amsterdam un aereo bisogna pur prenderlo e non è gratis. E senza contare che qualitativamente e quantitativamente (in senso tecnico, almeno) il TechEd americano è meglio di quello europeo. Anche con un cambio “alla pari”, farei lo stesso discorso.


Chi fa ragionamenti semplicistici, poi, punta il dito alla crescita economica in atto negli USA contrapposta a una situazione decisamente peggiore in Italia e in Europa. Se questo può valere per i massimi sistemi, non è sempre applicabile a casi specifici: io resto dell’idea che il prodotto è una cosa importante e se un prodotto è valido, i professionisti lo comprano. Diciamo che nessuno ha più soldi da gettare, ma da investire forse sì (con le dovute eccezioni, certo).


Negli ultimi due anni (2003 e 2004) sono stato al TechEd europeo e ho visto molti italiani: segno che la barriera linguistica non è più un ostacolo così grande come lo era un tempo (quando alle conferenze all’estero gli italiani erano 4 o 5 su 1000 e più partecipanti). Interpreto questo fatto come un dato positivo in generale, che chiaramente toglie qualcosa al mercato italiano (in lingua italiana) per lo stesso genere di prodotto. Anche se io spero sempre che uno vada a una conferenza in Italia non solo perché il relatore parla in italiano, ma soprattutto perché è interessante quello che dice 🙂


Vedremo se il TechEd europeo seguirà l’esempio americano in termini di numeri (io non ci andrò, ma sarà a Los Angeles in settembre per PDC 2005) e come andranno quest’anno le conferenze italiane a pagamento.


Nel frattempo, se qualcuno ha qualcosa da dire, i commenti sono aperti.

Database mirroring con SQL Server 2005

Il database mirroring di SQL Server 2005 è una delle tante importanti innovazioni di questo prodotto, che consentirà di avere due macchine fisicamente separate che hanno lo stesso identico database: i client si connettono a un server primario che propaga le transazioni al server secondario, in modo che alla fine i due database abbiano lo stesso contenuto.


Se si decide di avere un mirror completamente sincrono e pienamente transazionale con il master (la transazione andata a buon fine sul primario lo è sicuramente anche sul secondario) il prezzo da pagare è che il commit della transazione sul server primario è posticipato fino a che il server secondario non risponde positivamente (deve scrivere sul log delle transazioni). Come viene giustamente fatto notare in questo articolo, il problema è che in questa modalità il server secondario non può essere un hardware inferiore al primo (specialmente in termini di disco usato per il log delle transazioni), pena far decadere le prestazioni del server primario: come al solito è il punto più lento di un sistema a determinarne le prestazioni. Il pericolo è che non ci sia sensibilità su questo e molti comincino a montare come server secondario un PC obsoleto magari con uno storage capiente ma lento, giusto per avere un backup on-line… si può fare ma con una modalità di replica diversa da questo tipo di mirror.

Experience Pack per TabletPC

Se avete un TabletPC non potete assolutamente perdervi il nuovo Experience Pack for TabletPC: tra le varie cose ci sono due applicazioni molto belle.


Una è Ink Art, che io non userò mai visto che sono negato al disegno ma se conoscete qualcuno con un po’ di vena artistica… il Tablet si trasforma in una tavolozza per disegnare con acquarelli, matite e spray. Non si può spiegare quanto sia incredibile quello che si riesce a fare, bisogna provarlo.


L’altra è Ink Desktop, che consente di scrivere sul desktop del proprio PC come se fosse un foglio di carta. Forse non è molto utile nel quotidiano, ma è sicuramente carina da vedere.


Completano il quadro delle parole crociate (in inglese), un nuovo tema (Energy Blue, ma è solo estetica), uno Snipping Tool aggiornato e il Media Transfer, che io non uso (preferisco un impianto serio al PC) ma che molti troveranno comodo.

Ritorno a C++ (?)

Ieri ho citato il post di Joe Duffy sulle linee guida per il rilascio di risorse in .NET (e quindi il pattern Dispose/Finalize). Leggendo interamente il post ho riflettuto (nuovamente) su quanto il C++/CLI sia un linguaggio estremamente comodo per lavorare in .NET. Per quanto riguarda il rilascio delle risorse, sicuramente meglio di C#.


Adesso il dubbio è: dopo essere riusciti a “convertire” un certo numero di sviluppatori VB6 a passare a C# invece che a VB.NET, riusciremo a portare qualcuno di loro al C++?


A parte la provocazione, sarebbe utile capire in un progetto reale quali siano pro e contro dell’uso di C++ in un team di sviluppatori C# che non hanno un background di provenienza C++. Potrebbe essere meno peggio di quanto uno potrebbe pensare…

La guida definitiva a Dispose/Finalize in .NET

Questo post di Joe Duffy sembra essere la guida definitiva (almeno fino a .NET 2.0) per la gestione delle risorse in .NET (e quindi per i pattern e l’uso di Dispose/Finalize).


Non ho molto da aggiungere, se non il fatto che la questione è oggettivamente complessa se la si esamina sin nei minimi dettagli. Risulta inevitabile che programmatori “inesperti” si scontrino con questo argomento nel modo peggiore (dopo aver scritto migliaia di righe di codice senza averci pensato). Non ho una soluzione a questo problema… le ricette semplici hanno poi sempre qualche effetto collaterale, temo.

Giornata su Visual C++

Giovedì 5 maggio 2005 a Segrate c’è una giornata (gratuita) dedicata a Visual C++. Saranno presenti, direttamente da Redmond, i PM del prodotto: è un’ottima occasione per fare domande di qualsiasi genere, si ha di fronte qualcuno che la risposta deve averla per forza, al limite non può darla (per es. cosa ci sarà tra due versioni di Visual C++…). Purtroppo non riuscirò a essere presente, ma sarei sicuramente andato se non avessi avuto impegni lavorativi impossibili da spostare.


L’agenda è molto ampia e copre quattro versioni di Visual C++: dalla 6.0 fino alla 2005 (che uscirà entro l’anno) passando per le versioni 2002 e 2003: questo mi porta a suggerire a tutti quelli che ancora sviluppano con Visual C++ 6.0 di non mancare a questo evento, o in alternativa di studiare al più presto C++/CLI (saltando il Managed C++ delle versioni 1.x di .NET).