ComputerLand

Tu sei qui: Articoli

Notizie dal web

Guest Post: Ottenere informazioni sul chiamante di un metodo in C# 5

E-mail Stampa PDF

 

Questo post è stato scritto da Antonio Pelleriti (twitter @zetanove)

 

La principale novità introdotta dalle specifiche di C# 5.0, e quindi quella conosciuta ai più, è senza dubbio il supporto alla programmazione asincrona, integrata nel linguaggio mediante le parole chiave async/await.

Una seconda novità che probabilmente passa in secondo piano, magari perché dedicata ad ambiti e aspetti un po’ più specifici, ma che come vedremo può tornare utile anche nella vita quotidiana di uno sviluppatore (vedremo in particolare la sua utilità a supporto del paradigma MVVM) è l’introduzione dei cosiddetti Caller Info Attributes. 

Avete presente il servizio dei gestori telefonici che permette di ottenere informazioni sul numero chiamante? Applicatelo a un programma C# e pensate al chiamante come al membro che invoca un altro metodo.

Soprattutto per scopi di debug, di logging  e diagnostica, spesso può essere utile conoscere il chiamante di un metodo e ottenerne informazioni di vario genere.

Prima di C# 5, per ottenere tali informazioni era necessario ricorrere alle classi StackFrame e StackTrace del namespace System.Diagnostics, e alle funzionalità di Reflection, che, come è noto, possono anche influire pesantemente sulle prestazioni, ed il loro funzionamento può avvenire esclusivamente a runtime: ha poco senso accedere allo stack delle chiamate se il programma non è in esecuzione.

Ecco un semplice esempio in una applicazione console che ricava le informazioni sul metodo attuale, e le stampa:

 

using System;

using System.Diagnostics;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            MioMetodo();

            Console.ReadLine();

        }

 

        public static void MioMetodo()

        {

            Log();

        }

 

        private static void Log()

        {

            var sf = new StackFrame(1, true);

            var methodName = sf.GetMethod().Name;

            var sourceFile = sf.GetFileName();

            var lineNumber = sf.GetFileLineNumber();

            Console.WriteLine("[{1}] - {0} ({2}:{3})",

               methodName, DateTime.Now, sourceFile, lineNumber);

        }

    }

}

 

 

Inoltre i metodi della classe StackFrame, come GetFileNumber o GetFileName, ottengono le informazioni estraendole dai simboli di debug, se disponibili.

Nell’esempio precedente, il metodo Log ottiene informazioni sul suo chiamante, stampandole sulla console.

 

Caller Information in C# 5.0

 

In C# 5.0, è possibile ottenere tali informazioni in maniera molto più immediata, mediante l’utilizzo dei tre nuovi attributi che vedremo a breve, ed a tempo di compilazione: cioè i valori delle informazioni sul chiamante vengono generati come valori letterali in Intermediate Language (IL).

A differenza dei risultati della proprietà StackTrace, i risultati non sono così interessati da offuscamento e non vengono ricavati con Reflection o dai simboli di debug, quindi non risentono di problemi di performance.

I tre attributi suddetti, definiti nel namespace System.Runtime.CompilerServices, sono:

  CallerMemberName : è il nome del membro chiamante;

  CallerfilePath : è il percorso del file contenente il sorgente del chiamante;

  CallerLineNumber:  è il numero di riga del chiamante all’interno del file sorgente.

Essi permettono di ottenere informazioni sul chiamante di un metodo, sia esso un altro metodo, una proprietà, un evento.

Il seguente metodo mostra come usare i tre attributi, che verranno utilizzati dal compilatore per assegnare i valori ai corrispondenti parametri opzionali:

 

public static void Log2(

     [CallerMemberName] string memberName = null,

     [CallerFilePath] string filePath = null,

     [CallerLineNumber] int lineNumber = 0)

{

  Console.WriteLine(memberName);

  Console.WriteLine(filePath);

  Console.WriteLine(lineNumber);

}

 

 

Il metodo non fa altro che stampare i valori dei suoi argomenti.

Normalmente il compilatore assegnerebbe ai parametri opzionali i valori indicati direttamente nella firma del metodo ma, con l’uso degli attributi Caller Info, a essi sarà assegnato un valore ricavato direttamente dal contesto.

Per esempio, utilizzando ora il metodo Log, come implementato sopra, all’interno del metodo  Main:

 

class Program

{

  static void Main(string[] args)

  {

    Log2();

  }

}

 

Al parametro memberName sarà assegnato il nome del metodo chiamante, in questo caso Main, al secondo il percorso completo del file in cui è definita la classe Program, al terzo il numero di riga all’interno del file precedente al quale avviene l’invocazione del metodo Log2.

Se il metodo Log2 venisse invocato all’interno di una proprietà, CallerMemberName restituirebbe naturalmente il nome di quest’ultima.

La figura seguente dimostra come le informazioni sono ricavata a tempo di compilazione e inserite come stringhe nel codice IL.

Il metodo Log2 viene infatti invocato direttamente con i parametri che rappresentano le informazioni sul chiamante

 

clip_image001[8]

 

La pagina di MSDN dedicata all’argomento fornisce ulteriori dettagli: http://msdn.microsoft.com/en-us/library/hh534540.aspx.

 

L’interfaccia INotifyPropertyChanged

 

Oltre all’uso appena visto per ricavare informazioni di debug, o per tracciare l’esecuzione di un programma, uno ancora più pratico è quello di usare gli attributi Caller Info nell’implementazione dell’interfaccia INotifyPropertyChanged.

Se si utilizza il pattern architetturale MVVM, approccio frequente e consigliato ad esempio con applicazioni che definiscono la propria interfaccia grafica in XAML (Windows Phone, Windows RT, Universal Apps e così via), si rende spesso necessario aggiornare l’interfaccia grafica nel momento in cui una proprietà di un’oggetto ha cambiato valore.

Ecco un esempio di classe che implementa l’interfaccia,

 

using System;

using System.ComponentModel;

class Class1: INotifyPropertyChanged

{

        private string _field;

        public event PropertyChangedEventHandler PropertyChanged;

 

        public string OldStyleField

        {

            get

            {

                return _field;

            }

            set

            {

                if (value != _field)

                {

                    _field = value;

                    OnPropertyChangedOldStyle("OldStyleField");

                }

            }

        }

 

 

        public string Field

        {

            get

            {

                return _field;

            }

            set

            {

                if (value != _field)

                {

                    _field = value;

                    OnPropertyChanged();

                }

            }

        }

 

 

        private void OnPropertyChangedOldStyle(string propertyName)

        {

            var handler = PropertyChanged;

            if (handler != null)

            {

                handler(this, new PropertyChangedEventArgs(propertyName));

            }

        }

 

        private void OnPropertyChanged([CallerMemberName]string name=null)

        {

 

            var handler = PropertyChanged;

            if (handler != null)

            {

                handler(this, new PropertyChangedEventArgs(name));

            }

        }

 

}

 

Senza l’esistenza di CallerMemberName sarebbe necessario, come potete notare all’interno del ramo set della proprietà OldStyleField, indicare il nome della proprietà in maniera letterale, per ognuna delle proprietà della classe, con il rischio di sbagliare per distrazione o per la fretta nel copia e incolla, e introducendo così dei bug non sempre immediatamente visibili e facilmente scovabili.

La proprietà Field invece, quando cambia il valore da memorizzare nel campo _field, invoca il metodo OnPropertyChanged che fa uso dell’attributo CallerMemberName, senza necessità quindi di indicare manualmente il nome della proprietà che ha cambiato valore.

Per ulteriori informazioni e approfondimenti, sull’argomento trattato o in generale sul linguaggio C# 5.0, non posso che consigliarvi la lettura del mio libro “Programmare C# 5.0, guida completa” edito da LSWR, sul quale trovate maggiori informazioni nella pagina http://www.antoniopelleriti.it/page/libro-csharp.

                                                                                                                                             


read full article

Programmare Arduino usando Visual Studio? Si può, basta un plug-in: Visual Micro

E-mail Stampa PDF

Sono molti gli sviluppatori che hanno cominciato ad avvicinarsi al mondo hardware grazie alla diffusione delle schede Arduino: è sufficiente acquistare una board e qualche componente, installare l'IDE dedicato di Arduino, imparare ad usarlo e realizzare il primo programma di LED blinking con l'aiuto di qualche tutorial.

Ma non sarebbe più semplice utilizzare un ambiente di sviluppo già noto, diffuso e con tante funzionalità già pronte per essere sfruttate? Grazie a Visual Micro è possibile sviluppare, compilare e programmare la propria scheda Arduino utilizzando semplicemente Visual Studio.

clip_image001

Visual Micro è un plug-in gratuito per Microsoft Visual Studio 2008-2013, compatibile con tutte le schede Arduino, le librerie e gli strumenti di sviluppo: non occorre fare alcuna modifica al codice del progetto originale. Questo significa che, dopo aver installato Visual Micro, qualunque sketch program Arduino può semplicemente essere aperto, modificato, compilato e caricato sulla scheda direttamente da Visual Studio.

Iniziare ad utilizzare Visual Micro è molto semplice, è sufficiente aver installato Visual Studio e l'IDE di Arduino e seguire questa guida per l'installazione, oppure consultare la pagina del plug-in Visual Micro all'interno della galleria di componenti per Visual Studio. L'unico vincolo riguarda le versioni Express di Visual Studio, che non sono supportate.

I vantaggi che derivano dall'utilizzo di Visual Studio sono ben noti a chi lo usa già per altri ambiti (ad esempio per la programmazione di board Intel Galileo): a cominciare da intellisense e code completion, che permettono di completare la scrittura delle API con un semplice click, proseguendo con le funzionalità di jump to code definition e jump to error che facilitano la navigazione all'interno del progetto, un compilatore più veloce, il class explorer, oltre alla possibilità di avere più progetti all'interno della stessa solution.

Per poter sfruttare anche le funzionalità di debug di Visual Studio, indispensabili quando i progetti crescono in termini di dimensioni e complessità, Visual Micro dispone di un upgrade opzionale e non gratuito per effettuare il debug software dei progetti Arduino. Diventa quindi possibile monitorare una scheda Arduino durante il suo funzionamento, inserendo semplicemente un break point all'interno del codice e analizzando il funzionamento del sistema. Si possono inoltre inserire hit counter, break point condizionali e aggiornamenti di variabili senza bisogno di una ricompilazione della soluzione, e sono disponibili anche alcune funzionalità avanzate come, ad esempio, i timed break points. Se siete curiosi di scoprirle tutte basta installare la trial version di 30 giorni.

Grazie a Visual Micro, Visual Studio diventerà il vostro unico IDE anche per i progetti Arduino: a cominciare dallo sviluppo, passando per le modifiche e la programmazione della scheda, fino ad arrivare alla parte di test e debug del vostro progetto.

A questo punto è arrivato il momento di "toccare con mano": a questo link potete trovare maggiori dettagli e le istruzioni per download e installazione.


read full article

Aggiornamento sui Mobile Camp di Venezia e Catania

E-mail Stampa PDF

 

Il prossimo mobile camp in programma si terrà a Venezia il 4 Novembre, per questioni organizzative è stata modificata la location dell'evento: il mobile camp avrà luogo presso il Novotel di Venezia Mestre.

Ecco il link per tutti i dettagli e l'iscrizione gratuita: Venezia, 4 Novembre.

La tappa successiva sarà Catania, dove abbiamo in programma un evento di 2 giorni: 13 e 14 Novembre. Durante la prima giornata saranno presentate alcune sessioni teoriche dagli esperti Microsoft e dai membri delle community (di seguito il link per l'agenda delle sessioni, l'iscrizione gratuita e tutti gli altri dettagli: Catania, 13 Novembre), mentre la seconda giornata sarà interamente dedicata al laboratorio libero per lo sviluppo delle vostre app, sempre con il supporto degli esperti Microsoft e delle community locali (per informazioni, iscrizione e dettagli: Catania, 14 Novembre).

E dopo Catania, i mobile camp toccheranno altre città:

Non perdere questa occasione, devi solo scegliere la città più vicina a te!


read full article

Microsoft alla Maker Faire, Roma 3-5 Ottobre 2014

E-mail Stampa PDF

 

Dal 3 al 5 ottobre a Roma si è tenuta la Maker Faire (www.makerfairerome.eu), conosciuta anche come la "fiera dell'artigianato digitale": gli innovatori del terzo millennio hanno esposto la creatività e l'inventiva dei propri progetti ad un pubblico molto variegato, dal maker per passione, alla grande azienda, allo studente, fino ad arrivare alle famiglie con bambini piccoli.

clip_image001

Microsoft ha partecipato in qualità di sponsor. Per l’occasione, Pranish Kumar ha annunciato il rilascio ufficiale della preview image di Windows per la scheda Intel Galileo Gen 2, che, rispetto alla Intel Galileo di prima generazione, garantisce un miglioramento di prestazioni in termini di GPIO, SPI, I2C e UART.

Si conferma quindi, proprio in occasione della Maker Faire, l’avvicinamento di Microsoft al mondo dei makers, a seguito dell’entusiasmo mostrato per il Windows Developer Program for IoT che è stato lanciato lo scorso luglio ed ha ricevuto un numero di adesioni di gran lunga superiore alle aspettative. Microsoft si allinea ai principi di apertura e collaborazione caratteristici del mondo dei makers, condividendo su GitHub documentazione, implementazioni, progetti di esempio e librerie (per maggiori dettagli consulta il blog post ufficiale).

In particolare, per chiunque abbia appena acquistato una board e voglia cominciare da zero è disponibile gratuitamente l’SDK per la Galileo accompagnata da questa guida precisa e dettagliata per il setup di entrambe le generazioni di board.

Il sito che Microsoft segnala come riferimento per il Developer Program for IoT, indirizzato a makers, studenti e curiosi, è www.windowsondevices.com, mentre le informazioni legate alle opportunità di business che l’Internet of Things può offrire alle imprese, alle potenzialità e alle prospettive di crescita nel futuro si possono trovare al seguente link: www.internetofyourthings.com.

image

Oltre all’annuncio che è stato presentato all’interno dell’auditorium nella giornata di apertura, è stato anche allestito uno stand per le giornate successive, con alcune demo preparate per l'occasione e due startup che partecipano al programma BizSpark, le quali hanno messo in mostra i propri progetti reali, per dimostrare al mondo come l'Internet of Things possa essere visto non solo come un progetto incredibile e stupefacente di cui parlare agli amici, ma anche e soprattutto come un'ottima opportunità di business.

L'affluenza è stata semplicemente impressionante. Il team che presidiava lo stand ha lavorato senza sosta per l'intero weekend, spiegando ai makers come Microsoft si sta avvicinando al loro mondo, raccontando le possibilità che può offrire loro grazie all'esperienza di strumenti di sviluppo come Visual Studio e all'apertura e collaborazione con le altre tecnologie, anche concorrenti.

clip_image002

La domanda più frequente è stata "Ma cosa ci fa Microsoft alla Maker Faire?". La risposta è semplice: lo scopo è quello di aprire le porte ad un nuovo mondo, quello dell'IoT, che ha potenzialità importanti non solo per le grandi aziende, ma anche per chiunque abbia un'idea innovativa e voglia semplicemente provare a concretizzarla. Microsoft vuole fornire tutti gli strumenti e il supporto necessario a chiunque possa contribuire all’innovazione, migliorando la realtà di oggi. Questo è anche lo scopo di programmi come BizSpark e YouthSpark .

clip_image003clip_image004

clip_image006image

Partecipare alla Maker Faire è un'esperienza davvero incredibile, indipendentemente dall'età, dalle competenze, dalle motivazioni per cui si paga il biglietto. Se quest'anno ve la siete persa, prendete subito un appunto sul calendario per l'anno prossimo. Non ve ne pentirete!!

image


read full article

Guest post: Integrare un’applicazione o un servizio con Visual Studio Online

E-mail Stampa PDF

Questo post è stato scritto da Davide Benvegnù di DotNetToscana.

Visual Studio Online, al pari della sua versione on-premise Team Foundation Server, fornisce moltissime funzionalità già incluse. Spesso, però, in scenari complessi la gestione del ciclo di vita del software richiede delle integrazioni con applicazioni o servizi esterni.

Ad esempio, potrebbe essere utile aggiungere un nuovo Work Item ad un nostro Team Project in modo automatico, magari in risposta ad un determinato evento. Oppure essere notificati dell’avverarsi di determinate condizioni (penso ad esempio ad una Build andata male). O ancora poter controllare il nostro account Visual Studio Online tramite device mobili.

Metodi di integrazione

Grazie alle nuove funzionalità introdotte, ora Visual Studio Online offre diverse possibilità di integrazione con altri strumenti e servizi.

È possibile, ad esempio:

· Integrare VSO con i più popolari servizi cloud come Trello, GitHub, Jenkins, HipChat e molti altri

· Sviluppare applicazioni e servizi custom che estendono la potenzialità di Visual Studio Online

· Interrogare e/o utilizzare VSO da qualsiasi piattaforma (anche mobile)

Ci sono principalmente due metodi per integrarsi con Visual Studio Online:

· REST API

· Service Hooks

Sebbene entrambi i metodi sono attualmente in preview (rilasciati con l’update del 12 Maggio), sono perfettamente funzionanti.

REST API: Panoramica

Le REST API, nella loro ultima versione 1.0 preview Update 2 (rilasciata il 4 settembre), permettono a chi le consuma di interagire con praticamente tutte le componenti di Visual Studio Online.

Come dice il nome, sono API che sfruttano il protocollo REST ed utilizzano Json sia come input nei request body (di solito utilizzati per operazioni di POST, PUT e PATCH) che come output delle response.

Tutte le richieste verso le API devono seguire questo pattern:

https://{account}.VisualStudio.com/DefaultCollection/_apis[/{area}]/{resource}?api-version=1.0-preview.2

dove “account” sarà il nome dell’account che si vuole usare, “area” il servizio esposto dalle api su cui si vuole operare (l’elenco completo delle aree è disponibile a questa pagina) e “resource” il tipo di risorsa su cui andare ad insistere. Inoltre si noti che la versione delle API deve essere specificata.

Ad esempio, per creare un nuovo Task su un Team Project di nome “tpTest” di un VSO account chiamato “myvso”, l’url della richiesta sarà:

https://myvso.visualstudio.com/defaultcollection/tpTest/_apis/wit/workitems/$task?api-version=1.0-preview.2

REST API: Autenticazione

È importante sottolineare che queste API richiedono l’autenticazione al servizio, che può essere di due tipi: Basic e OAuth 2.0.

Per poter utilizzare l’autenticazione di tipo “Basic” è necessario abilitare le “alternate credentials” per l’account VSO dall’apposito pannellino del portale.

clip_image002

Per poter usare le Alternate Credentials basta entrare sul portale di VSO con l’account a cui si vogliono abilitare, cliccare sul nome utente in alto a destra e scegliere “My Profile”. A questo punto è sufficiente posizionarsi sulla tab “Credentials”, cliccare “Enable alternate credentials” ed inserire la password ed, eventualmente, un username secondario (utile se l’applicazione che vogliamo integrare non supporta il login con un indirizzo email)

Dopo aver eseguito questi passaggi è possibile utilizzarle per l’interazione con la API. Se ad esempio stiamo implementando un’applicazione .Net possiamo utilizzare la classe HttpClient come nell’esempio seguente, dove è riportato anche come costruire correttamente la richiesta (in questo caso una richiesta per recuperare tutte le build di un determinato account):

using System.Net.Http;

using System.Net.Http.Headers;

public static async void GetBuilds()

{

try

{

var username = "username";

var password = "password";

var account = "account";

using (HttpClient client = new HttpClient())

{

client.DefaultRequestHeaders.Accept.Add(

new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",

Convert.ToBase64String(

System.Text.ASCIIEncoding.ASCII.GetBytes(

string.Format("{0}:{1}", username, password))));

using (HttpResponseMessage response = client.GetAsync("https://" + account +

".visualstudio.com/DefaultCollection/_apis/build/builds").Result)

{

response.EnsureSuccessStatusCode();

string responseBody = await response.Content.ReadAsStringAsync();

Console.WriteLine(responseBody);

}

}

}

catch (Exception ex)

{

Console.WriteLine(ex.ToString());

}

}

Con l’autenticazione Basic possono essere utilizzate tutte le aree delle API ad eccezione di “Accounts” e “Profiles”, che quindi possono essere consumate solo utilizzando l’autenticazione OAuth.

REST API: Autenticazione con OAuth 2.0

Sebbene sia possibile, come abbiamo visto, integrarsi con Visual Studio Online usando il metodo di autenticazione Basic, è preferibile utilizzare il protocollo OAuth 2.0 per autorizzare le applicazioni di terze parti e generare un token di accesso. Questo token va utilizzato al posto delle credenziali quando si chiamano le REST API dall’applicazione.

Per usare l’autenticazione con OAuth per prima cosa è necessario registrare l’applicazione su Visual Studio Online (attraverso il portale https://app.vssps.visualstudio.com/app/register) ed ottenere quindi un ID univoco. La prima volta che un nuovo utente userà l’applicazione, dovrà essere fatta una chiamata alle API con quell’ID; VSO si occuperà in autonomia di autenticare l’utente e di generare un token per lui visualizzando una finestra simile alla seguente:

clip_image004

A questo punto ogni volta che il nostro utente utilizzerà di nuovo l’applicazione non dovrà più effettuare il login ma basterà utilizzare il token salvato. (Attenzione che tale token ha una validità limitate nel tempo, quindi alla scadenza sarà necessario rigenerarlo).

Il flusso completo di autenticazione tramite OAuth è descritto dallo schema seguente:

clip_image006

REST API: Utilizzo

Precedentemente, abbiamo visto in un esempio come recuperare le build di un account. Vediamo ora come è possibile creare un Work Item utilizzando le API.

Per farlo, è necessario effettuare una richiesta HTTP PATCH e valorizzare il body della request in base a questo formato:

[

{

"op": "add",

"path": { string }

"value": { string or int, depending on the field }

},

{

"op": "add",

"path": "/relations/-",

"value":

{

"rel": { string },

"url": { string },

"attributes":

{

{ name/value pairs }

}

}

}

]

Un esempio reale di creazione di un task con titolo e descrizione, riprendendo l’url riportato precedentemente ed impostando il Content-type della request a “application/json-patch+json”, sarà:

[

{

"op": "add",

"path": "/fields/System.Title",

"value": "Change blog title height"

},

{

"op": "add",

"path": "/fields/System.Description",

"value": "This is the task description"

},

]

Questa richiesta produce una response come la seguente, in cui si possono trovare tutte le informazioni relative al work item appena creato:

{

"id": 88,

"rev": 1,

"fields": {

"System.AreaPath": "tpTest",

"System.TeamProject": "tpTest",

"System.IterationPath": "tpTest",

"System.WorkItemType": "Task",

"System.State": "To Do",

"System.Reason": "New task",

"System.CreatedDate": "2014-09-30T10:25:12.943Z",

"System.CreatedBy": "Davide Benvegnu",

"System.ChangedDate": "2014-09-30T10:25:12.943Z",

"System.ChangedBy": "Davide Benvegnu,

"System.Title": "Change blog title height",

"System.Description: "This is the task description"

},

"_links": {

"self": {

"href": "https://myvso.visualstudio.com/DefaultCollection/_apis/wit/workItems/88"

},

"workItemUpdates": {

"href": "https://myvso.visualstudio.com/DefaultCollection/_apis/wit/workItems/88/updates"

},

"workItemRevisions": {

"href": "https://myvso.visualstudio.com/DefaultCollection/_apis/wit/workItems/88/revisions"

},

"workItemHistory": {

"href": "https://myvso.visualstudio.com/DefaultCollection/_apis/wit/workItems/88/history"

},

"html": {

"href": "https://myvso.visualstudio.com/web/wi.aspx?pcguid=0fa87894-6f48-4458-957d-3438b6bb9343&id=88"

},

"workItemType": {

"href": "https://myvso.visualstudio.com/DefaultCollection/c4637008-2068-4b3f-828d-a214e2ba5210/_apis/wit/workItemTypes/Task"

},

"fields": {

"href": "https://myvso.visualstudio.com/DefaultCollection/_apis/wit/fields"

}

},

"url": "https://myvso.visualstudio.com/DefaultCollection/_apis/wit/workItems/88"

}

In modo similare è possibile, ad esempio, interrogare l’area relativa al source control e verificare quali modifiche sono state effettuate in un determinato changeset:

Verb e Url della richiesta:

GET https://myvso.visualstudio.com/defaultcollection/_apis/tfvc/changesets/6/changes?api-version=1.0-preview.1

Response:

{

"count": 1,

"value": {

"item": {

"version": 6,

"path": "$/tpTest/Models/IdentityDbInitializer.cs",

"url": "https://myvso.visualstudio.com/DefaultCollection/_apis/tfvc/items/%24/tpTest/Models/IdentityDbInitializer.cs?versionType=Changeset&version=6"

},

"changeType":"edit"

}

}

Service Hooks

Tramite i service hooks è possibile integrarsi a Visual Studio Online sottoscrivendo una serie di eventi che sono scatenati dal servizio.

Allo stato attuale questi sono gli eventi sottoscrivibili:

· Build completed

· Code pushed (Git team projects)

· Code checked in (TFVC team projects)

· Work item created

· Work item updated

· Comments added to work item

È possibile creare una sottoscrizione ad uno o più eventi; si riferirà ad uno specifico Team Project, sarà consumata da un “consumer” e scatenerà una specifica “action”.

È possibile creare una sottoscrizione ad un evento in modo “automatico” (utilizzando cioè il portale di Visual Studio Online) oppure in modo completamente manuale utilizzando le REST API, che sono quindi parte integrante anche di questa funzionalità.

Service Hooks: sottoscrizioni da pannello

Utilizzare il pannello di VSO per creare una sottoscrizione ad un Service Hooks è sicuramente il modo più veloce per utilizzare questa feature.

È sufficiente entrare nel portale del Team Project a cui ci si vuole sottoscrivere e cliccare sul pulsante delle impostazioni (quello con l’ingranaggio, in alto a destra). Le ultime due tab sono quelle relative ai Service Hooks: la prima, omonima, serve per creare le sottoscrizioni e la seconda, denominata semplicemente “Services”, serve per monitorare le sottoscrizioni esistenti.

Per creare una sottoscrizione è innanzitutto necessario scegliere a che tipo di servizio sarà destinata.

clip_image008

Ovviamente a seconda del tipo di consumer selezionato saranno disponibili o meno alcuni eventi ed azioni.

Scelto il servizio da integrare, è necessario configurare l’evento a cui la sottoscrizione si riferirà ed è possibile inserire dei filtri (che dipendono dal tipo di evento selezionato) in modo da limitare la sottoscrizione a ciò che realmente ci interessa.

clip_image010

In questo caso ho deciso di sottoscrivere l’evento generato dal completamento delle Build, solo in caso che le Build siano fallite.

Configurato l’evento, si passa alla configurazione dei parametri del consumer. Vanno indicati gli endpoint e tutti i parametri necessari per poter effettivamente inviare una notifica. Nel mio esempio, ho deciso di utilizzare uno Storage Account su Azure:

clip_image012

Inseriti tutti i valori è possibile effettuare un test di integrazione (con l’apposito pulsante “Test”) e, se tutto ok, completare la creazione della subscription.

Da questo momento ogni volta che sul progetto selezionato una Build fallirà, VSO salverà automaticamente le informazioni sul mio Storage Account.

Service Hooks: sottoscrizioni via API

È possibile creare delle sottoscrizioni anche utilizzando una chiamata alle API. In questo caso non è possibile utilizzare l’autenticazione Basic ma solo quella con OAuth 2.0.

L’url da chiamare per la request, utilizzando il Verb POST, è:

https://{account}.visualstudio.com/defaultcollection/_apis/hooks/subscriptions?api-version=1.0-preview.1

Il request body deve essere costruito con i valori specifici per il Team Project, l’evento, il consumer e l’action che vogliamo configurare.

Ad esempio, per una configurazione simile a quella vista precedentemente, il body sarà come il seguente:

{

"publisherId": "tfs",

"eventType": "build.complete",

"resourceVersion": "1.0-preview.1",

"consumerId": "azureStorageQueue",

"consumerActionId": "enqueue",

"publisherInputs": {

"buildStatus": "failed",

"definitionName": "Continuous Integration",

"projectId": "56479caf-1eeb-4bca-86ab-aaa6f29399d9",

},

"consumerInputs": {

"accountName": "MyStorage",

"accountKey": "abcdefghijklmnopqrstuvzabcdefghijklmnopqrstuvzabcdefghijklmnopqrstuvz",

"queueName": "tptestfailedbuilds",

"visiTimeout": "0",

"ttl": "604800",

},

}

Per la lista completa dei valori per “eventType”, “consumerId”, “consumerActionId” ed i parametri relativi all’evento ed al consumer è possibile consultare questa reference.

Conclusioni

Usando le REST API ed i Service Hooks è possibile estendere Visual Studio Online a tutti gli scenari possibili, anche grazie al formato REST e Json che rendono disponibili le funzionalità su qualsiasi piattaforma e in qualsiasi contesto.


read full article

Mobile camp: Bari e Napoli in ottobre, Venezia, Catania e Torino in novembre, Milano e Roma in dicembre

E-mail Stampa PDF

 

Nel mese di ottobre i mobile camp toccheranno le tappe di Bari e Napoli, a seguire saremo a Venezia, Catania, Torino, Milano e Roma. Ecco i rispettivi link per iscriversi gratuitamente e trovare informazioni più dettagliate:

 

 

Molti di voi sanno bene di cosa si tratta, ma ricapitoliamo in due parole: i mobile camp sono eventi gratuiti organizzati in varie città italiane per permettere agli sviluppatori di entrare in contatto diretto con gli esperti Microsoft e i membri delle community locali. Durante questi eventi vengono presentate alcune brevi sessioni teoriche che riguardano principalmente le ultime novità sulle tecnologie Microsoft, ma la maggior parte del tempo è dedicato allo sviluppo autonomo di progetti sul proprio pc, con l'enorme vantaggio di avere a completa disposizione gli esperti per un confronto faccia a faccia.

Non perdete questa occasione, vi aspettiamo!


read full article

Siete pronti a Windows 10? Sì, se sviluppate Universal App!

E-mail Stampa PDF

 

Il 30 settembre 2014 è stato ufficialmente presentato Windows 10, disegnato con lo scopo di raggiungere un numero sempre maggiore di utenti che utilizzano svariati tipi di device. Questa è la ragione per cui l'unificazione della User Experience assume un ruolo sempre più importante.

Ma quali sono le conseguenze dal punto di vista degli sviluppatori? Sebbene ci sia ancora molto lavoro da fare prima di poter rilasciare qualche dettaglio in più sulla developer experience specifica per Windows 10, Microsoft conferma che la strada da perseguire è quella delle Universal App. Si parte dalla condivisione del codice, con il vantaggio di poter creare App in grado di raggiungere gli utenti su qualsiasi tipo di dispositivo, ma prestando ovviamente particolare attenzione all'ottimizzazione della User Experience sulla base del device e del modo in cui questo viene utilizzato.

image

Con Windows 10, Microsoft prosegue nel lavoro di convergenza della piattaforma iniziato da tempo, completando il layer di API comuni e fornendo strumenti flessibili per garantire agli utenti la migliore User Experience.

Un'altra novità riguarda le Windows Store App, che con Windows 10 potranno girare all'interno delle finestre, con conseguente miglioramento delle performance e migliore adattabilità ai diversi tipi di schermo.

Microsoft conferma anche il progetto di unificazione dello Store: questo significa che gli sviluppatori potranno pubblicare le proprie App e metterle in mostra ad un mercato di utenti sempre più ampio, in maniera semplice, immediata e soprattutto indipendente dal device utilizzato. Inoltre, si sta lavorando per semplificare il meccanismo di distribuzione delle App anche dal punto di vista delle aziende, con la prospettiva di poter personalizzare l'esperienza di utilizzo dello Store.

Se volete vedere e “toccare con mano” un'anteprima di Windows 10 potete semplicemente partecipare al Windows Insider Program, ottenendo in questo modo una pre-release del nuovo Sistema Operativo. Trattandosi però di una versione non definitiva, vi invitiamo a seguire queste linee guida, tanto banali quanto utili:

  • Microsoft sconsiglia l'utilizzo di Windows 10 come Sistema Operativo principale per lo sviluppo di software. Tenete a mente che il Windows App Certification Kit al momento non funziona.
  • Non preoccupatevi se la vostra App non funziona correttamente su Windows 10: trattandosi di una pre-release, c'è ancora molto lavoro da fare per garantire la compatibilità.
  • Tenete in considerazione che, così come per le precedenti preview, anche questa versione del Sistema Operativo non è quella definitiva, sia in termini estetici che di funzionalità.

Per maggiori informazioni riguardo Windows 10 e il Windows Insider Program vi invitiamo a tenere sott'occhio il Blogging Windows.

In conclusione, il percorso che gli sviluppatori sono invitati a seguire è chiaro: le Universal App di oggi sono le fondamenta per lo sviluppo futuro su piattaforma Windows.

Quindi, se non lo avete ancora fatto, è sicuramente un ottimo momento per iniziare a sviluppare la vostra prima Universal App!

E se avete bisogno di un piccolo aiuto, ecco qualche link interessante.

Documentazione ufficiale:

Online training:


read full article

Guest post: Migrare facilmente da Team Foundation Server a Visual Studio Online

E-mail Stampa PDF

Questo post è stato scritto da Davide Benvegnù di DotNetToscana.

Il passato

In passato, quando ancora la versione "on-cloud" di Team Foundation Server (TFS) si chiamava "Team Foundation Services" e non era ancora stata rilasciata in GA, la migrazione da un nostro TFS on-premises alla versione online era, seppur possibile, abbastanza complessa.

L'opzione più rapida, ma che di fatto non era una vera e propria migrazione, era sostanzialmente quella di creare un Team Project nuovo su Team Foundation Services, mapparlo sul workspace, copiare la versione più recente dei sorgenti e fare check-in. Un approccio simile poteva essere usato per i Work Item, bastava infatti creare una query che recupera tutti i work item di quello specifico team project ed aprirla in Excel selezionando tutte le colonne disponibili. A questo punto basta aprire un'altra istanza di Excel, connetterla a TF Service ed incollare tutti i dati dalla prima istanza; un "publish" salverà tutti i dati.

In questo modo avevamo tutti gli elementi di lavoro ed i sorgenti sul sistema online, ma perdendo tutta l'history e, per quanto riguarda i workitem, tutti gli oggetti "avanzati" (campi html, allegati, commenti...)

Un'altra opzione, la migliore disponibile allora, era usare l’Integration Platform, un progetto open source gestito dai TFS Rangers che permette di gestire la sincronia e le migrazioni da e verso Team Foundation Server ed altri sistemi. Sebbene il tool sia molto potente e sicuramente ben realizzato, la migrazione avveniva non senza intoppi e richiedeva comunque una buona dose di interventi manuali (ad esempio la mappatura degli utenti, che richiedeva la modifica di un file xml).

La situazione attuale

Con il rilascio in GA di Visual Studio Online (VSO) e, soprattutto, con l'annuncio della disponibilità delle sue Open API basate su REST, la situazione è notevolmente migliorata. Queste API, infatti, affiancandosi ai normali endpoint di cui sia TFS che VSO sono forniti, permettono un controllo molto più profondo e puntuale sulle singole parti del sistema, sia per quanto riguarda la funzionalità di Source Control sia per la gestione dei WorkItem. È quindi ora possibile realizzare delle soluzioni software che, utilizzando proprio queste API, possono interagire con il sistema e migrare tutti i nostri dati dal nostro TFS on-premises a VSO.

Un'ulteriore buona notizia è che è stata anche rilasciata un'utility completamente gratuita, realizzata dall'azienda OpsHub in stretta collaborazione con il team di Microsoft che si occupa dello sviluppo di TFS e VSO, che ci permette di effettuare la migrazione in pochi passaggi e con pochi clic. Questa utility (il cui nome è OpsHub Visual Studio Online Migration Utility) è inoltre mantenuta costantemente aggiornata.

Perché dovrei passare da TFS a VSO?

Prima di vedere in pratica il "come" fare, analizziamo un attimo il "perché".

Ci sono molti motivi che ci potrebbero spingere a migrare dal TFS che abbiamo in casa ad una soluzione on-cloud. Quelli più frequenti sono:

· Aggiornamento da TFS vecchio (< 2013)

o Se dispongo di un TFS precedente al 2013 e voglio passare all'ultima versione, non è detto che le cose siano semplicissime. Oltre a dovermi preoccupare dell'installazione dell'update, ci sono anche altri elementi che vanno presi in considerazione. Ad esempio una nuova versione di TFS ha dei requisiti HW/SW maggiori rispetto alle versioni precedenti, quindi per poter aggiornare devo verificare che tutti i nuovi requisiti siano soddisfatti e andare ad acquistare nuovo hardware o nuove licenze software dove non lo siano.

o Passando a VSO non mi devo preoccupare di aggiornamenti HW e SW

· Ho già TFS 2013 ma devo scalare

o Supponiamo di avere una nostra infrastruttura interna basata su TFS, dimensionata per gestire al massimo 100 utenti. Cosa succede se il team di lavoro cresce e ci ritroviamo ad avere un team di 300 persone? Oppure se nell'installazione fatta avevamo utilizzato SQL Server Express ma ci accorgiamo che abbiamo bisogno di un'altra versione di SQL Server?

o Se passo a VSO non mi devo preoccupare né dell'Hardware né delle versioni Software in quanto fornito in SaaS

· Sto migrando tutto sul cloud

o Sempre più aziende, soprattutto di piccole e medie dimensioni, stanno abbandonando i DataCenter on-premises per affidarsi totalmente a soluzioni nel Cloud.

o Passando a Visual Studio Online è possibile andare a dismettere anche i server che stiamo utilizzando per gestire la nostra piattaforma di ALM

· Voglio poter avere sempre l'ultima versione disponibile di TFS, senza dovermi preoccupare degli aggiornamenti, delle configurazioni di sistema, dell'installazione…

o Visual Studio Online offre proprio questo (e molto di più).

Per avere una panoramica delle differenze tra la versione di Team Foundation Server disponibile e Visual Studio Online, potete consultare questo link: http://www.visualstudio.com/en-us/news/release-archive-vso

Come funziona l’utility di migrazione

Vediamo come funziona l'utility di migrazione:

· Supporta una migrazione one way (solo da TFS a VSO)

· Supporta la migrazione da TFS 2010, TFS 2012 e TFS 2013

· Utilizza i "normali" endpoint per connettersi a TFS ed esportare i dati

· Utilizza sia gli endpoint classici che le nuove Open API (REST Based) per importare i dati in VSO

· La migrazione avviene a livello di Team Project (non è quindi possibile migrare eventuali dati associati alla Team Project Collection)

L'ultima versione del tool ha introdotto anche la migrazione incrementale, ovvero è possibile ripetere la migrazione più volte andando di volta in volta ad importare su VSO solo gli elementi che precedentemente non erano stati migrati (cosa che non era possibile nelle versioni precedenti)

Il tool ha delle limitazioni su quanto viene migrato. Gli elementi di cui è supportata la migrazione sono:

· Codice sorgente sotto TFVC (inclusi changeset, label e history) – GIT non è supportato

· Aree e Iteration

· Work item, inclusi link, tag ed allegati (Esclusa ogni customizzazione e dati associati, come ad esempio campi custom, workflow custom, ecc)

· Immagini allegate ai work item

· Test suite, test case, test run e test result salvati

· Ogni “history action” per conto dell'utente originale in modo da preservare il più possibile la storia.

È importante notare che il tool non migra le customizzazoni, quindi se abbiamo delle esigenze in tal senso dovremmo orientarci verso altre soluzioni. Attenzione che se, durante la fase di verifica, l'utility rileva personalizzazioni ai Work Item Types restituisce un errore e non sarò possibile procedere alla migrazione.

Per ovviare a questo problema è necessario rimuovere le personalizzazioni; il modo più veloce per farlo è scaricare dal TFS i file xml del process template "standard" usato per creare il Team Project e riapplicarli sul progetto utilizzando il comando:

witadmin importwitd /collection:CollectionURL [/p:ProjectName] /f:FileName [/v]

Migriamo

Innanzitutto bisogna assicurarsi che l'account VSO che useremo per effettuare la migrazione sia membro del gruppo "Project Collection Service Accounts". Se non lo fosse, dobbiamo inserircelo dal portale della nostra sottoscrizione Visual Studio Online.

Dopo aver fatto login al portale, è sufficiente cliccare sul pulsantino delle impostazioni in alto a destra, selezionare il link "Manage collection security and group membership", andare sulla sezione "Users" e da lì impostare il gruppo all'utente.

Fatto questo, è necessario creare su Visual Studio Online un Team Project che abbia esattamente lo stesso nome del progetto che vogliamo migrare e che utilizzi lo stesso tipo di Process Template (ad esempio se ho creato il progetto sulmio TFS usanto il Process Template Scrum, dovrò utilizzare questo template anche per la creazione del progetto su VSO).

A questo punto è possibile iniziare la fase di migrazione vera e propria, lanciando l'utility.

Appena partita, selezioniamo la voce di menu "New Migration"

clip_image002

È necessario poi inserire gli endpoint sia per il TFS che abbiamo on–premises sia per Visual Studio Online. Per TFS è necessario anche specificare la Team Project Collection che contiene il/i progetto/i da migrare.

Per farlo è sufficiente inserire gli stessi dati che andremmo ad inserire in Visual Studio per connetterci:

clip_image004

clip_image006

Cliccando su “Next” è possibile dare un nome alla migrazione che andremo ad effettuare e, soprattutto, scegliere che cosa vogliamo migrare: solo i sorgenti, solo i work item oppure tutto.

clip_image008

Dopo aver nuovamente cliccato su “Next”, l’utility interroga il server TFS per proporre la lista dei progetti presenti nella Team Project Collection che abbiamo precedentemente selezionato e ci viene proposta una pagina in cui selezionare uno o più progetti da migrare.

clip_image010È interessante notare che se selezioniamo un progetto che non è già stato creato anche su VSO l’utility ci avvisa e non ci permette di continuare nella migrazione.

Effettuata la selezione, dobbiamo preoccuparci della mappatura degli utenti. Il tool, infatti, non importa direttamente gli utenti che trova su TFS ma ha bisogno che gli venga indicata una mappatura tra gli utenti. È possibile anche mappare più utenti TFS ad un solo utente VSO, dipende dal livello di coerenza che si vuole mantenere. Nonostante gli utenti siano diversi, a fine migrazione per tutti gli elementi di lavoro sarà comunque disponibile un riferimento all’utente originale.

clip_image012Per mappare uno o più utenti TFS ad un utente VSO è sufficiente cliccare sul nome dell’utente originale nella casella di sinistra e su quello di destinazione nella casella di destra e premere il pulsantino con la freccia. Fino a che non avremo mappato tutti gli utenti, non sarà possibile continuare.

Cliccando su “Next” parte la fase di validazione, in cui l’utility verifica che siano soddisfatti i requisiti per la migrazione (sostanzialmente, verifica che il Project Template usato sia dello stesso tipo su entrambi i progetti e che il progetto TFS non presenti customizzazioni)

clip_image014Se la validazione termina in modo positivo, cliccando su “Finish” si fa partire la migrazione, che avviene in due fasi.

La prima fase è quella della configurazione, in cui vengono raccolti i dati relativi al progetto su TFS e vengono creati script e raccolte che verranno poi utilizzati dalla migrazione effettiva.

clip_image016Se anche questa fase passa senza intoppi, viene proposto un box di conferma che, in caso di risposta positiva, dà il via al processo di migrazione effettivo.

clip_image018

Durante la migrazione, vengono indicati gli stati di progress ed eventuali warning (ovvero gli elementi indicati in “pending for retry”). Se abbiamo deciso di migrare sia i sorgenti che i workitem la schermata che avremo sarà come quella riportata di seguito, altrimenti vedremo solo uno dei due pannelli.

clip_image020Se la migrazione ha dato esito positivo, tutti i campi riporteranno la scritta “Completed” in verde. In caso invece si fossero verificati dei problemi avremo l’indicazione di “Error” con un dettaglio del problema. A seconda dei casi potrebbe essere sufficiente sistemare il problema e riavviare la migrazione oppure potrebbe essere necessario, sempre dopo aver corretto l’errore, cancellare completamente il progetto da VSO e rifare da zero la migrazione.

clip_image022

Conclusioni

Grazie alle recenti feature release di VSO e a questa utility è molto semplice riuscire a migrare i nostri Team Project dal TFS che abbiamo in casa ad un account Visual Studio Online. Tuttavia, come visto, ci sono delle limitazioni che in alcuni casi potrebbero essere impattanti per noi o la nostra azienda.

Il consiglio è quello di fare sempre prima una migrazione di test (approfittando del fatto che VSO è gratuito fino a 5 utenti) e, conseguentemente, valutare se la soluzione proposta può andare bene per gli scenari in cui dobbiamo muoverci.


read full article

Pagina 14 di 83

 
 
 
 
Certificazioni