MesBlog

Thinking in sharp architectures
posts - 179, comments - 436, trackbacks - 150

venerdì 10 giugno 2011

Webcast UGIDotNET

Come anticipato, ho realizzato e pubblicato sul canale Vimeo di UGIDotNET la prima parte di un webcast sulla gestione dei cross-cutting concerns mediante Microsoft Enterprise Library 5.

In questa prima parte viene affrontata la questione utilizzando solamente Unity 2.0, il framework di IoC di Microsoft, con un approccio “dal basso”, ovvero evidenziando inizialmente il problema per poi approntare una prima soluzione di base.

Nella seconda parte verrà poi ampliata la soluzione proposta utilizzando, oltre a Unity, anche determinati Application Block della Enterprise Library 5.

Buona visione.

posted @ venerdì 10 giugno 2011 12.06 | Feedback (4) |

giovedì 9 giugno 2011

UGIDotNET webcast in arrivo

Lunedì si è svolto il workshop UGIDotNET ".NET New wave, parte 2", un esperimento di evento che secondo me ha avuto un discreto successo.

Da una parte una location diversa dal classico evento in Microsoft Italia, bensì in una biblioteca comunale pubblica, dall’altra un taglio meno mainstream, ma decisamente più orientato a pratiche e tool.

Personalmente credo che sia una strada da percorrere nuovamente perchè permette di approfondire aspetti della vita di un dev che difficilmente trovano spazio in altri eventi (ad esempio devo dire che la sessione di Alessandro su Nuget è stata veramente molto molto interessante).

Ma veniamo più specificatamente al topic di questo post: durante la mia sessione ho provato a registrarla live con lo screen capture di Expression Encoder Pro, ma con mia grande incazzatura sorpresa, la versione che si scarica da MSDN è castrata rispetto a quella full: la massima durata registrabile è di soli 10 minuti, dopo di che va riavviato.

Esperimento fallito, ma questo mi ha comunque dato lo spunto per pensare di realizzare della sessione un paio di webcast che pubblicherò nei prossimi giorni sul canale Vimeo di UGIDotNET. In pratica dividerò in due il contenuto della sessione (che è durata qualcosa più dell’ora e mezza) e se il risultato sarà soddisfacente non è detto che la cosa si ripeta, nel senso che su Enterprise Library e Unity c’è talmente tanto da dire che in teoria c’è spazio per affrontare molti altri temi oltre alla gestione dei cross-cutting concerns.

Quindi quello che posso dire è stay tuned.

posted @ giovedì 9 giugno 2011 9.27 | Feedback (5) |

venerdì 20 maggio 2011

Annuncio di lavoro

Sul forum ho postato un annuncio di lavoro per la ricerca di uno sviluppatore .NET in ambito web (ma ci saranno opportunità anche sul versante desktop e mobile) su Milano. lo si può trovare qui.

L’azienda presso la quale lavoro sta espandendo il proprio settore IT ed infatti questo è il secondo annuncio di lavoro che mi capita di postare in pochi mesi, chiunque sia interessato mi contatti tramite il blog, tramite il forum o direttamente all’indirizzo di e-mail che si trova nella pagina dell’annuncio di lavoro (indicata nel post del forum).

posted @ venerdì 20 maggio 2011 15.53 | Feedback (0) |

lunedì 13 dicembre 2010

In cerca di una figura tecnica

Scrivo questo post perché l’azienda per la quale lavoro (Value Lab Srl) è in cerca di una figura tecnica da inserire nel proprio organico.

Ho volutamente scritto figura tecnica e non semplicemente sviluppatore per un motivo ben preciso: l’ambito di lavoro ha uno spettro di attività per cui il termine sviluppatore non è sufficiente, o almeno non rende esattamente l’idea.

Value Lab Srl è un’azienda di consulenza marketing e retailing, in altre parole aiuta altre aziende a migliorare le proprie performance di vendita e penetrazione del mercato andando ad ottimizzare alcuni processi e/o analisi.
Una delle leve per ottenere questo risultato è quella dell’Information Technology, dal data minining (soprattutto con SAS) all’analisi territoriale GIS (principalmente mediante software ESRI) in ambiente Microsoft.

La figura che stiamo cercando, che lavorerà principalmente con me, si occuperà delle seguenti tematiche:

  • Sviluppo software Microsoft .NET, principalmente Silverlight e ASP.NET MVC (ma anche WPF in certi frangenti)
  • Acquisizione di expertize sui prodotti ESRI, in particolare sulla gestione delle banche dati cartografiche digitali
  • Personalizzazione di applicazioni GIS utilizzando i prodotti ESRI sia desktop che web (quasi tutti basati su Microsoft .NET)

Questo per quanto riguarda strettamente l’aspetto tecnico, d’altra parte l’azienda ha un ventaglio di clienti e di industries molto ampio, l’interazione con i clienti è all’ordine del giorno, quindi stiamo cercando qualcuno anche in grado di relazionarsi con facilità sia internamente con l’area di consulenza non IT (tutti coloro che si occupano di marketing e retailing), sia esternamente con i clienti stessi.

Il profilo professionale del candidato che abbiamo in mente è quello di una figura tecnica a metà strada fra il junior ed il senior: deve avere qualche anno di esperienza nello sviluppo software in ambito Microsoft .NET, preferibilmente web, non è necessario che abbia un solido background architetturale e/o metodologico (per questo mi attiverò personalmente nel condividere con la persona quanto necessario). Stiamo pensando anche ad un target di età che non superi i 30 anni. In generale però quello che più ci interessa è una personalità che sia il più possibile autonoma e proattiva una volta ricevute le opportune indicazioni di lavoro e che abbia voglia di approfondire gli aspetti di business, tecnici e metodologici delle soluzioni a cui dovrà lavorare (che significa: fra un bravo tecnico stile impiegato delle poste, preferisco qualcuno da sgrezzare sveglio e intraprendente).

Per quanto riguarda la retribuzione sarà calibrata in base al profilo del candidato.

La sede di lavoro è a Milano in via Durini, nei pressi di Piazza San Babila (disclaimer: è un’azienda di consulenza, quindi un ambiente di lavoro generalmente formale)

Chi fosse interessato mi contatti tramite il blog o all'indirizzo di posta elettronica roberto.messora@valuelab.com

posted @ lunedì 13 dicembre 2010 14.32 | Feedback (3) |

venerdì 12 novembre 2010

Webtech Conference

Martedì e ieri ho partecipato come speaker alla Webtech Conference, ottimamente organizzata da coloro che organizzano anche Basta! Italia (un plauso a Simone Longo per il risultato finale).

Ho avuto la possibilità di parlare di Silverlight WCF RIA Services e soprattutto, per la prima volta, di un argomento che mi sta molto a cuore: mappe web, presentando una sessione sul framework Javascript open source di riferimento, OpenLayers.

Avere la possibilità di parlare di GIS per la prima volta è qualcosa che mi ha dato molta soddisfazione, anche perché da qualche tempo il tema delle mappe e della cartografia web sta avendo sempre più importanza, grazie anche ai due colossi, Google Maps e Microsoft Bing.

Devo dire che la platea ha reagito molto bene alla presentazione, nel senso che se da una parte io stesso ci sono andato cauto con lo “sciorinare” tutta una serie di concetti e di termini da puro cartografo, dall’altra la curiosità di scoprire che cosa offre OpenLayers rispetto alle API di Google e Bing, ha reso la sessione piuttosto seguita (e devo dire che nessuno credo si aspettasse di scoprire che Openlayers, in termini di flessibilità e funzionalità offerte, per certi versi batte di gran lunga gli altri due framework).

Le presentazioni e il materiale delle demo lo si può scaricare dal mio account pubblico Windows Live SkyDrive:

Un’ultima nota sulla conferenza: ho scoperto con un certo stupore che Javascript “rullezza”. La track di mercoledì è stata sempre piena, anche per temi piuttosto avanzati come le specifiche tecniche della nuova versione di ECMAscript (la 5). Esiste una sorta di community trasversale e forse anche un po’ underground intorno a Javascript, molto numerosa, e comincio veramente a credere che Javascript sia uno dei linguaggi di programmazione più sottovalutati della storia.

posted @ venerdì 12 novembre 2010 0.31 | Feedback (1) |

giovedì 14 ottobre 2010

Anche la mia su Windows Phone 7

Concordo con Andrea quando dice che ultimamente c’è molto hype intorno a WP7, soprattutto da parte degli sviluppatori (a ragione secondo me dal loro punto di vista).

D’altra parte però voglio fare alcune considerazioni sul collocamento di WP7 perchè ho sentito molte opinioni su cui dissento nella maniera più totale.

Partiamo dai punti fermi:

  • qualsiasi smartphone oggi si deve confrontare con iPhone; volente o nolente è iPhone il riferimento, quale che sia la ragione a monte
  • Android sta avendo un grande successo

Ora, io viaggio molto in metropolitana a Milano ed osservo. nell’ultimo anno il numero di persone che hanno un iPhone è aumentato in maniera esponenziale e oggi come oggi ci sono end user che di tecnologia non capiscono assolutamente niente (con tutto il rispetto), ma soprattutto vedo un successo di iPhone (ma anche Blackberry) fra le donne che mai mi sarei aspettato: tutte con le cuffie alle orecchie (iPhone è per loro anche sinonimo di iPod), che navigano su Facebook e chissà che altro.

WP7 è un sistema operativo, bellissimo secondo me (che non comprerei un iPhone nemmeno sotto tortura, bè ne possiamo parlare in questo caso), ma pur sempre un sistema operativo. Questa considerazione banale è il punto di partenza per sottolineare quella che secondo me è la prima grandissima differenza fra iPhone e WP7: il device, insomma il ferro.

Nel momento in cui le fasce di utenti di iPhone, e quindi degli smartphone in generale, crescono andando a comprendere anche coloro che sono a digiuno di tecnologia, intervengono anche altri fattori che incidono sulla decisione di quale aggeggio comprare. Posto che i prezzi si equivalgono attestandosi su valori abbastanza alti (non sono proprio giocattolini) e che quindi non può essere il costo una variabile discriminante, diventano importanti aspetti come il peso del brand, la fattura del telefono (aspetto, rifiniture, sensazione tattile, ecc.), la disponibilità di accessori, tanto per fare degli esempi.

In questo senso, bè non c’è quasi partita: iPhone è decisamente avvantaggiato. Sul brand non voglio nemmeno addentrarmi in un confronto: Samsung ed LG sono conosciute per produrre elettrodomestici e televisori di largo consumo, HTC è sconosciuta ai più, HP e Dell certo non hanno il richiamo di Apple.
La fattura del device vede ancora iPhone fare maggiore presa per il solo suo presentarsi (a me non piace sia chiaro, è come comprare un’Audi A3…). Non metto in dubbio che siano molto ben fatti ed abbiano ottime caratteristiche tecniche i telefoni che sono stati presentati al lancio di New York di WP7, ma sono abbastanza anonimi. Se mi metti 20 smartphone su un tavolo senza logo l’iPhone te lo riconosce subito chiunque gli altri si assomigliano tutti.

Vogliamo parlare degli accessori della casa e di terze parti? OK lasciamo stare… con iPhone posso farmi un impianto stereo a casa di tutto rispetto semplicemente appoggiando in maniera molto elegante il mio telefono in un alloggiamento dedicato, e mi fermo qui.

WP7 deve combattere contro tutto questo, non solo contro l’Apple Store e iOS, e molte delle battaglie non sono nemmeno di sua competenza, nel senso che sono demandate ai costruttori.

Andorid però ci sta insegnando che è possibile ottenere delle belle vittorie, il suo tasso di adozione è altissimo e le ultime notizie lo danno in fase di sorpasso negli USA su iPhone. La maggiore forze di iPhone è anche la sua maggiore debolezza: sistema operativo e device prodotti da un unico soggetto.

Perchè se è vero che i device degli altri sono anonimi, è altrettanto vero che la potenza di fuoco di costoro è enorme se confrontata con quella di Apple, mi viene semplicemente da pensare ai tempi biblici di ordine ed arrivo di un iPhone durante il lancio di una nuova versione, quando dall’altra parte si sta parlando di colossi della produzione industriale e della distribuzione.

In tutto questo WP7 c’entra ben poco, la sua partita la deve giocare sul suo fronte specifico, il software, i contenuti, le applicazioni, la possibilità di essere aggiornato, la facilità di sviluppo, ecc.

Un certo tipo di hype a me non piace , lo dico francamente (a meno che non si tratti di marketing e allora ne comprendo la natura commerciale), mi piacerebbero giudizi più equilibrati o perlomeno non parziali, o se proprio vogliamo circostanziati, senza inutili apoteosi.

A proposito: a me piace il Dell. Ma penso che andrò avanti ancora ben un bel pezzo con il mio LG da due soldi.

posted @ giovedì 14 ottobre 2010 0.19 | Feedback (5) |

mercoledì 26 maggio 2010

Silverlight: risorse per tutte le stagioni

Esiste un metodo abbastanza generale per poter caricare da ovunque una risorsa Silverlight (che si tratti di un’immagine o di un dictionary), ed è il classico metodo che taglia la testa al toro soprattutto nelle situazioni non convenzionali, ad esempio caricare un’immagine che sta in uno xap (magari in un assembly di risorse) in una class library che sta in un altro xap (ad esempio un plug-in dell’applicazione principale che sfrutta la disponibilità delle risorse comuni).

Il metodo in oggetto sfrutta l’utilizzo di un URI formattato in maniera particolare ovvero:

/{nome-assembly-dove-si-trova-la-risorsa};component/{percorso-locale-della-risorsa-nell’assembly}

Quindi l’immagine Banner.png nella cartella Images dell’assembly MyAssembly avrà un URI basato sul seguente path:

/MyAssembly;component/Images/Banner.png

Per quanto riguarda un resource dictionary avremmo:

/MyAssembly;component/Resources/BrushResources.xaml

posted @ mercoledì 26 maggio 2010 12.44 | Feedback (0) |

venerdì 21 maggio 2010

Troppi facili entusiasmi

Sento levarsi lodi sperticate al genio umano per la realizzazione della prima cellula artificiale.

Peccato che con il "genio della scoperta" non si gestiscano poi le scoperte stesse: rimane uno straordinario esercizio di abilità intellettiva certo, ma ben poco ha da offrire ai posteri in termini di uso dei frutti dell'ingegno profuso.

Io semplicemente non riesco a dare alcun credito all'umanità, mi spiace: troppe volte e troppo frequentemente, siamo riusciti ad impadronirci delle idee e delle realizzazioni delle menti più brillanti della nostra razza di esseri viventi senzienti, per utilizzarle per scopi che nulla avevano a che vedere con gli obiettivi inziali.

E nessuno mi convincerà che stavolta sarà diverso, perchè non è mai diverso.

Non siamo pronti, non siamo mai stati pronti, nè lo saremo mai.

posted @ venerdì 21 maggio 2010 10.38 | Feedback (2) |

giovedì 18 febbraio 2010

Un perchè per gli extension methods statici

Premessa: sto solo facendo una pura (sega mentale) divagazione.

Esiste un caso in cui poter scrivere extension methods statici non sarebbe male. Avete presente tutte quelle classi per cui esiste una proprietà statica “Current”? Che sono HttpRequest.Current tanto per fare un esempio.

Ebbene, ho a che fare con una libreria di terze parti per cui tramite CoCreate (sono in ultima istanza oggetti COM) è possibile istanziare l’oggetto singleton Application che si riferisce proprio all’applicazione stessa in quel momento attiva. Ebbene sarebbe tanto bello, dal punto di vista puramente estetico (da qui la “divagazione”), poter scrivere nel codice Application.GetCurrent, invece che sporcarlo con una chiamata ad un generico metodo statico ApplicationHelper.GetApplication.

Ovviamente GetCurrent dovrebbe essere un metodo statico del tipo Application da implementare appunto tramite un extension method statico (che non esistono beninteso).

Mi rendo perfettamente conto che sia un unico e in qualche modo poco importante caso in cui sarebbe comodo averli.

posted @ giovedì 18 febbraio 2010 13.10 | Feedback (1) |

sabato 2 gennaio 2010

Oggetti COM e WPF binding

Oggi mi sono trovato di fronte ad una strana situazione che mi ha impegnato l’intera mattinata per venirne a capo (sì sto lavorando, devo recuperare…): binding di oggetti COM in WPF.

Antefatto: è un mesetto che sto prendendo WPF e Silverlight per le corna, due tecnologie che in passato non avevo modo di utilizzare e che invece da un mese a questa parte sono entrate di prepotenza nel mio panorama professionale.

Sto procedendo alla personalizzazione di un applicativo di terze parti che fa uso pesantemente di COM per quanto riguarda i mattoncini di cui è composto e che vengono utilizzati anche per la sua customizzazione mediante un vasto SDK (si tratta di un applicativo GIS desktop: ESRI ArcMap).

l’SDK in questione è stato totalmente wrappato per l’utilizzo con .NET mediante la metodologia standard dei Remote Callable Wrapper (RCW), questi non sono altro che classi proxy .NET che effettuano il marshaling delle chiamate a metodi e proprietà da e per l’oggetto COM vero e proprio.

In generale se la classe COM si chiama MyClass, il processo di importazione (che si esegue mediante l’utility tlbimp.exe) crea lato .NET un’interfaccia denominata MyClass e  una classe RCW denominata MyClassClass.

Il problema nasce quando è l’infrastruttura dell’applicativo che fornisce un oggetto a seguito di una chiamata all’SDK: in generale accade che l’oggetto ritornato non è di tipo MyClassClass bensì di tipo System.__ComObject. Questo è un tipo interno al framework (è marcato internal) ed in sostanza è il contenitore generico per ogni oggetto COM wrappato, in pratica si perde la possibilità di castarlo a MyClassClass nonostante l’oggetto di per se in effetti lo sia.

Che cosa comporta tutto questo? Ad esempio che se siamo in presenza di binding WPF mediante path che punta ad una proprietà di un oggetto RCW, questo non funziona perché l’infrastruttura di WPF non è in grado di risolvere la chiamata alla proprietà indicata a partire da un oggetto System.__ComObject.

Nota a margine: da quello che ho letto durante le mie ricerche su Google questo comportamento lo si ha anche nell’interoperabilità con Office, tanto che la soluzione al problema mi è stata suggerita in un post di un forum MSDN che trattava il binding all’interno di un’applicazione WPF, la quale andava a filtrare gli appuntamenti archiviati con Outlook.

La soluzione a questo problema è quella di utilizzare il metodo statico CreateWrapperOfType della classe System.Runtime.InteropServices.Marshal, questo metodo serve in pratica a trasformare un oggetto RCW in un altro oggetto RCW di tipo diverso. In sostanza è proprio quello che ci serve per trasformare (castare non sarebbe il termine adatto in senso stretto) un oggetto System.__ComObject in quello che sarebbe il suo vero tipo RCW:

//myGenericComObj è di tipo System.__ComObject
MyClassClass rcwObj = Marshal.CreateWrapperOfType(myGenericComObj, typeof(MyClassClass)) as MyClassClass;
 

Nota importante: questo metodo va utilizzato con il tipo della classe RCW e non con il tipo dell’interfaccia, ovvero non funziona se al posto di MyClassClass si specificasse l’interfaccia MyClass (ricordo che entrambe sono il risultato della procedura di importazione di un oggetto COM).

A questo punto, con l’oggetto RCW non più generico, il binding WPF funzionerà correttamente riuscendo a risolvere normalmente i vari riferimenti alle proprietà che identificano i path.

posted @ sabato 2 gennaio 2010 15.08 | Feedback (3) |

Powered by: