Maggio 2017

Volume 32 Numero 5

Il presente articolo è stato tradotto automaticamente.

Servizi cognitivi - Proteggi le app Web con Microsoft Content Moderator

Da Maarten Van De Bospoort | Maggio 2017

Ogni giorno miliardi di utenti di richiedere immagini e video da condividere social Media. Chiunque è trattato con contenuto generato dall'utente su Internet SA, anonimato della rete non è necessariamente superficie di attacco il comportamento umano più bello. 

Un'altra tendenza recente importante è la proliferazione di Bot o chat. Non è un giorno trascorso senza il rilascio di un nuovo set di componenti che possono eseguire tutte le operazioni di prenotazione di viaggio per coordinare le riunioni di banking online. Sebbene tali componenti sono utili senza dubbio, chatbot straordinaria è ancora più elusivi: un bot da tutte le piattaforme di messaggistica per violare l'obiettivo di utenti attivi giornalieri 1 miliardo.

Ora immaginiamo che appena creato: Farfalla, bot che everyone sembri costretta a coinvolgere. Gli utenti possono condividere file multimediali con il robot e tramite l'algoritmo di apprendimento secret, bot stimerà il futuro per 24 ore successive. Dopo un anno del lavoro, si ha rilasciato il robot. Durante la notte, farfalla infettato da un virus. Sfortunatamente, il sogno avvio rapidamente si trasforma in un incubo relazioni pubbliche. Gli utenti inviano contenuto per adulti e tutto, che viene quindi condiviso e disponibile pubblicamente ad altri utenti bot. E alcuni contenuti non è valida. Veramente non valida. Gli utenti sono suing. il telefono squilla disattivata la funzione hook; e si ricevono minacce che il servizio Web verrà arrestato. È necessaria una soluzione efficace per rilevare e impedire che il contenuto non valido sia visibile ad altri utenti. Ed è necessario rapido.

Ecco dove moderatore contenuto Microsoft viene in soccorso.

In questo articolo, mostreremo a come consenta di moderatore del contenuto. Viene innanzitutto creare un chatbot usando il Framework di Bot Microsoft, tuttavia tenere presente che le informazioni vale per qualsiasi applicazione client o Web. Meraviglioso verrà consentono agli utenti finali di condividere il testo, immagini e video e utilizzerà moderatore del contenuto per filtrare il materiale inappropriato prima di pubblicazione. Inoltre, si apprenderà come configurare flussi di lavoro contenuto moderatore personalizzati e come modificare le soglie per i classificatori contenuti. Illustreremo inoltre diversi connettori che possono essere utilizzati nel flusso di lavoro, ad esempio testo e sfruttamento delle vulnerabilità figlio. Iniziamo con una panoramica di moderazione dei contenuti.

Moderazione dei contenuti

Microsoft ha un record di traccia lungo e comprovato combatting crime digitale. Microsoft Digital Crimes Unit lavora bloccare botnet, limite tech supporto frodi, truffe thwart e altro ancora. Un'area di attiva meno visibili è come l'unità assiste forze dell'ordine in tutto il mondo con frenare sfruttamento figlio. Microsoft ha offerto PhotoDNA come un servizio gratuito poiché 2009 e lo stesso team presenta ora anche moderazione dei contenuti.

Moderazione dei contenuti è un'area di machine learning computer può essere utile uomo enormemente. La quantità di dati generate dagli utenti è semplicemente troppo elevato per l'uomo esaminare rapidamente e a costi contenuti. Moderazione più importante, il contenuto non è un'attività per l'uomo piacevole. Per una breve introduzione, vedere tcrn.ch/2n1d9M0.

Moderazione dei contenuti è un membro del set in continua crescita delle API dei servizi Microsoft cognitivo eseguite in Azure. Queste API sono tutte le implementazioni specifiche di machine learning i modelli, ovvero che Microsoft è sottoposto a training questi modelli con grandi quantità di dati. Gli sviluppatori, è sufficiente chiamare una delle API per ottenere un risultato, per visione per computer, riconoscimento vocale o informazioni sui language, per alcuni. L'API di immagine moderatore contenuto utilizza riconoscimento di immagini, ovvero un'area di machine learning punti in cui sono state apportate molte dello stato di avanzamento negli ultimi anni.

Figura 1 viene illustrato come impostare la pipeline di moderatore del contenuto. A seconda delle esigenze, moderazione dei contenuti offre diverse API da chiamare, tra cui moderazione, revisione e i processi in diversi livelli di personalizzazione. Ad esempio, il flusso di lavoro API consente di modificare a livello di codice i flussi di lavoro che vengono utilizzati per i processi. Successivamente, è possibile visualizzare diversi classificatori per immagini, testo, video e CSAM, acronimo di materiale improprio sessuale figlio. PhotoDNA è la tecnologia che consente alle organizzazioni di lotta contro la diffusione di queste immagini. CSAM "classificazione" è leggermente differente da quelli menzionato in precedenza: PhotoDNA utilizza una tecnologia di hash e confronta confrontato con un database di immagini noti. All'interno del contenuto moderatore, è possibile impostare i flussi di lavoro che si connettono più filtri (ad esempio, prima archiviazione CSAM, quindi per adulto/Racy immagini). Il flusso di lavoro possa chiamare comprensibile per la revisione, nonché. Infine, la pipeline di moderatore del contenuto è flessibile e in futuro altre API possono essere associato, nonché.

Utente contenuto flussi tramite contenuto moderatore, in cui i modelli di apprendimento automatico e uomo lavoro insieme al filtro indecente materiale
Figura 1 utente contenuto flussi tramite contenuto moderazione, in cui i modelli di apprendimento automatico e comprensibile lavoro insieme al filtro indecente materiale

Moderato del contenuto degli utenti

Ora che avete una buona conoscenza della tecnologia di moderazione, è possibile inserirlo nell'apposito bot farfalla. Creeremo bot con il Framework Microsoft Bot, utilizzando la versione di Node. js di Framework Bot per farfalla. Poiché tutte queste API sono semplici chiamate all'API REST, è Impossibile moderato del contenuto altrettanto facilmente da c#. in realtà, probabilmente anche trattarsi più semplice poiché è disponibile un SDK di .NET per contenuto moderatore (bit.ly/2mXQqQV). 

Sono stati apportati diversi articoli in questa rivista che forniscono panoramiche eccellente di robot. Se è già compilata ancora uno, consiglio vivamente di estrarre le operazioni seguenti:

In alternativa, le guide introduttive su dev.botframework.com sarà in alcun tempo di esecuzione.

In questo caso, si userà la soluzione iniziale semplice per Node. js. Utilizziamo il modello di finestra di dialogo che fornisce il framework Node. js per separare la conversazione in finestre di dialogo separate. Nel codice di finestra di dialogo visualizzato figura 2, bot richiede all'utente per un URL di un'immagine nella prima funzione. Controllo viene quindi passato nuovamente all'utente. Quando l'utente invia un testo, il flusso della finestra di dialogo passa all'input dell'utente per la seconda funzione. Bot inoltra quindi l'input per la valutazione in moderate.js. Nel primo tentativo, chiamiamo simple API moderatore (invece di esaminare più sofisticati e API di processo).

Figura 2 finestra di dialogo codice

bot.dialog('/moderateImage', [
  function (session, args) {
    builder.Prompts.text(session, 'Give me a picture URL to moderate, please.');
  },
  function (session, results){
    var input = session.message.text;
    var cm = require('./moderate.js');
    cm( 'ImageUrl', input, function(err, body) {
      if (err) {
        session.send('Oops. Something went wrong.');
        return;
      }
      var output = JSON.stringify(body);
      session.endDialog(output);
    });
  }
]);

Per chiamare l'API di moderatore del contenuto, sono necessarie credenziali, che è possibile ottenere dal sito Web di moderatore contenuto o da Azure. In questo caso, verrà fornita l'approccio di quest'ultimo. Nel portale di Azure (portal.azure.com), creare un nuovo account di servizi cognitivo facendo clic su verde più accedere e specificando cognitivo servizi. Dopo aver fatto clic su Crea, specificare moderatore contenuto come tipo di API (vedere figura 3). Utilizzare il livello F0 perché è gratuito e consente una sola chiamata al secondo, che dovrebbe essere sufficiente per sperimentare per ora. Dopo aver creato l'account, sono disponibili il nome dell'Account e la chiave in corrispondenza delle chiavi in Gestione risorse. Si noti che si userà uno delle chiavi e la stringa di ID di risorsa (dalle proprietà) per associare l'API di moderatore del contenuto per il portale di revisione moderatore contenuto in un secondo momento.

Selezionare nell'elenco di servizi cognitivo moderatore contenuto
Figura 3 selezionare moderatore contenuto nell'elenco servizi cognitivo

Il portale di Azure illustra anche l'endpoint come https://westus.api.cognitive.microsoft.com/contentmoderator. Che è l'indirizzo di base corretta, ma è un po' troppo breve. L'endpoint completo è nella documentazione di moderatore del contenuto.

Come illustrato nella figura 4, specifichiamo "URL" come DataRepresentation per inviare l'URL dell'immagine, ma è possibile inviare facilmente l'immagine in un blob. Dopo aver chiamato il moderatore API, il corpo del risultato restituito contiene JSON con i punteggi per l'immagine. Intervallo di punteggi da 0.0 (inoffensivo) a 1.0 (molto adulto/tutto).

Figura 4 l'invio di un URL al contenuto moderatore

var unirest = require("unirest");
var url = "https://westus.api.cognitive.microsoft.com/contentmoderator/
  moderate/v1.0/ProcessImage/Evaluate";
module.exports = function(input, cb) {
  unirest.post(url)
    .type("json")
    .headers({
      "content-type": "application/json",
      "Ocp-Apim-Subscription-Key":<Key from the Azure portal>,
    })
    .send({
      "DataRepresentation": "URL",
      "Value": input
    })
    .end(function (res) {
      return cb(res.error, res.body );
    });
};

È possibile vedere che il risultato, come illustrato figura 5, contiene adulto e i punteggi di stima senza e trarre conclusioni sui indica se la soglia eseguito nei flag classificate. Felice come un clam, si generano queste poche righe di codice nel robot e blocca tutto il contenuto per adulti o tutto. Distribuire la nuova versione del bot nel flusso di Azure e gli utenti in nuovamente consultare di oracle. Phew. Buona con i risultati e al team raccogliere tutto il kegerator festeggiare con una nuova bevanda.

Figura 5 i punteggi di classificazione per adulti e tutto per un'immagine

"AdultClassificationScore":0.0324602909386158,
"IsImageAdultClassified":false,
"RacyClassificationScore":0.06506475061178207,
"IsImageRacyClassified":false,
"AdvancedInfo":[],
"Result":false,
"Status":{
  "Code":3000,
  "Description":"OK",
  "Exception":null},
"TrackingId":"WU_ibiza_4470e022-4110-48bb-b4e8-7656b1f6703f_
  ContentModerator.F0_3e598d6c-5678-4e24-b7c6-62c40ef42028"

Nell'IPA avere importi diversi micro poco due SIP, TWEET mantengono il telefono su costante vibrazione. C'è un flusso eccessivo di arrabbiata clienti: "Perché si bloccano le immagini inoffensivo?" "Il fratello possibile ottenere le immagini con maggiore interfaccia tramite. È necessario risolvere il problema!"

Classificazione delle immagini è utile, ma non esiste che alcuna dimensione non adatta a tutti. Le API di moderatore contenuto bare che abbiamo semplicemente usato sono chiaramente in grado di assistere gli utenti di prendere decisioni appropriate, ma non ideali. Un miglioramento che è stato possibile apportate è ottimizzare la moderazione utilizzando i punteggi non elaborati anziché le classificazioni true o false per adulti-e-tutto. Inoltre, sembra che gli utenti tendono a utilizzare più volte le stesse immagini. Fortunatamente, moderatore contenuto fornisce un'API di elenco per gestire un set personalizzato di immagini o testo che già stato separato. L'API di moderatore esegue alcuni corrispondenza fuzzy con le immagini, per impedire agli utenti di destinatari, furono con lievi modifiche o ridimensionare facilmente. Questo è un valido miglioramento tramite il primo approccio, ma non sarebbe escludere i falsi positivi che doveva entrino in conflitto con il supporto tecnico. Come sempre, si trova la soluzione ottimale quando esseri umani e macchine di lavoro in team in casi più difficili. Computer Vision è in grado di rilevare i due casi estremi, quando le immagini sono chiaramente tutto o per adulti, o non. Per casi limite tra, abbiamo umani possiamo decidere su quale lato del recinto cade il contenuto per questo particolare scenario. Si tratta in cui lo strumento di analisi di moderatore contenuto e API realmente caratterizzano. Esaminiamo come è possibile usarlo per migliorare la nostra soluzione.

La chiamata API di revisione del moderatore

L'approccio finora è stato semplice: Inviare un'immagine e il blocco o consentire in base alle etichette di moderatore del contenuto. Ora dobbiamo espandere la soluzione. L'idea è di impostare un flusso, come illustrato nella figura 6.

Utilizzo di un flusso di lavoro contenuto moderatore Bot farfalla
Figura 6 Bot farfalla utilizzo di un flusso di lavoro contenuto moderatore

In questo scenario, l'utente invia un'immagine di bot farfalla. Nel passaggio 2, servizio Web del bot invia l'immagine al moderatore del contenuto utilizzando l'operazione dell'API di analisi, che accetta un Id come parametro del flusso di lavoro. Verrà impostata su questo flusso di lavoro nello strumento di analisi. Il flusso di lavoro specifico (passaggio 3) consentirà immediatamente tutte le immagini che sono di sotto di un determinato punteggio adulto/tutto (ad esempio 0,7) e altri flag che superano un determinato limite (ad esempio 0.9). L'apposito bot verrà consentire il contenuto con i punteggi bassi e bloccare il contenuto quando è chiaramente troppo tutto o per adulti. Nell'area grigia tra, si desidera che il contenuto per passare allo strumento di verifica per i moderatori risorse umani controllare (passaggio 4). Il nostro team di revisori possono quindi decidere come gestire il contenuto. Quando si completa la revisione, il moderatore contenuto richiamerà servizio app il nostro bot per condividere il risultato. A questo punto, bot può richiedere il contenuto se è stato contrassegnato come offensivo. Si noti la flessibilità di seguito. È possibile modificare i punteggi del flusso di lavoro e i revisori possono decidere che cos'è appropriato per l'applicazione specifica.

Per iniziare, è necessario effettuare l'iscrizione per lo strumento di analisi moderatore contenuto in bit.ly/2n8XUB6. È possibile iscriversi al tuo account Microsoft o creare un account locale. In seguito, il sito chiede di creare un team di revisione, il cui scopo consiste nell'esaminare il contenuto dell'area di grigio. È possibile creare più i sub-team e creare flussi di lavoro che assegnare revisioni per i diversi sub-team. Nella scheda credenziali della pagina Impostazioni del portale, è possibile collegare backup delle impostazioni di moderatore contenuto con la risorsa servizi cognitivo Azure creato in precedenza. Semplicemente copiare la chiave e l'ID risorsa dal portale di Azure per le impostazioni di chiave di sottoscrizione e l'ID di risorsa nell'interfaccia utente di moderatore. Quando si crea l'account, si ottiene un flusso di lavoro configurato automaticamente "default". Come può vedere nell'interfaccia utente di esaminare, se è stata rilevata un'immagine da adulti questo flusso di lavoro verrà creata una revisione umana. Iniziamo utilizzando questo flusso di lavoro nell'operazione del processo dell'API di verifica.

Per chiamare l'API di processo di revisione, utilizzare il codice illustrato nella figura 7.

Figura 7 chiamando la revisione del processo API

var url = 'https://westus.api.cognitive.microsoft.com/contentmoderator/
  review/v1.0/teams/butterfly/jobs';
var req = unirest.post(url)
  .type("application/json")
  .query({
    ContentType: 'Image',
    ContentId: '67c21785-fb0a-4676-acf6-ccba82776f9a',
    WorkflowName: 'default',
    CallBackEndpoint: 'http://butterfly.azure.com/review'
  })
  .headers({
    "Ocp-Apim-Subscription-Key": <ocp_key>
  })
  .send({
    "ContentValue": pictureUrl
  })
  .end(function (res) {
    return callback(res.error, res.body );
});

Si noti che l'URL contiene il nome del team farfalla e i processi di suffisso. In CallBackEndpoint specifichiamo l'endpoint REST che moderatore contenuto verrà chiamato per notificare i risultati della revisione. Viene inoltre specificato un ContentId univoco in modo da poter correlare l'immagine quando moderatore contenuto chiama ci eseguire il backup e l'URL dell'immagine effettiva viene inviata con ContentValue. Quando la chiamata ha esito positivo, il corpo del risultato non contiene risultati di qualsiasi contenuto moderatore. Al contrario, restituisce l'ID processo:

{"JobId":"2017035c6c5f19bfa543f09ddfca927366dfb7"}

Si otterrà il risultato tramite il callback specificate in CallBackEndpoint. Il risultato sarà nuovamente JobId, potenzialmente un ReviewId e un ContentId in modo è possibile attraversare farvi riferimento. Per il flusso di lavoro predefinito, moderatore contenuto richiamerà immediatamente con il risultato nei metadati se l'immagine non è considerata per adulti. JSON effettivo sarà simile a quello mostrato figura 8.

Figura 8 predefinita del flusso di lavoro risultati

{
  "JobId": "2017035c6c5f19bfa543f09ddfca927366dfb7",
  "ReviewId": "",
  "WorkFlowId": "default",
  "Status": "Complete",
  "ContentType": "Image",
  "CallBackType": "Job",
  "ContentId": "67c21785-fb0a-4676-acf6-ccba82776f9a",
  "Metadata": {
    "adultscore": "0.465",
    "isadult": "False",
    "racyscore": "0.854",
    "isracy": "True"
  }
}

Lo stato del processo è impostato su completato e il CallbackType è processo. Se, tuttavia, l'immagine viene considerato materiale per soli adulti, moderatore contenuto verrà creata una revisione e compilare il campo ReviewId con un identificatore. L'immagine quindi finirà nell'interfaccia utente di esaminare per il team di revisione (vedere figura 9).

Lo strumento di revisione contenuto moderatore con immagini e i tag non selezionati
Figura 9, lo strumento di revisione contenuto moderatore con immagini e i tag non selezionati

Lo strumento di analisi e sul relativo uso può trarre beneficio da una piccola spiegazione. Lo strumento è progettato per la gestione di volumi elevati di immagini. Un revisore esamina tutte le immagini in una schermata, tag di quelle che non passano punti e quindi passa alla schermata successiva. Lo strumento fornisce il revisore pochi secondi per passare nuovamente nel caso in cui ritiene che ha commesso un errore. Dopo aver quei pochi secondi, moderatore contenuto Salva le immagini con il tag finale e chiama la funzione di callback specificato, ora con giudizio finale. È ora possibile eseguire l'azione appropriata, tenendo premuto il contenuto o pubblicazione base le nostre esigenze aziendali. La seconda chiamata nuovamente avrà un aspetto simile a quello riportato figura 10.

Figura 10 risultati del metodo di Callback revisione

{
  "ReviewId": "201703367f430472074c1fb18651a04750448c",
  "ModifiedOn": "2017-03-07T18:34:17.9436621Z",
  "ModifiedBy": "Bob",
  "CallBackType": "Review",
  "ContentId": "67c21785-fb0a-4676-acf6-ccba82776f9a",
  "ContentType": "Image",
  "Metadata": {
    "adultscore": "0.465",
    "isadult": "False",
    "racyscore": "0.854",
    "isracy": "True"
  },
  "ReviewerResultTags": {
    "a": "True",
    "r": "True",
    "pt": "False"
  }
}

Il CallBackType è ora revisione anziché processo e noterete ReviewerResultTags aggiunto, mentre ContentId e ReviewId corrisponde ai risultati il primo callback.

Flussi di lavoro personalizzati

Ora che abbiamo una buona conoscenza del flusso di lavoro predefinito, è possibile avviare l'attivazione di alcune misure e compone. Per farfalla, si desidera consentire tutti gli elementi con un punteggio senza minore 0,7, ma bloccare qualsiasi operazione con un punteggio senza superiore 0,9. Per qualsiasi attività tra, vogliamo il team di revisione di ottenere un quadro secondo. Pertanto, nell'editor del flusso di lavoro, verrà creato un nuovo flusso di lavoro.

Si noterà che esistono numerose opzioni per la connessione agli elenchi a discesa. Queste opzioni consentono di creare flussi di lavoro avanzati con, ad esempio, il testo di riconoscimento ottico dei caratteri (OCR) da immagini e devono affrontare API di rilevamento. Lo strumento consente inoltre di dichiarare un endpoint di callback per la revisione. Se si specifica un callback in CallBackEndpoint per le API di processo, come, quello del flusso di lavoro esegue l'override di CallBackEndpoint.

A questo punto, quando si chiama l'API di processo di revisione e specifica il flusso di lavoro, si otterrà un ID di processo, come durante la chiamata di flusso di lavoro predefinito. A seconda del punteggio senza dell'immagine (tra 0,7 e 0.9 in questo caso), moderatore contenuto creerà nuovamente una revisione e si vedrà le immagini nel contenuto moderatore rivedere interfaccia utente.

Sono disponibili due note finale sui flussi di lavoro. In primo luogo, se l'immagine non rientra in una revisione nel callback processo iniziale, è comunque necessario scoprire se l'immagine è stata di fascia alta e deve essere bloccato, o sul valore minimo ed è consentito. A tale scopo, è necessario duplicare la logica un po', e ciò significa che le cose possono ottenere sincronizzate. Fortunatamente, lo strumento di analisi espone il flusso di lavoro in formato JSON. Ancora meglio, esiste un'API REST del flusso di lavoro è possibile utilizzare per inviare i flussi di lavoro per l'API di moderatore del contenuto. Con un po' di plumbing stesso JSON consentono di mantenere sincronizzati la logica di bot e lo strumento di analisi dell'interfaccia utente.

Una seconda nota riguardanti i flussi di lavoro si riferisce al loro estendibilità. Un punto focale per il team è per rendere la revisione di una destinazione comune di strumenti per varie API. Quando si passa alla scheda Connectors durante la revisione dell'interfaccia utente, è possibile visualizzare i connettori attualmente disponibili. È possibile attivare questi connettori immettendo le relative chiavi di sottoscrizione. Nel caso di PhotoDNA è facile. Se il prodotto Ottiene qualsiasi tipo di contenuto dell'utente, si desidera assicurarsi che nessuna immagine di sfruttamento figlio sono condivise. Questo hook fino a un flusso di lavoro esistente è facile dopo aver effettuato l'iscrizione per il servizio. Sicuramente, è meglio la necessità di chiamare le API REST separatamente. Al momento della stesura di questo articolo, l'API Analitica del testo e l'API di rilevamento faccia sono disponibili come connettori. Per coloro che è possibile accedere al portale di Azure, creare un servizio cognitivo come abbiamo fatto in precedenza e immettere la chiave di sottoscrizione nell'interfaccia utente di moderatore del contenuto.

Conclusioni

Sono disponibili altre funzionalità avanzate non si dispone di spazio per approfondire. Ad esempio, è possibile creare tag personalizzati con le impostazioni da utilizzare nei flussi di lavoro. È stato creato un tag "pt" per aggiungere tag alle parole da ritenere offensive nel testo. Utilizzeremo in un flusso di lavoro è impostato per la moderazione del contenuto di testo. Inoltre, i flussi di lavoro includono input alternativo per le situazioni in cui il formato di input non corrisponde un qualificatore. Ad esempio, quando è necessario rilevare volgari testo in un'immagine tramite OCR. È possibile effettuare l'iscrizione per la moderazione Video, che è attualmente in anteprima privata. Infine, è possibile prevedere ulteriori connettori da visualizzare nel portale che sarà possibile utilizzare per creare ed estendere i flussi di lavoro.

Utilizzo di moderatore contenuto consente di ampliare le capacità di moderazione dei contenuti in tutti i formati multimediali nei volumi di grandi dimensioni. Moderatore è una piattaforma di contenuto, API e le soluzioni che si sta sviluppando in modo specifico per la moderazione dei contenuti verticale. Utilizzarlo, è possibile scala e transizione nuovi e in altri formati multimediali contenuto funzionalità moderazione man mano che diventano disponibili. Moderatore contenuto utilizza i classificatori basati sull'apprendimento automatico macchina migliore e altre tecnologie che ottengono migliori continuamente. Miglioramenti nei classificatori automaticamente consente di migliorare i risultati. 


Maarten van de Bospoortè un'entità software development engineer in esperienza dello sviluppatore presso Microsoft a Redmond. Lavora con gli sviluppatori e architetti consumer grandi ISV per agevolare l'adozione delle tecnologie Microsoft, ad esempio robot, quindi fare clic su servizi cognitivi e occasionalmente un'app per piattaforma UWP.

Sanjeev Jagtapè senior product manager del team di moderatore contenuto presso Microsoft a Redmond. Egli si impegna a clienti, le tecnologie Microsoft e Hackathons.

Grazie al seguente esperto tecnico Microsoft per la revisione dell'articolo: Christopher Harrison e Sudipto Rakshit