Latest Posts
Beh, devo dire che ultimamente, per chi ancora non se ne fosse accorto, non credo di avere una visione molto oggettiva delle cose.
Non che sia facile averla, dato che già sento una punta di ossimoro nella frase "la mia visione è oggettiva".
Ma devo dire che questi TechDays mi sono piaciuti, sopratutto per la parte Community.
Bello sentir parlare di argomenti quali WPF, Silverlight e altri spunti interessanti...
In particolare ho gradito la sessione su WPF: la nuova generazione di applicazioni client, sopratutto perchè finalmente in una sessione dedicata a WPF NON si è parlato di architettura ma di...WPF. E guardate che sono di parte :)
Per quanto riguarda la sera, come sempre spettacolare. Ho trovato Corrado in grande forma, di Andrea ormai come direbbe qualcuno il mio parere è scontato. Semplicemente disarmante come riesce a farti sembrare normale e logica ogni decisione tecnica presa in un progetto.
Una cosa che non mi gira è che, come ho già detto, a mio parere non bisognerebbe "mischiare" (che brutta parola) la presentazione di una tecnologia come WPF con il parlare di architetture.
WPF è una tecnologia che e, come tale, non guida le scelte architetturali (se mai avviene il contrario). Voglio dire: anche con Windows Form si poteva implementare un design pattern Model-View-ViewModel. Ma perchè prima se ne parlava poco (o proprio per niente, salvo i soliti casi :))?
Attenzione: so benissimo che è meglio che se ne parli, ma deve essere chiaro che sono due discorsi diversi.
Si può usare WPF male (male=senza separazione tra UI e comportamento), come si usavano male le Windows Form. (in realtà è più difficile:)
Non è che con WPF siamo tutti esperti di design pattern, voglio dire non in automatico.
Se si è esperti di design pattern si lavora meglio con WPF. Ma si lavora meglio con qualsiasi tecnologia di presentazione.
Non vorrei che, chi ancora non sa cosa sia WPF, si faccia un'idea che sia "la solita pippa da chi vuole infilare design pattern ovunque...".
Il tutto imho.
Dopo l'ennesimo cliente/collega che mi ha fatto notare quanto sia complessa la gestione della configurazione WCF, mi è venuto in mente che probabilmente il nome è stato scelto con un criterio ben preciso: WCF = Windows Configuration Foundation altro che Communication :)
E' vero che i programmatori sono felicissimi, perchè adesso nel codice bastano pochi attributi per creare delle comunicazioni tra macchine in un lampo con transazioni distribuite, singleton, pattern async, etc., e tutti pensano grande, adesso è tutto più semplice ! Come mai prima non era così ? Risposta semplice: la complessità c'è ancora, ma è stata spostata nella configurazione dei servizi che già di base è qualcosa di allucinante (service, client, endpoint, binding) poi quando ci si addentra nelle parti più avanzate (security, identity, service behavior, endpoint behavior, dimensione mesaggi, chiamate concorrenti, lunghezza coda, etc.) è proprio la fine. Altro che ABC = Address, Binding, Contract :D
Guardate questo schema della struttura parziale (mancano le extension) del file di config e capirete subito di cosa sto parlando:
Personalmente sono da più di 3 anni che "smanetto" su WCF fin dai tempi di Indigo quindi molti concetti legati alla configurazione li ho acquisiti, ma effettivamente mi accorgo che per moltissimi sono ... usando testuali parole di un cliente austriaco "pain in the ass".
Quasi quasi mi lancio in una serie di post in italiano dedicati ai file di configurazione di WCF, dite che potrebbe essere utile per lo User Group ? (ndr oltre che per i miei colleghi che cannanno il transactionFlow lasciandolo a false, così le transazioni distribuite "toccano" alla grande :D) (ndr per i clienti: nei file finali era tutto a posto :D)
Vi è mai capitato "Arithmetic operation resulted in an overflow" nella lettura di campi numerici Oracle? Il problema si verifica in fase di lettura di una colonna NUMBER definita senza precisione; tale lettura potrebbe fallire. (continua)
Mi è capitato su entrambi i PC, quindi probabilmente è una problematica ricorrente. Malgrado avessi disinstallato ENTLIB40, tentando di installare la v4.1 ricevevo l'errore: "This version of the Enterprise Library cannot be installed side-by-side with version 4.0. Please uninstall Enterprise Library v4.0 and try again.". La (banale) soluzione consiste nella cancellazione della chiave "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Enterprise Library v4" dal registro di sistema.
Che dire .... ottimo inizio per il corso avanzato di Biztalk tenuto da Nino Crudele e siamo solo al primo giorno. In mezza giornata ha concentrato tutto il corso base di Biztalk e devo dire che abbiamo toccato tematiche decisamente interessanti, da adesso vedendo la scaletta è tutto in crescendo fino ai fuochi d'artificio finali con Oslo, Dublin, Biztalk 2009, WF 4.0 & C.
Tanto di capello per Nino che si merita ampiamente il titolo di MVP.
@Nino: Preparati che al terzo giorno arrivo col portatile e qualche problemino interessante da vedere insieme, tipo mapping di envelope-body a envelope-body modificati solo tramite send port + mappa. Io ci ho provato in tutti i modi, se tu ne esci fuori metto un tuo poster formato gigante dietro di me in ufficio a mo' di santino :)
L'istituto Trendence ha effettuato uno studio sulle preferenze e sui tempi impiegati dai giovani europei a trovare lavoro. Hanno intervistato 90 mila studenti in decine di università in tutta Europa. I risultati sono stati pubblicati sul Financial Times del 14 Ottobre 2008 (pagina 19).
Risulta che i mesi necessari per trovare lavoro sono 6,2 in Italia, 4,9 in UK, 4,4 Spagna, 3,9 in Portogallo, 3,6 in Germania, 3 in Francia. Peggio dell'Italia solo la Grecia con 9 mesi di attesa.
Interessante anche le aspettattive di retribuzione:
In Italia i giovani si aspettano di guadagnare circa 23 mila Euro, mentre in Danimarca, Norvegia, Germania e Austria l'apettattiva di stipendio è doppia.
Per quanto riguarda le società Europee più attraenti al primo posto c'è l'Oreal, Apple al terzo, BMW al terzo, Google ottava. Microsoft è solo al 14esimo posto. La prima italiana è Ferrero al 50esimo posto 
Le stringhe in .NET sono oggetti immutabili, quindi se si devono concatenare insieme un numero elevato si stringhe, usare l'operatore + è inefficiente, perché ogni volta verrebbe creata in memoria una nuova stringa. Per ovviare al problema, si deve utilizzare l'oggetto StringBuilder che, come si legge su MSDN, rappresenta una sequenza mutabile di caratteri, quindi ad esso è possibile aggiungere, rimuovere, inserire o sostituire caratteri senza la necessità di istanziare un nuovo oggetto in memoria.
Questa è la favoletta che tutti noi conosciamo... Però quando oggi, facendo debug di codice scritto da altri, ho sostituito tutte le concatenazioni di stringhe con uno StringBuilder ed ho osservato che il tempo di esecuzione è passato da 2 minuti a 3 secondi scarsi, mi si sono illuminati gli occhi 
Technorati Tag:
.NET,
Programming
Microsoft aveva richiesto che fossero disponibili in modo free ed ecco puntualmente che la ISO comunica la loro pubblicazione.
I file si trovano qui e sono quelli identificati da "ISO/IEC 29500" che ad oggi si trovano in fondo alla pagina di download.
Negli imminenti TechDays/WPC, la cui keynote sarà a cura niente meno che di David Chappel, una delle mie quattro sessioni è proprio su come creare/leggere documenti basati su questo nuovo standard.
Dopo quasi un anno dall'acquisto del libro "Windows Presentation Foundation Unleashed", ho ripreso a studiare questo nuovo mondo che, per impegni diversi, avevo tralasciato.
La difficoltà maggiore che ho trovato e che sto cercando di superare, è quella di approcciare la programmazione WPF come se si stesse programmando Windows Forms, sono mondi divesi e bisogna cambiare mentalità.
Tra l'altro, ero alla ricerca di esempi su come mettere in pratica il pattern Model-View-ViewModel che mi sembra sia molto valido per WPF e apprezzato dagli sviluppatori.
Ho trovato questo video di Jason Dolinger, lo considero veramente chiaro ed esplicativo di come applicare questo pattern, partendo dal vecchio approccio "Windows Forms Style" nell'uso del code behind fino ad arrivare all'uso di solo xaml.
Peccato che mi sia perso verso la fine quando ha introdotto Unity per gestire la Dependency Injection del ViewModel, troppi concetti in una volta sola
.
Ad ogni modo ho scaricato il video sul desktop e me lo rivedrò diverse volte fino a che imparerò. Perseverare
!
Ieri, da un cliente, mi viene segnalata una stranezza: La stessa applicazione, su due macchine praticamente identiche, su una funziona mentre sull’altra si blocca senza nessun messaggio di errore.
Dopo una breve analisi sembra che l’unica differenza sia nella recente installazione del .NET FX 3.5 Sp1 sulla macchina che da problemi.
A questo punto, a “botte di debugger” il problema viene identificato nell’ utilizzo del BinaryFormatter per serializzare/deserializzare un grafo di oggetti, da qui parte la ricerca su Connect e a quanto pare qualcuno aveva già segnalato il problema. Da questo post veniamo dirottati su un altra segnalazione dove viene citato il recente rilascio di una hotfix.
Alla fine, giungiamo alla pagina ufficiale della KB957543 e, ottenuta la hotfix, il problema sembra essere risolto.
Nel caso capitasse anche a voi, ricordatevi di questo post… 
Onestamente le mie prime impressioni su Blueprints 2.1.1 sono sicuramente positive per l'enorme passo avanti fatto rispetto a GAX/GAT per quanto riguarda lo sviluppo della Software Factory, però siamo ancora un po' lontani da qualcosa di utilizzabile per una software factory completa.
Facendo giusto qualche prova ho trovato subito 2 issue (prontamente segnalate su Codeplex) relative alla parte Workflow WF-Command, per una ho trovato un workaround, ma per l'altra senza il source code delle Activity di base di Blueprint non se ne esce proprio.
Comunque andrò avanti a fare esperimenti e segnalare bug :)
| Nel numero 133 di IoProgrammo attualmente in edicola c’è un mio articolo, introduttivo, sulla piattaforma di sviluppo di Microsoft relativa alla progettazione di servizi, in standard SOA, per componenti software destinati alla robotica. Buona lettura. |
É il secondo evento a cui partecipo (il primo sono stati i Community Days). Devo dire che queste giornate mi piacciono. Ci si incontra, si vedono i mostri sacri delle community e di mamma MS che si aggirano e si mischiano coi poveri mortali e si assiste, spesso, a sessioni molto interessanti. Il giudizio complessivo, forse falsato da questo pregiudizio positivo, non può che essere molto positivo.
Cominciamo: devo dire che dopo la keynote vedere arrivare l'autore di questo a parlarci di EF mi ha fatto un attimo saltare sulla sedia. Devo dire che in questo caso ero prevenuto; infatti è stato un bravo oratore e ci ha raccontato quello che ci doveva raccontare molto bene. La sessione è stata molto base, non ha detto tutto, ma si sa il tempo è tiranno (anche se spiegare perchè nell'esempio con Linq gli order item non fossero caricati non sarebbe stato male). La sua sessione su Sql Server 2008 l'ho seguita con un po di distacco perchè ha parlato prevalentemente dei nuovi data type. Solo alla fine ha dato ottimi spunti di riflessioni sui nuovi meccanismi di Change Tracking.
Le sessioni su ASP.NET Dynamic Data e Silverlight 2 sono state interessanti. Diciamo che su Dynamic Data chi segue questo blog (l'autore delle due sessioni) aveva già visto gran parte di ciò che è stato esposto.
Sono stato piacevolmente colpito dalla sessione su WPF. Devo dire che lo speaker, che non conoscevo nemmeno di nome, è stato molto in gamba. Parlava come un libro stampato. Non ho visto ancora un granchè di WPF e ho cominciato a capire quali sono i meccanismi che ci stanno dietro.
Arriviamo quindi agli After Hours! Corrado mi ha dato uno schiaffone (si fa per dire). Grazie alla sua sessione ho cominciato a capire "davvero" ciò che WPF vuole essere. Non un compagno bensì il sotituto di Windows Forms a tutti gli effetti; non è solo un modo per offrire interfacce utente particolarmente ergonomiche e accattivamenti, bensì offre una serie di linee guida implementative che sono manna dal cielo per gli sviluppatori. E devo dire che ho come la sensazione che non si sbagli quando dice: "se provate MVVM non potrete più tornare indietro". Sperimenterò...
Su Andrea non mi esprimo. Io sono tra quelli che oramai quando parla lui rimangono imbambolati e fanno fatica a trovare qualcosa di sbagliato in quello che dice e quindi ogni giudizio sarebbe falsato da quella che ormai sembra una sorta di fede religiosa incondizionata.
La BOF è stata come sempre la parte più "divertente". Sul palco si è unito Roberto come "moderatore" che mi è sembrato molto in forma. Partecipo di rado discussioni su TDD, DDD e scelte architetturali giuste o sbagliate con così tante persone. E in certe discussioni saltano fuori cose come BDD di cui non si è mai sentito parlare. In più è strepitoso come ci si "accusi" a vicenda di voler soddisfare il proprio ego personale. L'unica cosa che mi dispiace è che sono ancora molto "timido" e a volte mi sento poco preparato per potere intervenire! Giuro che però la prossima volta mi impegnerò per dire anche la mia.
Ora mi limito a fare questa osservazione: il must deve rimanere "Soddisfare i requisiti del cliente". Se però, appena si riesce, nel soddisfare i requisiti del cliente, si riesce a soddisfare il proprio ego, beh che dire, non mi sembra il male assoluto.
Matteo
Una brevissima introduzione: i contratti di servizi WCF scambiano dati col client tramite classi serializzabili. Gli argomenti e i valori di ritorno dei metodi dei servizi potranno quindi essere dei Value Type oppure delle classi decorate, per esempio, con gli attributi DataContract (classi) e DataMember (proprietà dei DataContract).
Supponiamo di aver definito una base di servizi contenente due servizi che usano come DataContract alcune classi definite in un altro assembly che potrebbero essere le Entity di EF piuttosto che dei DTO creati ad hoc.
Se aggiungiamo una Service Reference alla nostra applicazione, noteremo che all'interno del codice generato sul nostro client vengono create delle implementazioni dei nostri DataContract: ovvero, siccome il client non conosce le implementazioni effettive dei DataContract, se le crea. Così facendo però, se aggiungiamo una seconda Service Reference al client, le implementazioni verranno ricreate tutte. Il succo è che sul server i due servizi condividevano i DataContract sul client si troveranno a lavorare con DataContract diversi.
Se la nostra scelta è quella di scambiare direttamente le Entity questo comportamento potrebbe non piacerci; anche se usiamo dei DTO potrebbe non piacerci, perchè potremmo aver condiviso sul server alcuni DTO tra i vari servizi per evitiare il moltiplicarsi di classi all'interno del nostro progetto. Per ovviare a questo problema è sufficiente aggiungere sul client un riferimento all'assembly contenente la definizione dei DataContract scambiati.
Al momento della creazione della Service Reference, cliccando sul tasto Advanced possiamo accedere a questa finestra di configurazione:
Di default l'opzione evidenziata è selezionata. In questo modo possiamo decidere se utilizzare o meno direttamente le implementazioni dei DataContract presenti nell'assembly referenziato dal client.
Matteo
Come tutti sappiamo, utilizzando la proprietà IsPostBack è possibile determinare se una pagina ASP .NET è stata caricata per la prima volta oppure in seguito ad un PostBack (causato, tipicamente, dalla pressione di un pulsante). Ma se si ha la necessità di sapere quando una pagina è ricaricata con il tasto Aggiorna del browser? In questo caso non esiste una proprietà "pronta all'uso", ma cercando sulla rete si possono trovare diverse soluzioni, le più efficienti delle quali si basano sull'utilizzo di un opportuno HttpModule. A questo indirizzo è disponibile una esauriente descrizione del problema, accompagnata da un file ZIP che contiene il modulo HTTP già compilato.
Giovedì 27 Novembre al complesso Monte S. Angelo (Napoli) si terrà un seminario gratuito sulle tecnologie Microsoft.
Microsoft presenta i più recenti prodotti di sviluppo e tecnologie per la realizzazione rapida di applicazioni e la gestione del loro ciclo di vita attraverso un seminario dedicato all’approfondimento delle architetture di sviluppo allo stato dell’arte.
L’incontro comprende due sessioni tecniche dedicate alle tecnologie per il web e al ciclo di vita delle applicazioni.
Nello specifico l’agenda sarà:
ASP.NET
Partendo dall’architettura del Framework .NET e sua integrazione con Internet Information Server e Active Directory, viene mostrato attraverso esempi pratici come aggiungere funzionalità di l’accesso ai dati con ADO.NET, le membership, la personalizzazione e implementazione di sicurezza integrata (Intranet) ed esterna (Internet) e le tecnologie AJAX per la scrittura di applicazioni per il WEB 2.0.
Speaker di questa sessione: Mauro Minella – Microsoft Italia
Application Lifecycle Management
Vengono affrontati tematiche di Application Lifecycle Management, passando poi alla realizzazione di case study specifici attraverso l’utilizzo di Visual Studio Team System e Team Foundation Server. Particolare attenzione è riservata alla interoperabilità fra sistemi Microsoft ed altre tecnologie e prodotti, in particolare Eclipse su sistema Linux.
Speaker di questa sessione Lorenzo Barbieri - Microsoft Italia
Il seminario si svolgerà nella “Sala Rossa” dei Centri comuni.
Troverete il link per la registrazione all’evento qui dopo lunedì 17.
Come arrivare a Monte S.Angelo da via nuova Agnano (per gli studenti di Ingegneria Informaitca)
Prendete la cumana direzione Montesanto.
Dalla stazione Campi Flegrei, che si trova a piazzale Tecchio, Fuorigrotta, prendere uno dei seguenti autobus:
C15: prendere l'autobus al capolinea (piazzale Tecchio) in direzione Pianura e scendere alla fermata "Monte Sant'Angelo".
180: prendere l'autobus al capolinea (piazzale Tecchio) in direzione Scampia scendere alla fermata, "Monte Sant'Angelo".
Navetta ANM Monte S.Angelo: prendere l'autobus al capolinea (piazzale Tecchio) e scendere all'ultima fermata, "Monte Sant'Angelo".
Autobus S.E.P.S.A. p.le Tecchio - rione Traiano: prendere l'autobus al capolinea (piazzale Tecchio) in direzione rione Traiano, scendere alla fermata "Monte Sant'Angelo" .
C8: prendere l'autobus in direzione Soccavo, scendere alla fermata "Parco San Paolo - Centro commerciale San Paolo", procedere per via Cintia verson Monte Sant'Angelo (5 minuti).
Per chi arriva con la macchina la soluzione migliore è passare per via terracina (quella sopra al MED) e non per viale Kennedy. Trovate qui il percorso.
Potete parcheggiare nel parcheggio nelle vicinanze dell'uni per meno di un euro.

Ieri è stata rilasciata la versione 2.1.1 di Blueprints con i relativi sample disponibili qui. Sempre ieri sono stati resi disponibili degli screencast molto utili qui.
Comunque ho deciso di cominciare a postare qualche info in italiano sui vari esperimenti, in teoria proveremo a migrare la nostra attuale factory WCF custom come esperimento.
Oggi avrei dovuto essere qui e poi qui ed invece sono... qua. :-(
Spero davvero che quantomeno le attività di questo mese e mezzo di ritmi lavorativi quasi disumani si concludano col massimo dei risultati.
...con tutta la nostalgia per la community che questo comporta.
Anche DotNetMarche, alfine, si aggrega ai Community After Hour del tour dei Microsoft Days, con un evento programmato per giovedì 11 dicembre.
Dopo averci introdotto a Silverlight 2 (all'epoca in stato di beta) in una sessione del tour di lancio di Visual Studio 2008, Alessandro Giorgetti torna a parlarcene con un intero evento dedicato alla versione finale.
Durante l'incontro, di taglio pratico, con tanto codice e poche slide come piace a noi programmatori, Alessandro ci illustrerà come utilizzare Silverlight per costruire applicazioni business (LOB - Line Of Business applications) e come poter riutilizzare il codice sviluppato in soluzioni basate su WPF.
L'evento, di livello medio / avanzato (per l'introduzione a Silverlight è disponibile il materiale della precedente sessione di Alessandro con codice aggiornato alla versione finale di Silverlight qui), si concentrerà quindi più sulle caratteristiche che permettono a Silverlight di essere una tecnologia adatta per realizzare applicazioni LOB, grazie anche all'integrazione con le altre componenti del framework come WCF e LINQ, rispetto alle sue potenzialità a livello multimediale.
Ci focalizzeremo su questioni come:
- architettura del progetto
- realizzazione di interfacce utente
- interazione con il Data Layer e servizi in generale
- multitargetting Silverlight / WPF
- integrazione dell'applicazione principale con moduli / plugin, tramite pattern MVP e MVC (per semplificare il porting su WPF)
- modularità ed inversione di controllo
L'iscrizione all' evento è gratuita! Qui Agenda e Registrazione.
Oggi, da novizio programmatore di Workflow per SharePoint, mi sono imbattuto nel primo “ostacolo”. Quello che volevo fare era semplicemente creare un workflow di esempio utilizzando Visual Studio 2008 e utilizzando il template apposito che viene messo a disposizione dai Visual Studio Tools for Office.
Niente di più semplice. Si crea il progetto scegliendo l’apposito template (nel mio caso un workflow sequenziale), si creano le attività, si compila e si testa andando in debug (o si rilascia direttamente).
Effettivamente risulta tutto molto semplice, ma se si sta lavorando con WSS 3.0 e non con MOSS 2007, ci sono delle piccole modifiche da fare. Prima di tutto il template fa riferimento all’assembly Microsoft.Office.Workflow.Tasks.dll che è disponibile solo in MOSS. Occorre quindi rimuovere la reference dal progetto.
Fatto questo e provando a fare il deploy (o debug) si ottiene però un altro errore:
Error 3 Feature '0837a41e-b8d2-43f5-87ae-94a35a018530' could not be installed because the loading of event receiver assembly "Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" failed: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.
Anche in questo caso si fa riferimento ad un assembly e ad una caratteristica (feature receiver) presente solo in MOSS. Per rimuovere l’errore occorre editare il file feature.xml ed eliminare dal tag <Feature> i due attributi ReceiverAssembly e ReceiverClass.
A questo punto tutto funziona alla perfezione.