Actions on Google e Alexa skills per .NET loversLorenzo Giudici
Evento #Aperitech 05/11/2019 organizzato da Codemotion.
Ospite: la community di Milano Chatbots con 5 talk per illustrare lo stato dell'arte dei chatbot e dei voicebot.
1° Talk tecnico:
"Google Home", "Alexa", "Skills", "Smart speaker"… ne sentiremo parlare (tanto) anche nel 2020 e noi sviluppatori .NET possiamo cavalcare l'onda perchè abbiamo tutti gli strumenti e le competenze necessarie.
VIDEO: https://youtu.be/tboHO_mj2uM
Xamarin.Forms is a framework for building cross-platform applications that share most of the UI codebase among the UWP, iOS and Android platforms. Due to the higher level of abstraction compared to Xamarin.Native, Xamarin.Forms applications may suffer from memory leaks and slow rendering times at the expense of the final user experience. In the session, we will explore the mechanisms used by Xamarin.Forms to translate abstract UI components into native ones, highlight with demos what are the main bottlenecks met by developer, how to solve them and get close to native performances.
Actions on Google e Alexa skills per .NET loversLorenzo Giudici
Evento #Aperitech 05/11/2019 organizzato da Codemotion.
Ospite: la community di Milano Chatbots con 5 talk per illustrare lo stato dell'arte dei chatbot e dei voicebot.
1° Talk tecnico:
"Google Home", "Alexa", "Skills", "Smart speaker"… ne sentiremo parlare (tanto) anche nel 2020 e noi sviluppatori .NET possiamo cavalcare l'onda perchè abbiamo tutti gli strumenti e le competenze necessarie.
VIDEO: https://youtu.be/tboHO_mj2uM
Xamarin.Forms is a framework for building cross-platform applications that share most of the UI codebase among the UWP, iOS and Android platforms. Due to the higher level of abstraction compared to Xamarin.Native, Xamarin.Forms applications may suffer from memory leaks and slow rendering times at the expense of the final user experience. In the session, we will explore the mechanisms used by Xamarin.Forms to translate abstract UI components into native ones, highlight with demos what are the main bottlenecks met by developer, how to solve them and get close to native performances.
DotNetCampus - Continuous Integration con Sql ServerAlessandro Alpi
Continuous Integration con SQL Server. Come automatizzare i processi di build e di test su database SQL Server. Come includere SQL Server nei processi di Application Lifecycle Management (Database Lifecycle Management).
Sessione per NetCampus 2015. La diffusione sempre più ampia di applicazioni sviluppate interamente in HTML5 e JS richiede l'adozione di processi di automazione per la fase di build, testing e rilascio. In questa sessione vedremo quali sono i principali strumenti a nostra disposizione per semplificare queste fasi dello sviluppo.
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEDotNetCampus
Questa sessione tratterà delle implementazioni di architetture robuste e scalabili, in scenari di sviluppo applicativi rientranti nella tipologia dei Software as a Service. In particolare vedremo come accopiare le feature e le necessità del SaaS con servizi propri presenti su Azure; con focus su web, servizi mobili, data, e notification.
Dependency injection questa sconosciutaAndrea Dottor
L'uscita di ASP.NET Core ha portato a una maggiore diffusione dell'utilizzo della DI (Dependency Injection) ma spesso senza che lo sviluppatore sappia la sua reale utilità o potenzialità.
Dependency Injection, uno dei design pattern della programmazione OOP. Una best-practice dello sviluppo che può portare alla semplificazione del codice scritto, facilitare il disacoppiamento, e migliorare la testabilità.
In questa sessione vedremo cos'è la DI e come utilizzarla intelligentemente all'interno dei nostri progetti.
Slide dell'evento "XE One Day - Good code" tenuto il 15.09.2018.
Il codice è disponibile alla pagina dell'evento https://www.xedotnet.org/eventi/one-day-good-code/
Introduction to Blazor and WebAssembly in Christmas sauce. In this session we will see how to create a small demonstration application to send Christmas greetings.
Prepariamoci al cambiamento. ASP.NET MVC e ASP.NET Web API saranno unificati in un unico framework chiamato ASP.NET MVC 6, e questo è solo la prima di una serie di novità che stanno per arrivare.
Tutto si semplifica. Le performance migliorano. Un altro salto tecnologico in avanti portato da ASP.NET 5.
In questa sessione, infatti, vedremo tutte le novità che ASP.NET MVC 6 porta con se, e cercheremo di andare in dettaglio in modo da capire cosa voglia dire realizzare (da zero) o migrare (un'applicazione essitente) a questa nuova versione
Intelligenza artificiale nel mondo front-end - CodeGen2021Michele Aponte
Le applicazioni dell'intelligenza artificiale sono tantissime e ci permettono di andare a risolvere specifici problemi per dare valore alle nostre soluzioni: proviamo a immaginare una nuova User eXperience per le nostre applicazioni business che vada oltre pagine e forms e che sfrutti nuove tipologie di interazioni rese possibili dalle applicazioni della IA.
DotNetCampus - Continuous Integration con Sql ServerAlessandro Alpi
Continuous Integration con SQL Server. Come automatizzare i processi di build e di test su database SQL Server. Come includere SQL Server nei processi di Application Lifecycle Management (Database Lifecycle Management).
Sessione per NetCampus 2015. La diffusione sempre più ampia di applicazioni sviluppate interamente in HTML5 e JS richiede l'adozione di processi di automazione per la fase di build, testing e rilascio. In questa sessione vedremo quali sono i principali strumenti a nostra disposizione per semplificare queste fasi dello sviluppo.
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEDotNetCampus
Questa sessione tratterà delle implementazioni di architetture robuste e scalabili, in scenari di sviluppo applicativi rientranti nella tipologia dei Software as a Service. In particolare vedremo come accopiare le feature e le necessità del SaaS con servizi propri presenti su Azure; con focus su web, servizi mobili, data, e notification.
Dependency injection questa sconosciutaAndrea Dottor
L'uscita di ASP.NET Core ha portato a una maggiore diffusione dell'utilizzo della DI (Dependency Injection) ma spesso senza che lo sviluppatore sappia la sua reale utilità o potenzialità.
Dependency Injection, uno dei design pattern della programmazione OOP. Una best-practice dello sviluppo che può portare alla semplificazione del codice scritto, facilitare il disacoppiamento, e migliorare la testabilità.
In questa sessione vedremo cos'è la DI e come utilizzarla intelligentemente all'interno dei nostri progetti.
Slide dell'evento "XE One Day - Good code" tenuto il 15.09.2018.
Il codice è disponibile alla pagina dell'evento https://www.xedotnet.org/eventi/one-day-good-code/
Introduction to Blazor and WebAssembly in Christmas sauce. In this session we will see how to create a small demonstration application to send Christmas greetings.
Prepariamoci al cambiamento. ASP.NET MVC e ASP.NET Web API saranno unificati in un unico framework chiamato ASP.NET MVC 6, e questo è solo la prima di una serie di novità che stanno per arrivare.
Tutto si semplifica. Le performance migliorano. Un altro salto tecnologico in avanti portato da ASP.NET 5.
In questa sessione, infatti, vedremo tutte le novità che ASP.NET MVC 6 porta con se, e cercheremo di andare in dettaglio in modo da capire cosa voglia dire realizzare (da zero) o migrare (un'applicazione essitente) a questa nuova versione
Intelligenza artificiale nel mondo front-end - CodeGen2021Michele Aponte
Le applicazioni dell'intelligenza artificiale sono tantissime e ci permettono di andare a risolvere specifici problemi per dare valore alle nostre soluzioni: proviamo a immaginare una nuova User eXperience per le nostre applicazioni business che vada oltre pagine e forms e che sfrutti nuove tipologie di interazioni rese possibili dalle applicazioni della IA.
In questa sessione andremo in dettaglio sul come poter migliorare le nostre applicazioni ASP.NET dal punto delle vista delle performance: Come capire dove interventire? Cosa possiamo migliorare? A cosa dobbiamo prestare attenzione? E nel caso di un'applicazione esistente, dove possiamo intervenire per migliorarla ulteriormente?
A prima vista, MVC “is all about the presentation layer”. In realtà, per trarre il massimo giovamento da questo toolkit è necessario progettare l’intera soluzione utilizzando criteri ad hoc.
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
Slide e codice lo potete trovare a questo link:
http://blog.dottor.net/post/2012/09/18/Codice-e-slide-della-sessione-Whats-New-in-ASPNET-45-and-Visual-Studio-2012.aspx
Il Microsoft .NET Framework è in continua evoluzione, e con la prossima versione verranno rilasciate interessanti funzionalità riguardanti ASP.NET.All'interno di questa sessione conosceremo tutte queste novità, ed andremo invece più in dettaglio in alcune di esse, permettendo a chi conosce già ASP.NET di poter essere più produttivo (Strongly Typed Data Controls, Model Binding, Asynchronous, WebSocket, ... ), mentre, per chi invece non ha molta esperienza con questa tecnologia, potrà vedere come i nuovi template di progetto e Visual Studio 2012 potranno aiutarlo ad approcciare correttamente queste tipologie di applicazioni.
Enabling DevOps for Machine Learning with Azure PipelinesLuca Milan
Slides dell'evento DevOps Heroes 2019 a Parma.
Al giorno d'oggi il "Machine Learning" (ML) estende le capacità di tanti software in centinaia di campi applicativi, dalla medicina agli istituti finanziari. Creare modelli predittivi realistici richiede però uno sforzo, da parte di tante persone con differenti background: da una parte, infatti, ci sono i team di sviluppo (Developers / DevOps) e dall'altra i team di "Data Science".
Per questa ragione, la vera sfida che abbiamo di fronte oggi, consiste nel saper rilasciare gli "Artefatti di ML" in maniera automatizzata, riproducibile ed affidabile sfruttando tutte le pratiche DevOps.
In questo talk illustreremo, con l'ausilio di una demo realizzata con il framework ML.NET, i passi che portano alla creazione di pipelines ad "altissima automazione" in grado di gestire le più comuni operazioni di un progetto di ML: dal training alla distribuzione del modello di apprendimento ai diversi "Consumers".
"Don't call us, we'll call you" - AngularJS meets Event-Driven ArchitectureLuca Milan
Slides del talk del 21 Marzo al 1° AngularJS Day ad Ancona. Come realizzare una dashboard per consultare in tempo reale l'andamento dei piloti in una gara del MotoGP. Tutte le variazioni saranno notificate al client evitando il polling continuo al server. L'architettura dell'applicazione seguirà il paradigma della Command-Query-Responsibility-Segregation (CQRS) in 'salsa' REST.
Demo su: http://angularjsday.azurewebsites.net/
4. Framework per lo Sviluppo ed il Consumo di
servizi HTTP (RestFul e non solo...);
Creata seguendo principi di programmazione
AGILI e SOLIDI => Ortogonalità, Estensibilità;
Trasforma il protocollo l'HTTP in una
piattaforma di programmazione.
E’ una api Simmetrica (parte Server / Client)
E’ Open Source
http://aspnetwebstack.codeplex.com
5. Riutilizza meccanismi tipici di ASP.NET MVC quali:
Routing, Model Binder e Filtri (Pre e Post esecuzione)
Pensata con un approccio FRICTION-LESS (Zero-
Configuration, Registry Pattern)
Sfrutta il paradigma Convention Over Configuration
(Auto selezione di Formatters / Http Headers e
Mapping delle Action / Http Verbs)
Ricca di punti di estensibilità (Controller
Activator, Message Handler, Filters, Tracing, Logging)
Realmente Asyncrona (nessuna scusa!)
6. Nel modello ad oggetti di webapi esistono 3 astrazioni
fondamentali che la rendono fruibile lato server e lato
client (Api Simmetrica):
HttpRequestMessage
HttpResponseMessage
HttpMessageHandler
Catena di Trasformazione
della Richiesta (bidirezionale, asincrona)
HANDLER …
HANDLER 2
HANDLER 1
Richiesta Risposta
7. E' uno stile architetturale (SOAP invece è un protocollo
basato su XML)
E’ stato discusso nel 2000 da Roy Fielding
Buon Livello di Maturità
12. Sono possibili vari livelli di configurazione su cui agire:
Livello Globale
1. Con ASP.NET Web Hosting
Assembly System.Web.Http.WebHost
2. Con Self-Hosting
Assembly System.Web.Http.SelfHost
Livello dei Servizi
Livello Controller (per controller)
13. L’oggetto deputato alla configurazione è un singleton:
GlobalConfiguration.Configuration e contiene la sola istanza possibile della
classe HttpConfiguration.
14.
15. I settaggi sono contenuti nella classe HttpSelfHostConfiguration che deriva
da HttpConfiguration.
16. Come hostare una webapi all’interno
di una console application e vivere
felici
17. Implementato tramite un Registry Pattern, contiene tutti
i «TIPI NOTI» al framework in termini di Servizi; Un tipo
può essere sostituito o aggiunto in fase di warmup
dell’applicazione.
20. Oltre che a livello globale alcune impostazioni possono
essere cambiate a livello (locale) per singolo Controller
tramite un meccanismo di «override».
E’ possibile cambiare i seguenti settings:
◦ Media-Type formatters
◦ Parameter Binding Rules
◦ Services
21. Per usare la configurazione per controller è necessario creare
un attributo che erediti dall’interfaccia IControllerConfiguration:
22. protected Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken){
//intercetto la richiesta e lavoro su un valore dell’header
var requestDate = request.Headers.Date;
//eseguo la richesta e ottengo la risposta dal blocco controller
var response = await base.SendAsync(request, cancellationToken);
//manipolo la risposta e lavoro su un valore dell’header
var responseDate = response.Headers.Date;
//chiudo e restituisco la risposta
return response;
}
23. Esisto 2 tipi di handlers
◦ Built-IN
◦ Custom (scriviamo noi)
Gli ultimi 2 handlers
si occupano di girare la richiesta
al controller oppurtuno in base
al meccanismo di routing;
Gli handlers possono essere
registrati a livello:
◦ Globale (in Configuration)
◦ Per Route (su template route)
27. Possiamo debuggare le regole di routing:
Tramite il componente nuget:
http://www.nuget.org/packages/WebApiRouteDebugg
er/
PM> Install-Package WebApiRouteDebugger
30. Usa le stesse convenzioni di ASP.NET MVC
Esempio: GET: api/{controller} => api/Book
◦ Estrae dal dizionario di routing il valore per la chiave
{controller}: «Book»
◦ Appende la parola «Controller» al valore trovato:
«BookController»
◦ Cerca tra i tipi candidati quello corrispondente al nome
trovato;
Possiamo cambiare questa convenzione in base alle
nostre esigenze vedi IHttpControllerTypeResolver
31.
32. Sono ideali per gestire i «cross cutting concerns»:
sicurezza, logging, transazionalità, validazione, mapping, ecc..
Esistono vari tipi di filtri:
1. Authorization Filters: vengono eseguiti prima del
ModelBinding (verifica identità, autorizzazione, check
sicurezza)
2. Action Filters: vengono eseguiti prima e dopo
l’invocazione di una action (ispezione request/response)
3. Exception Filters: vengono eseguiti quando si sollevano
errori nel «Blocco Controllers»
I filtri possono essere configurati a livello di
Configurazione, Per-Controller o Per-Action.
33. 1. I filtri sono asincroni per definizione, anche se per
semplicità viene fornita una versione sincrona per
ognuno di essi.
2. Non esiste un filtro [HandleError] come in MVC, in
WebApi possiamo scrivere un filtro globale per
personalizzare il comportamento di default.
3. Esistono sempre i filtri [AllowAnonymous] e
[Autorize] per la gestione della sicurezza
35. Il meccanismo di binding crea i tipi .NET corrispondenti
ai parametri delle actions partendo dalla richiesta
HTTP:
◦ I tipi semplici (Guid, DateTime, String) dall’URI tramite Model
Binder
◦ I tipi complessi dal Body tramite i MediaType Formatters
Questo comportamento può essere cambiato agendo
su alcuni punti di estensibilità:
◦ IActionValueBinder
◦ HttpParameterBinding
36. URI
HEADERS
BODY TIPI COMPLESSI
TIPI SEMPLICI
ModelBinder
ValueProvider
Media Type Formatters
OGNI TIPO
HttpParameterBinding
WebApi può leggere il BODY della richiesta una sola volta, quindi non
è possibile associare più di un parametro al body.
37. Come creare dei bindings custom
per i parametri delle actions
38. E’ il processo di selezione della migliore
rappresentazione di una risorsa in risposta ad una
richiesta del client;
Il client può richiedere tramite l’header HTTP Accept-*
la formattazione della risposta in uno specifico formato
(Media Type);
Il framework riesce a gestire in modo automatico
questa situazione per i formati Xml e Json, ma nulla ci
vieta di creare dei MediaType personalizzati;
39. Sono i componenti che si occupano di serializzare / deserializzare
una risorsa. Entrano in gioco:
1. Dopo la creazione del risultato della Action
2. In fase di Binding per i tipi complessi agendo sul body della
richiesta per reidratare i parametri delle Action
I Formatters possono essere gestiti a livello di Configurazione
oppure a livello del Controller.
Possiamo creare nuovi formatter ereditando dalle classi:
MediaTypeFormatter o BufferedMediaTypeFormatter.
La prima utilizza metodi asincroni di lettura e scrittura mentre la
seconda supporta un approccio sincrono.
40. Come creare un formatter custom
per rappresentare una risorsa in
formato CSV
41. Presente già in MVC
Evoluta in WebApi con IDependencyResolver e
IDependencyScope (per richiesta)
Prima di instanziare un servizio WebApi chiede al
resolver se esiste, in caso contrario utilizza
l’implementazione di default
Lifetime degli oggetti
◦ I controllers vengono creati per ogni richiesta
◦ I message handlers e i servizi una sola volta all’avvio
dell’applicazione
43. IIS possiede un numero
finito di threads per
soddisfare le richieste.
Se ci sono richieste che
impegnano a lungo il
server si rischia il blocco
del server perché i
threads risultano
impegnati.
45. Possiamo usare i Templates di progetto di
Visual Studio 2012 (MVC4 + WebApi)
Oppure essere più snelli, creando un web
project vuoto per ASP.NET e con NUGET fare
il setup da linea di comando:
PM> Install-Package Microsoft.AspNet.WebApi
46. La DotDotNet è un'associazione culturale con il compito di
promuovere la più ampia diffusione dell'informatica, della
telematica, della multimedialità e dei collaborative tools, con
particolare attenzione allo sviluppo di software su piattaforma
Microsoft .NET. (dall’art. 1 dello statuto DotDotNet)
Associazione no-profit
◦ Opera in tutta la regione
Gruppo di professionisti, studenti e appassionati.
Feedback
Adesione:
http://dotdotnet.org/content/Adesione.aspx