Un sito assolutamente non politically correct

Lungi da me aprire un nuovo fronte dell’eterna lotta su quale è il miglior database relazionale… Probabilmente esistono già migliaia di posti dove discuterne. Però stasera ho trovato un sito cui vale la pena dare un’occhiata. Non è un sito politically correct.


Si tratta del “The I-Hate-Oracle club” e nasce da una costola del Daily WTF di cui ho parlato la settimana scorsa.


I motivi per cui nasce questo club sono spiegati in questa pagina e devo confessare che, pur non essendo totalmente d’accordo con l’autore, devo ammettere che alcune motivazioni hanno profonde radici nella verità e la prosa con cui vengono esposte è irresistibile. Vi avverto: non arrivate a leggere l’ultimo punto se siete in ufficio e un non-tecnico potrebbe chiedervi perché ridete da soli.


Al di là dell’aspetto puramente goliardico, è curioso scoprire che Microsoft non è l’unico obiettivo per questo genere di attacchi “feroci”, anche se resta quello che fa i grandi numeri…

MSDN per chi ha solo Visual Studio

Credo che chi legge questo blog sia già abbonato a MSDN… Ma se c’è ancora qualcuno che ha Visual Studio senza avere MSDN, questa offerta è molto interessante.


Non è che voglio fare pubblicità a Microsoft, non ne ha bisogno, ma proprio non so come farei a sviluppare senza avere MSDN Universal. Torna sempre utile. Probabilmente chi ha un Visual Studio Professional fa un affare… anche se devo dire che non ho fatto i conti per capire quanto convenga… se qualcuno li fa, i commenti sono aperti.

CLR Profiler

Oggi ho finalmente avuto bisogno di usare CLR Profiler. L’avevo già provato in passato, ma usarlo per risolvere un problema reale è tutt’altra faccenda. CLR Profiler analizza l’esecuzione di un assembly .NET e fornisce informazioni sull’uso della memoria (chi, come, quando, da chi viene allocato) e sul grafo di chiamate. Non è uno strumento da usare come profiler per le prestazioni in termini di CPU ma è utilissimo per individuare le cause di un consumo eccessivo di memoria (che direttamente e indirettamente ha i suoi effetti anche sulle prestazioni velocistiche).


Per chi vuole curiosare senza installarlo (anche se è molto piccolo e non invadente), questo episodio su MSDN TV ne illustra le potenzialità.


Se qualcuno vuole usarlo, una lettura obbligata è il documento word contenuto all’interno: 11Mb di Word con molte bitmap ma anche tanto testo per spiegare come sfruttare le capacità di questa utility.


Difetti:



  • deve essere avviato con privilegi di amministratore (e non dice nulla se non lo fate, salvo che poi non si comporta correttamente dando un’eccezione o attendendo all’infinito un evento che non si verifica)

  • il file di log che genera è in formato ASCII – su un programma che usa intensivamente la memoria diventa molto ingombrante

  • l’interfaccia utente è un po’ essenziale e manca di help on line… ma questo non è materiale per neofiti quindi ci si può aspettare che uno il manuale lo legga…

Pregi:



  • molti grafici e diagrammi diversi che illustrano comportamenti anche complessi difficilmente rappresentabili in forma testuale

  • gratis con tanto di sorgenti

  • nessun problema di setup (deployment xcopy, insomma)

Resoconto di oggi: ho ridotto la memoria occupata del 30%, passando da 900Mb a 600Mb, ovviamente intervenendo dove meno me lo sarei aspettato. Quello che invece pensavo fosse pesante si è rilevato poco significativo. Ancora una volta, la regola d’oro è: prima di ottimizzare bisogna misurare.

Installare SQL Server su XP via Remote Desktop

Installare SQL Server su XP via Remote Desktop è una cosa che non si fa… nel senso che non funziona.


L’installazione di SQL Server 2000 non dà errori ma si blocca a un certo punto. L’installazione di MSDE a un certo punto va in timeout ma senza dare una diagnosi precisa (neanche dai log si capisce).


Il problema è che qualcosa che fa durante l’installazione non è tanto compatibile con l’uso di Remote Desktop. Spostandosi fisicamente su tastiera e monitor del PC incriminato, tutto fila liscio. Ciò che mi pare incredibile è che non ci sia un articolo di KB sul problema (almeno… io non l’ho trovato…) né tantomeno una diagnostica migliore. Se pensate al numero di situazioni in cui potrebbe capitare di dover installare MSDE in questo modo, capite che qualcosa di meglio ci vorrebbe.

PDC 2005: qualche ipotesi di data (e location)

Premesso che la notizia forse è priva di qualsiasi fondamento… ma proviamo a indovinare quando sarà PDC 2005.


La data che risulterebbe da un’ipotetica fuga di notizie è 7-17 settembre 2005 a Los Angeles (la durata potrebbe poi essere minore).


La fonte? Beh, non molto sicura… in questo post c’è un commento (anonimo) che dice di aver visto questa data su questa pagina (calendario del Los Angeles Convention Center), che però ora risulta modificata. Sembrerebbe uno scherzo… però ora in quelle date figura un ipotetico “Trade Show” tenuto da “Technology Companies” che richiede l’occupazione di “All Areas”. Ora, se qualcuno è stato in questo centro congressi si renderà conto che una fiera che occupa tutto il centro… deve essere qualcosa di immenso. Un COMDEX, per esempio, ma non mi risulta che sia stato spostato a Los Angeles. Che sia solo un tentativo di mantenere il segreto dopo che qualcuno si è accorto della “fuga” di notizie?


In ogni caso non sarebbe la prima volta che Microsoft opziona un centro congressi per PDC e poi sposta tutto: è successo nel 2003 spostando tutto da aprile a ottobre. Succederà anche nel 2005/2006? Se qualcuno ha informazioni o speculazioni in merito e può parlare… i commenti sono aperti.

SQL, ottimizzazioni, numeri random e curiosità

SQL Server nasconde sempre qualche scoperta interessante: oggi è stata la volta di alcune SELECT che risultano più ottimizzate scrivendo una sintassi controintuitiva: in alcuni casi è meglio fare una LEFT JOIN con una tabella e mettere una WHERE tabellajoin.campo IS NOT NULL piuttosto che fare una WHERE NOT EXISTS (SELECT * FROM tabella WHERE stessa condizione join). Attenzione, non è sempre così, ma in alcuni scenari la differenza è molto grande (quasi un ordine di grandezza). Si tratta di un fenomeno che avevo già descritto in un post precedente su qualcosa di analogo.


Come al solito, misurate sempre prima di prendere una decisione. SET STATISTICS IO ON e SET STATISTICS PROFILE ON sono due strumenti indispensabili per trovare i colli di bottiglia delle vostre query.


Uno dei motivi per cui sono arrivato a valutare queste diverse ottimizzazioni è il fatto che avevo avuto problemi prestazionali nell’uso di una UDF (user defined function). Le UDF sono valutate per ogni riga esaminata, anche se la funzione non ha parametri ed è deterministica (e dovrebbe quini restituire sempre lo stesso valore). In realtà stasera ho scoperto quasi per caso che non è così (non è detto che una funzione deterministica sia veramente tale): se ne parla in questo post di Jeff Smith dove viene spiegato come generare dei numeri random diversi per ogni riga del risultato di una SELECT. Leggete anche i feedback perché c’è una soluzione alternativa basata a quella descritta nel post che in alcuni casi può essere comoda. Il non-determinismo è dato dal fatto che SQL Server consente di creare una UDF contenente all’interno una SELECT su una vista… che a sua volta può fare una SELECT con una funzione RAND (che non è deterministica): aggirato l’ostacolo, ecco che la nostra UDF diventa non deterministica e restituisce un valore diverso per ogni chiamata. Comodo per avere i numeri random, ma da maneggiare con cautela per le implicazioni che può avere in altri scenari!


Infine, la curiosità: leggendo altri post dello stesso autore ho trovato questo che parla di indici: niente di nuovo, ma il post parte come commento a un posto su questo sito: TheDailyWTF. Se non sapete cosa vuol dire l’acronimo WTF cercate su Google… Il bello del sito è che raccoglie aneddoti comprensibili solo a un programmatore (per la maggior parte, almeno).


Oggi due feed RSS in più sul mio SharpReader.

Server NTP italiano… a Torino!

Lo IEN Galileo Ferraris di Torino, depositario dell’ora esatta nazionale, offre un server NTP primario (e quindi anche SNTP) con cui sincronizzare il proprio PC. Microsoft offre un servizio simile (time.windows.com) ma se per qualsiasi motivo volete cambiarlo potete usare ntp1.ien.it o ntp2.ien.it. Ricordo che il comando per definire le impostazioni è NET TIME /SETSNTP:ntpserver (dovete sostituire a ntpserver l’elenco dei server che volete interrogare).


Non so dire se ci siano differenze apprezzabili in termini di precisione (probabilmente se il client usa SNTP non ce ne saranno), ma se tra i lettori c’è qualche esperto in materia, i commenti sono aperti.