Code

Quando un crash è meglio di un check

Lavorando su codice esistente mi sono imbattuto in un passaggio simile al seguente, supponendo che MyControlName sia un elemento di UI indispensabile e sempre presente: void Sample(){ Control uiControl = FindControl("MyControlName"); if (uiControl != null) { DoSomething(); }} Se quell’elemento è sempre presente nella UI, perché fare il check? Solo per essere sicuri che nel codice scritto da noi non venga sollevata un eccezione? Cosa succede se per qualche motivo il controllo non è più presente nella...

[Brainstorming] Anonymous DTO

Quando “indovinate chi” mi introdusse, ormai anni fa, al concetto di base degli Anonymous Types mi comparve subito un sorriso da buongustaio sulla faccia. Di contro l’aver scoperto poco più tardi che tali oggetti sono (giustamente) utilizzabili solo come variabili locali smorzarono di parecchio l’entusiasmo. Non che questo riduca il loro grande valore, ma so di non essere l’unico che, pur apprezzando i vantaggi dei DTO, non sia proprio veramente così felice ogni volta che si rende conto di doverne inserire uno “ad hoc” nella solution. Oggi però mi sono reso conto di un aspetto che forse ho sempre...

Eppur si muoveva…

Nel mio precedente post di stamattina riportavo un’alternativa per l’implementazione di INotifyPropertyChanged basata sullo StackTrace. Come si evince dallo stesso Namespace, la classe StackTrace viene utilizzata per scopi relativi alla diagnostica, quindi il primo pensiero quasi naturale é stato “ok, in release non andrà”! Poi penso... beh, ma Exception ha una property StackTrace che funziona anche in Release. Creo un progettino Console di prova, creo un po’ di metodi “a cascata” per riempire lo StackFrame. Compilo in Release, copio solo l’eseguibile… Funziona! Ohibò! Erroneamente convinto del risultato, passo all’implementazione. Il tempo stringe, vorrei “evadere”...

Yet another INotifyPropertyChanged implementation

Il post di Matteo mi aveva già stuzzicato, ma non conquistato del tutto per un paio di motivi. La variante riportata oggi da Corrado mi ha suggerito una possibile soluzione che poi si è rivelata forse ancora più “lineare” di quanto mi aspettassi, permettendo di centralizzare il tutto in un unica classe “helper” esterna, con i vantaggi che ne derivano. Così il “set” riportato da Corrado potrebbe diventare (chiedo venia per non aver ancora installato un code formatter per WLW): set {     if (!(value.Equals(userName))     { ...

Abc ...defg

Qualche giorno fa un mio cliente mi ha chiesto la disponibilità per supportare una persona nel suo percorso di formazione relativo a .NET e poche settimane prima mi era arrivata un'altra richiesta simile. In realtà negli ultimi due anni ho ricevuto diverse volte questa richiesta ed in un modo o nell'altro, a seconda di entrambe le disponibilità, credo e spero di essere sempre riuscito a condividere quelle nozioni apprese in questi anni grazie soprattutto ad UGIdotNET e Microsoft. Perché lo scrivo qui? Come praticamente è avvenuto in tutte queste occasioni stavo riscrivendo più o meno la solita mail con qualche...

Tra il dire e il fare...

...a volte passano mesi, anche anni! Più di due mesi fa ho scritto (dai, non è ancora da passato remoto...) che avrei provato a pubblicare qualche esempio relativo al breve video. Non mi andava proprio, però, di pubblicare degli esempi non "eseguibili" per l'assenza di alcune librerie referenziate (seppur OT rispetto all'argomento del video) ed ho preferito cercare un'altra soluzione che soddisfasse da un lato le esigenze "commerciali" e dall'altro quelle della community. MSDN Code Gallery, per motivi burocratico/amministrativi che evito di citare, si è rivelata un'ottima scelta e qualche settimana (?) fa ho pubblicato alcune librerie necessarie per far...

Model-View-Presenter in salsa Duz

Dovendo descrivere ad una persona le modalità con cui ad oggi utilizzo il pattern Model-View-Presenter, ho optato per la realizzazione di un (modesto) video. Nulla di particolarmente accademico, anzi lo scopo è decisamente più pratico; ma ho semplicemente pensato che dovendolo comunque realizzare potrebbe rivelarsi anche una base su cui prendermi gli insulti confrontarsi su UGIdotNET. Per fare qualche passo indietro, la mia difficoltà iniziale era relativa al (troppo) tempo che richiede un'implementazione "pura" di MVP con una view completamente passiva ed inoltre dal fatto che una view di questo tipo non permettesse di sfruttare a fondo i vantaggi specifici degli specifici...

ROTFC (alias La matematica dei Geeks #3)

Single a = 14.56F;Single b = 5.02F;Single sum = 19.58F;Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine(a + b);Console.WriteLine(sum == (a + b)); //FalseConsole.WriteLine(sum.Equals(a + b)); //TrueConsole.ReadLine(); Single a1 = 14.56F;Single b1 = 254.02F;Single sum1 = 268.58F;Console.WriteLine(a1);Console.WriteLine(b1);Console.WriteLine(a1 + b1);Console.WriteLine(sum1 == (a1 + b1)); //FalseConsole.WriteLine(sum1.Equals(a1 + b1)); //FalseConsole.ReadLine(); Propongo una sessione per i prossimi Community Days: "Le addizioni".   Update: dimenticavo un tassello...

"My" review

Più cresce la complessità dell'architettura di una soluzione (niente di che, nel mio caso, ovviamente... ), più mi trovo a scrivere cose tipo: sample.InsertedBy = Authentication.AuthenticationManagerFactory.GetAuthenticationManager().CurrentUser; Il codice diventa sempre più dannoso per il tasto "." tanto più aumenta la profondità di annidamento degli AbstractFactory. Il pensiero è andato subito alla classe My introdotta in Visual Basic 2005 (anche se ormai uso al 90% C#) e stavo pensando ad una classe simile anche se rigorosamente internal (l'associazione di colori è puramente casuale) in cui riversare le chiamate ai metodi statici più gettonati, tipo: sample.InsertedBy = MyBiz.CurrentUser; Non so se siano in tanti ad aver adottato...

GpTiming @ CodePlex

Nato dopo l'idea della piattaforma forum/blog, GpTiming si è reso degno del suo nome spuntando la pole position, o meglio la pole publication, rispetto agli altri due progetti. (continua)

Full Code Archive