mercoledì 28 maggio 2008
#
Volevo segnalare il mio tentativo di istituire la prima comunità italiana di utilizzatori di microcontrollori AVR® della Atmel®, appassionati di elettronica e di programmazione. Si prenderanno in considerazione prevalentemente i progetti e gli articoli riguardanti lo sviluppo di applicazioni, plug-in e librerie per l'interfacciamento del mondo dei micro AVR ed i personal computer con sistema operativo Microsoft® Windows®, prendendo come riferimento per lo sviluppo il Framework Microsoft® .NET, il linguaggio C# e Visual Studio.
Per gli interessati: http://avr.rmariotti.it
venerdì 14 marzo 2008
#
Spesso in rete trovo degli esempi di implementazione dell'interfaccia INotifyPropertyChanged che non mi piacciono per niente (anche su MSDN). In particolare sono interessato a come e quando generare l'evento di notifica della modifica di una proprietà. Sembra che quasi tutti ignorino il fatto di generare la notifica solo quando il valore della proprietà è stato effettivamente modificato.
Credo invece sia importante gestire correttamente tale notifica, per una serie di ragioni, prima su tutte le performance. Nelle mie implementazioni di entità gestisco l'impostazione del nuovo valore e la notifica in modo centralizzato, con un metodo protected implementato nella classe base da cui derivano tutte le entità, con il compito di verificare effettivamente se il valore è cambiato oppure no prima di impostare il nuovo valore e generare l'evento. E' chiaro che tutte le entità concrete devono rispettare il pattern di richiamare tale metodo nei rispettivi setter ed implementare l'override del metodo Equal (e quindi obbligatoriamente anche GetHashCode) in modo da comparare anche proprietà che rappresentano altre entità.
Sto sbagliando, nel senso, mi sto facendo troppi problemi?
giovedì 13 marzo 2008
#
Sto realizzando l'ennesima versione di una classe base astratta da utilizzare per tutte le entità aziendali. Questa classe dovrà implementare alcune interfacce basilari, tra le quali INotifyPropertyChanged, e pensavo anche alla ISupportInitialize. Il dubbio che ho nell'implementare quest'ultima interfaccia è se devo generare o no gli eventi di notifica del cambio dei valori delle proprietà nel momento che a seguito della chiamata al metodo ISupportInitialize.EndInit() vado ad impostare tutti i valori delle proprietà modificate dopo la chiamata a ISupportInitialize.BeginInit().
Per chiarezza (?), segue il frammento dell'implementazione della classe ed in particolare la parte di implementazione dell'interfaccia ISupportInitialize.
#region ISupportInitialize implementation
public void BeginInit()
{
if (!m_Initializing)
{
m_InitializeData = new Hashtable();
m_Initializing = true;
}
}
public void EndInit()
{
if (m_Initializing)
{
m_Initializing = false;
Type t = this.GetType();
foreach (DictionaryEntry entry in m_InitializeData)
{
PropertyInfo pi = t.GetProperty((string)entry.Key);
if (pi != null)
{
pi.SetValue(this, entry.Value, null);
}
}
m_InitializeData = null;
}
}
#endregion
In questa implementazione nel metodo EndInit si impostano i valori di tutte le proprietà modificate dopo la chiamata alla BeginInit bufferizzate in una tabella hash, chiamando il metodo SetValue via reflection che invoca il setter della relativa proprietà, la quale noticherà la modifica generando l'evento relativo all'implementazione della INotifyPropertyChanged (non mostrata nel frammento di codice).
Quindi ecco il dubbio: è corretto così, oppure devo disabilitare le notifiche del cambio delle proprietà quando sono nella EndInit? Personalmente credo che come è scritta ora non vada bene. Da quello che ho capito io, lo scopo dell'implementazione dell'interfaccia ISupportInitialize è di impostare tutte le proprietà senza craere problemi di incoerenza sullo stato dell'entità stessa e quindi, credo che non debbano essere generare le relative notifiche, le quali potrebbero dare problemi ai client "in ascolto".
Sono graditi commenti e/o suggerimenti.
giovedì 28 febbraio 2008
#
Sto progettando un framework per il disegno di oggetti grafici in WPF utilizzabili per comporre disegni, schemi, organigrammi, pert, ecc. Dato che ogni disegno dovrà essere caricato e salvato in data set di vario tipo (file XML, database SQL) ogni oggetto grafico sarà in realtà una rappresentazione di entità aziendali custom serializzabili.
Per disaccoppiare la rappresentazione grafica ed i dati, ho pensato di utilizzare il binding già implementato da WPF. In pratica, l'utilizzo del binding è un po' fuori dai soliti schemi ed esempi che si trovano in rete, nel senso che le proprietà collegate non sono riferite a controlli utente di una window, ma sono proprietà di oggetti Visual disegnabili su un Canvas (semplificando al massimo, si immagini che siano primitive del tipo rettangolo, ellisse, testo, poligono, ecc.). Inoltre le proprietà saranno modificabili dall'utente in modo interattivo utilizzando ad esempio un editor specifico, con l'uso di adorner creati appositamente. La modifica interattiva, tramite il binding, modificherà anche le rispettive proprietà degli oggetti entità e quindi i dati persistenti sul data set.
Questa tecnica, per le prove fatte fino ad ora, funziona (ovviamente il framework .NET fa il suo dovere). Volevo sapere se qualcuno di voi ha già fatto cose simili o conosce qualche link in merito al binding su primitive grafiche.
martedì 22 maggio 2007
#
Sto valutando se cambiare web hosting da dotnetpark a webhost4life. Qualcuno ha esperienze con quest'ultimo?
Propongo anche di stilare una lista di host, tra quelli utilizzati dai membri del gruppo, con eventuali commenti (magari è stato già fatto: in questo caso qualcuno può inviarmi il link?).
Ringrazio anticipatamente tutti per i consigli.
martedì 16 maggio 2006
#
Mi sono imbattuto in un BUG o sono io a non capire?
Sto lavorando su una pagina ASP.NET 2.0 e utilizzo FormView ed i relativi Template per l'editing (ITEM, INSERT e UPDATE), connesso ad un ObjectDataSource.
Nel template per INSERT e UPDATE ho inserito dei TextBox per inserire dei valori numerici con virgola (double), ed il tutto deve funzionare in ambito della localizzazione "it-IT". L'applicazione dovrà essere accessibile su client configurati con SO in inglese, quindi per essere sicuro ho dovuto mettere nel file Web.config la stringa di configurazione <globalization uiCulture="it" culture="it-IT" />. Tutto sembra funzionare bene se inserisco dei campi TextBox per l'inserimento dei valori numerici nella pagina, cioè sono eseguite correttamente le conversioni dei valori decimali (problema del separatore decimale).
Nei controlli TextBox nel FormView invece tutto ciò è ignorato, e quando cerco di scrivere un valore numerico con virgola nel controllo relativo e bindato con il data source, l'applicazione mi ritorna una eccezione di errato formato di conversione. Infatti se inserisco un valore decimale del tipo "1,5", la virgola non è un carattere valido per le impostazioni inglesi e quindi l'errore di conversione. Questo succede solo in input e non in output, cioè il valore decimale è correttamente visualizzato quando letto dal datasource e poi esposto sul controllo TextBox.
Credo quindi che il problema sia un BUG del controllo, cioè nell'automatismo di conversione sono ignorati i formati localizzati impostati dall'applicazione, ma sono presi da altre impostazioni del sistema operativo (i miei client PC hanno WinXP in inglese). Forse mi sbalgio?
Comunque esiste un rimedio: gestire ad esempio nell'evento FormView.ItemUpdating e "forzare" la conversione. Non mi piace molto, anzi per nulla... ma non ho trovato altri rimedi.
Spero anche che qualcuno di voi legga questo post e possa avere altre informazioni e maggiore esperienza per darmi altri suggerimenti. Grazie.
sabato 29 ottobre 2005
#
Durante lo sviluppo di una classe base per l'accesso ai dati utilizzando la Enterprise Library mi sono accorto di un mio bug riguardante il non rilascio delle risorse quando utilizzavo il contesto di configurazione nel costruttore della classe. Questo provocava un memory leaks che mi faceva crescere il numero di thread allocati mano a mano che utilizzavo le classi per l'accesso ai dati. Quindi mi sono detto: mi scrivo una serie di regole per evitare in futuro questo grossolano errore nella programmazione in .NET. Per fortuna, come capita di sovente, in rete altri hanno già fatto esperienza e scritto qualche cosa, e in questo caso mi sono ritrovato a leggere un interessante post http://www.csharphelp.com/archives3/archive571.html, riguardante alcune semplici regole quando si tratta di distruttori e Dispose in .NET. Mi sono permesso di tradurlo a modo mio nell'articolo http://blogs.ugidotnet.org/rimariot/articles/28926.aspx.
giovedì 18 agosto 2005
#
E' due giorni che nella multinazionale in cui lavoro abitualmente abbiamo preso l'ultimo worm della serie W32/IRCbot.worm!MS05-039, conosciuto ai tanti come Zotob. Primo giorno black out, secondo giorno passato a tirare su server e sistemare i client.
La sfortuna è stata di avere moltissimi client e molti server ancora con Windows 2000 e un McAfee Enterprise non proprio aggiornato in tempo... (era ferragosto ed i computer erano al mare). Purtroppo la battaglia non è ancora finita... domani mi aspetta un'altra giornatina da dimenticare dato che sono da solo (causa ferie di un collega) a passarmi i rimanenti dei 70 client. La mancanza di produttività è da paura... credo che siano valutabili, per l'intero gruppo, per milioni di euro.
Ecco il lato oscuro... delle reti e dei sistemi operativi fatti non proprio benissimo.
Spero che voi siate più... "fortunati" di me.
venerdì 12 agosto 2005
#
Ieri sera volevo lavorare un po' ad un progetto ASP.NET, ma con grande stupore http://localhost non voleva proprio andare!! Dopo svariate prove e controlli sulla mia workstation di sviluppo e ricerche su google, ho scoperto che poteva essere di tutto. Tolto ogni dubbio riguardo virus e altre amenità e constatato che le mie impostazioni IIS, IE e ASP.NET erano apparentemente corrette, ho deciso di reinstallare IIS e ASP.NET. Come capita in queste occasioni, non è servito a nulla. Allora mi sono dedicato all'antivirus ed ai suoi tool di contorno (idee giunte ovviamente da esperienze analoghe lette su google), incominciando a fare le deinstallazioni di un "pezzo" alla volta. Per "fortuna" al primo colpo, dopo la rimozione del modulo Privacy Security di McAfee Internet Suite 2005, IIS ha ripreso a farmi vedere http://localhost. Da una analisi sommaria, credo che questo effetto di inspiegabile mal-funzionamento sia stato dovuto al recentissimo upgrade della Suite di McAfee. Se fosse proprio così, è incredibile come ancora oggi possa capitare di perdere il controllo del sistema dopo una "innocente" upgrade di un prodotto commerciale e diffuso. In realtà data la mia esperienza ventennale di computer (in termini di tempo), non dovrei più stupirmi più di tanto... ma tutto questo mi rende molto triste!
Conclusione: tutta questo mi è costato circa 3 ore di improduttività, nelle quali mi sono fatto dei "viaggi" assurdi su come risolvere il problema, nelle quali ho pensato alla re-installazione di XP, ho maledetto per l'ennesima volta M$, ho constatato ancora una volta che i sistemi di protezione del sistema, alias antivirus & C., sono ancora dei prodotti instabili, e... lasciamo stare il resto.
mercoledì 10 agosto 2005
#
Stavo cercando il modo per aggiungere un lettore di RSS per i miei portali SharePoint senza dover installare componenti lato server (anche perché non potrei farlo dato che sono in hosting). Ho trovato questo sito (x5.tsiokos.com) che permette di creare un file dwp in modo da poterlo importare in SharePoint come WebPart. Il tutto molto semplicemente e soprattutto... funziona!