Welcome

This is the generic homepage (aka Aggregate Blog) for a Subtext community website. It aggregates posts from every blog installed in this server. To modify this page, edit the default.aspx page in your Subtext installation.

To learn more about the application, check out the Subtext Project Website.

Powered By:

Blog Stats

  • Blogs - 688
  • Posts - 27576
  • Articles - 298
  • Comments - 62726
  • Trackbacks - 442823

Bloggers (posts, last update)

Latest Posts

NHibernate : cache di 2° livello e connessione manuale

Dopo aver superato i piccoli problemi tecnici che mi impedivano di "postare" (grazie al buon Andrea) eccomi nuovamente operativo .
Ecco una casistica che abbiamo affrontato ultimamente all'interno del team di sviluppo, ovvero l'utilizzo di cache di 2° livello e connessione manuale con NHibernate (purtroppo utilizziamo ancora la 1.2.1).
Come da post del buon Ayende, nel momento in cui si utilizza una connesione manuale la cache di 2° livello non funziona più correttamente. Dopo le prime ricerche siamo giunti alla soluzione che utilizziamo attualmente, ovvero realizzare un ConnectionProvider personalizzato.
Nel nostro caso abbiamo bisogno di utilizzare la connessione ad un DB A o un DB B in base a delle particolari condizioni (ovviamente sono strutture identitche) e quindi abbiamo realizzato una soluzione di questo tipo (prendete con le molle lo "pseudocodice") :

public class CustomConnectionDriver : NHibernate.Connection.ConnectionProvider
{
    public override IDbConnection GetConnection()
    {
        IDbConnection currentConnection;
        //Selezione della connessione in base ai criteri
        if (....)
        {
            currentConnection = ConnessioneA;
        }
        else
        {
            currentConnection = ConnessioneB;
        }
        currentConnection.Open();
        return currentConnection;
    }
}


Successivamente andrà configurato nel file di NHibernate il nostro nuovo connection provider:

<property name="connection.provider">CustomConnectionDriver </property>

Ora basta avviare il progetto e provare a verificare il corretto funzionamento della cache di 2° livello.

posted @ 08/02/2010 13.56 by Andrea Canegrati

Una feauture C# 4.0 non ha e invidio a VB.NET 10

In VB.NET 10 sono stati introdotti le property ed event template.
Qui viene spiegato il funzionamento.

posted @ 07/02/2010 17.13 by Giuseppe Lippolis

Import, Export, Lazy<T> & PartCreationPolicy

Eravamo rimasti con l’avere un qualcosa di semplice ma funzionante ed in questa parte vedremo piu’ in dettaglio come utilizzare gli Export e gli Import, a cosa serve la classe Lazy<T> e l’attributo PartCreationPolicy.

Exports
Finora abbiamo visto che una ComposablePart puo’ esportare properties, fields oppure se stessa (come nel caso del MainViewModel).

Se invece avessimo l’esigenza di esportare un metodo, MEF lo vedrebbe come un delegate per cui è necessario specificare il delegate che stiamo esportando (in questo caso un Action<string>)

clip_image002

e di conseguenza l’import dovrà avere lo stesso contratto

clip_image004

Imports
Se volessimo passare le dipendenze tramite costruttore come fa un IoC container? Niente di piu’ facile :) MEF ci offre l’attributo ImportingConstructor

clip_image006

NB: per discussioni riguardo all'uso di MEF come IoC container date un’occhiata a questi post di Glenn Block
http://codebetter.com/blogs/glenn.block/archive/2009/08/16/should-i-use-mef-for-my-general-ioc-needs.aspx
http://codebetter.com/blogs/glenn.block/archive/2009/10/31/should-i-use-mef-with-an-ioc-container.aspx

Una chicca offerta da MEF è l’attributo ImportMany che ci permette di importare piu’ plugin (nel nostro caso) con lo stesso contratto

clip_image008

modificando leggermente la view ed aggiungendo qualche plugin all’interno del progetto otteniamo un risultato di questo tipo

clip_image010

Ma come facciamo a sapere se gli imports di una nostra classe sono stati eseguiti correttamente? In questo caso ci viene incontro l’interfaccia IPartImportsSatisfiedNotification con il suo unico metodo OnImportsSatisfied che verrà chiamato quando tutti gli imports che possono essere soddisfatti verranno eseguiti.

Lazy:
Quando il container inizia a fare il suo sporco lavoro (cioè comporre le varie parti) e trova un Import, questo Import comporterà la creazione di una o piu’ istanze della parte che lo soddisfa. Questo potrebbe essere un fattore da considerare nel caso della creazione di grossi grafi di oggetti. Proprio per questo all’interno di MEF è presente la classe Lazy<T> che si occuperà di creare l’istanza della classe specificata al primo utilizzo.

clip_image012

La prima volta che si andrà ad utilizzare la proprietà Plugin MEF creerà l’istanza del relativo export e potremo accedervi semplicemente scrivendo Plugin.Value (la proprietà Value ritornerà sempre la stessa istanza).

Quando il container cerca di comporre tutto “l’ambaradan” e non trova un export che per ogni import definito lancerà un’eccezione, ma per evitare tutto ciò è possibile settare la proprietà AllowDefault della classe ImportAttribute a true. In tal modo il container darà all’import non soddisfatto il valore di default.

Ora mettiamo il caso che scriviamo un qualcosa del genere…o meglio creiamo due o piu’ proprietà che hanno lo stesso contratto. La domanda che sorge spontanea è: il container come reagirà? Creerà due istanze diverse oppure Plugin e Plugin2 punteranno alla stessa istanza?

clip_image014

Debuggando il tutto si puo’ notare che entrambe le proprietà puntano alla stessa istanza (hanno Object ID uguale). E se volessimo avere istanze diverse?

E’ sufficiente decorare l’export con l’attributo PartCreationPolicy e passargli CreationPolicy.NonShared

clip_image016

Nel prossimo post vedremo i Catalog messi a disposizione da MEF (Preview 8) e l’implementazione di un catalogo personalizzato.

Stay tuned…

posted @ 07/02/2010 12.36 by Federico Degrandis

Malattia nel Contratto del Commercio

Un'altra di quelle cose che mi ha sconcertato...

Nel Contratto del Commercio (e parlo di quello nazionale) la malattia viene retribuita in maniera davvero singolare:

Per i primi 3 giorni viene corrisposto il 100% dello stipendio (periodo di carenza) ed è carico del datore di lavoro.

Dal 4° al 20° giorno è previsto il 75% (!) della paga: 50% a carico dell'INPS e 25% a carico del datore di lavoro.

Dal 21° giorno in poi (fino al limite di 180 giorni) è previsto nuovamente il 100% ma suddiviso tra: 66,66% INPS, 33,34% a carico del datore di lavoro.

Rinvio a un secondo post il calcolo perchè è davvero complicato.

posted @ 07/02/2010 10.55 by Emanuele Prato

Cercasi tecnica disperatamente <cit.>

Premessa: forse questo post sarebbe più da “forum” che da “muro” ma lo posto qui sperando che il problema non sia solo mio. Sempre pronto, comunque a toglierlo dal muro se lo ritenete necessario. Wink

Problema: sono l’unico sviluppatore nella mia azienda (che ovviamente non produce SW). Come in molte altre situazioni come la mia non solo programmo ma faccio diversi altri lavori “informatici” (acquisto del nuovo HW, query e report vari, seguire  progetti legati a connettività, telecomunicazioni, ecc.). Oltre a questo ho sulla scrivania tutti i famosi capelli (analista, sviluppatore, tester, ecc.) e probabilmente non vesto perfettamente nessuno di questi. Smile

Con il crescere dei progetti (in numerosità e quantità) mi trovo sempre più spesso a lavorare tutta la gionata e a fine giornata chiedermi, mentre torno a casa: “ma oggi non dovevo fare…, ma cosa ho fatto tutto il giorno?” Sarcastic

Domanda: Al momento ho scovato solo una tecnica che mi possa aiutare nella soluzione del problema (quella del pomodoro di cui ho disquisito “poco tempo fa” con Nicolò). Avete delle best practice per “portar fuori la pellaccia”?

Technorati Tags:

posted @ 06/02/2010 8.52 by Nazareno

UK ALM User Group!

E’ nato il primo User Group d’Europa dedicato all’ALM! Si tratta dello UK ALM User Group :) Se vi capita, giovedì hanno il loro primo meeting, in piena Greater London (sede Microsoft a Cardinal Place, Victoria Station Tube stop).

Dai che una birra, in un pub a Londra, non può non starci se siete in zona…ve lo dice uno che è INNAMORATO della City :D

posted @ 06/02/2010 0.45 by Matteo Emili

Rimborsi chilometrici

Buono a sapersi...

In caso di trasferta al dipendente è dovuto il rimborso delle spese che ha sostenuto in base alle tabella ACI. Ma attenzione ne esistono di due tipi:

1. Costi chilometrici (Per calcolare i rimborsi al dipendente (o al professionista) che faccia uso del proprio veicolo svolgendo attività a favore del datore di lavoro.) 

http://www.aci.it/index.php?id=1850

2. Fringe benefit (Per calcolare la retribuzione in natura derivante dalla concessione di veicoli aziendali in uso ai dipendenti, per esigenze di lavoro e per esigenze private.) 

http://www.aci.it/index.php?id=93

I servizi sono accessibili direttamente dal sito dell'ACI (dove viene spiegata chiaramente la differenza): 

http://www.aci.it/index.php?id=86

 

Attenzione che i secondi sono più bassi nei primi (almeno nei casi che ho verificato). Per la mia auto addirittura si dimezzano!

posted @ 05/02/2010 19.54 by Emanuele Prato

Javascript Regular Expression per il controllo di numeri di carte di credito

    * Visa: ^4[0-9]{12}(?:[0-9]{3})?$ All Visa card numbers start with a 4. New cards have 16 digits. Old cards have 13.
    * MasterCard: ^5[1-5][0-9]{14}$ All MasterCard numbers start with the numbers 51 through 55. All have 16 digits.
    * American Express: ^3[47][0-9]{13}$ American Express card numbers start with 34 or 37 and have 15 digits.
    * Diners Club: ^3(?:0[0-5]|[68][0-9])[0-9]{11}$ Diners Club card numbers begin with 300 through 305, 36 or 38. All have 14 digits. There are Diners Club cards that begin with 5 and have 16 digits. These are a joint venture between Diners Club and MasterCard, and should be processed like a MasterCard.
    * Discover: ^6(?:011|5[0-9]{2})[0-9]{12}$ Discover card numbers begin with 6011 or 65. All have 16 digits.
    * JCB: ^(?:2131|1800|35\d{3})\d{11}$ JCB cards beginning with 2131 or 1800 have 15 digits. JCB cards beginning with 35 have 16 digits.
 

posted @ 05/02/2010 12.31 by Alessandro Gervasoni

[DotNetMarche] Pubblicato il materiale del 13° workshop ‘WPF + M-V-VM’

Abbiamo pubblicato il materiale del workshop "Tra presente e futuro delle interfacce utente con WPF e MVVM", e questa volta oltre a codice e slide siamo riusciti a fare anche i video!

Probabilmente a livello di qualità delle riprese si può fare di meglio… ma direi non male come prima volta da cameraman :)!

Trovate tutto il materiale qui!

PS: anche se in futuro cercheremo di fare le riprese, purtroppo non possiamo garantire di avere sempre a disposizione gli strumenti, come tra l’altro già successo per il workshop precedente :(, per cui se potete vi consigliamo sempre di partecipare di persona per non rischiare di perdervi i contenuti… e soprattutto per avere delle possibilità di “fare networking” che con i video sicuramente vi perdereste (vedi il ragazzo che durante l’ultima sessione è stato sempre a parlare con Mauro per chiedergli approfondimenti)!

PS2: purtroppo non ci sono i video della “cena”… che come ha detto qualcuno, più che una cena è stata “un’esperienza”, con un personaggio unico a fare da cuoco/intrattenitore!

posted @ 05/02/2010 10.39 by Stefano Ottaviani

[Blend] Extract Template from a Style

Quando si usa la funzionalità Edit Template->Edit a Copy di Blend

image

Blend in realtà crea uno style che applica il template appena estratto.
Personalmente mi piace organizzare le risorse all’interno di resource dictionaries (styles.xaml, templates.xaml…) e, sebbene Blend permetta di specificare dove posizionare lo style il risultato è che style e template sono tutt’uno e spesso finisco per spostare il template nel relativo resource dictionary e linkarlo nello style via {StaticResource} manualmente.
Oggi, Laurent, mi ha indicato come fare il tutto direttamente da Blend: Mentre si è in modalità di editing del template, selezionate il simbolo dello style nell’elenco superiore:

image

dopodichè selezionate il property peg della proprietà Template e selezionate Convert to new resource

image

e decidete dove memorizzare il template. smile_regular

Technorati Tags:

posted @ 04/02/2010 23.30 by Corrado Cavalli

Ria Services Enterprise Business Application

Segnalo questi tre video sul come creare una applicazione Silverlight di tipo enteprise.

se avete installato RIA Services, quando create un nuovo progetto tra le varie opzioni c’ anche WCF RIA Services Class Library, se qualcuno di voi, come me, avete provato a creare tale progetto, e l’avete quindi cancellato perchè non avete capito come utilizzarlo, ebbene in questi tre video ci sono i passaggi:

 

Part One: http://www.screencast.com/t/NGNiZjg3ZjY

Part Two: http://www.screencast.com/t/NGJkYTEw

Part Three: http://www.screencast.com/t/MWQ2MjdiYTct

 

Presi dal blog : http://www.riaservicesblog.net/Blog/

posted @ 04/02/2010 18.52 by Alberto

Silverlight – Applicazioni d’esempio

Segnalo a questo link una bella applicazione silverlight d’esempio per quanto riguarda lo stile.

Applicazione silverlight

Guardate anche la gestione dei PDF e del calendario, bellissimo!!!!

 

Per chi avesse ancora dubbi su silverlight…

posted @ 04/02/2010 18.47 by Alberto

jshashtable 2.0 : Hashtable in Javascript

http://www.timdown.co.uk/jshashtable/#setup

   1:  <script type="text/javascript" src="jshashtable.js"></script>
   2:  <script type="text/javascript">
   3:      var typesHash = new Hashtable();
   4:   
   5:      typesHash.put("A string", "string");
   6:      typesHash.put(1, "number");
   7:   
   8:      var o = new Object();
   9:      typesHash.put(o, "object");
  10:   
  11:      alert( typesHash.get(o) ); // "object"
  12:  </script>

posted @ 04/02/2010 17.29 by Alessandro Gervasoni

Recuperare l’icona associata ad un file eseguibile

Il .NET Framework fornisce un semplicissimo metodo per recuperare l’icona associata ad un file eseguibile, System.Drawing.Icon.ExtractAssociatedIcon. E’ possibile utilizzarlo, ad esempio, per impostare automaticamente l’icona della form principale della nostra applicazione sull’immagine specificata nelle proprietà del progetto:

Me.Icon = Drawing.Icon.ExtractAssociatedIcon(Application.ExecutablePath)

Semplice e veloce :-)

posted @ 04/02/2010 11.53 by Marco Minerva

WCF RIA Services

Come segnalato dal Blog di Jason Allor’s è finito il 16 Gennaio 2010 la stesura e il disegno delle WCF RIA Services. Ora sono in Bug Fixing, Stress Goals e poi verrà rilasciata la prima versione. Che dire, Complimenti!!!!

 

Jason Allor's Blog

posted @ 03/02/2010 23.11 by Alberto

In esilio volontario

Probabilmente qualcuno ne è già a conoscenza: settimana scorsa ho rassegnato le mie dimissioni da Avanade e, a partire da dopo Pasqua, inizierò a lavorare a Bruxelles, in Belgio, per il Consiglio dell’Unione Europea.

Addio Italia, purtoppo devo abbandonare le tue Alpi e i tuoi laghi. So che mi mancheranno le tue bellezza naturali, ma tutto il resto mi spinge ad andarmene.

Inoltre, in Italia il poco “web” è considerato ancora un suppellettile, ancora più che non il resto dell’IT, ed è quindi sviluppato principalmente da web agency, non da aziende di consulenza IT.

Già al mio ritorno dalla Nuova Zelanda avevo tentato la sorte iscrivendomi al concorso per entrare a lavorare nella Comunità Europea, e finalmente, dopo 2 anni e mezzo (1 anno e mezzo di concorso e 1 anno di attesa per essere pescato dalla lista) mi hanno offerto un posto all’interno di un istituzione della Unione Europea: e anche un posto molto interessante. Sarò team lead e architect del team che sviluppa i siti pubblici del Consiglio dell’Unione Europea.

In realtà ci sono anche dei motivi collegati al tipo di lavoro, dei quali ho parlato sul mio blog in inglese:  So Long Avanade, and Thanks for All the Fish. Ma la voglia di andare via dell’Italia e l’arrivo ormai quasi inaspettato dell’offerta dal Consiglio sono state le due cause scatenanti.

Anche Daniela si è già dimessa, e dopo aver imparato il francese si metterà alla ricerca di un posto come UX. Fortunatamente in Belgio è un ruolo rispettato e richiesto, a differenza dell’Italia.

Per quel che riguarda la community, continuerò, insieme a Emanuele e Claudio a gestire UGIALT.NET e ad organizzare le prossime conferenze.

E ora, ancora meno di due mesi da passare in Italia e poi svalicherò le Alpi per andare verso il Belgio.

posted @ 03/02/2010 19.00 by Simone Chiaretta

Ho fatto e sistemato un danno sul nostro TFS 2010

Ormai è qualche mese che usiamo TFS 2010 e io da poco ho avuto la brillante idea di attivare i test autoamtici su ogni build, con tanto di registrazione degli eventi Intellitrace con un limite di 100Mb per file. Fantastico … … peccato che dopo 500 build il nsotro fantastico DB era diventato di 50Gb e aveva occupato tutto il disco :S

Chiaramente sono corso ai ripari disattivando subito l’Intellitrace su ogni build (in Continuous Integration), estendendo leggermente il disco dati, mettendo il recovery model del DB in simple, facendo un bel backup con successivo shrink del transaction log.

A questo punto il modo più veloce che ho trovato per cancellare questi mega allegati è stato di operare direttamente sul DB della Defaultcollection con il seguente TSQL:

delete from tbl_AttachmentContent where AttachmentId in (SELECT top 10 tbl_Attachment.AttachmentId
FROM   tbl_Attachment     ORDER BY tbl_Attachment.UncompressedLength DESC, tbl_Attachment.AttachmentId)

delete from tbl_Attachment where AttachmentId in (SELECT top 10 tbl_Attachment.AttachmentId
FROM   tbl_Attachment     ORDER BY tbl_Attachment.UncompressedLength DESC, tbl_Attachment.AttachmentId)

Come vedete elimino 10 record alla volta, perchè l’eliminazione porta ad una crescita del transaction log di circa 1Gb e avendo pochissimo spazio a disposizone inizialmente ho fatto 10 allegati alla volta, dopo qualche shrink del DB sono salito a 50.

Adesso il nostro TFS è di nuovo in forma.

posted @ 03/02/2010 16.42 by Ivan Fioravanti

Raf on Channel9

Missione conclusa con successo. Ieri sera Pietro mi ha intervistato in un breve video in cui racconto la costruzione di un sensore per Windows 7 realizzato per il workshop UGIdotNET tenutosi nel pomeriggio nell'auditorium di Microsoft Italia. La registrazione del video è su Channel9.
Nel video c'è una rapida overview della costruzione del dispositivo, il firmware del microcontrollore, il device driver per Windows ed infine l'applicazione che lo utilizza.

Tutto parte da ieri durante la mia sessione "Windows 7: sensori e multitouch cambiano il modo di interagire con il PC" ho ri-mostrato il SurfRaf con nuove demo e con gli aggiornamenti di WPF 4.0 beta2.

Ma la novità era chiaramente il dispositivo USB che ho chiamato RafStorm:

IMG_2672 image

Questo dispositivo è un anemometro molto casalingo che legge (vedi cavetto) i buchi in un piattello (preso da un vecchio hard disk) con 16 buchi. Una forcella costituita da un fototransistor e un led legge la presenza/assenza dei buchi. Calcolando il numero di buchi al secondo e sapendo che ci sono 16 buchi per giro, si ricava facilmente il numero di RPM (giri al minuto).

image image

image image

La reale novità di questo dispositivo è che viene visto come "Sensore" da Windows 7 e questo implica diversi vantaggi molto importanti:

  • Più processi contemporaneamente possono usare il dispositivo senza doversi contendere il canale di comunicazione
  • Le applicazioni possono usare i nuovi dispositivi della stessa categoria senza neppure dover essere ricompilati
  • Non è ncessario usare alcuna libreria del produttore. Nulla di nulla. Le Sensor API espongono i dati con un certo formato a seconda della categoria di cui il sensore fa parte. È il driver dei sensori costruito dal produttore del sensore a dover esporre i dati in modo coerente con la categoria.
  • Security! Dal pannello di controllo gli amministratori del PC possono permettere o negare agli utenti l'uso di ogni singolo sensore. Sempre dal pannello di controllo gli utenti possono scegliere se rendere disponibile o meno i sensori alle applicazioni.

Avevo scritto l'applicazione demo in C# che usa le il wrapper per API di Windows 7 (tra cui quelle dei sensori) già lo scorso anno. Quando ho finito di costruire il device ed il suo driver, l'applicazione ha visto il mio device automaticamente.

La chiave di svolta che consente di trasformare un "normale" dispositivo in un "Windows 7 Sensor" è il driver (in modalità User Mode e perciò aprova di bluescreen) che dialoga con il dispositivo ed espone i dati alle Sensor API.

La semplificazione del modello dei sensori significa poter utilizzare i sensori anche in applicazioni in cui la sensoristica non sia lo scopo primario. Pensate ad esempio al valore aggiunto di cambiare la skin da chiara a scura leggendo la luminosità della stanza. Oppure a leggere l'apertura e chiusura cassetto per un POS.

posted @ 03/02/2010 11.38 by Raffaele Rialdi

Video su Be-It

Grazie al buon Lorenzo, posso provare il player embedded per i video di Be-It. Ecco qui sotto il player con listati i miei tre video :) vediamo se funziona  se ho fatto tutto correttamente.

posted @ 03/02/2010 10.54 by Gian Maria Ricci

UgiDotNet CT: la cena!

Dopo tanto parlare eccoci a quella che è stata definita all’unanimità la sessione più bella della serata: la cena! Siamo andati tutti al RoadHouse in via rivoltana:

SNC00298 SNC00299
SNC00300 SNC00302

Veramente una bellissima serata! Abbiamo mangiato l’impossibile…e la coda alla cassa lo ha dimostrato! Vi dico solo che alla fine ci hanno regalato il limoncello! Ah, dimenticavo, io non l’ho assaggiata ma la torta sembrava buonissima….

SNC00301

posted @ 03/02/2010 9.21 by Michele Aponte