2011.02.18 marco parenzan - case study. conversione di una applicazione for...Marco Parenzan
油
The document discusses converting a Fortran molecular dynamics simulation code to C#. The original Fortran code had problems like high coupling, no separation of concerns, and low reusability. Modern coding practices like object orientation, separating roles into modules, and creating reusable libraries are recommended. The converted C# code is well-structured but may not be optimal for GPU performance. GPU programming requires specialized preparation code. Overall structures that improve maintainability, like separating concerns, are important to allow code to be adapted to new technologies over time.
Elementi di C# 1.0
Delegati ed eventi. Eccezioni. Enumeratori.
Elementi di C# 2.0
Static Classes. Generics e collezioni generiche.Nullable Types. Partial Types e Partial Classes. Anonymous Methods.Iteratori,
Elementi di C# 3.0
Auto-implemented properties.Object Initializers e Collection Initializers. Implicit Typed Variables. Anonymous Types.Extension Methods. Lambda Expression.
Perch竪 il Cloud Computing 竪 cos狸 strategico? Perch竪 竪 necessario formare delle figure professionali sulle tecnologie Cloud? Perch竪 il Cloud permette di far funzionare molte altre tecnologie, che altrimenti non potrebbero raggiungere la loro viralit: Mobile, Internet of Things, Big Data.
Il Cloud evolve tutti i paradigmi prima conosciuti: si sviluppano applicazioni Cloud in maniera diversa. Si trattano i dati con nuovi strumenti. Si implementano architetture distribuite, ibride, mentre prima si era isolati. E si devono conoscere i grandi player di mercato, tra cui Microsoft Azure, che fornire moltissime soluzioni e aspetti per le tante singole necessit del Cloud e delle applicazioni.
Un gioco senza un backend in Internet non 竪 pi湛 pensabile. Un backend in Internet senza Azure nemmeno. Quali sono i servizi necessari per costruire un backend di un videogioco? Vediamo quali...
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Daniele Falamesca
油
Argomenti Trattati nel Corso:
Fondamenti
Costruttori del Linguaggio
Vettori
Record
Funzioni
Ricorsione
Puntatori
Strutture Dinamiche
Programmazione ad Oggetti
Nel Corso saranno presenti circa 60 Esercizi Svolti per aiutarvi a comprendere i concetti delle Lezioni
Dynamic Language Programming For The Statically Typed ProgrammerMarco Parenzan
油
Perch竪 un programmatore che usa quotidianamente C# o VB.NET, linguaggi compilati di cui 竪 soddisfatto, dovrebbe dare unocchiata ai linguaggi interpretati?
Risposta: configurazione, parametrazione, personalizzazione, delle applicazioni che di base sono implementate in C# o VB.NET.
Obiettivo: abbassare il costo di manutenzione delle applicazioni spostando la responsabilit dal core cablato delle applicazioni, alla configurazione attraverso scripting.
Si parler di IronPython, di IronRuby e del Dynamic Language Runtime. Non si parler di Ruby on Rails.
Lo scorso anno abbiamo iniziato ad esplorare MonoTouch come strumento per lo sviluppo di applicazioni Line of Business (LOB) su iPad ed iPhone, tenendo in particolare considerazione la possibilit di far girare gran parte del codice, in particolare la logica di business, su altre piattaforme (mobile, ma anche desktop e server).
Ad un anno di distanza possiamo fare un resoconto dell'esperienza (ancora in corso) avuta con questo tool, vedendo alcune ricette pratiche che consentano di utilizzarlo in modo pi湛 efficiente e discutendo insieme su quando ha effettivamente senso sceglierlo, evitarlo o addirittura affiancarlo rispetto ad altri strumenti e tecnologie, tra cui ovviamente quelli basati su HTML5.
Esploriamo assieme come il linguaggio C# e il concetto di universal, declinato sulle varie piattaforme hardware, si possono fondere assieme, con poca teoria e molta pratica.
Code Generation con i templates T4 in visual studioMarco Parenzan
油
Uno degli strumenti meno pubblicizzati ma pi湛 utili in Visual Studio sono i templates T4. Strumenti come l'Entity Framework e ASP.NET MVC li hanno resi (forse) pi湛 diffusi. Come sono fatti? Come si usano? Cosa ci si pu嘆 fare? Una carrellata di alcuni usi interessanti, dagli oggetti POCO a WPF, passando attraverso lo "scaffolding" e i Domain Specific Languages...
Ho iniziato tre anni fa a parlare di Ajax, per poi affrontare il framework Dojo... ed ora cosa ci aspetta per il futuro? Quante cose nuove dovremo imparare per le nostre applicazioni Web?
Le Xpages permettono di realizzare le applicazioni Web con estrema facilit e con una maggiore semplicit manutentiva rispetto al passato.
La sessione mostrer l'utilizzo di questa tecnologia partendo da un'applicazione demo che verr "smontata" e spiegata nel dettaglio.
OpenOffice.org non 竪 solo la principale suite di applicazioni per l'ufficio completamente libera e basata su open standard (OpenDocument 竪 standard ISO), ma pu嘆 trasformarsi in una potente piattaforma per applicazioni document-based programmabile via Java.
In questa presentazione esploreremo le potenzialit del connubio fra OpenOffice.org e Java tramite alcuni esempi applicativi. In particolare vedremo la possibilit di eseguire script nei linguaggi basati su JVM come BeanShell e Jython, l'esecuzione remota da applicazioni Java esterne di funzioni di OpenOffice.org lanciato in modalit server, e i diversi punti di aggancio per estendere le funzionalit della suite dall'interno tramite componenti Java custom.
Vedremo infine la nuova applicazione Base presente in OpenOffice.org 2.0 per l'accesso a sorgenti dati JDBC.
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Codemotion
油
A key component of the creation of cross-platform applications to be able to share code among several specific projects and platform dependent. Each different platform can only use the class libraries that have been developed for that specific platform. In Xamarin there are two main approaches to the sharing code: Using Shared Asset Projects (Shared Library) and the Portable Class Library (PCL) Projects. In this session we will see how and when to use the shared library, or the PCL library and we will try to answer the question: Shared or PCL?
Normalmente parliamo e presentiamo Azure IoT (Central) con un taglio un po' da "maker". In questa sessione, invece, vediamo di parlare allo SCADA engineer. Come si configura Azure IoT Central per il mondo industriale? Dov'竪 OPC/UA? Cosa c'entra IoT Plug & Play in tutto questo? E Azure IoT Central...quali vantaggi ci da? Cerchiamo di rispondere a queste e ad altre domande in questa sessione...
Allo sviluppatore Azure piacciono i servizi PaaS perch竪 sono "pronti all'uso". Ma quando proponiamo le nostre soluzioni alle aziende, ci scontriamo con l'IT che apprezza gli elementi infrastrutturali, IaaS. Perch竪 non (ri)scoprirli aggiungendo anche un pizzico di Hybrid che con il recente Azure Kubernetes Services Edge Essentials si pu嘆 anche usare in un hardware che si pu嘆 tenere anche in casa? Quindi scopriremo in questa sessione, tra gli altri, le VNET, le VPN S2S, Azure Arc, i Private Endpoints, e AKS EE.
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Daniele Falamesca
油
Argomenti Trattati nel Corso:
Fondamenti
Costruttori del Linguaggio
Vettori
Record
Funzioni
Ricorsione
Puntatori
Strutture Dinamiche
Programmazione ad Oggetti
Nel Corso saranno presenti circa 60 Esercizi Svolti per aiutarvi a comprendere i concetti delle Lezioni
Dynamic Language Programming For The Statically Typed ProgrammerMarco Parenzan
油
Perch竪 un programmatore che usa quotidianamente C# o VB.NET, linguaggi compilati di cui 竪 soddisfatto, dovrebbe dare unocchiata ai linguaggi interpretati?
Risposta: configurazione, parametrazione, personalizzazione, delle applicazioni che di base sono implementate in C# o VB.NET.
Obiettivo: abbassare il costo di manutenzione delle applicazioni spostando la responsabilit dal core cablato delle applicazioni, alla configurazione attraverso scripting.
Si parler di IronPython, di IronRuby e del Dynamic Language Runtime. Non si parler di Ruby on Rails.
Lo scorso anno abbiamo iniziato ad esplorare MonoTouch come strumento per lo sviluppo di applicazioni Line of Business (LOB) su iPad ed iPhone, tenendo in particolare considerazione la possibilit di far girare gran parte del codice, in particolare la logica di business, su altre piattaforme (mobile, ma anche desktop e server).
Ad un anno di distanza possiamo fare un resoconto dell'esperienza (ancora in corso) avuta con questo tool, vedendo alcune ricette pratiche che consentano di utilizzarlo in modo pi湛 efficiente e discutendo insieme su quando ha effettivamente senso sceglierlo, evitarlo o addirittura affiancarlo rispetto ad altri strumenti e tecnologie, tra cui ovviamente quelli basati su HTML5.
Esploriamo assieme come il linguaggio C# e il concetto di universal, declinato sulle varie piattaforme hardware, si possono fondere assieme, con poca teoria e molta pratica.
Code Generation con i templates T4 in visual studioMarco Parenzan
油
Uno degli strumenti meno pubblicizzati ma pi湛 utili in Visual Studio sono i templates T4. Strumenti come l'Entity Framework e ASP.NET MVC li hanno resi (forse) pi湛 diffusi. Come sono fatti? Come si usano? Cosa ci si pu嘆 fare? Una carrellata di alcuni usi interessanti, dagli oggetti POCO a WPF, passando attraverso lo "scaffolding" e i Domain Specific Languages...
Ho iniziato tre anni fa a parlare di Ajax, per poi affrontare il framework Dojo... ed ora cosa ci aspetta per il futuro? Quante cose nuove dovremo imparare per le nostre applicazioni Web?
Le Xpages permettono di realizzare le applicazioni Web con estrema facilit e con una maggiore semplicit manutentiva rispetto al passato.
La sessione mostrer l'utilizzo di questa tecnologia partendo da un'applicazione demo che verr "smontata" e spiegata nel dettaglio.
OpenOffice.org non 竪 solo la principale suite di applicazioni per l'ufficio completamente libera e basata su open standard (OpenDocument 竪 standard ISO), ma pu嘆 trasformarsi in una potente piattaforma per applicazioni document-based programmabile via Java.
In questa presentazione esploreremo le potenzialit del connubio fra OpenOffice.org e Java tramite alcuni esempi applicativi. In particolare vedremo la possibilit di eseguire script nei linguaggi basati su JVM come BeanShell e Jython, l'esecuzione remota da applicazioni Java esterne di funzioni di OpenOffice.org lanciato in modalit server, e i diversi punti di aggancio per estendere le funzionalit della suite dall'interno tramite componenti Java custom.
Vedremo infine la nuova applicazione Base presente in OpenOffice.org 2.0 per l'accesso a sorgenti dati JDBC.
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Codemotion
油
A key component of the creation of cross-platform applications to be able to share code among several specific projects and platform dependent. Each different platform can only use the class libraries that have been developed for that specific platform. In Xamarin there are two main approaches to the sharing code: Using Shared Asset Projects (Shared Library) and the Portable Class Library (PCL) Projects. In this session we will see how and when to use the shared library, or the PCL library and we will try to answer the question: Shared or PCL?
Normalmente parliamo e presentiamo Azure IoT (Central) con un taglio un po' da "maker". In questa sessione, invece, vediamo di parlare allo SCADA engineer. Come si configura Azure IoT Central per il mondo industriale? Dov'竪 OPC/UA? Cosa c'entra IoT Plug & Play in tutto questo? E Azure IoT Central...quali vantaggi ci da? Cerchiamo di rispondere a queste e ad altre domande in questa sessione...
Allo sviluppatore Azure piacciono i servizi PaaS perch竪 sono "pronti all'uso". Ma quando proponiamo le nostre soluzioni alle aziende, ci scontriamo con l'IT che apprezza gli elementi infrastrutturali, IaaS. Perch竪 non (ri)scoprirli aggiungendo anche un pizzico di Hybrid che con il recente Azure Kubernetes Services Edge Essentials si pu嘆 anche usare in un hardware che si pu嘆 tenere anche in casa? Quindi scopriremo in questa sessione, tra gli altri, le VNET, le VPN S2S, Azure Arc, i Private Endpoints, e AKS EE.
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptxMarco Parenzan
油
Did interfaces in C# need evolution? Maybe yes. Are they violating some fundamental principles? We see. Are we asking for some hoops? Let's see all this by telling a story (of code, of course)
Azure Synapse Analytics for your IoT SolutionsMarco Parenzan
油
Let's find out in this session how Azure Synapse Analytics, with its SQL Serverless Pool, ADX, Data Factory, Notebooks, Spark can be useful for managing data analysis in an IoT solution.
Power BI Streaming Data Flow e Azure IoT Central Marco Parenzan
油
Dal 2015 gli utilizzatori di Power BI hanno potuto analizzare dati in real-time grazie all'integrazione con altri prodotti e servizi Microsoft. Con streaming dataflow, si porter l'analisi in tempo reale completamente all'interno di Power BI, rimuovendo la maggior parte delle restrizioni che avevamo, integrando al contempo funzionalit di analisi chiave come la preparazione dei dati in streaming e nessuna creazione di codice. Per vederlo in funzione, studieremo un caso specifico di streaming come l'IoT con Azure IoT Central.
Power BI Streaming Data Flow e Azure IoT CentralMarco Parenzan
油
Dal 2015 gli utilizzatori di Power BI hanno potuto analizzare dati in real-time grazie all'integrazione con altri prodotti e servizi Microsoft. Con streaming dataflow, si porter l'analisi in tempo reale completamente all'interno di Power BI, rimuovendo la maggior parte delle restrizioni che avevamo, integrando al contempo funzionalit di analisi chiave come la preparazione dei dati in streaming e nessuna creazione di codice. Per vederlo in funzione, studieremo un caso specifico di streaming come l'IoT con Azure IoT Central.
Power BI Streaming Data Flow e Azure IoT CentralMarco Parenzan
油
Since 2015, Power BI users have been able to analyze data in real-time thanks to the integration with other Microsoft products and services. With streaming dataflow, you'll bring real-time analytics completely within Power BI, removing most of the restrictions we had, while integrating key analytics features like streaming data preparation and no coding. To see it in action, we will study a specific case of streaming such as IoT with Azure IoT Central.
What are the actors? What are they used for? And how can we develop them? And how are they published and used on Azure? Let's see how it's done in this session
Generic Math, funzionalit ora schedulata per .NET 7, e Azure IoT PnP mi hanno risvegliato un argomento che nel mio passato mi hanno portato a fare due/tre viaggi, grazie all'Universit di Trieste, a Cambridge (2006/2007 circa) e a Seattle (2010, quando ho parlato pubblicamente per la prima volta di Azure :) e che mi ha fatto conoscere il mito Don Box!), a parlare di codice in .NET che aveva a che fare con la matematica e con la fisica: le unit di misura e le matrici. L'avvento dei Notebook nel mondo .NET e un vecchio sogno legato alla libreria ANTLR (e tutti i miei esercizi di Code Generation) mi portano a mettere in ordine 'sto minestrone di idee...o almeno ci provo (non so se sta tutto in piedi).
322 / 5,000
Translation results
.NET is better every year for a developer who still dreams of developing a video game. Without pretensions and without talking about Unity or any other framework, just "barebones" .NET code, we will try to write a game (or parts of it) in the 80's style (because I was a kid in those years). In Christmas style.
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...Marco Parenzan
油
The document discusses building an IoT infrastructure on the edge with .NET that connects devices like Raspberry Pis and ESP32s to Azure. It describes setting up a network of Raspberry Pi devices running .NET Core and connecting sensors to collect data and send events to an Apache Kafka cluster. The events are then aggregated using Apache Spark on another Raspberry Pi and the results routed to the cloud. Issues encountered include Kafka's Java dependencies, Spark's complex processing model, and lack of documentation around integrating Pi, Kafka and Spark. While the technologies work individually, configuring and integrating them presented challenges at the edge.
How can you handle defects? If you are in a factory, production can produce objects with defects. Or values from sensors can tell you over time that some values are not "normal". What can you do as a developer (not a Data Scientist) with .NET o Azure to detect these anomalies? Let's see how in this session.
Quali vantaggi ci da Azure? Dal punto di vista dello sviluppo software, uno di questi 竪 certamente la variet dei servizi di gestione dei dati. Questo ci permette di cominciare a non essere SQL centrici ma utilizzare il servizio giusto per il problema giusto fino ad applicare una strategia di Polyglot Persistence (e vedremo cosa significa) nel rispetto di una corretta gestione delle risorse IT e delle pratiche di DevOps.
- Azure IoT Central provides a fully managed platform for building IoT solutions that is compliant with the Azure IoT platform.
- It offers predictable pricing per device, forces useful modeling practices like device twins and plug and play, and provides industry templates to accelerate solution building.
- While it handles much of the complexity, it also maintains compatibility with customizing solutions using the full Azure IoT platform and other Azure services.
Come puoi gestire i difetti? Se sei in una fabbrica, la produzione pu嘆 produrre oggetti con difetti. Oppure i valori dei sensori possono dirti nel tempo che alcuni valori non sono "normali". Cosa puoi fare come sviluppatore (non come Data Scientist) con .NET o Azure per rilevare queste anomalie? Vediamo come in questa sessione.
It happens that we have to develop several services and deploy them in Azure. They are small, repetitive but different, often not very different. Why not use code generation techniques to simplify the development and implementation of these services? Let's see with .NET comes to meet us and helps us to deploy in Azure.
Running Kafka and Spark on Raspberry PI with Azure and some .net magicMarco Parenzan
油
IoT scenarios necessarily pass through the Edge component and the Raspberry PI is a great way to explore this world. If we need to receive IoT events from sensors, how do I implement an MQTT endpoint? Kafka is a clever way to do this. And how do I process the data in Kafka? Spark is another clever way of doing this. How do we write custom code for these environments? .NET, now in version 6 is another clever way to do it! And maybe, we also communicate with Azure. We'll see in this session if we can make it all work!
Time Series Anomaly Detection with Azure and .NETTMarco Parenzan
油
f you have any device or source that generates values over time (also a log from a service), you want to determine if in a time frame, the time serie is correct or you can detect some anomalies. What can you do as a developer (not a Data Scientist) with .NET o Azure? Let's see how in this session.
2. 19/11/2010 www.xedotnet.org 2
損 Non 竪 possibile insegnare a programmare in F#
in unora
損 Si vuole rispondere a due domande:
Perch竪 apprendere lapproccio funzionale?
Vale la pena imparare F#?
Obiettivi
3. 19/11/2010 www.xedotnet.org 3
損 Da Wikipedia
http://en.wikipedia.org/wiki/Imperative_programming
束...la computazione viene espressa in termini di
istruzioni che cambiano lo stato di un programma...損
損 Nella programmazione imperativa, noi...
...NON diciamo COSA vogliamo....
...ma DICIAMO COME fare per ottenere quello che
vogliamo
Programmazione Imperativa
4. 19/11/2010 www.xedotnet.org 4
損 Nella programmazione imperativa, i concetti principali sono:
Lo stato (le variabili)
Lassegnazione (delle variabili)
La sequenza delle operazioni (che cambiano lo stato delle variabili)
損 Pros
Approccio 束naturale損
束The hardware implementation of almost all computers is imperative 損
Ad un certo punto lesecuzione va fatta
Quando viene insegnato il concetto astratto di algoritmo, viene
implicitamente richiesto di essere gli 束esecutori損
損 Cons
La gestione dello stato pu嘆 essere complicata ed 竪 spesso causa di
errori
Forse abusiamo delle variabili
Sempre di pi湛 ora che si parla di parallel e distributed programming
Programmazione Imperativa
5. 19/11/2010 www.xedotnet.org 5
損 Da Wikipedia
http://en.wikipedia.org/wiki/Object-oriented_programming
束...i dati vengono espressi in termini di strutture
contenenti campi e metodi...損
損 La programmazione orientata agli oggetti 竪
implicitamente imperativa, in quanto 竪 束stato損
assieme ai metodi che permetto di 束cambiare
questo stato損
損 Nel nostro ragionamento, quindi, non ci interessa
I concetti di OOP non ci danno niente in pi湛 nel
confronto Imperativo vs. Funzionale
Comunque parleremo di F# e OOP
Programmazione Orientata agli Oggetti
8. 19/11/2010 www.xedotnet.org 8
損 C# 3.0 (rilasciato con .NET Framework 3.5) implementa alcuni aspetti della
programmazione funzionale (http://tomasp.net/articles/csharp3-concepts.aspx)
Lambda Expression
Quando le funzioni possono essere create a runtime, possono essere memorizzate in
strutture dati, essere passate come parametri o ritornate come risultati
Type Inference (Inferenza di tipo)
Dedurre il tipo dallespressione, non dalla annotazione della variabile (che, in caso di
ambiguit, si pu嘆 ancora usare)
Anonymous Types
Tipi definiti dalluso
Metaprogramming
lo scrivere programmi che scrivono o manipolano altri programmi (se scrivono o
manipolano se stessi, si dice 束reflection損)
Le Expressions e gli Expression Trees sono i fondamenti del metaprogramming in .NET
3.5/sp1/4.0 (oltre alla Reflection...)
In realt sono: syntactic sugar e librerie
Cosa succede se questi concetti entrano nella definizione del linguaggio sin
dallinizio?
Programmazione Funzionale e .NET
9. 19/11/2010 www.xedotnet.org 9
損 Da Wikipedia
http://en.wikipedia.org/wiki/Declarative_programming
束...esprime la logica della computazione SENZA
descrivere il flusso di controllo...損
損 Nella programmazione dichiarativa, noi...
...DICIAMO COSA vogliamo....
...ma NON diciamo come fare per ottenere quello
che vogliamo
損 lesatto complemento della programmazione
dichiarativa
Programmazione Dichiarativa
10. 19/11/2010 www.xedotnet.org 10
損 Nella programmazione dichiarativa, i concetti
principali sono:
Le propriet (esplicitare dei valori)
I vincoli (esplicitare le regole cui devono sottostare valori
non esplicitati)
損 Pros
Migliore astrazione
Non devo pensare alla gestione dello stato
損 Cons
Approccio (forse) non 束naturale損 (?!?!?!)
Lo usiamo, ma non sappiamo che lo stiamo facendo
Programmazione Dichiarativa
11. 19/11/2010 www.xedotnet.org 11
損 Tra i linguaggi 束dichiarativi損 (cio竪 quelli che
implementano un paradigma di programmazione
束dichiarativo損) troviamo i Domain Specific
Languages
損 Ne usiamo ogni giorno
HTML
Descriviamo cosa vogliamo vedere
Non descriviamo COME faremo a rappresentarlo (non
disegnamo linee, lettere, colori)
SQL
Nella selezione (SELECT) descriviamo i vincoli sui dati che
vogliamo ottenere,
Non descriviamo COME estrarre i dati da un database
(generazione dellexecution plan)
Domain Specific Languages
12. 19/11/2010 www.xedotnet.org 12
損 Da Wikipedia
http://en.wikipedia.org/wiki/Functional_programming
束...la computazione viene espressa in termini di funzioni ed evita luso di stato e dati mutabili...損
損 Nella programmazione funzionale...
Le funzioni sono First-Class Types (High Order Functions)
Inferenza dei tipi
Immutabilit
La scelta di essere 束mutabile損 (ed essere a rischio di 束side effectes損, 竪 esplicita)
Evita luso di stato per evitare insidiosi 束side-effects損
Specie in concurrent programming
Enfatizza la forma dei dati, non limplementazione
Uso di dati polimorfici e di pattern matching
Modellato sul lambda calcolo
Expression Oriented
Promuove la 束lazy evaluation損
Valutazione 束pigra損, il pi湛 tardi possibile (non 束eager損, 束impaziente損, 束anticipato損)
Riduce lenfasi sullapproccio imperativo
Preferisce la ricorsione alliterazione
Innalza il livello di astrazione
Programmazione Funzionale
13. 19/11/2010 www.xedotnet.org 13
損 Nella programmazione funzionale, i concetti
principali sono:
I valori e la loro immutabilit
Non ci sono variabili
Il lambda calcolo
損 Pros
Migliore astrazione
束... l'aumento delle prestazioni dei calcolatori ha tuttavia
spostato l'attenzione della comunit informatica sullo sviluppo
rapido del software, sulla sua correttezza e manutenibilit...損
損 Cons
Approccio (forse) non 束naturale損 (?!?!?!)
Lo usiamo, ma non sappiamo che lo stiamo facendo
Programmazione Funzionale
14. 19/11/2010 www.xedotnet.org 14
損 un linguaggio funzionale
Deriva la sua sintassi dal linguaggio Ocaml
il suo obiettivo principale
損 un linguaggio imperativo
Se non si pu嘆 fare altrimenti
損 un linguaggio OOP
Perch竪 deve essere interoperabile con .NET
損 Links
http://msdn.microsoft.com/en-us/fsharp/default.aspx
http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/
http://en.wikipedia.org/wiki/F_Sharp_(programming_language)
Cos竪 F#
15. F# Evolution [Source: PDC 2010 Don Syme]
F# 1.0
Functional, Generics (Microsoft
Research)
Visual Studio 2008
Interactive, Objects
F# 2.0
Visual Studio 2010
Asynchronous, Parallel, Units of
Measure
Language foundations for strongly typed
access to external named data and
services
F# 3.0
16. 19/11/2010 www.xedotnet.org 16
損 Iniziato nel 2002 in Microsoft Research ad opera
principalmente di Don Syme
http://blogs.msdn.com/b/dsyme/
http://en.wikipedia.org/wiki/Don_Syme
損 A Don si deve anche limplementazione dei generics nel
CLR 2.0 (usati poi pesantemente in F#)
損 A inizio 2005 viene rilasciata la prima release pubblica di F#
http://blogs.msdn.com/b/dsyme/archive/2005/01/05/346857.aspx
損 Nel 2009 Somasegar annuncia linclusione di F# (2.0) in Visual Studio 2010
http://blogs.msdn.com/b/somasegar/archive/2009/10/09/f-in-vs2010.aspx
損 Il 4 novembre 2010 il source code di F# viene rilasciato come Open Source
http://blogs.msdn.com/b/dsyme/archive/2010/11/04/announcing-the-f-
compiler-library-source-code-drop.aspx
損 Si pu嘆 anche installare sotto Linux e Mac OSX con MONO
http://fsxplat.codeplex.com/
Storia
17. 19/11/2010 www.xedotnet.org 17
損 ...fermo restando che F# 竪 un General Purpose
Language
Implementa anche lapproccio imperativo
損 Alcuni domini importanti
Financial Modeling
Data Mining
Scientific Analisys
Academic
Applicazioni tipiche per F#
18. 損 Shell per lo scripting interattivo
Ottimo per la prototipazione
損 Conciso
損 Type Inference
Strongly Typed
Automatic Generalization (sempre generico, se ha senso)
Poca Type Annotation (attributi)
損 First Class Functions
Currying, Lazy Evaluations
損 Pattern matching
Caratteristiche di F#
19. 19/11/2010 www.xedotnet.org 19
損 Utilizzato in ambito amministrativo, matematico o
Dynamic Languages
Cmd, PowerShell, Mathematica, (Iron)Python, (Iron)Ruby
損 Lutente inserisce i comandi uno alla volta,
eseguendoli
Normalmente, i linguaggi di scripting sono interpretati
F# 竪 compilato
損 Uno scripting 竪 di successo quanto pi湛 semplice 竪
scrivere il codice
In F# 竪 possibile avere la verifica (statica) dei tipi
Scripting Interattivo
20. 19/11/2010 www.xedotnet.org 20
損 Da riga di comando, digitare
fsi.exe
損 Da Visual Studio 2010, due
opzioni
CTRL+ALT+F per una console F#
interactive
Creare un progetto F#, inserire un
file .fsx ed eseguire 束selezioni損 di
codice con ALT+INVIO
Lambiente interattivo
22. 19/11/2010 www.xedotnet.org 22
損 Shell interattiva
損 In una shell
interattiva, i comandi
vengono terminati
con il doppio
carattere ;;
損 it 竪 lultimo valore
calcolato
損 It non 竪 it
F# 竪 Case Sensitive
Shell Interattiva
> 3+4
> 3+4;;
val it : int = 7
>it
val it : int = 7
>It
Script.fsx(3,1): error FS0039: The value
or constructor 'It' is not defined
23. 19/11/2010 www.xedotnet.org 23
損 Liste
損 Tuple
損 Record
損 Array
Tipi di dati
>let lista = [1..10];;
val lista : int list = [1; 2; 3; 4; 5; 6; 7; 8;
9; 10]
>let tupla = (1, "due", 3.0, false);;
val tupla : int * string * float * bool = (1,
"due", 3.0, false)
>let a,b,c,d = tupla;;
val d : bool = false
val c : float = 3.0
val b : string = "due"
val a : int = 1
>type Person = { Name: string; Surname: string; };;
type Person =
{Name: string;
Surname: string;}
>let p = { Name="Mario"; Surname="Rossi" };;
val p : Person = {Name = "Mario";
Surname = "Rossi";}
>let values = [|10; 20; 30|
val values : int [] = [|10; 20; 30|]
25. 19/11/2010 www.xedotnet.org 25
損 let permette di
definire valori
F# applica sempre la
Type Inference (a :
int)
Simile a var in C#...
...ma il feeling 竪 quello
dello scripting...
損 a 竪 un valore, non
una variabile
a 竪 immutabile
Valori, non variabili
> let a = 4;;
val a : int = 4
> let a = 5;;
Script.fsx(5,5): error FS0037: Duplicate
definition of value 'a'
26. 19/11/2010 www.xedotnet.org 26
損 let mutable
permette di definire
valori mutabili
損 a diventa
sostanzialmente una
variabile
損 Motto:
束se proprio serve...損
Valori 束mutabili損, allora variabili
> let mutable a = 4;;
val a : int = 4
> let a = a + 1;;
val a : int = 5
27. 19/11/2010 www.xedotnet.org 27
損 let permette di
definire funzioni
Le funzioni sono valori
Le funzioni associano
ad valori in ingresso
dei valori in uscita
損 Le funzioni sono
valori
Funzioni come valori
> let f x = x + 1;;
val f : int -> int
> f 5;;
val it : int = 6
>
28. 19/11/2010 www.xedotnet.org 28
損 f x si pu嘆 anche
scrivere come x |> f
損 In caso di due
parametri, il parametro
in pipelining 竪 quello
pi湛 a destra
y |> f x
ottimo quando si
usano applicazioni in
sequenza
Pipelining operator
> let incr x = x + 1
val incr : int -> int
> 10 |> incr
val it : int = 11
> let f x y = x*2+y*3
val f : int -> int -> int
> 10 |> f 20
val it : int = 70
>let values = [1..10]
let sumOfValues = values |> List.filter (fun x -> (x % 2 = 0))
|> List.map (fun x -> x*2)
|> List.fold (+) 0
val values : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
val sumOfValues : int = 60
29. 19/11/2010 www.xedotnet.org 29
損 possibile valorizzare
parzialmente i parametri di una
funzione componendo un
nuovo valore (partial function
application)
損 Infatti notiamo che dopo una
let viene sempre mostrato il
formato del valore
損 Il meccanismo si chiama
束currying損
http://en.wikipedia.org/wiki/Cu
rrying
una tecnica che permette di
trasformare una funzione di n
parametri in una 束catena di
funzioni di un solo parametro損
Composition
>let f x y = x + y
>let incr x = f x 1
>incr 5
val f : int -> int -> int
val incr : int -> int
val it : int = 6
31. 19/11/2010 www.xedotnet.org 31
損 Cosa genera questo
programma in F#? (che
non significa niente...)
let a = 4
let mutable b = a + 5
let f x = x + a
let g = f b
損 Se si usa Reflector...
F# e Immutability dal punto di vista di .NET
33. 19/11/2010 www.xedotnet.org 33
損 Anche chiamate
束option types損
損 Simile allereditariet
in OOP
束functional
inheritance損
損 Anche il tipo diventa
un valore
Simile a una Enum???
Discriminated Unions
>type Veicolo =
| Auto
| Moto
| Camion
;;
>let veicolo = Auto;;
val veicolo : Veicolo = Auto
34. 19/11/2010 www.xedotnet.org 34
損 possibile adornare
lalternativa del tipo
con degli attributi
Discriminated Union
>type Nome = string
>type Marca= string
>type Colore = string
>type Veicolo =
| Auto of Colore
| Moto of Marca
| Camion of Nome
>let veicolo = Auto("rossa")
val veicolo : Veicolo = Auto "rossa"
35. 19/11/2010 www.xedotnet.org 35
損 La 束sequenza損 di
informazioni di tipo e di
attributi pu嘆 essere
usata per
束discriminare損 il tipo
損 La sequenza di tipo e di
attributi 竪 un 束pattern損
損 uno dei meccanismi
fondamentali di F#
http://en.wikibooks.org/wiki/F_Sh
arp_Programming/Pattern_Matchi
ng_Basics
Pattern Matching
type Nome = string
type Marca= string
type Colore = string
type Veicolo =
| Auto of Colore
| Moto of Marca
| Camion of Nome
let veicolo = Auto("rossa")
match veicolo with
| Auto(colore) -> printfn "Un' auto %s" colore
| Moto(marca) -> printfn "Una moto %s" marca
| _ -> printfn "un veicolo qualsiasi"
36. 19/11/2010 www.xedotnet.org 36
type Expr =
| Num of int
| Add of Expr * Expr
| Mul of Expr * Expr
| Var of string
let rec Evaluate (env:Map<string,int>) exp =
match exp with
| Num n -> n
| Add (x,y) -> Evaluate env x + Evaluate env y
| Mul (x,y) -> Evaluate env x * Evaluate env y
| Var id -> env.[id]
let envA = Map.ofList [ "a",1 ;
"b",2 ;
"c",3 ]
let expT1 = Add(Var "a",Mul(Num 2,Var "b"))
let resT1 = Evaluate envA expT1
Un esempio evoluto di pattern matching
type Expr =
| Num of int
| Add of Expr * Expr
| Mul of Expr * Expr
| Var of string
val Evaluate : Map<string,int> -> Expr -> int
val envA : Map<string,int> = map [("a", 1); ("b", 2);
("c", 3)]
val expT1 : Expr = Add (Var "a",Mul (Num 2,Var "b"))
val resT1 : int = 5
37. 19/11/2010 www.xedotnet.org 37
損 Osservare cosa F# ha generato a
fronte del codice scritto prima,
descrive molto bene il concetto
di 束declarative programming損
detto allinizio
損 Classi gi implementate (e
spesso lo si faceva a mano)
損 Uso estensivo di:
IEquatable
IStructuralEquatable
IComparable
損 Sono i concetti trovati negli
束anonymous types損 in C# 3.0
損 In C# lo si poteva fare, ma non
siamo mai stati realmente
abituati a farlo
Discriminated Union, Pattern Matching e Reflector
38. 19/11/2010 www.xedotnet.org 38
損 Una funziona viene
dichiarata ricorsiva con
la parola chiave rec
損 lequivalente
funzionale
delliterazione
損 Si ha spesso paura di
usare le funzioni
ricorsive per le
prestazioni e il
束consumo損 dello stack
Ricorsione
> let rec factorial = function
| 0 | 1 -> 1
| n -> n * factorial (n - 1)
> factorial 10
val it : int = 3628800
39. 19/11/2010 www.xedotnet.org 39
損 Tail Call Optimization 竪 una caratteristica del
compilatore F# (e in alcuni casi anche del JITer .NET)
che trasforma una funzione ricorsiva in un ciclo
while se la chiamata ricorsiva 竪 lultima.
損 Questa ottimizzazione risolve il problema dello
stack overflow
損 Bisogna sempre tentare di pensare ad una funzione
affinch竪 sia tail optimizable
Perch竪 il compilatore (o il JITer) non fanno tutto da solo
損 Il TCO 竪 disponibile nel CLR 4.0
Quindi anche in C#!
Tail Recursion
40. 19/11/2010 www.xedotnet.org 40
損 Il codice che 竪
applicabile a pi湛 tipi,
viene
automaticament
generalizzato
損 interessante notare
come il codice
generato dipenda
fortemente da
funzioni standard di
libreria
Automatic Generalization
>let max a b = if a>b then a else b
val max : 'a -> 'a -> 'a when 'a :
comparison
41. 19/11/2010 www.xedotnet.org 41
損 Sono un concetto complicato
損 Permette di definire un DSL
F# mette a disposizione delle parole chiave, integrate nel linguaggio (let,
let!, use, use!, do, do!, for, while if, yield, yield!, return, return!)
束Mappa損 queste parole chiave sui metodi di una classe 束builder損 (Let,
Bind, Using, For, While, if, Combine, Yield, YieldFrom, Return, ReturnFrom)
Questi metodi possono essere implementati da un programma
Quindi un 束workflow損 scritto con quelle parole chiave viene eseguito
come sequenza di metodi delloggetto builder, di cui noi abbiamo
pienamente il controllo
損 un approccio AOP (Aspect Oriented Programming)
http://en.wikipedia.org/wiki/Aspect-oriented_programming
I metodi (Let, Bind, ....) 束osservano損 lesecuzione del programma e
agiscono in background
Ad esempio per un logging...
Computational Workflow
42. 19/11/2010 www.xedotnet.org 42
let bind value1 function1 =
printfn "Bind %A." value1
function1 value1
let result value1 =
printfn "Returning result: %A" value1
fun () -> value1
let delay function1 =
fun () -> function1()
type TraceBuilder() =
member x.Bind(value1, function1) =
bind value1 function1
member x.Return(value1) = result value1
member x.Delay(function1) =
printfn "Starting traced execution."
delay function1
let trace = new TraceBuilder()
let trace1 = trace {
let! x = 7
let! y = 5
let! sum = x + y
return sum
}
trace1()
Tracing Workflow
>val bind : 'a -> ('a -> 'b) -> 'b
val result : 'a -> (unit -> 'a)
val delay : (unit -> 'a) -> unit -> 'a
type TraceBuilder =
class
new : unit -> TraceBuilder
member Bind : value1:'c * function1:('c -> 'd) -> 'd
member Delay : function1:(unit -> 'a) -> (unit -> 'a)
member Return : value1:'b -> (unit -> 'b)
end
val trace : TraceBuilder
Starting traced execution.
val trace1 : (unit -> unit -> int)
Bind 7.
Bind 5.
Bind 12.
Returning result: 12
val it : (unit -> int) = <fun:result@40>
44. 19/11/2010 www.xedotnet.org 44
損 un estensione al Type
system extension
損 Non 竪 invasivo
un meccanismo di
annotazione basato sul
processo di inferenza
損 Non ha costo a runtime
損 Attenzione!
una prima versione
Ci sono diverse cose da
fare
Ma 竪 gi un gran bel
lavoro
Unit di Misura
>[<Measure>]
type m;;
[<Measure>]
type m
>[<Measure>]
type s;;
[<Measure>]
type s
>let space = 10.0<m>;;
val space : float<m> = 10.0
>let time = 2.0<s>;;
val time : float<s> = 2.0
>let speed = space/time;;
val speed : float<m/s> = 5.0
>let acc = space/time/time;;
val acc : float<m/s ^ 2> = 2.5
47. Perch竪 apprendere lapproccio funzionale
損 Maggiore controllo del codice
Minimizzare lo stato (mutable)
Organizzare il codice
Applicazione di Pattern
Esalta limmutabilit dei dati
48. Vale la pena imparare F#?
損 Tutto ci嘆 che si pu嘆 fare in C# lo si pu嘆 fare in F# (almeno, al momento, mi
pare)
multiparadigma (supporta lapproccio imperativo)
Esalta limmutabilit dei dati e la valutazione di espressioni (sembra tutto LINQ!)
interoperabile con .NET
損 Alcune cose sono pi湛 semplici
Applicare i design patterns
Sintassi pi湛 succinta
Task asincroni (workflow)
Operazioni di trasformazione
Computazioni
Domain Specific Languages
Aspect Oriented Programming
損 Alcune cose sono pi湛 complicate
GUI programming
損 C竪 gi un sacco di codice F# in Internet da riusare
49. Libri & Blog
損 Beginning F#
Robert Pickering - APress
http://www.amazon.com/Beginning-F-Robert-
Pickering/dp/1430223898/ref=sr_1_1?ie=UTF8&s=books&qid=1290127128&sr=8-1-spell
Blog: http://strangelights.com/blog/
損 Expert F# 2.0
Don Syme, Adam Granicz, Antonio Cisternino - APress
http://www.amazon.com/Expert-2-0-Experts-Voice-Syme/dp/1430224312/ref=pd_sim_b_3
Blog: http://blogs.msdn.com/b/dsyme/
損 Programming F#
Chris Smith - OReilly
http://www.amazon.com/Programming-comprehensive-writing-complex-
problems/dp/0596153643/ref=pd_bxgy_b_img_b
Blog: http://blogs.msdn.com/b/chrsmith/
損 Real World Functional Programming: With Examples in F# and C#
Tomas Petricek Manning
http://www.amazon.com/Real-World-Functional-Programming-
Examples/dp/1933988924/ref=pd_bxgy_b_img_b
Blog: http://tomasp.net/
損 Professional F#
Ted Neward, Aaron Erickson, Talbott Crowll, Rick Minerich Wrox
http://www.amazon.com/Professional-F-2-0-Ted-
Neward/dp/047052801X/ref=sr_1_1?ie=UTF8&s=books&qid=1290127457&sr=1-1
Blog: http://blogs.tedneward.com/
19/11/2010 www.xedotnet.org 49
50. blog:
email:
web:
twitter:
slideshare:
Link
21 maggio 2010 www.xedotnet.org 50
損 Marco Parenzan
http://blog.codeisvalue.com/
marco.parenzan@libero.it
http://www.codeisvalue.com/
marco_parenzan
http://www.slideshare.com/marco.parenzan