Community Tour Autunno 2010 a Bologna

Sono aperte le iscrizioni al prossimo evento di Community che si terrà a Bologna il 16 novembre 2010 organizzato dalla SharePointCommunity.it e DotDotNet, lo User Group Emiliano-Romagnolo dedicato a Microsoft .NET in collaborazione con Microsoft Italia,

L’evento è gratuito, si articolerà nell’arco dell’intera giornata e sarà suddiviso in due track parallele per IT Pro (meglio noti come sistemisti) e per sviluppatori.

Si parlerà di SharePoint, di Windows Phone 7, di SQL Server 2008 R2, delle novità di ASP.NET 4 e di IE 9

Agenda track sviluppatori

L’agenda della track per sviluppatori è la seguente:

Ora Sessione Speakers
09.30 – 10.00 Registrazione
10.00 – 10.30 Keynote

Lorenzo Barbieri
Microsoft Italia

10.30 – 11.45 Windows Phone 7: Sviluppare applicazioni per il Marketplace
In questa sessione vedremo come sviluppare applicazioni per il Marketplace di WP7, con esempi presi da applicazioni reali. 
Lorenzo Barbieri
Microsoft Italia
11.45 – 13.00

Migliorare la UX nelle applicazioni Silverlight e Windows Phone 7 con Expression Blend
Expression Blend 4 è lo strumento che permette di realizzare User eXperiences accattivanti e di forte impatto verso l’utente finale. In questa sessione vedremo come realizzarla con Silverlight  e Windows Phone 7,

Alessandro Scardova
DotDotNet 
13.00 – 14.00

Break

14.00 – 18.00

Windows Phone 7 Lab 
Un intero pomeriggio a disposizione per toccare con mano gli smartphone e per provare le proprie applicazioni. Il lab si terrà in una saletta parallela. Per iscriversi occorre mandare una mail a itamsdn@microsoft.com specificando data, città e applicazioni da testare.

14.00 – 15.15

Powerful ASP.NET 4.0 & Internet Explorer 9
NET Framework versione 4 include miglioramenti per ASP.NET 4 in aree mirate. Anche Visual Studio 2010 include miglioramenti e nuove funzionalità per ottimizzare lo sviluppo di risorse Web. In questa sessione verrà fornita una panoramica di numerose delle nuove funzionalità incluse nella nuova versione. 
Vedremo anche le novità per gli sviluppatori introdotte da Internet Explorer 9

Stefano Benedetti
DotDotNet
15.15- 16.30

Introduzione allo sviluppo con Sharepoint 2010.
SharePoint 2010 è un framework di sviluppo maturo e aperto all’integrazione, che ogni sviluppatore .NET può utilizzare per creare soluzioni di integrazione. In questa sessione vedremo le novità e gli strumenti offerti dalla piattaforma. In particolare concentremo la nostra attenzione sugli strumenti offerti da Microsoft Visual Studio 2010 e sul modello di accesso ai dati offerto da SharePoint 2010 

Paolo Pialorsi
SharePoint Community 

16.30 – 16.45

Break

16.45 – 18.00

Sviluppare applicazioni Silverlight per Sharepoint
Per capire i vantaggi che Visual Studio 2010 e Sharepoint 2010 portano ai developer, attraverso demo live, svilupperemo una piccola applicazione Silverlight che visualizzerà i nostri dati su Sharepoint 2010 tramite servizi e vedremo come testare le nostre applicazioni Sharepoint tramite Pex & Mole

Salvatore Di Fazio
SharePoint Community   

Iscrizioni

Per maggiori informazioni e per iscriversi all’evento: http://dotdotnet.org/content/Tour2010Nov.aspx

Track per IT Pro

La track relativa agli IT Pro è organizzata dalla SharePointCommunity in collaborazione con UGISS (User Group Italiano SQL Server).

Per maggiori dettagli e per l’iscrizione vi rimando al sito della SharePointCommunity.

Share

Visual Studio 2010 Community Tour @ Cesena

Venerdì 28 maggio 2010 si terrà a Cesena una nuova cena di DotDotNet un nuovo evento organizzato da DotDotNet in collaborazione con DotNetMarche e DotNetUmbria dal titolo “Presentazione di Visual Studio 2010 e del Framework 4“.

L’evento sarà gratuito come al solito e durerà una giornata intera.

Il calendario è il seguente:

  • Team Foundation Server 2010
  • Windows Presentation Foundation 4
  • Managed Extensibility Framework
  • Smooth Streaming
  • Windows Phone 7
  • Silverlight 4
  • RIA Services
  • ASP.NET 4.0
  • MVC 2
Ah e comunque a seguire ci sarà la cena…
Share

Programmazione parallela: pensieri sparsi

Venerdì scorso ho partecipato all’evento DotDotNet (grazie ancora a chi organizza gli eventi e le cene!) sui temi F# e Continous Integration.

Durante la discussione su F# è stata evidenziata la sua innata abilità nel semplificare notevolmente la parallelizzazione dei task (aspetto secondario del tema in quanto F# è principalmente un linguaggio dinamico e funzionale).

A parte lo scontato utilizzo di F# in ambito matematico/scientifico/fisico il tema della parallelizzazione mi ha fatto pensare ai concetti di performance (ovviamente) ma soprattutto ad un qualcosa che mi piace chiamare “Codice Predittivo“, similmente alla prediction branch delle CPU.

Il trend di mercato per quanto riguarda le CPU è oggi meno indirizzato sulla velocità pura di clock ma piuttosto nell’integrazione di un numero sempre maggiore di core sullo stesso chip.

La sfida a livello software per i prossimi anni è quindi quella dello sfruttamento multithread di tutti questi core.

Uno scenario che mi incuriosisce è questo: ho un’applicazione che effettua alcune operazioni (A(x), B(x), C(x) ecc) e ogni operazione può essere applicata indistintamente al risultato di qualsiasi altra.

Ipotizziamo di eseguire A(x) e magari di fermarci per osservare il risultato ottenuto e decidere quali altre operazioni eseguire.

In questo momento potremmo pensare di sfruttare tutti i core inattivi della macchina per eseguire ad esempio B(A(x)) oppure C(A(x)) o ovviamente qualsiasi altra operazione in background e multithread.

A questo punto l

‘utente decide che vuole eseguire l’operazione B(A(x)) e voilà, il risultato è già disponibile.

Una user experience non male direi.

A questo punto scarto i risultati non utilizzati e proseguo allo stesso modo. Ho solo sprecato un po’ di cicli di qualche core che non faceva niente…

Il più immediato esempio concreto è nel settore del fotoritocco. Applico un filtro ed intanto l’applicazione ne applica altri che potrei usare in futuro (o addirittura potrebbe applicare i filtri che utilizzo con maggiore frequenza).

Microsoft stà lavorando alacremente nel settore della parallelizzazione per fornire agli sviluppatori un set di librerie per rendere il più semplice e trasparente l’esecuzione di codice su più core. Il risultato si chiama PLINQ che è l’implementazione parallela del pattern LINQ.

Allo stesso modo di LINQ, PLINQ è un insieme di extension method che operano su un IEnumerable<T> in memoria e sfruttano la deferred execution. La principale differenza stà nel fatto che PLINQ suddivide la sorgente dati in segmenti e cerca di eseguire l’operazione in parallelo su tutti i processori/core presenti nel sistema.

Il tutto partendo da un livello veramente base: basta invocare l’extension method AsParallel() per richiedere l’esecuzione in parallelo fino ad un massimo di 64 processori.

Reference:

PLINQ: http://msdn.microsoft.com/en-us/library/dd460688(VS.100).aspx

http://en.wikipedia.org/wiki/Plinq#PLINQ

F# : http://msdn.microsoft.com/en-us/fsharp/default.aspx

http://en.wikipedia.org/wiki/F_Sharp_(programming_language)

net-framework-stack-plinq

Share

Unit Test e AutoCad: si può fare!

Lo sviluppo di nuove feature e/o applicazioni integrate con AutoCad è diventato incredibilmente più produttivo da quando sono state introdotte le librerie ObjectArx in formato .Net.

L’unico (grosso) limite che ho riscontrato fino a poco tempo fa è stata l’impossibilità di utilizzare framework di test e di mocking.

Questo perchè i plugin sviluppati devono necessariamente essere caricati lanciando AutoCad stesso e funzionano nel thread principale della UI (e ovviamente non è possibile mokkare Autocad…).

Fino ad oggi quindi i test li avevo scritti completamente a mano, creando man man tutti gli oggetti necessari.

Recentemente ho trovato questa piattaforma di automazione: Gallio.

Gallio

Oltre a fornire il supporto per tutti i principali framework di test (NUnit, MSTest, xUnit ecc) e ai principali strumenti di mocking e di continous integration, Gallio è in grado di automatizzare l’esecuzione di test all’interno di Autocad.

Il funzionamento alla base è concettualmente semplice: Gallio carica uno [W:shim|en|Shim_(computing)] all’interno di AutoCad che si occupa di intercettare le chiamate alle API e di eseguire i comandi.

Il testing su Autocad non è integrato nell’IDE di Visual Studio ma si tratta di una lacuna veramente minima in quanto è comunque disponibile un’interfaccia GUI simile a quella di nUnit oltre ovviamente al runner a riga di comando (il che chiude il cerchio in quanto è possibile far eseguire i test su un server di Continuous Integration).

I dubbi sono per ora due.

Il primo riguarda uno scarsa partecipazione e dinamicità nello sviluppo di Gallio; l’ultima release risale a novembre 2009.

In secondo luogo viene un po’ meno uno dei principi base dei test unitari: la rapidità di esecuzione.
Per eseguire i test infatti Gallio deve caricare 2 volte AutoCad: una prima volta ad ogni rebuild della libreria dei test ed una seconda volta per eseguirli richiedendo quindi alcuni secondi di attesa.

Share

DevCon 2009 – Giorno 1

Dopo il corso TDD seguito presso Overnet qualche mese fa, l'annata formativa prosegue con le 3 giornate di DevCon che ogni anno il gruppo di Devleap propone con tutte le novità più recenti o di prossima diffusione di Microsoft nel settore sviluppo ed a seguire una giornata del Basta! Italia on tour.

La prima giornata della DevCon 2009 non si è focalizzata su di un singolo aspetto tecnologico ma sugli aspetti architetturali di una applicazione completa a partire dal database su su fino alla UI.

Molto fluida la sessione a 4 mani di Rob e Paolo, che in maniera molto affiatata hanno affrontato una intera giornata alternandosi ogni 2-3 minuti circa senza soluzione di continuità.
Allo stesso modo hanno mostrato tutta la loro esperienza di speaker passando continuamente da slide a codice e viceversa (peccato per le bizze del proiettore…)

La giornata ha avuto come base l'applicazione Estate Management che DevLeap utilizza come strumento formativo fino dalla versione 1 di .Net e ne ha ripercorso l'evoluzione fino ad oggi per poi mostrare le novità applicabili a partire dal Framework 3.5 in poi.

Ho trovato molto interessante tutta la parte incentrata sul DAL che ha mostrato come evolvere il data access layer a partire dai recordset arrivando fino a Entity Framework passando attraverso LinqTo2SQL.
Questa evoluzione sul DAL è la stessa che ho percorso negli ultimi 5 anni. Tutti temi noti per me quindi ma, dato che la giornata voleva essere di tipo architetturale, è stato interessante vedere dove vengono messe le classi e come vengono strutturati i progetti da chi sviluppa quotidianamente applicazioni enterprise. Ma soprattutto vedere tanti piccoli e grandi accorgimenti utilizzati dal gruppo che sicuramente fanno la qualità di una applicazione.
Particolare attenzione è stata posta su come mantenere astratto, isolato e pluggable il DAL per poterlo sostituire semplicemente modificando il file config.

Molto belle ed eleganti anche le soluzioni proposte negli ambiti di autenticazione, autorizzazione e validazione dei dati.
In questo ambito lo spunto fornito di utilizzare le regole di WF senza utilizzare tutto WF sarà di sicuro oggetto di un mio approfondimento.

Meno profiquo è stato il pomeriggio soprattutto nella parte incentrata su SOA e WCF su cui mi sono decisamente perso, probabilmente a causa del mix di stanchezza mia da un lato, di accelerazione degli speaker e di proliferazione esponenziale dei progetti della soluzione (85…)

Di sicuro l'applicazione vista oggi rappresenta ad un elevatissimo livello il concetto fondamentale di DISACCOPPIAMENTO ed è una base architetturale che affronta tutti gli aspetti di un applicazione con tutte le tecnologie disponibili fino ad oggi: datareader, linq, linq to sql, entity framework, WF, WCF, Asp.net, MVC, SOA, Ado.Net Data Services…

Share

Quale versione di System.Web.Extension?

Ho letto un post su ASPItalia riguardante alcuni dubbi sull'assembly System.Web.Extension.dll

L'assembly System.Web.Extension.dll contiene le estesioni ASP.Net AJAX ed in origine si chiamava Microsoft.Web.Extension.

La versione 3.6.0.0 della dll è stata rilasciata con la "ASP.NET 3.5 Extensions December CTP"

Stranamente con il rilascio del Service Pack 1 del Framework 3.5 l'assembly che è stata definitivamente rilasciata ha come versione 3.5.0.0 tanto che per chi ha utilizzato la CTP è necessario modificare diversi riferimenti all'interno del web.config.

Questo readme (http://www.asp.net/downloads/3.5-SP1/readme/) spiega in dettaglio quali sono le modifiche da apportare al web.config.

In aggiunta chi utilizza IIS 7 deve modificare la sezione <system.WebServer> sempre secondo quanto indicato nel readme.

Share

Visual Studio 2008 non aggiorna l’assembly version nei progetti VB.Net

Un’applicazione che stò sviluppando utilizza l’assembly version per effettuare l’upgrade dei dati tra le varie release.

La cosa ha sempre funzionato tranne nelle ultime release utilizzando Visual Studio 2008 e TortoiseSVN. Mi sono accorto infatti che l’assembly version non viene modificata ricompilando il progetto VB.

In pratica nel file AssemblyInfo vedo correttamente la versione 2.0.4.2 ma nel file compilato nelle proprietà di explorer l’assembly version rimane inchiodato alla versione 2.0.4.1.

Non ho ancora capito quale sia la causa comunque per ora come workaround procedo in questo modo:

  1. eseguo un clean sul progetto
  2. apro il file AssemblyInfo
  3. modifico la versione e salvo
  4. rimetto la versione al valore desiderato e salvo
  5. ricompilo

A questo punto l’assembly version è corretta.

Share

Evitare la duplicazione di InsertItemTemplate e EditItemTemplate nel controllo FormView

Il controllo FormView è uno dei controlli più utilizzati nelle pagine Asp.Net in quanto rappresenta l'interfaccia per i metodi di Insert, Update e Select sul database.

Una cosa che ho subito trovato noiosa è il fatto che i template di Insert e di Edit sono praticamente uguali al 99% e ci vuole molto tempo per duplicarli e manutenerli (come al solito la ridondanza non paga).

Anche se Visual Studio genera in automatico un primo template facilmente modificabile resta comunque molto gravoso lo sforzo per inserire e modificare tutti i controlli di validazione, dare i nomi giusti ai controlli ed eventualmente aggiungere altre proprietà.

Sul forum Asp.Net ho trovato una soluzione molto elegante ed efficace (vedi "FormView: InsertItemTemplate and EditItemTemplate? Why do I need the same code twice?").
In pratica se si elimina completamente l'InsertItemTemplate viene utilizzato in automatico l'EditItemTemplate sia per l'inserimento che per la modifica.

Per essere completa la soluzione deve integrare anche il suggerimento di questo post:  "Reuse code for EditTemplate & InsertTemplate of FormView"

Dato che i linkbutton Insert e Update devono inviare due diversi comandi a seconda dello stato della formview in fase di Databinding della formview è necessario inserire nell'EditItemTemplate i linkbutton di Insert e Update e abilitarli/disabilitarli di conseguenza:

protected void FormView1_DataBound(object sender, EventArgs e)

{

    if (FormView1.CurrentMode == FormViewMode.Edit)

    {

        LinkButton InsertButton =

            FormView1.FindControl("InsertButton") as LinkButton;

        LinkButton UpdateButton =

            FormView1.FindControl("UpdateButton") as LinkButton;

 

        InsertButton.Visible = false;

        UpdateButton.Visible = true;

    }

    else if (FormView1.CurrentMode == FormViewMode.Insert)

    {

        LinkButton InsertButton =

            FormView1.FindControl("InsertButton") as LinkButton;

        LinkButton UpdateButton =

            FormView1.FindControl("UpdateButton") as LinkButton;

 

        InsertButton.Visible = true;

        UpdateButton.Visible = false;

    }

}

In questa fase è possibile gestire anche eventuali altre differenze che potessero esserci tra i due template.

Share

CausesValidation e TableLayoutPanel: viene sempre eseguita la validazione della form

Nelle Windows Form normalmente imposto la property CauseValidation a False per il pulsante annulla.

In un progetto mi sono accorto che non funzionava correttamente: cioè anche impostando CauseValidation a False la validazione dei controlli veniva comunque eseguita.

Ho notato che il problema è legato al fatto che i pulsanti sono inseriti in un TableLayoutPanel e quindi è come se fosse prioritaria la proprietà CausesValidation del TableLayoutPanel.

Per far si che il pulsante Annulla non scateni la validazione è quindi necessario impostare a False anche la property CausesValidation del TableLayoutPanel. 

Share

Hello World: ovvero cosa serve veramente per far funzionare un’addin managed ObjectARX

Negli Autodesk Labs è presente l'immancabile applicazione Hello World con cui configurare correttamente l'ambiente di sviluppo.

Nel Lab vengono indicate le DLL da linkare e gli eventuali attributi da aggiungere alle classi o ai metodi come in particolare il CommandMethod con cui definire un comando custom all'interno di AutoCAD.

Ciò che il lab non dice sono però alcuni accorgimenti fondamentali per far funzionare veramente tutto riducendo gli errori. Sono piccole configurazioni che però mi hanno fatto perdere giornate di lavoro.

  1. I metodi associati ad un CommandMethod devono essere pubblici e non devono restituire nessun valore (devono cioè essere delle sub in VB.Net o restituire void in C#)
  2. Oltre a aggiungere le reference alle due librerie acadmgd.dll e acadmgdb.dll è fondamentale impostare la proprietà Copy Local a False altrimenti quando invocate il comando custom AutoCAD vi dice che non esiste nessun comando con quel nome
  3. Un'ultima cosa che mi ha fatto perdere il sonno per giorni… Impostate nella variabile PATH il percorso [program folder]Autocad 2008 altrimenti potete scordarvi di utilizzare l'ereditarietà nelle form…
Share