Chiunque scriva buon codice sa che l'uso delle costanti è sicuramente auspicabile e io in questo non la penso certamente in modo diverso. In linea di massima le costanti pervadono il codice che scrivo e spesso ormai vi sono situazioni in cui viene automatico farne uso. Credo fermamente però, che vi siano situazioni nelle quali una costante non ha nessun significato; mi è capitato ad esempio di imbattermi in codice scritto da chi considera la "stringa", intesa come una valore costante hard-coded all'interno del codice, come una onta, un peccato originale da cui non si può essere assolti.

Vi sono situazioni in cui il è il contesto in cui viene usato che rende implicitamente un valore "costante" e quindi l'incapsularlo una volta in più non è giustificato. Vi faccio un esempio classico:

   1: public static string WorkingDirectory
   2: {
   3:     string workingDirectory = ConfigurationManager.AppSettings["WorkingDirectory"];
   4:  
   5:     if (string.IsNullOrEmpty(workingDirectory))
   6:         throw new ConfigurationErrorsException(Resources.WorkingDirectoryNotSpecified);
   7:  
   8:     return workingDirectory;
   9: }

In questo esempio l'uso di una stringa hard-coded (WorkingDirectory) è sicuramente ammissibile. In effetti la stringa è incapsulata all'interno di una proprietà e siamo matematicamente certi che sarà l'unico punto in cui stiamo esprimendo tale valore. E' altrettanto vero che questo valore non cambierà mai per tutta la durata del programma perciò questa "costante" è tale perchè è il contesto a renderla tale. Incapsulare il valore "WorkingDirectory" in Consts.WorkingDirectoryName è un plus che ci possiamo sicuramente risparmiare. Intendiamoci, male non ne fa, ma nemmeno bene.

Un'altro caso che mi è capitato di vedere, e invece considero sbagliato è l'uso di costanti per incapsulare le query SQL. Qualcosa del genere per intenderci:

   1: private const string SELECT_CATEGORIES_ORDERED_BY_ID = "SELECT * FROM Categories ORDER BY CategoryID";
   2:  
   3: ...
   4:  
   5: using (SqlCommand command = new SqlCommand(SELECT_CATEGORIES_ORDERED_BY_ID))
   6: {
   7:     // ...
   8: }

Questo uso delle costanti, per quanto a prima vista può sembrare sensato, rende il codice nettamente meno leggibile. Fatico a trovare una ragione per un codice del genere. Se l'intento è di gestire delle query che possano essere diverse perchè magari devono essere rivolte verso diversi RDBMS, non sarà l'uso delle costanti che mi risolverà il problema ma piuttosto una buona architettura ad adapter che mi consenta di scambiare il DAL agevolmente. L'unico risultato apprezzabile sarà che una volta che devo debuggare il codice sarò costretto a saltare avanti e indietro per il codice alla ricerca del valore delle costanti per cercare di capirne il significato.

In linea di massima, se il valore che state scrivendo verrà usato più di una volta è necessario incapsularlo in una costante. Se diversamente state scrivendo un valore una volta, con il sospetto che un giorno potreste usarlo altrove, ecco un altro buon motivo di metterci una costante. Ma se il valore è palese che rimarrà isolato ad una sola occorrenza, allora è già una costante, inutile ribadirlo :)

Mi raccomando, non prendete questo post come una mia personale crociata contro le costanti, è di certo meglio un codice in cui si abusi di esse piuttosto che una sola riga di codice in cui si manchi di usarne una opportunamente. Forse però, se una morale deve essere trovata, pensare a quello che si sta scrivendo è sicuramente la cosa migliore.


Nel corso di una ricerca relativa alla user experience di cui mi sono occupato, mi sono imbattuto in un interessante articolo che risale allo scorso 21 Dicembre 2011. L'articolo, pubblicato su 24ways.org, parla a proposito della semplificazione nel design di un sito web. Voglio citare due passi che mi sono parsi molto significativi:

To paraphrase Einstein, simple doesn’t have to be simpler. In other words, simple doesn’t dictate that we remove the complexity. Complex doesn’t have to be confusing; it can be beautiful and elegant. On the web, complex can be necessary and powerful. A website that simplifies the lives of its users by offering them everything they need in one site or screen is powerful. For some, the greater the density of information, the more useful the site.

e ancora

Simple is not a formula. It cannot be achieved just by using a white background, by throwing things away, or by breathing a bellowsful of air in between every element and having it all float around in space. Simple is not a design treatment. Simple is hard. Simple requires deep investigation, a thorough understanding of every aspect of a project, in line with the needs and expectations of the audience.

L'articolo merita a mio parere una attenta lettura. Molti di voi come me saranno programmatori e sentono di non aver molto a che fare con il design di un sito web, ma tutto sommato saperne qualcosa non è poi così male

Link: http://24ways.org/2011/taming-complexity

tags: - categories:

Domani mattina mi aspetta l'inizio di una nuova esperienza di lavoro, presso un'azienda di Padova. Sapete già che l'ultimo periodo è stato caratterizzato da delle spiacevoli vicissitudini. Questi eventi alla fine mi hanno convinto della necessità di cambiare aria e alla fine domani questo cambiamento sarà concreto.

L'entusiasmo per questo nuovo inizio è accompagnato però dall'amarezza di aver dovuto lasciare dei colleghi, con i quali ho condiviso il periodo più recente e che hanno dimostrato tutto il loro valore nel cercare di rimettere assieme ciò che era rimasto. Gigi, Carlo, Federico e Nicola, meritano tutta la mia stima per aver lottato e contribuito a risollevare le sorti di una azienda che all'inizio tutti davano per spacciata.

Un ringraziamento va anche a Danilo e Stefano, i titolari di Selecta che hanno dimostrato aldilà di ogni dubbio che l'onestà non è una merce da svendere.

A tutti voi un sincero in bocca al lupo.

tags: - categories: News

E' andato online oggi il calendario degli eventi di XeDotNet, per quanto riguarda il semestre che è appena iniziato. Il calendario è denso di eventi come consueto, e tocca una serie di argomenti di prima grandezza per il periodo. Innanzitutto, nel primo evento avremo un incontro sullo sviluppo mobile con HTML5, basato su jQuery Mobile e PhoneGap. Nella continuazione ci sarà modo di parlare di Silverlight 5.0, di Windows 8, di Visual Studio vNext e di argomenti di taglio prettamente pratico come ad esempio la sessione sul costo reale di Azure. Quest'ultima sessione è tenuta da Cristiano, speaker nuovo per il nostro gruppo, ma con una conoscenza profonda di Azure data dall'esperienza sul campo di tutti i giorni.

Il calendari degli eventi è il seguente

10/02/2012 - HTML5 e lo sviluppo mobile
  • Andrea Dottor - ASP.NET e lo sviluppo mobile

  • Davide Senatore - Packaging HTML5 application with PhoneGap

09/03/2012 - Sviluppo client side
  • Andrea Boschin - What's new in Silverlight 5.0

  • Andrea Dottor - Il mondo è sempre più client. ASP.NET e lo sviluppo Client Side

06/04/2012 - Real world experience
  • Cristiano Simionato - Ma quanto costa Windows Azure?

  • Mirco Vanini - REST & .NET Micro FW - A Real Case

04/05/2012 - Uno sguardo a futuro
  • Davide Vernole - Visual Studio vNext - Application Lifecycle Management

  • Andrea Boschin - Sviluppare applicazioni Metro con Windows 8 e WinRT.

01/06/2012 - Playing with gadgets
  • Mirco Vanini - Are you a Gadgeteer?

  • Davide Vernole - Playing with Team Foundation Server

Le iscrizioni sono già aperte e vi prego di iniziare subito a dare la vostra adesione ma anche di avere l'accortezza eventualemente di comunicarci l'evenutale assenza.


"FROM the streets of Tunis to Tahrir Square and beyond, protests around the world last year were built on the Internet and the many devices that interact with it". Così inizia l'articolo del prestigioso NY Times, che mi è capitato di leggere poco fa. A dispetto dell'incipit, l'articolo disserta abilmente sull'opportunità di considerare o meno "diritto umano" l'accesso alla rete Internet, arrivando alla conclusione che ciò non è possibile. Certo non mi sarei aspettato nulla di diverso da un organo di stampa, che tipicamente arroga a se stesso la "libertà di stampa" come un inalienabile diritto, dimenticando che però esso è precluso a chi non ha i mezzi e l'imprimatur di "giornalista" cui tipicamente si accede mediante adesione ad una casta più o meno connessa con ordini professionali e/o editori interessati.

La piu netta contraddizione, a mio parere la si può trovare nella seguente frase: "The best way to characterize human rights is to identify the outcomes that we are trying to ensure. These include critical freedoms like freedom of speech and freedom of access to information — and those are not necessarily bound to any particular technology at any particular time.". Dacchè esiste Internet si è sempre confermato una rete che ha la capacità di premiare perfetti sconosciuti, per la sola capacità di esprimere novità e libertà. Inoltre, e i fatti del nord africa ne sono la perfetta dimostrazione, Internet ha il pregio di divulgare l'informazione in modo capillare e soprattutto di consentire a chiunque di diventare una sorgente di informazione diretta e non filtrata.

Tutto ciò, a mio parere, rende la rete un diritto inalienabile dell'essere umano in quanto essa è l'unico che consente di accedere a informazioni "pure" e soprattutto di poter diventare una sorgente dell'informazione stessa. Stampa, televisione, e radio sono di certo strumenti per veicolare una informazione modirezionale, da chi ha il poter di diffonderla a chi la riceve in modo passivo. La rete invece consente una interazione stretta che fluisce in entrambe le direzioni in modo simmetrico. A mio parere occorrerebbe parlare ormai di libertà di informarsi e di informare, come sinonimo di Internet, anzichè di libertà di stampa. E questo indipendentemente dalla interessata opinione di un arcaico "organo di stampa".


Ero qui seduto mentre le mie "ragazze" si stanno preparando per il cenone di stasera e mi sono reso conto che fra poche ore saremo in un nuovo anno. Di certo il cambio di una cifra sul calendario non inciderà più di tanto sull'andamento della mia vita ma il sapore di "nuovo inizio" di queste ore ben si sposa con quello che mi attendo dal 2012.

Il 2011 non si può certo dire sia stato un anno positivo. Venti di crisi a parte, il mio 2011 è stato dominato almeno per una buona metà da problemi di lavoro che a lungo ho trascurato in precedenza - per pigrizia lo ammetto - finché alla fine verso fine Maggio si sono concretizzati in uno sconvolgimento societario dell'azienda per cui lavoravo che ha avuto pesanti ripercussioni sul mio buon umore. Intendiamoci, non si è trattato di timore di poter rimanere disoccupato - timore che peraltro poteva anche non essere del tutto infondato visti i tempi - ma soprattutto del fatto che sono stato messo nelle condizioni di dover scegliere tra il mio lavoro e i miei principi. Alla fine hanno vinto i miei principi ma non è stata una facile decisione, tanto è vero che altri nelle stesse condizioni si sono piegati alle più bieche nefandezze al grido di "salviamo il posto!", seguendo una compagine societaria i cui scrupoli sono del tutto svaniti.

Non faccio nomi per ovvi motivi - non mi va di ergermi a giudice e boia e sono certo che le malefatte saranno prima o poi pagate - ma se mi incontrate in giro non fatevi remore a chiedere spiegazioni e sarò lieto di raccontarvi le vicende e i protagonisti di questo periodo davvero allucinante.

Archiviato il 2011, la speranza di un migliore 2012 è probabilmente malcelata. Ed ecco l'occasione di mettere giù un po di buoni propositi.

1) tanto per cominciare l'idea di tornare a bloggare con regolarità ormai mi solletica da tempo. In parte su http://www.silverlightplayground.org (che per inciso ora è anche http://www.xamlplayground.org) per gli aspetti tecnologici, ma anche un sano bloggare del più e del meno su http://blog.boschin.it

2) ritornare anche a twittare. dopo le vicende di questa seconda parte dell'anno twitter mi ha visto diradare l'attività. Non tornerò di certo con l'assiduità di prima ma twitter è una delle "cose buone" della rete.

3) cancellarmi da facebook... tanto è perfettamente inutile e la mia continua non-presenza lo testimonia.

4) perdere un po' di peso... lo so è una vana speranza...

5) migliorare la mia concentrazione su quello che sto facendo. mi capita troppo spesso di iniziare a fare qualcosa e poi cedere alle richieste di qualcuno per "motivi di urgenza".

Non è molto ma è inutile che mi prefigga di diventare un fotomodello... non ce la farò mai Con la lingua fuori

Auguro perciò a me stesso un 2012 che mi  porti questi risultati e magari anche altri. E nel frattempo auguro anche a voi un anno in netta positività.

Buon 2012 a tutti!

tags: - categories: News

12273734686m4ggXNon sono mai stato religioso ma da sempre il Natale ha un certo effetto su di me. Saranno le luci, saranno I regali, sarà che la gente perlomeno fa finta di essere migliore di quello che in realtà è, ma rimane il fatto che la "cerimonia" del Natale mi regala delle belle serate in compagnia, il reincontrare I conoscenti e, perchè negarlo, la possibilità di fare e farsi dei bei regali.

Perciò mi appresto anche quest'anno ad espletare le varie fasi di questo lieto periodo. I biscotti dell'8 dicembre sono già archiviati, buona parte dei giri nei negozi affollati, la preparazione della cena del 24 e l'incontro con la famiglia nel pranzo del 25 dicembre.

Già perchè io sono uno dei "fortunati" che dalla parte della moglie festeggia il cenone di pesce della vigilia mentre dalla parte dei propri genitori ha acquisito la tradizione del pranzo di Natale. Poi, nel pomeriggio mi regalerò un meritato riposo guardando qualche stupido programma televisivo, nella penombra del soggiorno illuminata solo delle luci dell'albero (quest'anno poi sono decisamente troppo brillanti) certo che nel frattempo mia figlia si godrà la novità del suo "tecnologico" regalo di quest'anno.

Sarà un Natale un po' scontato forse, ma in realtà la bellezza di queste ore non è nelle cose che ci regaleremo, non sarà nei lauti pasti ma sarà soprattutto nel perpetuare una tradizione che mi fa affiorare i ricordi di bambino, quando l'atmostera del Natale iniziava ben prima dell'inizio delle vacanze invernali per concludersi oltre la befana.

Voglio perciò augurare a tutti proprio questo; non c'è giorno dell'anno in cui non ci si possa regalare qualcosa, non c'è giorno dell'anno in cui non ci si possa rimpinzare di leccornie ma la preziosa combinazione di tranquilla routine familiare è qualcosa che sono il Natale ormai ci può riservare.

Auguri a tutti!

tags: - categories: News

Anche quest'anno, il quinto di fila, mi è giunta la notizia che sono stato nominato MVP per la expertise Silverlight. Sembrerà scontato ma la gioia di ricevere questa notizia, e l'ansia dell'attesa rimangono sempre le stesse, ma in particolare per me quest'anno il rinnovo del titolo ha un significato particolare per il momento in cui è giunto. Ma aldilà dei significati più o meno reconditi noto anche una divertente coincidenza tra la versione 5.0 del mio titolo MVP e la versione 5.0 dell'ultima beta di Silverlight.

Lasciatemi ringraziare il team di @silverlight per il suo prezioso lavoro e per il livello di coinvolgimento eccezionale che giorno dopo giorno ci fa sentire completamente partecipi del successo di questa tecnologia il cui futuro è sicuramente di primo piano.

tags: - categories: News

Le notizie che vengono dal giappone in queste ore ripropongono con inattesa puntualità i problemi che nel lontano 1986 avevano convinto i più a rinunciare all'energia sporca, prodotta dalla fissione nucleare. Sfortunatamente la scarsa attitudine dei nostri governanti ad ascoltare la voce dei propri cittadini ha portato a superare l'attualissimo referendum anti-nucleare tenuto in seguito alla catastrofe di Chernobyl e ad avviare una miope corsa al nucleare che al momento apre la strada a più dubbi di quelli che risolve

  1. L'inizio dell'attività delle centrali non potrà avvenire prima di 10 anni, tempo nel quale un investimento dei fondi nella ricerca sul solare di certo darebbe maggiori e più puliti risultati
  2. L'individuazione delle zone in cui collocare le centrali nucleari promette una battaglia senza quartiere sostenuta dai cittadini che abitano nelle immediate vicinanze delle zone prescelte e delle loro amministrazioni comunali e provinciali
  3. Peggio ancora il problema dello stoccaggio delle scorie nucleari. Attualmente siamo ancora incapaci di stoccare e/o smaltire le scorie prodotte dalle vecchie centrali italiane, chiuse dopo il referendum, ed è palese che iniziare una nuova e massiccia produzione non può che minare ulteriormente il delicato ecosistema del paese.

Credo che non vi sia alcun dubbio che la scelta del nuclare deve essere fermata. Per la salute nostra, dei nostri figli e, con un respiro più ampio, del nostro già martoriato pianeta. Spero che chiunque crede che ciò che ho riassunto in queste poche righe scritte in fretta sia vero, si faccia promotore nel suo piccolo per arrivare all'abbandono definitivo dell'energia nucleare in favore dell'unica possibile soluzione che salvi il nostro pianeta anche dalla schiavitù del petrolio. Il sole.


In molti mi hanno chiesto i link alla registrazioni dei Virtual Meeting. Vi riepilogo perciò in questo post i riferimenti alle registrazioni che sono riuscito a traslocare dal vecchio hosting

AppFabric - Andrea Colaci
http://www.xedotnet.org/webcasts/appfabriccache/ReplayMeeting.htm
Dynamic Languages Runtime - Marco Parenzan
http://www.xedotnet.org/webcasts/dlr/ReplayMeeting.htm
Micro Framework - Mirco Vanini
http://www.xedotnet.org/webcasts/microfw/ReplayMeeting.htm
F# - Marco Parenzan
http://www.xedotnet.org/webcasts/fsharp/ReplayMeeting.htm

Grazie a tutti per l'interesse dimostrato

tags: - categories:

In seguito alla pubblicazione del nuovo sito della , sono per un po' tornato alle origini e sto cercando di seguire il posizionamento delle pagine su Google. Una cosa che mi ha divertito molto quest'oggi è il risultato della indicizzazione di un PDF che per un po' di tempo mi ha fatto scervellare. Ecco una immagine di come appare al momento l'indicizzazione:

Capture

In compagnia di , abbiamo cercato di scoprire l'origine del problema, che appariva piuttosto incomprensibile dato che quella frase non è per nulla presente nel PDF. Questo finchè doc, ha provato a fare copia e incolla del testo su notepad e l'arcano è da subito diventato chiaro. Per creare una sorta di effetto profondità, chi ha creato il PDF ha sovrapposto numerose volte la stessa frase. Questa sovrapposizione è mal digerita da Google che vede il tutto come una frase unica con le lettere ripetute più volte.

Da questo se ne può ricavare una morale. Quando pubblicate sul web, provare sempre a ragionare come un BOT e semplificate il più possibile, non solo in funzione del peso delle pagine ma anche in funziona di quello che il BOT leggerà sulla vostra pagina.


phone_crashProbabilmente a prima vista il titolo di questo post può sembrare anacronistico, ma davvero più passa il tempo e più credo che l'abolizione della parte vocale della telefonia sia un grande traguardo, che probabilmente non raggiungeremo mai, ma che senza dubbio migliorerebbe nettamente la qualità della nostra vita.

Mi spiego. Suona il telefono: sto facendo altro, probabilmente qualcosa di importante, ma a causa di quello squillo insistente sono costretto a rompere la mia concentrazione per alzare la cornetta e rispondere a quello che è nei fatti un importuno intruso che, per quanto importante sia la sua necessità, mi sta disturbando. Credo nessuno possa aver nulla da obiettare se affermo che il telefono è uno strumento di disturbo "legalizzato". Chi di voi si sognerebbe di avvicinarsi a due persone che discutono e interromperle gratuitamente e improvvisamente mettendosi ad urlare? Se vi va bene il risultato sarà un bel vaffa... o sbaglio? Con il telefono invece questo si può fare, per via del fatto che siamo giustificati dall'impersonalità del gesto.

E' ovvio che l'interazione verbale tra le persone non è in discussione, ma quello di cui dovremo cercare di riappropriarci è la gestione del nostro tempo, e a mio parere l'unico sistema è quello di spostare al maggior parte delle interazioni in forma asincrona e lasciare la forma sincrona a momenti ben specifici e concordati. Il mio sogno sarebbe un telefono che non squilla, che non ha bisogno di squillare perchè nel momento in cui cui "connettiamo" siamo tutti ben coscenti che dobbiamo parlarci e ci siamo tutti.

La comunicazione asincrona non è un vantaggio solo dal punto di vista delle interruzioni indesiderate. Ad oggi non esiste un modo di "cestinare" lo SPAM telefonico. Giorno per giorno siamo disturbati da call-center pagati per chiamarci, rubarci minuti del nostro tempo, per proporci acquisti di cui nel 99% dei casi non abbiamo assolutamente bisogno. Non c'è dubbio che per quanto fastidioso possa essere lo SPAM nella nostra casella di posta elettronica, abbiamo a disposizione tutti gli strumenti per dirottarlo verso un opportuno cestino mentre lo SPAM che corre sul filo del telefono deve forzatamente essere filtrato da noi stessi.

E il telefono così come lo conosciamo, sarebbe meglio sparisse. Il telefonino deve diventare qualcosa di più simile a questo: http://www.getpeek.com/ L'unica eccezione ammessa sono le chiamate d'emergenza. Punto.