Emanuele Bartolesi

SharePoint, Kinect and Xbox addicted.

NAVIGATION - SEARCH

Impostare un colore di sfondo di una jQuery UI Dialog

jQueryUI mette a disposizione un un buon numero di widget da poter usare nelle nostre applicazioni web.
Uno di questi si chiama “Dialog” ed è un div che viene renderizzato come se fosse una finestra popup all’interno della nostra pagina HTML.
Può essere impostato anche in modalità “modal” risultando sopra ad ogni altro elemento e dovrà essere chiuso prima di poter utilizzare gli altri componenti della pagina.

Quando il controllo è aperto, viene inserito un colore di sfondo più scuro per far capire che la finestra è modale.
Questo colore ovviamente può essere variato, seguendo le linee grafiche del nostro sito.
Per fare questo è possibile cambiare direttamente il css legato alla controllo, oppure fare la stessa cosa, ma utilizzando gli eventi del widget.
Personalmente preferisco usare il secondo metodo in quanto funziona su tutti i browser, mentre nel primo caso può dare qualche problema su versioni vecchie di IE.

Primo metodo

.ui-widget-overlay
{
  opacity: .30 !important; 
  filter: Alpha(Opacity=30) !important;

  background-color: rgb(0, 0, 0) !important;
}

Secondo metodo

open : function(event, ui){
    $("body").css({
        overflow: 'hidden'
    });
    $(".ui-widget-overlay").css({
        background:"rgb(0, 0, 0)",
        opacity: ".30 !important",
        filter: "Alpha(Opacity=30)",
    });
},
beforeClose: function(event, ui) {
    $("body").css({ overflow: 'inherit' })
}

I plugin jQuery che non possono mancare nelle vostre applicazioni ASP.NET

Ormai le applicazioni web richiedono la stessa capacità di interazione delle applicazione desktop a cui gli utenti sono stati abituati per anni.
Con HTML5, CSS3 e jQuery questo non è più un risultato così difficile da ottenere.

Di seguito riporto alcuni dei plugin che non possono mancare nelle vostre applicazioni ASP.NET per migliorare l’usabilità e rendere i contenuti di facile fruizione da parte degli utenti.

  • noty: permette di inserire dei messaggi simili agli alert di outlook o delle toast notification.
  • NProgress.js: per inserire una barra di caricamento in alto alla pagina per dare un feedback all’utente sullo stato dei download o delle chiamate asincrone della pagina
  • jQuery.Inputmask: un plugin che permette di trasformare una casella di testo in una input mask con vari formati: date, numeri e la possibilità di inserire direttamente regex personalizzate
  • jquery-watermark: permette di inserire un watermark nelle caselle di testo
  • jquery news ticker: un news ticker sullo stile dei notiziari
  • jTable: facile e veloce da imparare per creare tabelle con filtri, ordinamenti e finestre di modifica dei dati. E’ stata realizzata da uno sviluppatore ASP.NET e quindi è facilmente integrabile. Ci sono direttamente gli esempi con ASP.NET MVC
  • jqGrid: un’altro plugin per realizzare tabelle. Molto ricco di funzionalità, ma personalmente preferisco jTable
  • jQuery Format Currency: questo plugin permette di formattare una casella di testo con la valuta di 211 paesi. Molto semplice da usare e gli esempi sul sito sono esaustivi
  • dropzonejs: permette l’upload di file di qualsiasi tipo anche con il drag&drop direttamente sulla pagina. In caso di immagini fa vedere anche l’anteprima.
  • jQueryUI Sortable: nel caso aveste bisogno di una lista ordinabile questo fa al caso vostro
  • jQueryUI Datepicker: un datepicker facile da configurare, ma con tante personalizzazioni
  • anoSlide: uno slider di immagini molto bello e semplice da personalizzare
  • Flot: tantissimi tipi di grafici molto belli graficamente e interattivi. Possibilità di aggiornare i grafici anche tramite chiamate AJAX.
  • jQuery Loader Fullscreen: un loader a tutto schermo semplice da usare. E’ un mio progetto su GitHub. :)

La lista potrebbe essere molto più lunga, ma questa è una buona base di partenza per rendere le vostre applicazioni più accattivanti e user-friendly.

Rendere Outlook 2013 più social che mai

In Outlook 2013 è stata introdotta una barra nel riquadro di lettura che visualizza gli aggiornamenti e i messaggi sotto forma di discussione dei contatti presenti nella mail.
Questa funzionalità può essere estesa anche ad account esterni per essere sempre aggiornati sui propri contatti, senza ogni volta aprire tutti i vari social.
Inoltre, un comportamento che trovo molto utile, se l’utente è esterno alla propria rete, viene aggiunta una foto prelevata direttamente dal social con cui è registrata quella mail.

Per attivare questa funzionalità, selezionare dal ribbon di Outlook:

View –> People Pane –> Account Settings

Outlook1

Nella nuova schermata, selezionare i social che vi interessano e premere su Connect.

Una volta effettuati i login e concesso l’accesso alle vostre informazioni del social, cliccare su Finish.

Outlook2
A questo punto, nella barra di lettura della mail dove ci sono i contatti, appariranno foto prese dai vari social e gli aggiornamenti.

SharePoint 2013 – Rimuovere il campo Title con il Client Object Model

Quando facciamo il provisiong su SharePoint 2013 o Office 365 dalle nostre App a volte è necessario dover eliminare dei campi dalle liste che vengono inseriti di default.
Per fare questo è sufficiente eseguire una DeleteObject sul campo che vogliamo eliminare:

ClientContext clientContext = new ClientContext(siteUrl);
Web web = clientContext.Web;
List list = web.Lists.GetByTitle("MyList");
Field field = list.Fields.GetByTitle("Surname");
field.DeleteObject();
clientContext.ExecuteQuery();


Discorso diverso invece è per il campo Title che ha bisogno di qualche impostazione aggiuntiva per essere rimosso sia dalla lista, sia dalla vista o dalle viste in cui appare:

ClientContext clientContext = new ClientContext(siteUrl);
Web web = clientContext.Web;
List list = web.Lists.GetByTitle("MyList");
Field field = list.Fields.GetByTitle("Title");

field .Hidden = true;
field .Required = false;
field .SetShowInDisplayForm(false);
field .SetShowInEditForm(false);
field .SetShowInNewForm(false);

View view = list.Views.GetByTitle("All Items");
ViewFieldCollection viewFields = view.ViewFields;
viewFields.Remove("LinkTitle");
view.Update();

clientContext.ExecuteQuery();

MVP per la prima volta!

Lo scorso 1° luglio sono stato nominato Microsoft MVP su ASP.NET.

Ho approfittato di questi giorni prima di scrivere per fare mente locale sull’ultimo anno di vita lavorativa e personale.
E’ stato un anno molto intenso, soprattutto dal punto di vista professionale.
Tanti progetti da seguire, tanti progetti nuovi, eventi in giro per l’Italia e un trasferimento per fare ritorno a Milano.
Potrei stare ore a ringraziare tutti quanti, ma le persone che voglio ringraziare prima di tutte, sono Marco Minerva e Marco Dal Pino che mi hanno aiutato in questo percorso, a migliorarmi e a spronarmi nei momenti in cui la fiducia in me stesso scendeva sotto i livelli di sicurezza. :)
Il raggiungimento di questo obiettivo comunque non è un punto di arrivo, ma un checkpoint intermedio per cercare ancora di migliorare e di rimanere a far parte di questo fantastico gruppo fatto di persone prima che da professionisti.

Grazie anche a tutto lo staff di DotNetToscana, di cui faccio parte, per il supporto.microsoft-mvp

Script PowerShell per scaricare tutti i video di DotnetConf14

Ho preparato uno script PowerShell per scaricare tutti i video della recentissima DotNetConf14.

Lo potete trovare su Gist a questo link: https://gist.github.com/kasuken/891f4102e807b2dbb78c

mkdir "~\Desktop\DotNetConf14"
cd "~\Desktop\DotNetConf14"
[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
$a = ([xml](new-object net.webclient).downloadstring("http://s.ch9.ms/Events/dotnetConf/2014/RSS/mp4high"))
$a.rss.channel.item | foreach{  
      $url = New-Object System.Uri($_.enclosure.url)
    
    $file = "- " + $_.creator + " - " + $_.title.Replace(":", "-").Replace("?", "").Replace("/", "-").Replace("<", "").Replace("|", "").Replace('"',"").Replace("*","")
    $file = $file.substring(0, [System.Math]::Min(120, $file.Length))
    $file = $file.trim()
    
    $OutFile = New-Item -type file "$file.txt" -Force  
    $Content = ""
    $Content = $_.title.trim() + "`r`n" + $_.summary.trim()
    add-content $OutFile $Content
    
    "Downloading: " + $file + ".mp4"
    if (!(test-path $file))
    {
      $wc = (New-Object System.Net.WebClient)  
      $wc.DownloadFile($url, $file + ".mp4")
    }
}

Bootstrap 3 in 15 minuti

Bootstrap è un framework HTML, CSS e Javascript. Il suo scopo è quello di aiutare a disegnare layout per siti o applicazioni web in poco tempo e adatti a qualsiasi tipo di browser e risoluzione.

Ormai arrivato alla versione 3, si può considerare quasi uno standard per lo sviluppo di layout responsive.

In questo breve tutorial andremo a vedere le basi di questo framework da cui partire per realizzare layout più complessi utilizzando le classi base di Boostrap.

La prima pagina

Per prima cosa dobbiamo creare una pagina HTML5 con l’editor HTML che preferite (io uso questo) e inserire i riferimenti ai CSS e al Javascript di Bootstrap.
Se non volete avere una copia dei file sul vostro server, potete utilizzare un server CDN (www.bootstrapcdn.com) che mette a disposizione i file necessari.

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
</head>

<body>

    <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
</body>
</html>

E’ disponibile sia con protocollo http che https.
Di norma viene aggiunto anche jQuery per utlizzare funzioni più avanzate di Boostrap che andremo a vedere nei prossimi post.

Jumbotron

La pagina che abbiamo creato adesso è ancora bianca perchè non abbiamo disegnato nessun elmento HTML. Il primo che andremo a inserire si è un div a cui andremo ad applicare una delle classi css di Boostrap denominata “jumbotron”.
Questa classe serve a creare una sezione di intestazione della pagina in cui possiamo inserire titoli, sottotitoli, pulsanti di navigazione.

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
</head>

<body>
    <div class="container">
        <div class="jumbotron">
                <h1>First Page in Bootstrap</h1>
        </div>
    </div>

    <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
</body>
</html>

In questo caso siamo andati a inserire il titolo “First Page in Bootstrap” all’interno di un tag <h1> per impostare un titolo alla pagina.
All’interno del jumbotron però possiamo inserire qualsiasi tipo di altro tag HTML, come ad esempio:

<p>Are you happy developer?</p>
<p><a class="btn btn-primary btn-lg" href="http://www.emanuelebartolesi.com" target="_blank">Learn more</a></p>
 
Righe e colonne

In Bootstrap ogni sezione di una pagina è rappresentata da un div con applicata la classe “row”. All’interno di ogni sezione “row” è possibile inserire più sezioni orizzontali semplicemente inserendo uno o più div al suo interno.
Ai div interni possiamo applicare le classi “col-lg”, “col-md”, “col-sd” e “col-xs”.
Queste classi vogliono dire che la colonna appena creata si adatterà, rispettivamente, a uno schermo largo, medio, piccolo e molto piccolo. In questo modo è possibile impostare un layout per ogni tipo di risoluzione. Se invece vogliamo utilizzare un layout che si adatti a qualsiasi tipo di schermo, possiamo utilizzare la classe “col-md”.

Bootstrap utilizza un sistema a 12 colonne (12 Grid System). Questo vuol dire che se voglio creare due colonne larghe uguali, devo creare due div e applicare a entrambe la classe css “col-md-6”. Se ne volessi invece creare 4, dovrei fare 4 div con la classe “col-md-3” applicata.

<div class="container">
    <div class="row">
        <div class="col-md-4">
        
        </div>
        <div class="col-md-4">

        </div>
        <div class="col-md-4">

        </div>
    </div>
</div>

Se aggiungiamo lo snippet  di codice sopra, avremmo 3 div, larghi 4 colonne l’uno perfettamente responsive.
Il codice completo con il contenuto di prova:

<div class="container">
    <div class="row">
        <div class="col-md-4">
            <h2>Heading 1</h2>
            <p align="justify">Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
            <p><a class="btn btn-default btn-primary" href="#">View details &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2>Heading 2</h2>
            <p align="justify">Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
            <p><a class="btn btn-default btn-primary" href="#">View details &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2>Heading 3</h2>
            <p align="justify">Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
            <p><a class="btn btn-default btn-primary" href="#">View details &raquo;</a></p>
        </div>
    </div>
</div>
 
Menu di navigazione

Una delle parti più importanti per ogni sito è la navigazione.
Anche in questo caso Bootstrap ha già un comportamento e della classi predefinite che possono semplificarne lo sviluppo.

Anche la barra di navigazione è un div, con la classe “navbar” applicata.
All’interno del div principale, ci sono altri div che andranno a formare il menu vero e proprio.
Le cose fondamentali da sapere sono che se inseriamo un button e gli applichiamo la classe “navbar-toggle”, questo sarà nascosto fino a che il nostro browser sarà a risoluzioni abbastanza elevate, ma durante la navigazione di un dispositivo mobile, verrà visualizzato il contenuto di questo tag. Di solito viene visualizzato come un pulsante con delle righe orizzontali.
Un altro elemento fondamentale, sempre da inserire all’interno del div con classe “navbar-header” è un tag link con classe “navbar-brand”.
Questo sarà visualizzato di default a sinistra del menu con solitamente il titolo del sito.
L’ultimo div che forma la navigazione, è un div con classe css “navbar-collapse”.
In questo div, attraverso un elenco ul->li, è possibile inserire i link del sito, anche annidandoli come un normale elenco puntato. Gli elementi di secondo livello, verrano visualizzati di default in un menu a discesa quando il mouse si sposterà sull’elemento principale.

Il codice per realizzare il menu appena descritto è il seguente:

<div class="navbar navbar-inverse navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Bootstrap first page</a>
    </div>
    <div class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li><a href="#about">Second link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</div>

A questo link, potete trovare l’esempio completo della pagina creata in questo tutorial.

image

SharePoint 2013: recuperare il numero di versione di un item con il Client Object Model

Spesso è necessario visualizzare il numero di versione di un Item di una lista presente in SharePoint nelle nostre applicazioni che utlizzano il Client Object Model.
Per recuperare tale valore, bisogna prima recuperare il riferimento alla lista, poi tutti gli item e infine recuperare il valore attraverso il nome del campo “_UIVersionString”.
Diamo un’occhiata al codice, supponendo di avere una lista denominata “Products” e il versioning abilitato sulla lista.

ClientContext cc = new ClientContext("Your Site Url");
Web web = cc.Web;

List list = web.Lists.GetByTitle("Products");

CamlQuery caml=new CamlQuery();
ListItemCollection items = list.GetItems(caml);

cc.Load(list);
cc.Load(items);
cc.ExecuteQuery();

foreach (Microsoft.SharePoint.Client.ListItem item in items)
{
    var version = item.FieldValues["_UIVersionString"].ToString();
}

Nascondere l’icona e il titolo di un’app per SharePoint o Office 365

Quando realizziamo un'app per SharePoint 2013 o Office 365 in modalità Sharepoint-Hosted non abbiamo la possibilità di cambiare completamente l'impostazione delle pagine che compongono la nostra applicazione e di default viene inserito in ogni pagina il titolo della nostra app e il logo.

A volte questa cosa può non rispettare gli standard grafici che ci siamo prefissati per la nostra App.

Per eliminare la barra del titolo è sufficiente inserire nei css dell'App o nella singola pagina in cui vogliamo eliminare l'elemento il seguente snippet di CSS.

#s4-titlerow{
    display:none !important;
}

Creare un campo di tipo rich text in SharePoint 2013

Questo post nasce dall’esigenza di colmare un piccolo gap della documentazione presente su MSDN in cui non viene spiegato in maniera esaustiva la modalità di creazione di un campo “Note” con la possibilità di avere il completo supporto a HTML e una casella di testo in stile WYSIWYG in fase di inserimento e modifica del record.
L’XML corretto per creare un campo di questo tipo è il seguente:

<Field
    Name="Body"
    DisplayName="Body"
    Type="Note"
    RichText="TRUE"
    RichTextMode="FullHtml"    
    Sealed="FALSE"
    ReadOnly="FALSE"
    Hidden="FALSE"
    DisplaceOnUpgrade="TRUE" />

I due tag fondamentali sono RichText="TRUE e RichTextMode="FullHtml".
E’ da notare che il Type del campo deve essere “Note” anzichè “Text”.

Amministrare SharePoint 2013 da PowerShell – Parte 2

Nell’articolo precedente abbiamo visto come creare da script una web application.
Il passo successivo è quello di creare una site collection sotto la stessa web application.

Anche in questo caso, se non lanciamo lo script dalla console PowerShell di SharePoint, è necessario aggiungere lo Snapin necessario per includere gli oggetti di SharePoint.
Il parametro $SiteUrl deve essere impostato con l’url del sito della web application di riferimento.
E’ anche possibile scegliere se avere la user experience di SP2010 o SP2013. Altro parametro fondamentale è il template della Site Collection.
All’indirizzo http://www.funwithsharepoint.com/sharepoint-2013-site-templates-codes-for-powershell/ è possibile trovare la lista completa di tutti i template che si possono usare.

Remove-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.Powershell

$SiteUrl="site url"

#14 for SharePoint Server 2010 experience sites or 15 for SharePoint Server 2013 
$CompatibilityLevel=15

<#
#Specifies the language ID for the new site collection
#This must be a valid language identifier (LCID).
#http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splanguage.lcid.aspx
#1033 English
#>
$Language=1033

#Specifies the title of the new site collection
$Name="Nome Sito"

#Site description
$Description=""    

$OwnerAlias = "domain\nome utente"
$OwnerEmail = "email@domain.com"

#Template Disponibili:
#http://www.funwithsharepoint.com/sharepoint-2013-site-templates-codes-for-powershell/
$Template="BLANKINTERNETCONTAINER#0"

New-SPSite $SiteUrl -Template $Template -OwnerAlias $OwnerAlias -CompatibilityLevel $CompatibilityLevel -Description $Description -Language $Language -Name $Name -OwnerEmail $OwnerEmail

Amministrare SharePoint 2013 da PowerShell – Parte 1

SharePoint 2010 e SharePoint 2013 possono essere amministrati quasi interamente da PowerShell. Questo fa un pò il bello e il cattivo tempo degli sviluppatori e dei sistemisti che devono impostare alcune feature e comportamenti degli ambienti di sviluppo e produzione.
Una delle comodità ad esempio è che con gli script, si può creare molto rapidamente una web application e replicarla con le stesse impostazioni su tutti gli ambienti che servono (sviluppo, test, collaudo e produzione ad esempio).

In questo primo script andremo a vedere come creare una web application nuova da PowerShell. Per prima cosa bisogna abilitare l’esecuzione degli script sul server seguendo l’altro mio articolo di qualche giorno fa.

Remove-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.Powershell

$name="Web Application Name"
$appPool="App Pool"
$poolAccount="pool account"
$dbName="Mediobanca DB"
$waURL="http://site url"

try 
{
    $ap = New-SPAuthenticationProvider
    New-SPWebApplication -Name $name -URL  $waURL -ApplicationPool  $appPool -ApplicationPoolAccount (Get-SPManagedAccount $poolAccount ) -AuthenticationProvider $ap -DatabaseName $dbName
}
catch
{
    write-host "Error" $_.exception -foregroundcolor Red
}

Se lo script non viene lanciato dalla console PowerShell di SharePoint è necessario per prima cosa aggiungere lo Snapin Microsoft.SharePoint.Powershell, in modo da avere gli oggetti di SharePoint disponibili.
Per comodità ho inserito nello script delle variabili che possono e devono essere cambiate in base alle esigenze del momento, come ad esempio il nome dell’application pool, il nome del database di riferimento e l’account con cui verrà eseguito l’application pool nel formato “dominio\nome utente”.

Post Webcast “Creare App per Office 365 e SharePoint 2013 con ASP.NET MVC 5”

Lunedì si è tenuto un altro webcast targato DotNetToscana. Per questo webcast abbiamo avuto un ospite d'onore: Giuseppe Marchi.
Per chi si fosse perso l'evento in diretta, può rivederlo su YouTube al seguente link: https://www.youtube.com/watch?v=rU6lJ_wlZEQ

Determinare se un Application Pool è di SharePoint

Con questo piccolo script è possibile determinare se un Application Pool appartiene a un sito di SharePoint o meno.

Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
Import-Module WebAdministration -ErrorAction SilentlyContinue

$AppPoolDisplayName = "App Pool Display Name"

if(Get-SPServiceApplicationPool $AppPoolDisplayName -ErrorAction SilentlyContinue)
{
    Write-Host "The $AppPoolDisplayName is a SharePoint Application Pool"
}
else
{
    if((Test-Path IIS:\AppPools\$AppPoolDisplayName).tostring() -eq "True")
    {
       Write-Host "The $AppPoolDisplayName exists but it isn't a SharePoint Application Pool"
    }
    else
    {
    Write-Host "The $AppPoolDisplayName not exists"
    }
}

Post “Fiera del Radioamatore 2014”

Ieri si è conclusa l'avventura di DotNetToscana alla Fiera del Radioamatore di Pordenone.
Un evento molto bello e ben organizzato. Il nostro padiglione era quello dedicato ad "AppDays", dove hanno preso parte Community e User Group da tutta Italia e di tecnologie diverse: si potevano trovare stand su Linux, Apple, Stampanti 3D, embedded, droni costruiti in casa.

Per noi l’esperienza è stata ancora più significativa perché era la prima volta che invitavano qualcuno dello stack tecnologico Microsoft, e dunque si è trattato di una sfida nella sfida. Direi comunque che il riscontro ottenuto ha persino superato le aspettative.

Noi di DotNetToscana abbiamo erogato sessioni su Windows Phone 8 e Windows 8 tra cui: utilizzo delle mappe, in-app purchase, servizi per le app (Web API), interazione con device esterni e l'immancabile volo del drone.
Nel complesso, abbiamo riscontrato un buon numero di partecipanti, anche tenendo conto che si trattava di una vera propria fiera e non di un evento classico ricco di sessioni e di track.

Anche questa volta, la sessione con il maggior numero di partecipanti e il più grande interesse, anche da parte di persone che passavano di lì per caso, è stata quella del drone. E' sempre affascinante veder volare un drone comandato da un cellulare con la schermata dell'app proiettata sul maxitelo dell'arena principale della Fiera.

Come sempre grazie ai miei compagni di viaggio, Marco Minerva e Marco Dal Pino: risate, divertimento e cene.

Un ringraziamento particolare a Marco Parenzan che ci ha invitato per questa fantastica esperienza che come sempre ha l'illusione di essere durata troppo poco quando si torna a casa.

WP_20140426_10_54_11_Pro