Disponibile Reflector 5.0

Reflector 5.0 è appena stato rilasciato: la nuova versione supporta .NET 3.5 e il reverse engineering di query expression (le query in LINQ, insomma).

Questo è un esempio di decompilazione.

private static void FirstSampleQuery()
{
    DataContext db = new DataContext("Database=Northwind;Trusted_Connection=yes");
    var query = from c in db.GetTable<Customer>()
        where (c.Country == "USA") && (c.State == "WA")
        select new { CustomerID = c.CustomerID, CompanyName = c.CompanyName, City = c.City };
    db.Log = Console.Out;
    foreach (var row in query)
    {
        Console.WriteLine(row);
    }
}

Trovo un vera chicca il fatto che inferisca il var solo dove non se ne può fare a meno nel codice sorgente… Se avete domande su questo codice, venite a DevCon 2007 che ne parliamo!

SQL Server 2005 SP2 è disponibile

Da poche ore è disponibile la versione definitiva del Service Pack 2 di SQL Server 2005. La build è la 9.00.3062.

Questo rilascio è importante perché ci sono molte novità (una su tutte per chi fa Data Warehouse: i VARDECIMAL utilissimi nelle tabelle dei fatti) e perché la compatibilità tra SP1 e SP2 è tutt’altro che scontata: andare avanti è facile, tornare indietro un po’ meno. Per esempio, non è detto che si riesca a ripristinare un backup fatto con SP2 in un server con SP1 (vale sia per SQL Server che per Analysis Services). Per lo meno, così era con le CTP.

Bisogna poi allinearsi anche con altri componenti:

Feature Pack for Microsoft SQL Server 2005 – February 2007 (client SQL, ADOMD.NET, DTS Designer for Managment Studio, OLE DB for AS 9.0, …)

SQL Server 2005 Reporting Services Add-in for SharePoint Technologies (integrazione con SharePoint 2007 o WSS3)

SQL Server 2005 Data Mining Add-ins for Microsoft Office 2007 (questo da solo vale l’upgrade a Excel 2007 e a SQL 2005 SP2)

Segnalo che contestualmente è disponibile una nuova versione dei Books oOnline.

Altra documentazione:

Readme for Microsoft SQL Server 2005 Service Pack 2

What’s New in SQL Server 2005 SP2

Bugs fixed in SQL Server 2005 Service Pack 2

DevCon 2007 – iscrizioni aperte

Dal 15 al 17 maggio 2007 si terrà a Milano la DevLeap Conference 2007, che chiamiamo semplicemente DevCon 2007. Il payoff di quest’anno è A Real World Experience, per indicare che porteremo sul palco moltissima esperienza acquisita sul campo, nel cosiddetto “mondo reale” (ammesso che ne esista uno, ma questa è una divagazione che ci porterebbe lontano…).

Giochi di parole a parte, DevCon è per noi un evento di approfondimento: benché il .NET Framework 3.0 sia stato rilasciato da poco, abbiamo da raccontarne l’esperienza d’uso di oltre 18 mesi nello sviluppo di progetti reali. Workflow Foundation, Windows Communication Foundation e Windows Presentation Foundation (WF, WCF e WPF, per farla breve) sono componenti fondamentali per lo sviluppo di soluzioni in tecnologia Microsoft da qui in avanti.

Altri temi importanti del “presente” sono SharePoint 2007, AJAX in ASP.NET, Visual Studio Team System, Mobile, BizTalk. Uno sguardo al futuro sarà poi dedicato a .NET 3.5 e in particolare a LINQ e C# 3.0.

L’evento si articola su 3 giornate con 2 track in parallelo. La formula consente di partecipare alle prime 2 giornate (10/12 sessioni al giorno da 75 minuti), soltanto alla terza (4 sessioni lunghe da 150 minuti ciascuna) o a tutte e tre. La terza giornata è dedicata ad argomenti che possono essere visti “autonomamente”, proprio per dare un’opportunità di partecipare a DevCon anche a chi può assentarsi soltanto per un giorno dall’ufficio. Abbiamo cercato di seguire i feedback ricevuti nelle scorse edizioni, speriamo di esserci riusciti ma non mancate di dirci sempre cosa ne pensate!

Tutti i dettagli sono disponibili nella pagina dedicata all’agenda. Per partecipare, è bene iscriversi prima del 28 febbraio per approfittare delle condizioni di early bird.

Quando usare try/catch/finally

Come ho scritto nel mio libro sul Common Language Runtime, raramente è necessario usare il costrutto try/catch/finally nella sua interezza, il più delle volte si ricorre a un try/finally nidificato all’interno di un try/catch. Il motivo è la necessità di rilascio immediato delle risorse bloccate (operazione tipicamente svolta dalla finally), specialmente quando la gestione dell’errore potrebbe includere un’interazione con l’utente (si pensi a una segnalazione all’utente o comunque a un’operazione di I/O nel blocco catch).

Un caso “da manuale” di effettiva necessità del try/catch/finally è lo scenario in cui si debba reagire a una condizione di errore (con del codice specifico per questo caso) prima del rilascio delle risorse allocate. Per esempio, il codice che segue gestisce l’interazione tra un DataContext di LINQ e la transazione sulla connessione al DB.

db.LocalTransaction = db.Connection.BeginTransaction();
try
{
      db.SubmitChanges();
      db.LocalTransaction.Commit();
      db.AcceptChanges();
}
catch
{
      db.LocalTransaction.Abort();
     
throw
;
}
finally
{
      db.LocalTransaction =
null
;
}

Chiaramente, l’esempio specifico può essere discutibile (si pensi a cosa implicherebbe un’eccezione in AcceptChanges…) ma l’idea di avere un try/catch all’interno di un try/finally (ciò che fa semanticamente il try/catch/finally) è qualcosa che ha dei reali scenari applicativi, anche se non è certo il caso più frequente di pattern usato nella gestione delle eccezioni.

Opinione su User Account Control (UAC) in Vista

So di andare controcorrente, ma la questione per me è assolutamente semplice.

Se uno è abituato a usare Windows con un utente amministratore locale della macchina, lo User Account Control di Windows Vista, per quanto possano cercare di renderlo poco invasivo, è certamente visto come un rallentamento.

Se uno è abituato a usare Windows con un utente non amministratore, come dovrebbe fare qualsiasi sviluppatore, lo User Account Control è invece una manna piovuta dal cielo. Con Vista, quando ho un’applicazione da installare, semplicemente lancio il setup. Quando è il momento, UAC mi chiede le credenziali di amministratore per completare l’operazione. Tutti i setup che ho provato con Vista funzionano bene, mentre con Windows XP facendo il semplice RunAs a volte qualcosa andava storto e dovevo proprio fare un logon con un utente amministratore.

Quindi, a distanza di qualche mese, non ho nessun motivo per disabilitare UAC o per lamentarmene. Come tutte le cose, è migliorabile e potrebbe essere più smart (per esempio dando delle finestre temporali in cui alcuni tool, come deframmentatore, analisi processi, performance counter…) siano attivabili senza nuove richieste (o su qualche attività nel pannello di controllo potrebbe fare una sola richiesta iniziale e via). Ma da Windows XP le cose sono migliorate.

Terminologia usata nelle traduzioni Microsoft

Grazie alla newsletter dell’UGISS sono venuto a sapere dell’esistenza del Microsoft Terminology Community Forum SQL Server: si tratta di un progetto che intende raccogliere feedback sulla terminologia usata nella versione italiana di SQL Server.

Premesso che io appartengo a quella schiera di persone che fa di tutto per dissuadere chiunque dall’installare su un server una qualsiasi versione di Windows / SQL Server / Exchange diversa dall’inglese, sono però sempre molto sensibile alle esigenze di traduzione e ne ho parlato su questo blog in diverse occasioni.

Siccome i fatti sono meglio delle parole, ho cercato di dare il mio contributo sul forum. Invito i lettori sensibili a fare altrettanto. Benché non abbia nessuna intenzione di passare a versioni italiane dei motori lato server, soffro un po’ a non riuscire a spiegarmi quando devo dare indicazioni telefoniche a qualcuno che non riesce a trovare la corrispondenza di un comando in inglese, perché il modo in cui è stato tradotto è incomprensibile.

Non sono così ottimista, ma non si potrà rimproverarmi di non aver provato a fare qualcosa…