ottobre 2005 Entries
[OT] Laptop Tango Foxtrot Uniform (*)

Ebbene si, dopo la debacle di Raf con il suo portatile il giorno prima della partenza per l'MVP summit, anche il mio ha deciso di farmi uno scherzo il giorno _dopo_ smau, e così mentre lunedì mattina stavo lavorando mi è uscita una manina che mi ha salutato e la scheda video del portatile ha smesso di farmi vedere il mondo come io lo conoscevo, mostrandomi direttamente la matrice delle cose (Matrix anyone?). Ma io non sono Cypher e della matrice non capisco un accidente, quindi ora il portatile è placidamente in qualche centro assistenza Acer dove mi hanno detto che ci vorrà un mese (??) per metterlo a posto. Detto fatto, sono fuori dai giochi seri per un mese, ed in fatti sto ordinando oggi il Dell nuovo con garanzia Next Business Day sperando che mi arrivi prima, malgrado le festività.
Questo post era principalmente per scusarmi del mio "buco" temporale di questi giorni, anche con chi mi ha scritto in mail privata o chi magari mi cerca sui newsgroup/forum. Spero di essere pienamente operativo entro il ritorno dalle vacanze, anche se comunque senza portatile :)

(*) T.F.U., ossia Totally Fucked Up :)

SMAU - Considerazioni

E' tardi, e sono a casa _solo_ perchè andrea, daniele e gianky non hanno il fisico per reggere una nottata fuori e mi hanno fatto rincasare presto...
Ho deciso di dare un'occhio al blog e tra un altro racconto sciroccato di Igor (che devo contraddire: Elena _non_ ha visto il video della mucca, perchè povera patata era rimasta incastrata in reception proprio durante la presentazione di Francesco. Ho provveduto io col portatile a farglielo vedere (il video, viziosi...) ma, lo stesso, non gli ho scucito l'indirizzo e-mail, altrimenti te l'avrei passato :) ) ed un'attacco di blogorrea di Lorenzo, ho visto un sacco di commenti su Smau in cui si dice che fa schifo, che è dispersiva, che non ci si raccapezza...
Ragazzi, ma voi cosa andate a fare in Smau? Io ho iniziato che ero studente (quindi non sono "storico" come raf che ci andava a vendere i mobili :p) e ci andavo per una sola cosa: ragazze. F i g a. Chiamatele come volete, ma solo per quello, niente di più: per vedere le novità sui videogames, c'erano i negozi sotto casa e/o gli amici che avevano le bbs e te le facevano provare, per provarli idem come sopra, per rimanere aggiornati su hardware e software c'erano le mailinglist solo testo tanto care a me (lo sarebbero anche adesso ma morire, è rimasta praticamente solo CodeProject) ed i lan-party organizzati in cui c'era sempre lo sponsor disposto a darti un braccio perchè tu provassi con quanti fps girava quake (1, il mitico, l'unico, e non mi ricordo chi ha scritto che "quake 2 è un ritorno al passato" in questo stesso blog, ma cercherò di ignorare :p).
Adesso è uguale, ci vado per lo stesso identico motivo: tacchinare le hostess, con tutti i mezzi ed in tutti i modi, coadiuvato dal fatto di essere addetto ai lavori.
Ovvio, ci vado anche per dare (quando riesco) supporto a chi fa delle domande, ma questo non aiuta di certo _me_ in alcun modo, per fare business in smau devi essere ormai veramente fortunato. Mi spiace solo per tutte le persone che hanno pagato salato un boot e che dopo non hanno ritorno sufficente!

Insomma, adesso come dieci anni fa, la smau è sempre la stessa: tanta figa, e poche informazioni. Capisco che quelli che magari ci andavano 15 anni fa sono delusi, ma ormai è parecchio che smau segue la china del consumismo e non sono neanche sicuro che questo sia un male: come dite voi, di "contatto" col produttore se ne può avere veramente tanto per via telematica, siamo veramente sicuri che una fiera per "addetti ai lavori" sia la risposta?
Tutto quello che spero è che raf non legga questo post prima di andare in fiera domani, perchè se non è d'accordo con quello che dico mi uccide e non posso neanche nascondermi nel boot 3x3 degli MVP :)

8 Comments Filed Under [ Conferenze ]
SQL server e ISO 8601

Più che di .NET, finisco sempre a parlare di SQL server in questi giorni... ma questo tuning del DB mi sta facendo scoprire un bel po di cosette!

A dire il vero questo problema l'avevo già incontrato un po di tempo fa, ma l'avevo rimosso, ora l'ho ritrovato tra le email e lo ripropongo: come molti di voi sanno, l'ISO 8601 dovrebbe definire uno standard per rappresentare le date in modo da evitare problemi di comprensione ma, soprattutto, di interazione con il fantomatico db.
Purtroppo, quello che ho scoperto è che per SQL server non esiste un vero e proprio formato ISO, ma reinterpreta comunque l'ingresso a seconda dei language settings dell'utente con cui ci si logga nel db! Quindi, se l'utente ha il linguaggio inglese, va tutto bene, se invece ha un linguaggio diverso (tedesco, italiano, russo, etc), sql server reinterpreta il formato e si aspetta YYYY-DD-MM, generando ovviamente un errore di conversione.

Potete anche riprovare voi sul vostro query analyzer questo comportamento con due semplici select su una tabella che abbia un campo data:

SET LANGUAGE english
GO
SELECT * FROM Tabella WHERE Campo = '2005-10-22' --Tutto Ok
GO
SET LANGUAGE italian
GO
SELECT * FROM Tabella WHERE Campo = '2005-10-22' -- Errore di conversione
GO

Questo mi ha particolarmente sconvolto, e mi ha dato una ragione in più per picchiare le mie "scimmie da codice" quando provano a non usare i parameters, ma più che altro è lo sconvolgimento che prevale.
Fin'ora come soluzione cambio i language settings del login con cui entro in SQL server, ma vorrei tanto che qualcuno mi smentisse/mi desse un'altra soluzione (Senza andare a toccare syslanguages :p).

[OT] Che mangiata!

Volevo ringraziare di cuore tutti i partecipanti alla cena UGI post workshop di oggi: non solo per la compagnia ed il colesterolo salito a 200, ma anche per essere stati così tanti: 24 persone, direi che è un record, se continua così la prossima volta dovremo richiedere servizio catering :)

2 Comments Filed Under [ Conferenze ]
TemplateColumn: LoadTemplate e FindControl

Stavo paciugando con il LoadTemplate per caricare dei template dinamici all'interno di TemplateColumn create dinamicamente, e mi sono trovato di fronte al problema di dover prendere l'istanza di un oggetto (checkbox, textbox) definito nel template per variarne il valore.
Sembrava tutto facile, ma mi sono dimenticato che il mero FindControl() non funziona perchè, per ogni templatecolumn caricata in questo modo, viene creata una tableCell contenente un oggetto di tipo ASP_NomeFileTemplate_Ascx con all'interno le istanze degli eventuali controlli.
Per avere l'istanza della textbox posso risolvere in due modi: ho controllo che il tipo corrisponda con quello sopra definito, e dopo chiamo unfindcontrol per l'istanza della textbox

Type t = Type.GetType("ASP_NomeFileTemplate_Ascx");
foreach (Control ctrl in e.Item.Cells[2].Controls)
{
  if (ctrl.GetType() == t)
  {
     TextBox txt = (TextBox)ctrl.FindControl("txt");
  }
}

che però mi fa un po schifo ed è anche un po lento.
In alternativa, posso fidarmi del fatto che per ogni template column caricata in questa maniera io posso avere _uno ed un solo_ template associato, quindi un solo oggetto di tipo ASP_NomeFileTemplate_Ascx per cella.
Detto fatto, la soluzione migliore è andare direttamente di indici e poi fare un FindControl solo per avere l'istanza della textbox:

TextBox txt = (TextBox)e.Item.Cells[2].Controls[0].FindControl("txt");

Che dite, avete qualche altra idea?
3 Comments Filed Under [ ASP.NET Other .NET ]
Attenzione alle statistiche di SQL Server!

Mi sta capitando spesso in questi giorni di paciugare con SQL per arrivare alla soluzione di alcuni problemi di performance (partendo dal presupposto che prima di tutto ci sarebbe da rifattorare _tutto_ l'applicativo, ma soprassediamo :P), e mi sono scontrato con alcuni problemi che già ha illustrato Igor in questo post.
Una cosa però che non ha evidenziato è l'importanza, che si scopre analizzando bene l'execution plan, di aggiornare le statistiche delle tabelle: per creare l'execution plan, sql server si basa sulle statistiche per decidere i vari piani e scegliere il migliore. Quindi, può succedere che su queste basi SQL server prenda delle decisioni che sembrano strano ma in realtà non lo sono, per esempio può decidere di fare un tablescan invece di utilizzare gli indici su una tabella se questa tabella ha pochi record.
Può anche succedere (come è successo al sottoscritto) che l'amministratore disabilit l'autoupdate delle statistiche, ma poi non amministri effettivamente il DB. Risultato: una tabella da 20.000 record veniva processata con un tablescan invece di usare gli indici. Questo portava a 12 secondi di query sul nostro ambiente di sviluppo interno, ed a 4 minuti e mezzo sul loro ambiente di collaudo... non male come collo di bottiglia eh? :)

Alcuni link per approfondire:
Spiegazione di come funziona l'autostat (msdn)
Tip per migliorare l'uso delle statistiche (sqlperformance)

Usate SQLClient

Non mi fido mai molto dei benchmark che trovo in giro, quindi ho voluto fare una prova su un database effettivo (assicurazioni) con dati veri (piu di 200 mila utenti.. hey, ma questo lo conosco.. hem :P) per vedere la vera differenza tra l'utilizzo di SQLClient, OLEDB e ODBC... che dire, è stata una sorpresa: OleDb è più veloce di quanto credessi, mentre Odbc è _molto_ più lento di quello che immaginassi... questo è quello che è venuto fuori in fase di ricerca:

Ora il problema è: sarà per loro un vantaggio di 3 secondi abbastanza per convincerli a passare a SqlClient? Io spero proprio di si :)

One Comment Filed Under [ Other .NET ]
[OT] New York, New York... & Cheescake!

Siete a New York? (Magari!) Avete voglia di Cheescake? (Sempre) Volete mangiarne una ottima senza finire svenati? (Ho provato a spendere 10 dollari per una fetta pubblicizzata come "The Best Cheescake in NY" e non era manco vero!)
http://www.eileenscheesecake.com/
In assoluto è il posto migliore,  IMHO, dove assaggiare una cheescake. E fidatevi, sono stato a manhattan per due settimane e mangiavo cheescake a colazione e dopo cena, ogni giorno, sempre in posti diversi: questo è l'unico da cui sono andato tre volte di fila :)
Se non vi fidate di me, potete sempre guardare qui:
http://www.menupages.com/restaurantdetails.asp?restaurantid=5437

Lancio Visual Studio 2005 - 10/22 Novembre

Allora, per chi non si fosse ancora iscritto, ricordo che al Lancio di VS2005 che si terrà a milano il 10 Novembre (ma anche a quello di roma del 22) ci saranno delle sessioni che tratteranno le novità e (spero) il passaggio da 2003 a 2005. Molto utile nel caso abbiate un team di sviluppo che non ha ancora approcciato 2005 e vogliate un'infarinatura "gratis". Trovate su http://www.microsoft.com/italy/launch2005/day/track1.mspx la scheda della track per sviluppatori (quella per architetti è sold out da tempo...) vi consiglio di affrettarvi perchè a quanto pare di posto ce n'è poco!
C'è anche una sessione per i professionisti IT (http://www.microsoft.com/italy/launch2005/day/track2.mspx), ma tanto non gliene frega niente a nessuno... hem :P

L'evento inizia alle 11:30, si svolge di fianco al mio ufficio quindi probabilmente io sarò li dalle 9, se qualcuno arriva prima e vuole fare colazione, mi faccia un fischio!

Curiosità: se guardate l'agenda, vedrete questa bella cosa:
12:30 - 14:30 -- Launch
Ok il lancio di VS, ma addirittura sostituire il pranzo con un lancio.. un lancio verso dove poi? Bah... :)

Scrolling DataGrid

Ultimamente ho avuto la necessità di visualizzare un sacco di dati sia in orizzontale che in verticale in alcune DataGrid. Ovviamente, non potendo creare una pagina larghissima e lunghissima, ho usato i DIV in overflow per farle apparire con le scrollbar.
Il problema è che, navigando su e giù per i dati, si perdevano le intestazioni e questo diventava effettivamente un po scomodo.

Mi stavo per lanciare nel confezionamento di un controllo ad hoc, quando Code Project mi ha levato, come molte altre volte, dagli impicci: qui http://www.codeproject.com/aspnet/ScrollingGrid.asp trovate una splendida datagrid che supporta lo scrolling ed il blocco delle testate!

One Comment Filed Under [ ASP.NET ]