Roberto Cappelletti Blog http://blogs.ugidotnet.org/rcappe/Default.aspx Il blog di Roberto Cappelletti it-IT Roberto Cappelletti Subtext Version 2.6.0.0 Roberto Cappelletti Blog http://blogs.ugidotnet.org/images/RSS2Image.gif http://blogs.ugidotnet.org/rcappe/Default.aspx 77 60 Si cambia casa http://blogs.ugidotnet.org/rcappe/archive/2013/03/15/si-cambia-casa.aspx <p>Eccoci qua, dopo tanti anni mando in pensione questo blog e ne apro uno nuovo. </p> <p>Un grande grazie alla community ugidotnet per l'ospitalità e ci vediamo sul nuovo blog  <a href="http://www.robertocappelletti.com/">http://www.robertocappelletti.com</a> ...</p><img src="http://blogs.ugidotnet.org/rcappe/aggbug/101473.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2013/03/15/si-cambia-casa.aspx Fri, 15 Mar 2013 00:20:48 GMT http://blogs.ugidotnet.org/rcappe/archive/2013/03/15/si-cambia-casa.aspx#feedback http://blogs.ugidotnet.org/rcappe/comments/commentRss/101473.aspx Metro Style App - Share Content http://blogs.ugidotnet.org/rcappe/archive/2012/03/18/metro-style-app-share-content.aspx <p>Windows 8 oltre ad essere un sistema operativo è una piattaforma che si integra con le nostre applicazioni e ci permette di arricchirle di funzionalità. <br />In questo esempio vedremo come è possibile condividere dati tra applicazioni.</p> <p>Il caso che analizzeremo riguarda  una applicazione che mostra fotografie e vogliamo che possano essere condivise ad un indirizzo mail. <br />Nel modello classico windows dovremmo: salvare l’immagine, aprire un client di posta, allegare l’immagine e in fine inviarla. <br />Oppure potremmo integrare la nostra applicazione con un client di posta, ma se invece di una mail volessimo twittare o postare la foto su facebook?</p> <p>Per rispondere a tutte queste esigenze Win8 mette a disposizione i <strong>Contracts </strong>che rappresenta il modello che permette alle applicazioni di comunicare tra di loro. <br />Ogni applicazione dichiara quali sono i contratti che è in grado di gestire:</p> <ul> <li>Search: Funzione di ricerca estesa a tutte le altre applicazioni </li> <li><a></a>Share: L’app può essere usata per condividere informazioni con e da altre applicazioni </li> <li><a></a>AutoPlay: Attraverso la share charm l’app può inviare contenuti digitali a device DLNA compliant </li> <li>Settings: La gestione dei settings è parte della experience di Windows 8 </li> <li>App to app picking: L’app diventa target di un operazione «Apri file» </li> </ul> <p>Ritorniamo al nostro esempio e vediamo come è possibile realizzarlo.</p> <p>Creiamo una nuova Blanck Application e inseriamo il seguente Xaml nella pagina</p> <pre class="brush: csharp;">&lt;Grid Background="{StaticResource ApplicationPageBackgroundBrush}"&gt; &lt;Grid.RowDefinitions&gt; &lt;RowDefinition Height="Auto"/&gt; &lt;RowDefinition Height="Auto"/&gt; &lt;RowDefinition Height="*"/&gt; &lt;/Grid.RowDefinitions&gt; &lt;Image Grid.Row="0" x:Name="Photo" Width="500" Height="383" Source="Images/Image1.jpg" /&gt; &lt;TextBlock Grid.Row="1" x:Name="Title" Text="A poem is a city" HorizontalAlignment="Center" FontSize="36" /&gt; &lt;TextBlock Grid.Row="2" x:Name="Description" HorizontalAlignment="Center" FontSize="14" &gt; a poem is a city filled with streets and sewers &lt;LineBreak/&gt; filled with saints, heroes, beggars, madmen, &lt;LineBreak/&gt; ... &lt;/TextBlock&gt; &lt;/Grid&gt;</pre> <p>Il risultato sarà il seguente:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_2.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_thumb.png" width="500" height="392" /></a></p> <p>A questo punto scriviamo il codice che consente di esporre dati verso altre applicazioni. <br />Abbiamo a disposizione una serie di metodi per ogni evenienza: <br />- SetUri per impostare un url <br />- SetText per del testo <br />- SetBitmap per le immagini <br />- SetStorageItems per un file allegato <br />In oltre abbiamo la possibilità di dare una titolo e una descrizione allo share e di utilizzare la property FailWithDisplayText per dare messaggi di errore in caso di problemi.</p> <pre class="brush: csharp;">public BlankPage() { this.InitializeComponent(); DataTransferManager datatransferManager = DataTransferManager.GetForCurrentView(); datatransferManager.DataRequested += new TypedEventHandler&lt;DataTransferManager, DataRequestedEventArgs&gt;(this.DataRequested); } async void DataRequested(DataTransferManager sender, DataRequestedEventArgs e) { e.Request.Data.Properties.Title = Title.Text; e.Request.Data.Properties.Description = "Share content with ..."; var image = await Package.Current.InstalledLocation.GetFileAsync(@"Images\Image1.jpg"); var imageList = new List&lt;StorageFile&gt;(); imageList.Add(image); e.Request.Data.SetStorageItems(imageList); }</pre> <p>Una volta lanciata la nostra applicazione accediamo alla Charms bar e selezioniamo la voce Share.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_4.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_thumb_1.png" width="500" height="313" /></a></p> <p>Abbiamo la possibilità scegliere l’applicazione con cui condividere i dati.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_6.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_thumb_2.png" width="500" height="313" /></a></p> <p>Selezioniamo la app Mail e ci viene proposta una mail già pronta da inviare.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_8.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Metro-Style-App---Share_ADF0/image_thumb_3.png" width="500" height="313" /></a></p> <p>Potete scaricare il codice dell’<a href="https://skydrive.live.com/redir.aspx?cid=9091cedb1ce4d3fb&amp;resid=9091CEDB1CE4D3FB!175&amp;parid=9091CEDB1CE4D3FB!169">esempio da qui</a>.</p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:805afc63-9fab-46cc-ab34-ea0aa9d6c9da" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Tag di Technorati: <a href="http://technorati.com/tags/Metro" rel="tag">Metro</a>,<a href="http://technorati.com/tags/Win8" rel="tag">Win8</a>,<a href="http://technorati.com/tags/Share" rel="tag">Share</a>,<a href="http://technorati.com/tags/Contracts" rel="tag">Contracts</a>,<a href="http://technorati.com/tags/Xaml" rel="tag">Xaml</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/100874.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2012/03/18/metro-style-app-share-content.aspx Sun, 18 Mar 2012 02:58:50 GMT http://blogs.ugidotnet.org/rcappe/archive/2012/03/18/metro-style-app-share-content.aspx#feedback 2 http://blogs.ugidotnet.org/rcappe/comments/commentRss/100874.aspx Metro Style App - Camera Capture http://blogs.ugidotnet.org/rcappe/archive/2012/03/16/metro-style-app-camera-capture.aspx <p>Vediamo come è semplice andare ad interagire con la fotocamera e scattare una foto in windows 8 (CCP) creando una applicazione metro in xaml.</p> <p>Per prima cosa creiamo un nuovo progetto di tipo Blank Application. <br /><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_2.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_thumb.png" width="500" height="289" /></a></p> <p>Nel codice Xaml della pagina principale andiamo ad inserire un controllo image che visualizzerà la nostra foto appena scattata, un button che farà partire l’evento di cattura dell’immagine, e un textblock che visualizzerà i messaggi.</p> <pre class="brush: xml;">&lt;StackPanel&gt; &lt;Button Height="83" Width="142" Content="Scatta Foto" Click="TakePhoto" /&gt; &lt;Image x:Name="OutputImage" MaxWidth="392" Stretch="Fill" /&gt; &lt;TextBlock x:Name="OutputText" Text=""/&gt; &lt;/StackPanel&gt;</pre> <p align="justify">Nel code behind creiamo il metodo di gestione dell’evento del bottone e istanziamo  la classe <strong>CameraCaptureUI</strong>. <br />CameraCaptureUI viene utilizzata sia per catturare immagini che video e ed possibile personalizzare una serie di configurazioni come il ritaglio, il formato e la risoluzione. <br /><strong>CaptureFileAsync</strong> è il metodo che fa comparire la schermata di cattura della web cam, come si può notare è asincrono come tutte le chiamate in win 8 che potenzialmente possono essere superiori a 50ms. <br />Le nuove keyword <strong>asyc</strong> e <strong>await</strong> ci aiutano a semplificare molto lo sviluppo, notate come il metodo TakePhoto sia marcato async visto che nel corpo del metodo viene usato await. <br />Una volta che l’utente ha completato la scatto della foto viene restituito un oggetto <strong>StoregeFile</strong> che sarà comune i tutti gli scenari dove andiamo ad accedere a risorse. <br />A questo punto non ci resta che prendere il contenuto del file e impostarlo come risorsa del controllo image.</p> <pre class="brush: csharp;">private async void TakePhoto(object sender, RoutedEventArgs e) { try { //Inizializza l'oggeto camera CameraCaptureUI dialog = new CameraCaptureUI(); //Attiva l'ambiente per scattare la foto e attende la risposta in maniera asincrona StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo); if (file != null) {//Se l'immagine è stata correttamente scattata dall'utente BitmapImage bitmapImage = new BitmapImage(); using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read)) { bitmapImage.SetSource(fileStream); } OutputImage.Source = bitmapImage; OutputText.Text = "Photo captured."; } else OutputText.Text = "No photo captured."; } catch (Exception ex) { OutputText.Text = ex.Message; } }</pre> <p>Prima di provare la nostra applicazione però dobbiamo attivare la capability <strong>WebCam  </strong>all’interno del manifest, per concedere i privilegi necessari per accedere alla fotocamera.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_4.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_thumb_1.png" width="500" height="353" /></a></p> <p>Ecco il risultato … potete scaricare <a href="https://skydrive.live.com/redir.aspx?cid=9091cedb1ce4d3fb&amp;resid=9091CEDB1CE4D3FB!170&amp;parid=9091CEDB1CE4D3FB!169">il codice qui</a>.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_6.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_thumb_2.png" width="500" height="240" /></a></p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_10.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/857e3cda8393_14257/image_thumb_4.png" width="500" height="313" /></a></p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ffc8d967-fefd-43e6-a147-3a8a8fddba5c" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Tag di Technorati: <a href="http://technorati.com/tags/Metro" rel="tag">Metro</a>,<a href="http://technorati.com/tags/Win8" rel="tag">Win8</a>,<a href="http://technorati.com/tags/Camera" rel="tag">Camera</a>,<a href="http://technorati.com/tags/Xaml" rel="tag">Xaml</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/100868.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2012/03/16/metro-style-app-camera-capture.aspx Fri, 16 Mar 2012 01:08:42 GMT http://blogs.ugidotnet.org/rcappe/archive/2012/03/16/metro-style-app-camera-capture.aspx#feedback http://blogs.ugidotnet.org/rcappe/comments/commentRss/100868.aspx Kanban http://blogs.ugidotnet.org/rcappe/archive/2012/01/25/kanban.aspx <p><strong><font size="3">Dove vogliamo andare?</font></strong> <br /> Quest'anno in <a target="_blank" href="http://www.elfo.net/">azienda</a> tra gli obbiettivi che ci siamo dati per il 2012 c'è la necessità di migliorare il processo di sviluppo software. <br /> Due aspetti su cui vogliamo concentrarci sono la visibilità delle informazioni e la gestione del cambiamento perché sono quelli che ci danno maggiori difficoltà.</p> <p><font size="3"><strong>Dove siamo?</strong></font> <br /> Facciamo un passo indietro; quale metodologia e quali strumenti utilizziamo? <br /> La metodologia è incrementale adattativa, basata sul nostro modello di business, prende spunto per la parte di project management da Scrum e per la parte di sviluppo dalle pratiche di Xp (Continuous Integration, Testing …). <br /> Lo strumento principe è ovviamente Tfs (Source Control, Work Item Tracking, Build) a cui si agganciano altri strumenti creati ad hoc. <br /> Tfs è veramente eccezionale sul tracking ma, purtroppo è dentro un pc, NON lo <strong>vedo</strong> e NON lo <strong>tocco,</strong> perciò ci serviva qualcosa su cui “sbattere la faccia”. <br /> Scrum è una ottima metodologia ma, ci siamo resi conto di non riuscire a mantenere Sprint con time box fisso e Sprint Backlog rigidi. <br /> Quindi pur essendo Scrum poco prescrittivo abbiamo avuto il timore di snaturare la metodologia.</p> <p><font size="3"><strong>Cosa è Kanban? <br /> </strong></font>Kanban letteralmente significa Cartellino e arriva dal mondo Lean Development. <br /> Si basa su 3 concetti base: <br /> - Rendere il lavoro visibile <br /> - Limitare il work in process <br /> - Aiutare il flusso a scorrere</p> <p>Solitamente viene utilizzata una Kanban Board cioè una lavagna suddivisa in colonne che rappresentano gli stati. <br /> Il lavoro viene diviso in parti e scritto sulle card, e queste sono appese sulla board. <br /> Agli stati vengono assegnati dei limiti che vincolano il lavoro contemporaneo. <br /> L’obbiettivo è ottimizzare il processo per rendere il lead time (il tempo di attraversamento) quanto più piccolo e prevedibile possibile.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Kanban_F8F7/kanban-3f_2.jpg"><img width="242" height="185" title="kanban-3f" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" alt="kanban-3f" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Kanban_F8F7/kanban-3f_thumb.jpg" /></a></p> <p><strong><font size="3">Come vogliamo adottarlo? <br /> </font></strong>L’idea è di partire con una sperimentazione su alcuni team e di estendere poi il modello a tutti i team dell’azienda. <br /> Non volevamo stravolgere il modo di lavorare quindi tutti gli strumenti e i processi nella prima fase resteranno invariati. Per fare una esempio chiarificatore i work item saranno ancora presenti in tfs, semplicemente saranno visibili anche sulla Kanban bord. <br /> Ogni team avrà la sua board. <br /> I post-it saranno di più colori e ogni colore rappresenterà una iterazione. Accade infatti che nel nostro modello di business, un team lavori per più clienti contemporaneamente o anche su più iterazioni contemporanee magari legate a branches differenti. <br /> La board ci consentirà visualmente di monitorare l’avanzamento, le code e i colli di bottiglia, limitando i continui cambi di contesto sulle attività parallele. <br /> Ricordo una bella sessione di Brandolini che mostrava come il costo di una funzionalità crescesse quanto più questa rimaneva bloccata e al tempo stesso impediva di fare crescere il Roi derivato.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Kanban_F8F7/Untitled2_2.png"><img width="550" height="197" title="Untitled2" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" alt="Untitled2" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Kanban_F8F7/Untitled2_thumb.png" /></a> <br /> Sulla card abbiamo deciso di riportare il numero di work item, una descrizione sintetica della richiesta, dei pallini neri che visivamente ci indicano che quella richiesta è stata soggetta a dei bug, e un peso indicativo in ore. <br /> Durante l’incontro che abbiamo fatto insieme al team, che è partito per primo, abbiamo definito quali erano i limiti per ogni stato partendo dalla formula (numero dei componenti del team * 2 -1) e fatto piccoli adattamenti al modello della bord generale che avevamo preparato.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Kanban_F8F7/Untitled_2.png"><img width="550" height="396" title="Untitled" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" alt="Untitled" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Kanban_F8F7/Untitled_thumb.png" /></a>  <br /> </p> <p>Per trarre conclusioni è presto ma, sicuramente sono emerse due evidenze: <br /> Una pratica all’apparenza semplice (carta su una lavagna) in poco tempo fa emergere problemi invisibili prima e attira la non facile attenzione del management.</p> <p> </p> <div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8f2f5f03-74cc-4d85-8c50-8d64634d4279" style="margin: 0px; padding: 0px; float: none; display: inline;">Tag di Technorati: <a rel="tag" href="http://technorati.com/tags/Kanban">Kanban</a>,<a rel="tag" href="http://technorati.com/tags/Lean">Lean</a>,<a rel="tag" href="http://technorati.com/tags/Metodologie">Metodologie</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/100728.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2012/01/25/kanban.aspx Wed, 25 Jan 2012 01:13:17 GMT http://blogs.ugidotnet.org/rcappe/archive/2012/01/25/kanban.aspx#feedback 2 http://blogs.ugidotnet.org/rcappe/comments/commentRss/100728.aspx Kinect SDK - Risorse http://blogs.ugidotnet.org/rcappe/archive/2011/07/08/kinect-sdk-risorse.aspx <p>Insieme delle risorse e del materiale utile per lavorare con il Kinect e la sua SDK.</p> <p><strong>Sito ufficiale del Kinect SDK</strong> <br />è possibile scaricare sdk e materiale informativo <br /><a title="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx" href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx">http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx</a></p> <p><strong>Kinect for Windows SDK Beta Forums</strong> <br /><a title="http://social.msdn.microsoft.com/Forums/en-US/category/kinectsdk" href="http://social.msdn.microsoft.com/Forums/en-US/category/kinectsdk">http://social.msdn.microsoft.com/Forums/en-US/category/kinectsdk</a></p> <p> </p> <h4>Video</h4> <p> <br /><strong>Video di lancio ufficiale del Kinect SDK Beta </strong> <br /><a title="http://channel9.msdn.com/Events/KinectSDK/BetaLaunch" href="http://channel9.msdn.com/Events/KinectSDK/BetaLaunch">http://channel9.msdn.com/Events/KinectSDK/BetaLaunch</a> </p> <p><strong>Kinect for Windows SDK Quickstarts </strong> <br />video di channel 9 ben fatti che mostrano Skeletal Tracking, Depth Data e Audio <br /><a title="http://channel9.msdn.com/series/KinectSDKQuickstarts/" href="http://channel9.msdn.com/series/KinectSDKQuickstarts/">http://channel9.msdn.com/series/KinectSDKQuickstarts/</a></p> <p> </p> <h4>Librerie</h4> <p><strong> <br />Coding4Fun Kinect Toolkit <br /></strong>insieme di Extension Methods che facilitano lo sviluppo  <br /><a title="http://c4fkinect.codeplex.com/" href="http://c4fkinect.codeplex.com/">http://c4fkinect.codeplex.com/</a></p> <p><strong>Kinect Contrib <br /></strong>Visual Studio 2010 Templates non particolarmente utile <br /><a title="http://kinectcontrib.codeplex.com/releases" href="http://kinectcontrib.codeplex.com/releases">http://kinectcontrib.codeplex.com/releases</a></p> <p><strong>Kinect Toolkit</strong> <br />libreria per le gestures, comodo il record and replay <br /><a title="http://kinecttoolkit.codeplex.com/" href="http://kinecttoolkit.codeplex.com/">http://kinecttoolkit.codeplex.com/</a></p> <p> </p> <h4>Progetti</h4> <p> <br /><strong>Kinect Paint <br /></strong>Disegnare con le mani<strong> </strong> <br /><a title="http://paint.codeplex.com/" href="http://paint.codeplex.com/">http://paint.codeplex.com/</a></p> <p><strong>Become The Incredible Hulk <br /></strong>Diventi Hulk con poco <br /><a title="http://www.codeproject.com/KB/dotnet/KinectGettingStarted.aspx" href="http://www.codeproject.com/KB/dotnet/KinectGettingStarted.aspx">http://www.codeproject.com/KB/dotnet/KinectGettingStarted.aspx</a> <br /> <br /><strong>Light Saber <br /></strong>Schiabola virtuale <br /><a title="http://channel9.msdn.com/coding4fun/kinect/Of-course-our-first-Kinect-for-Windows-SDK-Project-has-to-involve-a-Light-Saber" href="http://channel9.msdn.com/coding4fun/kinect/Of-course-our-first-Kinect-for-Windows-SDK-Project-has-to-involve-a-Light-Saber">http://channel9.msdn.com/coding4fun/kinect/Of-course-our-first-Kinect-for-Windows-SDK-Project-has-to-involve-a-Light-Saber</a></p> <p><strong>Candescent NUI <br /></strong>Tracking delle dita <br /><a title="http://candescentnui.codeplex.com/" href="http://candescentnui.codeplex.com/">http://candescentnui.codeplex.com/</a></p> <p> </p> <h4>Articoli</h4> <p> <br /><strong>Unleash the power of Kinect for Windows SDK <br /></strong>Introduzione sulle funzionalità base <br /><a title="http://blogs.msdn.com/b/eternalcoding/archive/2011/06/13/unleash-the-power-of-kinect-for-windows-sdk.aspx" href="http://blogs.msdn.com/b/eternalcoding/archive/2011/06/13/unleash-the-power-of-kinect-for-windows-sdk.aspx">http://blogs.msdn.com/b/eternalcoding/archive/2011/06/13/unleash-the-power-of-kinect-for-windows-sdk.aspx</a> <br /> <br /><strong>Gestures and Tools for Kinect <br /></strong>David Catuhe spiega come rilevare gestures come lo swipe o il cerchio <br /><a title="http://blogs.msdn.com/b/eternalcoding/archive/2011/07/04/gestures-and-tools-for-kinect.aspx" href="http://blogs.msdn.com/b/eternalcoding/archive/2011/07/04/gestures-and-tools-for-kinect.aspx">http://blogs.msdn.com/b/eternalcoding/archive/2011/07/04/gestures-and-tools-for-kinect.aspx</a></p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:abad745a-35af-4cba-b0ef-2fa47446d100" class="wlWriterEditableSmartContent">Tag di Technorati: <a href="http://technorati.com/tags/Kinect" rel="tag">Kinect</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/100207.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2011/07/08/kinect-sdk-risorse.aspx Fri, 08 Jul 2011 16:46:33 GMT http://blogs.ugidotnet.org/rcappe/archive/2011/07/08/kinect-sdk-risorse.aspx#feedback 1 http://blogs.ugidotnet.org/rcappe/comments/commentRss/100207.aspx Category Filter in AND in una build http://blogs.ugidotnet.org/rcappe/archive/2011/04/22/category-filter-in-and-in-una-build.aspx <p>Con il team volevamo creare una build che escludesse 2 categorie di test, l’attività sembrava semplice ma una la label ci ha tratto in inganno facendoci perdere un po’ di tempo.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/f43d7a84fa52_947A/image_4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/f43d7a84fa52_947A/image_thumb_1.png" width="496" height="467" /></a></p> <p>Come si vede nell’immagine nella descrizione viene chiesto di utilizzare l’operatore &amp;&amp; per legare due clausole. <br />L’operatore &amp;&amp; in fase di build scatena un generico <strong>TF270015: 'MSTest.exe' returned an unexpected exit code. Expected '0'; actual '1'</strong> e non vien chiarito neanche impostando la verbosità dei log in modalità diagnostica.  <br />Dopo alcuni tentativi abbiamo scoperto che l’operatore da utilizzare era semplicemente <strong>&amp;.</strong></p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fddc18e0-b3b2-4b69-a2ba-98f13e59c8c2" class="wlWriterEditableSmartContent">Tag di Technorati: <a href="http://technorati.com/tags/Tfs" rel="tag">Tfs</a>,<a href="http://technorati.com/tags/Build" rel="tag">Build</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/99982.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2011/04/22/category-filter-in-and-in-una-build.aspx Fri, 22 Apr 2011 11:56:39 GMT http://blogs.ugidotnet.org/rcappe/archive/2011/04/22/category-filter-in-and-in-una-build.aspx#feedback http://blogs.ugidotnet.org/rcappe/comments/commentRss/99982.aspx Frasi dal Team http://blogs.ugidotnet.org/rcappe/archive/2011/04/14/frasi-dal-team.aspx <p>Vi riporto alcune frasi uscite dai team della azienda dove lavoro che in qualche modo mi hanno fatto riflettere. <br />I citati spero mi scuseranno se non riporto le parole precise ma quello che mi è rimasto.</p> <p><a href="http://it.wikipedia.org/wiki/File:Arch_illustration.svg"><img style="margin: 0px 10px 0px 0px; display: inline; float: left" alt="" align="left" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Arch_illustration.svg/250px-Arch_illustration.svg.png" width="133" height="150" /></a><strong>“Per fare in modo che lo sviluppo software funzioni davvero servono tutti i pezzi” <br />-Gigi-</strong></p> <p>Se non ho una architettura disaccoppiata, se non ho test unitari fatti in un certo modo, se non ho le build in countinuos integration che lanciano i test, non posso apprezzare totalmente i vantaggi derivanti dallo sforzo speso per sviluppare in un certo modo. <br />Il pacchetto va preso tutto insieme suocera inclusa, se ne si prende solo una parte i vantaggi sono presenti ma il ritorno sull’investimento non è soddisfacente. <br />Fino a quando non metto la chiave di volta l’arco non è saldo.</p> <p><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/Windows-Live-Writer/Frasi-dal-Team_8C0/image_thumb.png" width="119" height="190" /> <strong>“Se non avessi avuto i test quella modifica l’avrei fatta diversamente cercando di toccare il meno possibile” <br />-Riccardo-</strong></p> <p>Devo fare una modifica e non ho confidenza con il pezzo di codice, quindi decido di usare l’approccio “sal funsiuna tuca nient” anche se lo “smell” mi infastidisce, se invece ho le spalle coperte dai test posso avventurarmi in un refactoring che migliora l’applicazione. <br />Questo credo che faccia la differenza tra un software che dopo due anni è marchiato “da buttare” e uno che è in continua evoluzione. <br />Confidenza e refactoring sono legati a filo doppio. <br /></p> <p> </p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cd0886c3-5b45-4d84-b92a-daa543052968" class="wlWriterEditableSmartContent">Tag di Technorati: <a href="http://technorati.com/tags/Pensieri" rel="tag">Pensieri</a>,<a href="http://technorati.com/tags/Test" rel="tag">Test</a>,<a href="http://technorati.com/tags/Team" rel="tag">Team</a>,<a href="http://technorati.com/tags/Refactoring" rel="tag">Refactoring</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/99956.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2011/04/14/frasi-dal-team.aspx Thu, 14 Apr 2011 02:42:38 GMT http://blogs.ugidotnet.org/rcappe/archive/2011/04/14/frasi-dal-team.aspx#feedback 5 http://blogs.ugidotnet.org/rcappe/comments/commentRss/99956.aspx Monitorare i pocessi attivi di Sql Server http://blogs.ugidotnet.org/rcappe/archive/2011/04/08/monitorare-i-pocessi-attivi-di-sql-server.aspx <p>In questi giorni mi è capitato di andare alla ricerca di qualcosa che portava la cpu di Sql Server al massimo, credo che sia interessante vedere quali sono gli strumenti che si possono utilizzare per un compito come questo.</p> <p><strong>Activity Monitor <br /></strong>L’Activity Monitor permette di visualizzare informazioni sui processi di SQL Server. <br />Vengono visualizzati tutti gli spid con il loro stato, l’applicazione che li ha generati ed è possibile fare il Kill del processo.</p> <p><strong><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/MonitorareipocessiattividiSqlServer_E865/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/MonitorareipocessiattividiSqlServer_E865/image_thumb.png" width="504" height="326" /></a> </strong></p> <p><strong>Profiler <br /></strong>Il profiler è uno strumento estremamente potente che ci permette di monitorare tutte quelle che sono le query che vengono eseguite sull’istanza di Sql Server. <br />Le configurazioni sono praticamente infinite, possiamo specificare il nome del db, l’utente, i tempi di durata delle query, vedere le stored procedure e anche gli statement eseguiti all’interno. <br />Una volta attivato è possibile esportare la traccia in una tabella o in file. <br />Le best practice dicono di attivarlo su una macchina diversa dal server sql per ridurre il carico di elaborazione che comunque è alto essendo uno strumento di analisi dei problemi.</p> <p><strong>sp_who2 e sp_WhoIsActive <br /></strong>La stored procedure sp_who2 ricalca in parte le funzionalità del Activity Monitor, ma essendo un script è sicuramente più veloce e comodo da eseguire. <br />sp_WhoIsActive invece è una interessante stored procedure che potete trovare qui <a title="http://sqlblog.com/files/folders/release/entry29675.aspx" href="http://sqlblog.com/files/folders/release/entry29675.aspx">http://sqlblog.com/files/folders/release/entry29675.aspx</a>. <br />Questa sp_WhoIsActive permette di visualizzare in maniera dettagliata quali sono i processi attivi che query stanno eseguendo, nel mio caso è stata estremamente utile.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/MonitorareipocessiattividiSqlServer_E865/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/MonitorareipocessiattividiSqlServer_E865/image_thumb_1.png" width="504" height="383" /></a></p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c91da4f6-d2ca-41ec-a265-bbaf78e0ff5a" class="wlWriterEditableSmartContent">Tag di Technorati: <a href="http://technorati.com/tags/Sql+Server" rel="tag">Sql Server</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/99934.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2011/04/08/monitorare-i-pocessi-attivi-di-sql-server.aspx Fri, 08 Apr 2011 17:31:35 GMT http://blogs.ugidotnet.org/rcappe/archive/2011/04/08/monitorare-i-pocessi-attivi-di-sql-server.aspx#feedback http://blogs.ugidotnet.org/rcappe/comments/commentRss/99934.aspx Configurare il net.tcp binding in un servizio wcf http://blogs.ugidotnet.org/rcappe/archive/2011/04/07/configurare-il-net.tcp-binding-in-un-servizio-wcf.aspx <p>Wcf si basa sui modello <strong>ABC</strong> (Address, Binding, Contract) questo modello è estremamente flessibile e ci permette ad esempio di cambiare il binding, cioè il modo in cui i servizi  comunicano, senza modificare come sono fatti.</p> <p>Esistono diversi tipi di bindig, il <strong>NetTcpBinding</strong> utilizza il protocollo di trasporto Tcp, i pacchetti sono compressi in binario a differenza del basicHttp o del wsHttp che sono in soap. Vediamo quindi come configurare un servizio che sfrutti il NetTcpBinding e come ospitarlo in IIS 7.5. </p> <p>Per prima cosa vediamo come configurare il servizio wcf</p> <pre class="brush: xml; gutter: false;">&lt;system.serviceModel&gt; &lt;services&gt; &lt;service name="MyService" behaviorConfiguration="MyServiceBehavior"&gt; <strong>&lt;endpoint address="" binding="netTcpBinding" bindingConfiguration="MyTcpConfiguration" contract="IMyService"/&gt;</strong> &lt;endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /&gt; &lt;/service&gt; &lt;/services&gt; &lt;bindings&gt; &lt;netTcpBinding&gt; &lt;binding name="MyTcpConfiguration"&gt; &lt;security mode="None"/&gt; &lt;/binding&gt; &lt;/netTcpBinding&gt; &lt;/bindings&gt; &lt;behaviors&gt; &lt;serviceBehaviors&gt; &lt;behavior name="MyServiceBehavior"&gt; &lt;serviceMetadata httpGetEnabled="true" /&gt; &lt;serviceDebug includeExceptionDetailInFaults="false" /&gt; &lt;/behavior&gt; &lt;/serviceBehaviors&gt; &lt;/behaviors&gt; &lt;/system.serviceModel&gt;</pre> <br /> <p>IIS 7 permette di ospitare servizi che utilizzino il protocollo Tcp tramite Windows Process Activation Services.</p> <p>Per prima cosa verifichiamo che sia installato nelle Feature il <strong>Non-HTTP Activation</strong> <br /><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/Configurareiln.tcpbindinginunserviziowcf_F5A9/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/Configurareiln.tcpbindinginunserviziowcf_F5A9/image_thumb_2.png" width="404" height="300" /></a> </p> <p>Sul sito che conterrà il nostro servizio aggiungiamo un nuovo binding, come tipologia net.tcp e come binding information la porta ad esempio 809:* <br /><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/Configurareiln.tcpbindinginunserviziowcf_F5A9/image_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/Configurareiln.tcpbindinginunserviziowcf_F5A9/image_thumb_3.png" width="404" height="316" /></a> </p> <p>All’interno della Application negli Advanced Settings aggiungiamo il novo protocollo supportato. <br /><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/Configurareiln.tcpbindinginunserviziowcf_F5A9/image_12.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rcappe/WindowsLiveWriter/Configurareiln.tcpbindinginunserviziowcf_F5A9/image_thumb_5.png" width="404" height="354" /></a> </p> <p>Per consumare il web service adiamo a specificare l’indirizzo del endpoint così </p> <pre class="brush: xml; gutter: false;">&lt;endpoint address="net.tcp://server:809/MyService.svc" binding="netTcpBinding" bindingConfiguration="MyBindingConfiguration" contract="IDocumentService" name="MyService" /&gt;</pre> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a72ba4e7-2a98-49ab-8431-563bd26c522c" class="wlWriterEditableSmartContent">Tag di Technorati: <a href="http://technorati.com/tags/Wcf" rel="tag">Wcf</a>,<a href="http://technorati.com/tags/Servizi" rel="tag">Servizi</a>,<a href="http://technorati.com/tags/Tcp" rel="tag">Tcp</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/99922.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2011/04/07/configurare-il-net.tcp-binding-in-un-servizio-wcf.aspx Thu, 07 Apr 2011 18:28:11 GMT http://blogs.ugidotnet.org/rcappe/archive/2011/04/07/configurare-il-net.tcp-binding-in-un-servizio-wcf.aspx#feedback http://blogs.ugidotnet.org/rcappe/comments/commentRss/99922.aspx IIS Express e transferMode=&quot;Streamed&quot; http://blogs.ugidotnet.org/rcappe/archive/2011/04/06/iis-express-e-transfermodequotstreamedquot.aspx <p>IIS Express è un nuovo web server creato a partire da IIS 7.x ideale negli scenari di sviluppo. Si integra ottimamente in visual studio e va in qualche modo a sostituire ASP.NET Development Server (Cassini).</p> <p>I vantaggi di questo nuovo web server sono innumerevoli: <br />- Leggero e semplice da installare (il pacchetto di installazione pesa meno di 4Mb) <br />- Non richiede un account amministrativo per funzionare <br />- Include tutte le funzionalità di IIS compreso SSL, URL Rewrite, Media Support, e i moduli aggiuntivi di IIS <br />- Supporta il modello di estendibilità di IIS e le configurazioni del web server nel web.config <br />- Può essere installato side by side con IIS e con ASP.NET Development Server <br />- Funziona sotto XP e si hanno le stesse funzionalità di IIS 7.x</p> <p>Può essere scaricato del seguente indirizzo <a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=abc59783-89de-4adc-b770-0a720bb21deb" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=abc59783-89de-4adc-b770-0a720bb21deb">http://www.microsoft.com/downloads/en/details.aspx?FamilyID=abc59783-89de-4adc-b770-0a720bb21deb</a></p> <p>Per iniziare ad utilizzarlo vi rimando a questo post dove viene introdotto <br /><a title="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx" href="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx">http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx</a></p> <p>Questo altro post parla della integrazione di IIS Express con il Sp1 di Vs <br /><a title="http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx" href="http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx">http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx</a></p> <p>Ritorniamo a noi una delle funzionalità che ora si possono utilizzare con IIS Express è la modalità di trasferimento Streamed, infatti Cassini supportava solamente il tranferMode Buffered per i servizi Wcf.</p> <p>Streamed è consigliato negli scenari dove spostiamo grosse quantità di dati ad esempio file e quindi questa funzionalità ci aiuta durante la fase di sviluppo e di debug senza dover cambiare la configurazione.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:43e0555f-be68-4b65-9512-1c13d6d4221f" class="wlWriterEditableSmartContent">Tag di Technorati: <a href="http://technorati.com/tags/IIS+Express" rel="tag">IIS Express</a>,<a href="http://technorati.com/tags/Wcf" rel="tag">Wcf</a></div><img src="http://blogs.ugidotnet.org/rcappe/aggbug/99913.aspx" width="1" height="1" /> Roberto Cappelletti http://blogs.ugidotnet.org/rcappe/archive/2011/04/06/iis-express-e-transfermodequotstreamedquot.aspx Wed, 06 Apr 2011 11:03:13 GMT http://blogs.ugidotnet.org/rcappe/archive/2011/04/06/iis-express-e-transfermodequotstreamedquot.aspx#feedback http://blogs.ugidotnet.org/rcappe/comments/commentRss/99913.aspx