My business card

Tutte le persone che possiedono una qualche certificazione Microsoft possono da questo sito crearsi una business card virtuale:

Ecco la mia:

 myVirtualBussinessCard  

Si lo so, è una certificazione che andrebbe aggiornata, ma sinceramente parlando il suo valore oggigiorno non è più quello di una volta.

Comunque non è detto che prima o poi non l’aggiorni…..

.NET Campus – Roma 13-03-2010

image Dietro indicazione di  un amico, e spinto soprattutto dalla voglia di riprendere a frequentare eventi e workshop sulle ultime tecnologie Microsoft, ecco che mi annoto a calendario un evento molto interessante al quale non mancherò di assisterere.

Sto parlando di .NET Campus. Tratto dal sito dell’evento:

“.NET Campus è un evento per sviluppatori organizzato dal gruppo DevLeap in collaborazione con il gruppo dei Microsoft Student Partner e le Community più attive per fornire a studenti e aziende un’intensa mattinata di sessioni tecniche presso l’università Roma Tre. Insieme alle sessioni tecniche orientate alle novità che ruotano intorno al mondo .NET, la giornata rappresenta un momento unico dove aziende e studenti possono incontrarsi per confrontare i loro mondi e unire le loro esperienze

Questa è la mia agenda provvisoria:

image image image
image image  

 

Ci si vede all’evento.

L’evento Application_Start ed il suo corretto utilizzo

Regola importante in una applicazione ASP .NET:

durante l’evento Application_Start dovrebbero essere assegnate solo variabili statiche e mai variabili d’istanza; ciò è dovuto al fatto che questo evento viene sollevato solo 1 volta durante il ciclo di vita dell’applicazione e, insieme all’evento Application_End, non è legato alla istanza in esecuzione della classe HttpApplication ma, al contrario, entrambi sono considerati eventi speciali.

Infatti, ogni applicazione ASP .NET in esecuzione è associata ad un oggetto HttpApplication, capace di gestire una richiesta alla volta. Durante il suo ciclo di vita possono essere create più istanze della classe HttpApplication, ognuna delle quali in ottica di ottimizzazione delle performance può essere riciclata. Tuttavia, i due eventi sopra citati non vengono sollevati per ogni istanza creata di HttpApplication ma, come detto, solo 1 volta durante la vita di una applicazione.

Un membro d’istanza creato in Application_Start quindi sarebbe visibile solo per la prima istanza creata di HttpApplication e non anche per le successive.

Viceversa, l’evento sollevato per ogni istanza creata di HttpApplication è invece Application_Init.

Le conferenze a cui mi piacerebbe assistere

Quest’anno le conferenze internazionali a cui vorrei tanto assistere sono:

image

SQLBITS – La conferenza su SQL Server “made in England”, evento a cui ho già partecipato nell’edizione del 2008 che quest’anno si terrà direttamente a Londra, precisamente al Church House Conference Centre in Westminster il prossimo venerdì 16 Aprile (evento free);

image Microsoft Tech-Ed North America 2010, evento che non ha certo bisogno di presentazioni, che quest’anno si terrà a New Orleans dal 7 al 10 giugno prossimo.
image  

 

Speriano di averne l’opportunità, altrimenti mi devo “accontentare”, si fa per dire, di un evento made in Italy, a cui ho già assistito nella edizione del 2007, ovvero la DevLeap Conference 2010, chè si terrà a Milano il 18-19 e 20 Maggio prossimi, che in quanto a conferenze tecniche di spessore qui in Italia non è seconda a nessuna, a mio modesto parere.

Se qualche lettore ha in programma di assistere a queste conferenze, tutte o in parte, può tranquillamente contattarmi mediante il form contact di questo blog.

Installazione di Visual Studio 2010 RC fallita - File “vs_setup.msi is invalid”

Installando Visual Studio 2010 RC Premium ottengo questo errore bloccante:

“File vs_setup.msi is invalid.”

Sono in attesa di una risposta dal supporto Microsoft, dove ho aperto un ticket.

Chissà se qualche lettore di questo blog, occasionale o no, ha già una risposta a questa issue.

Ci spero!

 

UPDATE: La soluzione a questo inconveniente, che pochi sventurati al mondo hanno avuto (cosa che ho riscontrato leggendo i forum Microsoft) è scaricarsi direttamente il file ISO ed installare il tutto da lì, e non utilizzare invece il download dei 4 file separati che compongono l’ISO stesso.

Anobii, la mia libreria virtuale

Finalmente ho modo di mettere un pò in ordine la mia libreria, non fisicamente ma almeno virtualmente. Ho infatti creato su Anobii, un social network incentrato totalmente sui libri, la mia libreria virtuale dove piano piano organizzerò per argomento i numerosissimi libri in mio possesso, tecnici e non, onde consentire anche ai più curiosi di darci una sbirciatina per curiosare cosa conservo gelosamente sui miei scaffali.

Qui è accessibile il mio scaffale virtuale, per il momento ancora molto limitato.

Installare Windows 7 da USB

Utile tool per installare Windows 7 da drive USB.
In sostanza viene copiata l'immagine ISO della installazione di Win7 su un supporto USB rendendo lo stesso bootable, in modo da poter far partire il PC e lanciare l'installazione anche su macchine senza sistema operativo.

Java meglio di .NET ?

Il titolo di questo post è volutamente ironico, ed affronta un argomento all'ordine del giorno in ogni ambiente di lavoro e/o community in cui si ha a che fare con le tecnologia legate al mondo del software.
In questi ambienti capita spesso infatti di sentire o di partecipare a discussioni circa il fatto che quella o quell'altra tecnologia prevale a parità di contesto di utilizzo, es. Java è meglio di .NET,  Oracle è meglio di Sql Server, o viceversa.
Questi dibattiti, per quello che è la mia esperienza sul campo, sono spesso e volentieri condizionati dalla unilaterale conoscenza di una particolare tecnologia, e raramente colui che l'appoggia ha una consolidata esperienza su entrambe le piattaforme.
Ho assistito molto spesso a discorsi tipo:

"questo pezzo di codice se fosse scritto in Java non avrebbe quel bug...",

oppure

"se questa query fosse in PL-SQL le prestazioni sarebbero sen'altro migliori".

In questo interessantissimo post di Scott Guthrie in merito all'ultimo dibattito tecnologico in essere tra gli sviluppatori web (meglio ASP .NET Web Forms o ASP .NET MVC ?), è sintetizzato il mio pensiero sull'argomento:


"Great developers using bad tools/frameworks can make great apps. Bad developers using great tools/frameworks can make bad apps. Be very careful about making broad assumptions (good or bad) about the quality of the app you are building based on the tools/frameworks used".


Sono le persone che partecipano allo sviluppo a rendere vincente o perdente un software, a prescindere dalla particolare tecnologia applicata, ed è un grave errore pensare che solo perchè si è scelto di utilizzare l'ultima moda tecnologica un progetto software debba per forza essere vincente.

Entity Framework – Come impostare una relazione

Con Entity Framework è possibile referenziare tra loro entità in modo molto semplice.

Supponendo di avere l’entità Customer e l’entità Category, che rappresentano rispettivamente un cliente e la sua categoria di appartenenza, nel data model l’oggetto Customer conterrà una proprietà chiamata Category di tipo Category.

In fase di creazione di un nuovo oggetto Customer è necessario associare la Category di appartenenza scelta dall’utente, molto probabilmente mediante una dropdown list contenente la lista delle categorie (DataTextField), e l’Id delle stesse (DataValueField).

Istintivamente, verrebbe di fare una cosa di questo tipo:

   1: CustomerEntity customerEntity = new CustomerEntity();
   2: customer.Category = new Category() {Id=1, Description="New Category"};
   3: customerEntity.AddToCustomer(customer);
   4: customerEntity.SaveChanges();

che però non funziona in quanto solleva una eccezione del tipo “An entity object cannot be referenced by multiple instances of IEntityChangeTracker”.

Per poter funzionare la reference ha bisogno esclusivamente dell’Id della Categoria di appartenenza del Cliente, e non dell’intero oggetto Category, anche perchè per ricrearlo interamente potrebbe essere necessario accedere al database di memorizzazione.

Occorre semplicemente creare un oggetto EntityKey ed associarlo all’oggetto Customer corrispondente, in questo modo:

   1: int idCategory  = 1; // in un caso reale è letto da un controllo della pagina web
   2: CustomerEntity customerEntity = new CustomerEntity();
   3: IEnumerable<KeyValuePair<string, object>> entityKeyValues =
   4:     new KeyValuePair<string, object>[] {
   5:     new KeyValuePair<string, object>("Id", idCategory) };
   6: EntityKey key = new EntityKey("Entities.Category", entityKeyValues);
   7: customer.CategoryReference.EntityKey = key;
   8: customerEntity.AddToCustomer(customer);
   9: customerEntity.SaveChanges();

ASP .NET 4.0 #3 Ciò che non è cambiato

ASP .NET 4.0 è ormai alle porte, con la versione beta è possibile scoprire le novità rispetto alla versione precedente, e non sono certamente poche, ma a livello di controlli lato server ce ne sono alcuni praticamente immutati rispetto alle precedenti versioni. Mi riferisco ad esempio al controllo Http File Upload, rimasto identico nelle varie versioni di ASP .NET che si sono succedute. Questo controllo soffre di qualche problema e non è certo il massimo in ottica web 2.0, ovvero su siti dove è richiesto una elevata user experience.

A meno di non utilizzare un controllo di terze parti probabilmente a pagamento, occorre fare i conti con il look del controllo rimasto identico nel tempo, con l’assenza di funzionalità oggi richieste quali ad esempio la barra di progressione dell’upload in corso, e soprattutto con un fastidioso comportamento “by design”, ovvero la perdita del contenuto (il nome completo di percorso del file scelto) ad ogni postback della pagina; quest’ultima caratteristica è resa necessaria da motivi di sicurezza.

Se la pagina dispone di altri controlli che generano un postback, es. una dropdownlist, l’unico escamotage è quello di rendere il controllo File Upload l’ultimo controllo che genera postback in ordine di visualizzazione, in modo da invogliare l’utente ad interagire per ultimo con esso. In caso contrario, un postback della pagina provocherà la perdita del suo contenuto, cioè del nome del file scelto, ed ovviamente obbligherà l’utente a scegliere nuovamente il file da inviare.

L’evento page load è eseguito 2 volte

Convertire un progetto ASP .NET dalla versione 1.1 ad una versione successiva del .NET Framework nasconde un inconveniente a cui occorre porre rimedio manualmente.

L’inconveniente è dovuto alla introduzione delle partial class a partire dalla versione 2.0 del .NET Framework, in contrapposizione al codice generato dal designer nella versione 1.1.

Questo fa si che importando il codice sorgente nella nuova versione utilizzata ci si ritrovi, ad esempio, con un event handler come questo nel metodo InitializeComponent

   1: private void InitializeComponent() 
   2: { 
   3:     this.Load += new System.EventHandler(this.Page_Load); 
   4: }

Questo innocente codice derivante dalla conversione fa in modo che l’evento Page Load sia generato 2 volte, una volta dall’handler presente nella partial class ed una volta da quello presente nel metodo InitalizeComponent.

Per eliminare questo fastidioso inconveniente è sufficiente rimuovere l’handler presente nel metodo InitializeComponent

Link utili della settimana #4

  1. 1. IE Tester 0.4.2 Ottimo tool gratuito per testare funzionalità di layout nelle varie versioni di Internet Explorer. Peccato che manchi un supporto per altri browser.
  2. 2. Come installare Windows 7 da drive USB

</xplayn.org>

Questo blog cambia nome, veste grafica e motore di blogging. Causa perdurata inattività, ho deciso di chiudere il sito xplayn.org, da me aperto insieme all'amico Francesco Quaratino.

Il nuovo nome, coding4art.com è ovviamente un omaggio alla programmazione software vista come un'arte o più precisamente un'attività ingegneristica e non artigianale. Si parla tanto di metodologie applicate alla produzione software, Agile, waterfall o MSF che sia, ma spesso e volentieri questa viene vista come un'attività artigianale, espletata senza o quasi nessuna metodologia, da programmatori senza esperienza specifica nella particolare tecnologia scelta, senza nessuna cura per il codice sorgente, senza nessuna best practice o guidelines applicata o peggio ancora con varie best practice mischiate tra loro, senza nessuna pianificazione riguardante argomenti come sicurezza, performance, scalabilità, manutenibilità ma con un unico obiettivo in testa, ovvero creare nel più breve tempo possibile una applicazione in cui i requisiti utente siano soddisfatti, ovvero che funzioni, e basta, con le conseguenze che questo approccio comporta.

I miei articoli presenti su xplayn.org li ho inseriti nella apposita sezione articoli su questo blog, dove conto di scriverne altri, tempo permettendo ovviamente.

Come nuovo motore di blogging ho scelto SubText, ben fatto e molto veloce, parecchio più veloce di Community Server, a mio avviso, con una fantastica funzionalità già inclusa, ovvero la possibilità di importare un intero blog (commenti compresi) precedentemente esportato, il tutto mediante lo standard BlogML.

L'RSS feed è comunque invariato, poichè utilizzo il feed esterno fornito da FeedBurner e quindi il blog è accessibile negli RSS Aggregator senza nessuna modifica.

Questo post vuol essere anche una promessa a me stesso di curare di più il mio blog, strumento in cui credo moltissimo, e di arricchirlo anche con più articoli tecnici.

Visual Studio 2010 Beta 2

Disponibile il download per tutti

Link utili della settimana #3

- Doloto, time optimizers for Ajax applications

- AutoMapper, framework per mappare automaticamente e quindi creare un oggetto semplice, es. un DTO, mediante un oggetto complesso come una entità di dominio

- WPF tutorial;

- Microsoft Ajax Library (Preview 6) e Microsoft Ajax Minifier ( Microsoft Ajax Javascript Library -> nuova e migliorata sintassi imperativa, miglior integrazione con JQuery, nuovo client script loader, Minifier Tool, per ridurre le dimensioni dei file javascript scaricati sul client mediante minification)

Link utili della settimana #2

 

  1. Descrizione di Unity, il framework di Inversion of Control e Dipendency Injection sviluppato dal team di P&P (qui è presente la versione 1.2 per Silverlight)
  2. 45 passi per diventare agili
  3. xVal, libreria per la validazione client side di applicazioni ASP .NET MVC
  4. Anti XSS Library ver. 3.1
  5. CodePad .NET 1.0 Beta 2, un editor leggero per provare spezzoni di codice
  6. Strongly typed session variables in ASP .NET MVC
  7. Visual Studio 2010 e .NET Framework 4.0 Training Kit - May preview

Link utili della settimana #1

- MVVM Toolkit Light

- Ajax Control Toolkit release 30930 (30 sett 2009);

-thinktecture.WSCF.blue (Contract first WCF Tool)

- The ModelView-ViewModel design pattern for WPF

- Code Run (questo è davvero incredibile, si evincono chiaramente le potenzialità del Cloud Computing).  Trattasi di un IDE Online, con cui è possibile sviluppare progetti .NET direttamente nel browser, potendo anche disporre di un ambiente di host on the cloud, su cui è possibile effettuare il deployment delle proprie applicazioni sviluppate on line.

- Bonnie .NET API per sviluppare applicazioni che usano la crittografia della informazioni o certificati X.509

ASP .Net e i thread secondari

Interessantissimo post di Stefano Pronti del nuovo blog MSDN di Supporto Tecnico agli Sviluppatori, che spiega le disastrose conseguenze di non richiamare il metodo Dispose su risorse unmanaged, utilizzate all'interno di una web application.

Per farla breve, le risorse unmanaged utilizzavano un thread secondario rispetto a quello che prende in carico la web request, ed in questo thread secondario veniva sollevata una eccezione non gestita durante la fase di finalizzazione del garbage collector, che, come è noto, viene eseguito in un thread diverso.

In questo caso il comportamento di ASP .NET a partire dalla versione 2.0 è quello di interrompere immediatamente il processo in esecuzione, con conseguenze facilmente immaginabili.

Ho già parlato qui di questo comportamento di ASP .NET e di come sia possibile utilizzare la modalità pre-versione 2.0 di gestione delle eccezioni non gestite sollevate all'interno di thread diversi.

Anche a me è capitato di dover "impazzire" con una applicazione in produzione, abbastanza vasta, che soffriva di frequenti ed improvvise cadute della sessione corrente, con enorme disagio degli utenti.

Nel caso specifico non è stato indispensabile attaccare un debugger per ottenere il dump della memoria al momento dell'eccezione, è bastato debuggare il codice, che non conoscevo neanche bene, e scoprire che venivano creati thread aggiuntivi (!?) il cui codice, in particolari circostanze, sollevava l'eccezione fatale che provocava il riavvio del worker process.

Link utili della settimana

  1. Descrizione di Unity, il framework di Inversion of Control e Dipendency Injection sviluppato dal team di P&P (qui è presente la versione 1.2 per Silverlight)
  2. 45 passi per diventare agili
  3. xVal, libreria per la validazione client side di applicazioni ASP .NET MVC
  4. Anti XSS Library ver. 3.1
  5. CodePad .NET 1.0 Beta 2, un editor leggero per provare spezzoni di codice
  6. Strongly typed session variables in ASP .NET MVC
  7. Visual Studio 2010 e .NET Framework 4.0 Training Kit - May preview

i4o (ovvero index for objects)

Per chi (come me) utilizza LINQ  questo progetto presente su Codeplex è senz'altro interessante.

Come è noto LINQ  effettua  le ricerche in modo sequenziale, cosa che su collezioni con parecchi items può dar luogo ad un degrado delle prestazioni.

Questo progetto si prefigge come obiettivo quello di dotare LINQ della ricerca indicizzata degli elementi, che, stando a quanto riportato nella descrizione del progetto, è in grado di rendere le query oltre mille volte più veloci rispetto alla ricerca sequenziale.

Il progetto è attualmente in Beta 3, e non ci sono rilasci pianificati.

Sarebbe interessante da provare (avendone il tempo ! smile_regular).

Se qualcuno lo ha già fatto sarei lieto di leggerele impressioni di utilizzo.

«March»
SunMonTueWedThuFriSat
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910