agosto 2006 Entries
[OT] La mia su community credit

Igor tempo fa ha scritto qualcosa in proposito, io oggi ne ho parlato un po' con Simone su messenger. Di cosa parlo? Di Community Credit.

Ho provato questo mese a fare quest'esperienza, sfruttando parte delle ferie per pubblicare alcuni articoli che avevo in mente da un po' e che, per pigrizia e scarso tempo a disposizione, non mi ero mai messo a scrivere. In ogni modo, l'idea che mi son fatto è piuttosto negativa, perché a mio modo di vedere tutto il discorso è un po' una forzatura a quella sorta di volontariato attivo che è la vita di community. E come ogni forma di volontariato, esso è utile e produttivo quando è spontaneo, non quando ci si sforza di piazzar dentro al calderone della rete più roba possibile tanto per salire in classifica, senza badare alla qualità e, soprattutto, all'utilità di quanto si scrive.

Sia chiaro, la mia non è una "rosicata" per qualcosa, è solo una constatazione sul potenziale danno che un sito del genere, orientato solo ed esclusivamente alla quantità e non al contenuto, possa fare a questo mondo di "colleghi" che decidono di mettere in comune le proprie esperienze. Francamente non è che mi freghi tanto del missile ad idrogeno o del rilevatore di fantasmi USB, ho cercato di segnalare solo i punti che nel mio piccolo pensavo di meritare, perché magari avevo pubblicato qualcosa che reputavo potesse essere in qualche modo utile chi, come me, spesso si trova con il cursore nella textbox di Google per cercare di risolvere le piccole grane quotidiane.

Però penso con realistico timore (realistico perché più di una persona, anche tra i primi in classifica di questo mese, si comporta effettivamente così) alla facilità con cui avrei potuto impestare il blog di snippet di codice per allargare a runtime una TextBox, disabilitare un pulsante o mostrare una Winform come modale. Poi faccio uno zoom-out e cerco di immaginare quanta gente worldwide magari non si fa troppi problemi.

E rabbrividisco un po', pensando a quanto danno può arrecare una simpatica idea come Community Credit.

Ah, ovviamente questo blogpost non lo segnalerò, eh!

powered by IMHO 1.3

3 Comments Filed Under [ Off topic ]
[NHibernate] Inheritance Mapping

Dopo il precedente, ho pensato di scrivere un altro piccolo articolo su NHibernate, questa volta a proposito del mapping di classi in relazione di ereditarietà tra di loro, con tanto di nuova applicazioncina di esempio

Chi fosse interessato alla lettura, può trovarlo seguendo questo link.

powered by IMHO 1.3

One Comment Filed Under [ NHibernate ]
WSE 3.0 Settings non appare nel menu contestuale

C'è un piccolo problemino con l'installazione di WSE 3.0 se si usa una versione di Windows differente da quella inglese. Visual Studio, infatti, ricerca il plugin nel percorso

%ALLUSERSPROFILE%\Application Data\Microsoft\MSEnvShared\Addins

mentre il setup di WSE 3.0 installa l'add-in nel percorso

%ALLUSERSPROFILE%\Dati Applicazioni\Microsoft\MSEnvShared\Addins

Il risultato è che, aprendo il menu contestuale di un progetto di Web Service, non troviamo la voce "WSE Settings 3.0..." per abilitare e configurare i WebService Enhancements per quel progetto.

La soluzione è semplice, ma la posto qui perché mi ha fatto perdere parecchio tempo; basta infatti andare su Tools -> Options -> Add-in/Macros Security ed inserire il percorso corretto.

HTH

powered by IMHO 1.3

Add Comment Filed Under [ Visual Studio ]
Perché IMHO è ancora avantissimo

     

Come si fa a bloggare senza tutte le emoticon già configurate?

1-0 per il Boschin, io resto con lui!

powered by IMHO 1.3

One Comment Filed Under [ Misc ]
[NHibernate] LazyLoad non solo sulle collection

Il LazyLoad in NHibernate non si limita solo ai casi di relazioni Master/Detail: questo framework, infatti, mette a disposizione uno strumento estremamente completo, che permette di caricare al momento opportuno qualsiasi entity.

Visto che il 99% degli esempi che si trovano in rete riguardano però solo il primo caso, ho scritto un piccolo articolo che approfondisce un po' il funzionamento del Lazy Load sviscerandolo un pochino di più (non molto, eh! ), con tanto di applicazioncina di esempio.

Spero di aver fatto una cosa gradita, trovate tutto a questo link. Se l'idea vi piace, mandatemi qualche feedback, così magari posso proseguire la serie trattando altri aspetti (come la concorrenza, il caching o l'ereditarietà) magari meno "famosi", ma sicuramente indispensabili per sfruttare NHibernate in un contesto reale.

Ciao

powered by IMHO 1.3

2 Comments Filed Under [ NHibernate ]
Tool per risolvere un piccolo bug di AnkhSVN

AnkhSVN, il client di Subversion per VS2005, alcune volte ha bisogno di effettuare una pulizia delle cartelle di sistema tramite il comando CleanUp.

Purtroppo spesso e volentieri, questo comando si lamenta perché in un qualche subfolder di un remotissimo altro subfolder della structure della nostra soluzione, non trova una fantomatica cartella tmp. E' un bug noto, facilmente risolvibile creando una directory vuota nella posizione voluta, ma capirete che è un discreto sbattimento farlo a mano, soprattutto quando le cartelle mancanti sono diverse.

Bene, ho realizzato una piccola console application che fa tutto ciò da sola, esplorando ricorsivamente tutte le cartelle.

Il codice è assolutamente banale, non sto neanche a postarlo, però magari vi può evitare qualche minuto di rottura di scatole. Chi vuole scaricare questo piccolo tool, può fare un click qui!

powered by IMHO 1.3

One Comment Filed Under [ Visual Studio Misc ]
Caricamento di un oggetto Image da file

La creazione di un oggetto di tipo Image da un file nasconde una piccola insidia. Consideriamo il seguente snippet di codice:

Image myImage = Image.FromFile("filename.jpg")

Ciò che accade dietro le quinte è che nel field

internal IntPtr nativeImage

viene memorizzato un handler al file filename.jpg, che rimane aperto finché non si richiama il metodo Dispose() di myImage. Il problema è che, ovviamente, il file risulta bloccato e il sistema ha una risorsa impegnata; inoltre, se dimentichiamo di effettuare la Dispose, questa situazione perdura fino a che non viene effettuato un GarbageCollecting o, al peggio, fino alla chiusura dell'applicazione.

Come ovviare? Personalmente, quando devo caricare un'immagine da file, faccio così:

Image myImage;
using (Image img = Image.FromFile("filename.jpg")
{
    myImage = 
new Bitmap(img);
}

Il costruttore dell'oggetto Bitmap, infatti, carica l'immagine e la salva sull'oggetto stesso utilizzando GDI+; da Reflector:

public Bitmap(Image original, int width, int height) : this(width, height)
{
      
using (Graphics graphics1 = null)
      {
            graphics1 = Graphics.FromImage(
this);
            graphics1.Clear(Color.Transparent);
            graphics1.DrawImage(original, 0, 0, width, height);
      }
}

In questo modo non facciamo altro che applicare la best practice che consiglia di tenere impiegata una risorsa esterna per il minor tempo possibile.

Ciao

powered by IMHO 1.3

Anche NHibernate Domain Mapper si è CodePlexato

Già già, finalmente stasera (a tempo di record) hanno attivato il progetto di NHibernate Domain Mapper su CodePlex. Per ora non abbiam messo su ancora nulla, lo farò nei prossimi giorni, ma speriamo di riuscire ad approfittare delle ferie per tirar fuori una prima early build, così potrete anche voi dare un'occhiata a quello che, per me e Janky, è diventato il passatempo di quasi ogni sera e ogni weekend.

Se poi ci volete dare anche una mano...

powered by IMHO 1.3

Problemi con BindingSource a design time

Oggi ho avuto una brutta sorpresa: lavorando con VS2005 ad un progetto WinForms, mi sono trovato nell'assoluta impossibilità di impostare il DataBinding da designer: ogni volta che provavo ad impostare la proprietà DataSource di un qualsiasi BindingSource, VS2005 sollevava una NullReferenceException, mostrava una bella message box con su scritto "Reference not set to an instance of an object" e buonanotte al secchio.

Pistolando un po' qua e là, alla fine sono riuscito a venirne a capo: si tratta di un problema che si verifica quando si cambia il naming delle classi, quando cioé i file Xml contraddistinti dall'estensione .datasource non sono più allineati con le classi del nostro progetto. Per accorgersene, basta aprire la finestra delle DataSource e alcune di esse dovrebbero presentare un bel punto esclamativo nell'icona a fianco. Per risolvere il problema è sufficiente aggiornare manualmente l'xml o eliminare i file e poi rigenerarli.

powered by IMHO 1.3

Ancora su DAL, NHibernate e ORM fatti a mano

Mi ricollego a quanto già scritto sul mio blog e alla discussione nata su quello di Imperugo, a proposito dell'argomento "ORM fatti in casa", perché stamattina mi sono imbattuto in un interessante post di Ayende a proposito delle performance di NHibernate.

Tutto è nato da un post in cui si confrontavano la velocità di questo OR/M e ADO.NET; beh... sono d'accordo con chi dice che ovviamente NH non può essere più veloce di ADO.NET per il semplice fatto che è un layer costruito sopra ad ADO.NET. Ma come si è ripetuto più spesso anche da queste parti, lo scopo di NH è quello di fornire performance ottime ma non ottimali. Anche perché, e qui cito il bravo Ayende,

The fastest way to get information from the database is not to go to the database in the first place. Enabling caching in NHibernate is a matter of adding a line to the configuration file. How long is it going to build a caching system and integrate it to your application? (Even assuming that you are using a pre-built system, like ASP.Net Cache or the Caching Application Block, you still need to make the calls in all the right places.) Can your caching scale to a web farm scenario?

I vantaggi di NH sono altri, e a mio avviso ben più pesanti di una ragionevole perdita di prestazioni; intanto siamo più veloci noi a realizzare il nostro lavoro, cito ancora Ayende...

Guy #1: Do you know that VB is faster than C++?
Guy #2: Really? Never heard of it. By how much?
Guy #1: Oh, about three to four months.

e poi per la solita sconfinata serie di features, alcune necessarie, altre importanti, altre ancora solo comode, che abbiamo a disposizione. Leggete un po' qui

powered by IMHO 1.3

Add Comment Filed Under [ NHibernate ]
A scuola di Drag'n Drop
Un semplice esempio di come implementare il Drag'n Drop nelle nostre Windows Forms C.p.l.
Bell'articolo su Model View Presenter

Il Model View Presenter è, tra i pattern relativi al presentation layer, quello che in questo periodo mi intriga di più , perché secondo me riesce a separare la logica di presentazione con la concreta implementazione dell'interfaccia in un modo molto più netto di quanto non accada con il "cugino" Model View Controller.

Perché dico questo? Perché 10 minuti fa, sul divano, stavo leggiucchiando l'ultimo MSDN Magazine (o, meglio, l'ultimo che mi è arrivato) e mi sono imbattuto in un bell'articolo di Jean Paul Boodhoo e ho pensato di fare cosa gradita segnalandolo  Come sempre, è presente anche la versione online che potete trovare a questo link.

Ah, dimenticavo, la ciliegina sulla torta è che l'esempio proposto è tutto sviluppato in TDD.

Se vi capita, dateci un'occhiata.

powered by IMHO 1.3

Add Comment Filed Under [ Architettura ]
[Semi-OT] L'assistenza DEFINITIVA!

Uso Test Driven .NET da un po' di tempo, ieri sul portatile ho eseguito una nuova installazione, ma l'analisi del code coverage non voleva saperne di andare. Cerco qualcosa in rete, nulla di nulla. A quel punto, estremo tentativo: scrivo a Jamie Cansdale, l'autore di questo tool.

Sorpresa: non passano 2 minuti, mi risponde, mi invita in una chat privata, mi fa scaricare una sorta di vnc e si mette lui a pistolare per risolvermi il tutto.

Vi giuro, ci son rimasto di sasso

powered by IMHO 1.3

6 Comments Filed Under [ Off topic ]
Iniziare ad usare Subversion in 5 minuti 5
Come utilizzare VS2005 con Subversion? C.p.l.
8 Comments Filed Under [ Visual Studio Misc ]