gennaio 2007 Entries
Architecture Journal e le applicazioni modulari

Considero Architecture Journal una pubblicazione veramente di alto livello, che affronta argomenti complessi con una grande competenza. L'ultimo numero è dedicato alle Composite Application, con uno sguardo a ciò che le tecnologie Microsoft ci mettono a disposizione oggi (leggasi Office 2007, Smart Client Software Factory e Composite UI Application Block).

Per chi non fosse abbonato alla rivista cartacea, oltre l'ovvio consiglio di rimediare a questa lacuna (è addirittura FREE!!), l'invito è di tenere d'occhio questa pagina: attualmente son presenti solo due articoli, a breve verranno pubblicati anche quelli che restano.

Ciao :-)

Mamma mia che weekend!!

E' stata dura, non lo nascondo, ma è stato anche un grandissimo piacere scorrazzare per mezza italia per partecipare alla cena dell'asino! Peccato che proprio questa volta in cui anch'io ero presente, non sia stato preparato un loghetto, l'avrei piazzato nel blog con tanto piacere!!

Scherzi a parte, ottima compagnia, pensate, c'era persino una donna!! Io e Lorenzo eravamo una sorta di buco nero per il cibo... qualsiasi cosa commestibile ci si avvicinasse, spariva e non tornava più indietro (peccato, anzi, fortuna che invece per il vino me la sia dovuta cavare da solo smile_teeth)!! E ora ho anche una maglietta di Sql Server 2005, ma non ditelo in giro!!

Al ritorno (con partenza da Sirmione all'una inoltrata) io e Janky in auto eravamo a pezzi, ma nonostante tutto si è chiacchierato di tante cose: gnocca, Linq, gnocca, musica, gnocca, NHDomainMapper, gnocca, e così via...

Dormito a casa del buon Sudano, sveglia il giorno dopo per colazione (offerta da Janky) e poi pranzo con il Saltarello (con caffé offerto da lui, mado' che scroccone). Cosa dire... con il presidente si è parlato di Model Driven Design, Linq, NHibernate, sentenze dell'antitrust, e robe varie, peccato che io e Giancarlo ci distraessimo di tanto in tanto, ammirando i fantastici cesti di vimini e padelle per paella appesi qua e là nel locale (ragazzi che posto, dei cesti in vimini BELLISSIMI, soprattutto ehm... di profilo, poi c'era un cesto in vimini BIONDA che mi ha totalmente rincogl...ito smile_whatchutalkingabout).

Serata invece passata con Igor e Omar "gemelle Kessler" Damiani, al cinema Medusa di Rozzano, mangiando sushi (sì, a Igor e Omar piace il sushi, non ci avrei scommesso 2 lire, invece è così) per poi guardare Blood Diamond con di Leonardo "so' figo so' ganzo" Di Caprio e gironzolare un po' qua e là.

Stamane, invece, sveglia senza orario e partenza alla volta di Teramo, ma non prima di un'altra colazione scroccata al Janky smile_teeth!! Neanche un'anima in autostrada (credo di aver battuto il mio record di percorrenza), ma nonostante tutto son discretamente a pezzi. Peccato, domani si torna al lavoro di tutti i giorni, vi sbrigate o no ad organizzare la cena in valtellina? smile_wink

4 Comments Filed Under [ Off topic ]
Stasera la chat sugli ORM

Ancora grazie ad Emanuele per aver pensato a questa iniziativa. Farò di tutto per non mancare, perché l'argomento mi appassiona tantissimo (oltre che essere di estrema attualità).

Appuntamento alle ore 21, le modalità di partecipazione sono descritte in qui.

[NHibernate] Session.Get o Session.Load ?

L'interfaccia ISession di NHibernate mette a disposizione due metodi per recuperare una entity da DB a partire dal suo identificativo, ossia ISession.Get e ISession.Load.

La prima differenza che salta all'occhio è che, nel caso l'oggetto voluto non esista, Get ritorna una null-reference, mentre Load solleva una ObjectNotFoundException. Molto più importante, secondo me, è però il fatto che, nel caso in cui il tipo sia configurato come Lazy Initializable (quindi attributo Lazy="true" nel mapping della classe), Session.Load restituisce il proxy e non l'oggetto stesso.

E' un aspetto molto comodo tutte le volte in cui abbiamo bisogno di una reference ad un oggetto di cui non conosciamo altro che l'Id (ad esempio perché ci proviene da una DropDownList). L'uso di Session.Load, in questo caso, ci permette di ottenere questa reference senza passare per il database (o per la cache); ovviamente non sarà riferita all'oggetto vero e proprio, che non viene caricato finché non proviamo ad accedervi, però è comunque ritenuta valida da NHibernate ai fini della persistenza.

Attenzione, però, a due subdoli inconvenienti. Intanto se usiamo Session.Load non è assolutamente detto che il tipo restituito sia ciò che ci aspettiamo, quindi MAI fare un test del genere

myObject = session.Load<MyObjectType>(id); if (myObject.GetType() == typeof(MyObjectType)) // do something

perché potrebbe avere risultati non predicibili; è molto più corretto scrivere

if (myObject is MyObjectType) // do something

Inoltre bisogna sapere che, nel caso in cui l'oggetto sia configurato per il LazyLoad e l'id non esista, la ObjectNotFoundException verrà sollevata al primo utilizzo dell'oggetto stesso, e non in corrispondenza del metodo Session.Load.

Morale della favola: se si è ragionevolmente sicuri che l'id esista, usate pure Load. Ma se lo fate, state attenti perché è comunque più complesso da gestire.

Technorati tags:
Add Comment Filed Under [ NHibernate ]
[70-526] Lo preparo a tempo di record

Vediamo se riesco... dato che comunque mi sembra piuttosto simile al vecchio 70-316 che ho superato circa un annetto fa, ho pensato di dare un'accelerata drastica ai miei studi e sostenerlo entro il mese di gennaio. Chissà se ce la farò!

In ogni modo, ho appena acquistato i test su MeasureUp; cavoli, certo che 55€ per la versione online di 30gg non è proprio a buon mercato!!

3 Comments Filed Under [ .Net 2.0 ]
La risposta di Microsoft a YouTube

Ho da poco ricevuto un invito per partecipare alla fase di test di Soapbox, il portale con cui Microsoft ufficialmente sfida YouTube. C.p.l.

3 Comments Filed Under [ Misc ]
[NHibernate] Nuovo connection model, cosa cambia?

Janky ha scritto in questo post che una delle novità della nuova beta di NHiberante 1.2.0 è il nuovo connection model. Qual è la differenza?

Piccola premessa: è (ed era) possibile fornire alla session una propria connessione, creata esternamente a NHibernate, quindi; in questo caso sarà sempre responsabilità dell'utente gestirne il ciclo di vita.

E nel caso (più comune) in cui lasciamo fare a NHibernate?

Prima di beta 3

La connessione veniva aperta alla prima occasione in cui si rendeva necessaria un'interazione con il DB e da quel momento restava aperta fino alla dispose della Session o ad una chiamata al suo metodo Close(). In questo caso, quindi, era consigliato utilizzare la session all'interno di un blocco using secondo il pattern

  1. Creo l'oggetto session
  2. get/update/save di un oggetto
  3. apporto le modifiche
  4. invoco il Flush() (o meglio il Commit() della transazione)
  5. invoco Session.Dispose()

Chi era presente al workshop di DotNetMarche, ha avuto modo di vedere che tutti gli esempi che io e Giancarlo abbiamo mostrato, seguivano bene o male questa sequenza.

Dalla beta 3

La connessione viene aperta alla prima occasione in cui è necessario e viene chiusa immediatamente dopo aver terminato l'esecuzione delle operazioni scheduled. Ovviamente non ci sono penalizzazioni a livello di performance grazie al connection pooling. Il vantaggio di questo approccio è che, a tutti gli effetti, ci permette di tenere in vita la Session per più tempo, senza per questo incorrere in inutili sprechi di risorse.

Add Comment Filed Under [ NHibernate ]
Applicazioni ASP.NET 1.1 su IIS 7.0 e Vista

Stavo installando Cuyahoga e mi son reso conto che l'hosting di applicazioni ASP.NET sotto IIS 7.0 e Windows Vista richiede un pizzico di attenzione in più rispetto alla norma. Per chi si trovasse con una necessità analoga, segnalo che gli step da eseguire sono:

  • Installare il .NET Framework 1.1 e relativo SP1 (indispensabile a meno di non voler vedere il worker process di IIS7 crashare ad ogni richiesta di pagina)
  • Creare una cartella applicazione sotto IIS7 e mapparla sulla cartella del sito
  • Come application pool, selezionare ASP.NET 1.1
  • A questo punto, ogni richiesta di pagina genererà un errore perché per default l'estensione ISAPI di ASP.NET 1.1 non è abilitata, quindi click sul treeview in corrispondenza del nodo principale, selezioniamo ISAPI and CGI Restrictions e scegliamo di attivare anche ASP.NET 1.1

Se non ho dimenticato nulla, ora finalmente l'applicazione dovrebbe eseguirsi correttamente.

HTH

Add Comment Filed Under [ Misc Windows Vista ]
Nuovo Yahoo Messenger in WPF!!

In questo post dicevo che, per ciò che ho avuto modo di vedere, non immagino la tipica applicazione gestionale realizzata in WPF. Questa nuova tecnologia, secondo me, ha ben altri scopi, dato che "non di soli gestionali vive il programmatore", no?

Ecco perché, a mio modo di vedere, forse il famoso Healthcare Prototype, che comunque ha lasciato tante bocche spalancate, è un esempio un po' fuorviante.

Chi invece credo beneficerà alla grande delle peculiarità di WPF e ci farà toccare con mano cosa vuol dire avere a disposizione una tale potenza e flessibilità per la UI sono i software di messaggistica, utilizzati dai 15enni e dai 50enni e che, per loro natura, traggono pieno profitto da un look più accattivante.

Tutto questo preambolo, per dire cosa? Beh, che Yahoo per prima, con il suo Messenger, ha voluto tastare il terreno e si avvia al rilascio di una versione interamente .NET 3.0 e WPF powered, con tanto di supporto alla Sidebar di Vista.

Se fate un giro sul sito ufficiale avrete la possibilità di guardare anche un filmato dimostrativo.

fonte: http://weblogs.asp.net/scottgu/archive/2007/01/07/next-generation-yahoo-messenger-built-with-wpf-and-net.aspx

One Comment Filed Under [ Misc .Net 3.0 ]
Memory Leak in .NET

Prendo spunto dai post di Lorenzo e di Raffo per segnalarvi un bell'articolo di MSDN Magazine di Gennaio di James Kovacs a proposito dei memory leak che possono verificarsi nelle nostre applicazioni .NET se scritte "male", anche nel caso di solo codice managed.

Credo che ogni sviluppatore di buon livello debba annoverare, nel suo bagaglio culturale, la conoscenza di come funzionano le cose a basso livello, perché in alcuni casi bisogna implementare IDisposable (tempo fa ho scritto qualcosa in proposito qui), cosa sono boxing e unboxing, cosa succede quando scriviamo

myButton.Click += new EventHandler(myButtonClickHandler);

o qual è l'overhead di lavoro a cui costringiamo il CLR nel caso in cui chiamiamo un metodo marcato come virtual.

Quindi... comprate tutti CLR via C# di Jeffrey Richter, da bravi!

One Comment Filed Under [ .Net 2.0 ]
Un caloroso grazie...

...a Lorenzo. Lui sa!

One Comment Filed Under [ Off topic ]
Cinque cose su di me...

Sapevo che mi sarebbe toccato prima o poi :D

Grazie a Diego e Matteo per il "pensiero", eheh!

Allora:

  1. Mi piace da impazzire la pallacanestro, l'ho praticata per una decina d'anni a livello agonistico e Marco Mordente, che gioca nella Benetton Treviso e in Nazionale, era mio compagno di squadra nel Teramo Basket quando eravamo ragazzini.
  2. Suono la chitarra elettrica praticamente da sempre e fino ad un paio d'anni fa passavo le serate a fare esercizi per ore... però suonare l'assolo di Under a Glass Moon, che soddisfazione!! Mi piace tutta la musica metal, dal classic degli Iron Maiden fino al Black dei Cradle Of Filth, passando per Lacuna Coil, Dream Theater, In Flames, ecc.ecc.ecc. (potrei andare avanti per ore).
  3. Per alcuni anni ho avuto i capelli lunghissimi, fino al sedere, portavo 2 orecchini e indossavo il chiodo anche per andare a dormire.
  4. Quando facevo la prima media sono stato investito da un auto e ho passato tre mesi a letto.
  5. Sono appassionatissimo di video giochi e per un paio d'anni son stato redattore di una rivista del settore. Infatti casa mia è da sempre la meta prediletta di tutti i miei cuginetti, vista la mia collezione di console...

Bene.. vediamo chi far fuori ora...

Raffaele Rialdi, Marco Minerva, Antonio Ganci, Raffeau, Gianluca Carucci

Ciaooo!! :-)

[70-526] Anno nuovo, esame nuovo

Quest'anno mi voglio dar da fare, eheh!!

Dopo aver passato il 70-536 sono di nuovo alle prese con un nuovo esame di certificazione. Questa volta è il turno del 70-526, argomento Windows Forms 2.0, è un po' il successore del vecchio 70-316 che ho dato quasi un anno fa.

Gli argomenti sono infatti piuttosto simili e credo che, nel complesso, sia molto più abbordabile del 70-536, che invece mi ha messo proprio in difficoltà (più di quanto il voto finale non dica).

Orientativamente pensavo di schedulare la sessione d'esame per la seconda metà di febbraio e di acquistare i test a tempo di Measure Up tra una quindicina di giorni. Spero di riuscire anche a postare qualcosa che possa essere utile ad altri membri della community UGIdotNet-tiana e non!

Vediamo un po'....

Add Comment Filed Under [ Misc ]
TDD Classico o Mocked?

Martin Fowler ha aggiornato la sua white paper in cui illustra le due principali varienti di TDD, vale a dire

  • l'approccio classico, in cui spesso, all'interno degli unit test, nel caso in cui esso coinvolga più oggetti interconnessi, si fa uso di stub e più raramente di mock;
  • l'approccio mocking, in cui all'interno del metodo di test, oltre al SUT (System Under T est), sono presenti esclusivamente oggetti mock.

La caratteristica fondamentale del primo approccio è che il test è basato sull'analisi dello stato degli oggetti al termine dello stesso, mentre nel secondo caso assume rilevanza l'analisi comportamentale del SUT.

Il risultato è che, sebbene un TDD basato su mock garantisca un miglior isolamento del test, al tempo stesso risulta inevitabilmente legato alla particolare implementazione del SUT e non solo alla sua interfaccia. Per questa ragione personalmente preferisco (e metto in pratica) l'approccio classico, utilizzando i mock solo ove strettamente necessario.

Mi piacerebbe sentire altri pareri in proposito.

powered by IMHO 1.3

3 Comments Filed Under [ Misc ]
Prime impressioni su WPF

Durante le festività natalizie, ho avuto modo di papparmi un paio di centinaia di pagine del libro di Charles Petzold su WPF; per il momento, ho toccato pochissimo (quasi nulla) XAML, dato che la prima metà del libro non lo tratta. Questa scelta, che inizialmente mi aveva lasciato piuttosto perplesso, è in realtà completamente giustificata: XAML altri non è che un modo per serializzare una gerarchia di oggetti e quindi, alla fine dei conti, in WPF riveste comunque il ruolo di "accessorio ", per quanto di fondamentale importanza; morale della favola: per studiare l'architettura di WPF se ne può fare benissimo a meno, in compenso ho scritto tanto codice C# e ho iniziato ad esplorare un po' il modello a oggetti del nuovo framework.

L'impressione è quella di trovarsi davanti a qualcosa di mastodontico, sia per quanto riguarda potenzialità e flessibilità, che a livello di complessità: nonostante il mio background professionale si basi per un buon 80% sul mondo delle applicazioni windows, i primi test mi hanno lasciato piuttosto spaesato. Le gerarchie degli oggetti sono estremamente più profonde rispetto a quelle delle WinForms 2.0, ma quest'approccio, che denota uno sforzo architetturale non da poco, ha permesso di implementare nativamente funzionalità evolute delle quali chiunque si sia occupato in passato di applicazioni windows ha sentito la necessità almeno una volta.

DependencyProperties, AttachedProperties (trattate da Corrado rispettivamente qui e qui ) e soprattutto il nuovo modello di routing degli eventi sono un'autentica manna dal cielo e vi assicuro che, nonostante magari possano sembrare un qualcosa di "inedito" rispetto a ciò che era la programmazione windows in passato, dopo un po' non se ne riesce veramente a fare a meno e tornare a Winforms dà una sensazione un po' di "vecchio".

Da appassionato, insomma, sono veramente entusiasta, ma resto ancora perplesso circa la diffusione che questo framework potrà avere presso il grande pubblico. Secondo me le Windows Forms avranno ancora vita lunghissima, WPF è decisamente complesso e soprattutto differente da tutto ciò che si è visto in passato, con il risultato che il passaggio a questa tecnologia potrebbe risultare molto ma molto costoso. E' ancora un po' presto per tirare le somme, mancano ancora tool di sviluppo concreti e anche la libreria di controlli è un po' lacunosa (il DateTimePicker dov'è?), ma allo stato attuale non riesco proprio ad immaginare la piccola/media software house che decida di sviluppare il proprio gestionale in WPF, ne ritengo molto più plausibile un utilizzo, ad es., per la produzione di una presentazione multimediale o per un software semplice ma che necessiti di essere graficamente accattivante.

powered by IMHO 1.3

One Comment Filed Under [ .Net 3.0 ]
Provato VMWare Workstation 6.0 Beta

Dopo aver letto questo post di Roberto mi son deviso a provare la nuova release (ancora in beta) di VMWare Workstation .

Le precedenti 5.x non sono ufficialmente supportate in host su Windows Vista e infatti danno alcune grane, tipo il quasi blocco del sistema per una 40ina di secondi circa al primo avvio di una macchina o una blue screen al momento della disintallazione (magari parlerò in un altro post di come ho risolto il problema).

La 6.0 all'avvio, invece, fila via liscia come l'olio, anche se l'esecuzione è nel complesso più lenta e dispendiosa in termini di utilizzo della CPU per via del fatto che si tratta ancora di una versione Debug.

Una novità che ho particolarmente apprezzato è la presenza di una toolbar simil-Remote Desktop che viene visualizzata ogni volta che si lavora nella modalità full screen e che contiente, tra l'altro, l'intero menu VM di VMWare; in questo modo è possibile richiamare funzionalità quali, ad es., il salvataggio di uno snapshot o il send del Ctrl-Alt-Canc senza dover per forza tornare alla visualizzazione in modalità finestra. Utilissimo anche il supporto a monitor multipli, che permette di visualizzare una VM in full screen su un monitor e continuare a lavorare sul sistema host in un altro.

Purtroppo non è tutto rose e fiori: ad esempio i servizi che VMWare installa sono particolarmente lenti nella fase di startup, con il risultato che l'operazione di caricamento del desktop una volta che ci si è loggati è sensibilmente più lunga.

Non sono ancora in grado di pronunciarmi, invece, circa la feature che ritengo in assoluto più interessante, vale a dire l'integrazione con il Debugger di Visual Studio, nel senso che.... non sono riuscito a farla funzionare!! Una volta installato il plugin, infatti, ho iniziato a ricevere una sfilza di errori di scrittura sul log ad ogni avvio di VS2005. Purtroppo, dopo una ricerca sul forum di VMWare, mi son reso conto che si tratta di un bug noto per il quale attualmente non esiste alcun workaround se non quello di disabilitare il plugin stesso. Peccato perché effettuare il debug su una Virtual Machine in maniera del tutto automatica dal nostro IDE di sviluppo è qualcosa che mi fa venire l'acquolina in bocca, speriamo per una prossima release.

powered by IMHO 1.3

3 Comments Filed Under [ Misc ]