Visual Studio 2010 Community Tour @ Cesena

15. maggio 2010

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...

.net Framework, C# e VB.net, Visual Studio

Programmazione parallela: pensieri sparsi

13. aprile 2010

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, C# e VB.net

DevCon 2009 - Giorno 1

27. maggio 2009

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...

.net Framework, ASP.net, C# e VB.net, Visual Studio

Listview, Entity framework e navigation property

11. novembre 2008

Stavo creando una semplice ListView utilizzando Entity Framework sulla tabella Clienti.

Premetto che la tabella Clienti è in relazione con la tabella Agenti e quindi EF crea correttamente la Navigation Property tra l'entity clienti e l'entity agenti.

Creo la ListView, aggiungo il LinqDataSource e faccio il binding tra listview e datasource.

Fin qui tutto ok, anche il designer funziona correttamente e mi mostra tutte le colonne.

A runtime ricevo invece l'errore:

DataBinding: '[Agenti' is not a valid indexed expression.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: DataBinding: '[Agenti' is not a valid indexed expression.

Source Error:

Line 230: </td>
Line 231: <td>
Line 232: <asp:Label ID="Agenti_IDAgenteLabel" runat="server"
Line 233: Text='<%# Eval("[Agenti.IDAgente]") %>' />
Line 234: </td>

Tramite la navigation il designer ha generato una colonna per mostrarmi l'ID dell'agente collegato al cliente.

Il problema è nelle parentesi quadre che sono state aggiunte all'interno del metodo Eval.

Modificato il tag rimuovendo le parentesi quadrate

Text='<%# Eval("Agenti.IDAgente") %>' />
tutto funziona correttamente

ASP.net, C# e VB.net, Visual Studio , ,

CausesValidation e TableLayoutPanel: viene sempre eseguita la validazione della form

1. marzo 2008

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. 

.net Framework, C# e VB.net