SlideShare a Scribd company logo
1 of 29
Download to read offline
THE TASTE OF
F#I am still Mikhail Shilkov
You can nd me at @MikhailShilkov and http://mikhail.io
FACTS ABOUT F#
.NET language
Functional First
Open Source
  0 1 2 3 4 5 6 7 8 9 x 
0   # # # # 
1   #         # #   
2   # # #   # # # # 
3   #         # #          
4   #  
y
// rect AxB  
// 
// turns on all of the pixels in a rectangle  
// at the top‐left which is A wide and B tall 
// 
// e.g. rect 3x2:
  0 1 2 3 4 5 6 7 8 9 x 
0 
1        
2             
3                   
4  
y
  0 1 2 3 4 5 6 7 8 9 x 
0 # # # 
1 # # #     
2             
3                   
4  
y
// rotate row y=A by B  
// 
// shifts (with cycle) all of the pixels  
// in row A right by B pixels 
// 
// e.g. rotate row y=1 by 2
  0 1 2 3 4 5 6 7 8 9 x 
0 # # # 
1 # # #     
2             
3                   
4  
y
  0 1 2 3 4 5 6 7 8 9 x 
0 # # # 
1     # # #     
2             
3                   
4  
y
// rotate column x=A by B  
// 
// shifts (with cycle) all of the pixels  
// in column A down by B pixels 
// 
// e.g. rotate column x=2 by 4
  0 1 2 3 4 5 6 7 8 9 x 
0 # # # 
1     # # #     
2             
3                   
4  
y
  0 1 2 3 4 5 6 7 8 9 x 
0 # # # 
1       # #     
2             
3                   
4     # 
y
rect 1x1 
rotate row y=0 by 5 
rect 1x1 
rotate row y=0 by 6 
rect 1x1 
rotate row y=0 by 5 
rect 1x1 
rotate row y=0 by 2 
rect 1x1 
rotate row y=0 by 5 
rect 2x1 
rotate row y=0 by 2 
rect 1x1 
...
let Width = 10  
// val Width : int = 10 
 
let Height = 5  
// val Height : int = 5
type Pixel = int * int 
 
let pixel = (5, 2)  
// val pixel : int * int = (5, 2)
  0 1 2 3 4 5 6 7 8 9 x 
0  
1  
2           # 
3  
4  
y
type Screen = Set<Pixel> 
 
let screen = set [ (2, 1); (5, 2); (8, 3) ] 
// val screen : Set<int * int> = set [(2, 1); ...]
  0 1 2 3 4 5 6 7 8 9 x 
0 
1     #  
2           # 
3                 # 
4  
y
Set.empty 
Set.add element set 
Set.filter predicate set 
Set.union set1 set2 
Set.map f set
let emptyScreen = Set.empty 
 
let fullScreen =  
  seq { for x in 0..Width‐1 do  
        for y in 0..Height‐1 ‐> x, y } 
  |> Set.ofSeq
  0 1 2 3 4 5 6 7 8 9 x 
0 
1        
2             
3                   
4  
y
  0 1 2 3 4 5 6 7 8 9 x 
0 # # # # # # # # # # 
1 # # # # # # # # # # 
2 # # # # # # # # # # 
3 # # # # # # # # # # 
4 # # # # # # # # # # 
y
let turnOnOne (x, y) screen = 
  Set.add (x, y) screen 
 
// val turnOnOne : 
//  x:'a * y:'b ‐> screen:Set<'a * 'b> ‐> Set<'a * 'b> 
//    when 'a : comparison and 'b : comparison 
 
let screen2 = turnOnOne (1, 4) screen
  0 1 2 3 4 5 6 7 8 9 x 
0 
1     #  
2           # 
3                 # 
4  
y
  0 1 2 3 4 5 6 7 8 9 x 
0 
1     #  
2           # 
3                 # 
4   # 
y
let turnOn predicate screen = 
  let filtered = Set.filter predicate fullScreen 
  Set.union screen filtered 
 
// val turnOn : f:(int * int ‐> bool) ‐> 
// screen:Set<int * int> ‐> Set<int * int>
let turnOn predicate screen = 
  fullScreen 
  |> Set.filter predicate 
  |> Set.union screen 
 
// val turnOn : f:(int * int ‐> bool) ‐> 
// screen:Set<int * int> ‐> Set<int * int>
let turnOnRect (xmin, ymin) (xmax, ymax) screen = 
  let isInRect (x, y) =  
    x >= xmin && x <= xmax  
    && y >= ymin && y <= ymax 
  turnOn isInRect screen 
 
// val turnOnRect : 
//  xmin:int * ymin:int ‐> xmax:int * ymax:int ‐> 
//    screen:Set<int * int> ‐> Set<int * int>
let screen3 = turnOnRect (2, 1) (3, 4) screen2 
 
// val screen3 : Set<int * int> = set [ ... ]
  0 1 2 3 4 5 6 7 8 9 x 
0 
1     #  
2           # 
3                 # 
4   # 
y
  0 1 2 3 4 5 6 7 8 9 x 
0 
1     # # 
2     # #   # 
3     # #         # 
4   # # # 
y
let move f screen = 
  Set.map f screen 
 
// val move : 
//  f:('a ‐> 'b) ‐> screen:Set<'a> ‐> Set<'b> 
//    when 'a : comparison and 'b : comparison
let rotateRow index by screen = 
  let mapAt (x, y) = 
    if y = index then (x + by) % Width, y  
    else x, y   
  move mapAt screen 
 
// val rotateRow : 
//   index:'a ‐> by:int ‐>  
//     screen:Set<int * 'a> ‐> Set<int * 'a> 
//       when 'a : comparison
let screen4 = rotateRow 3 2 screen3 
 
// val screen4 : Set<int * int> = set [ ... ]
  0 1 2 3 4 5 6 7 8 9 x 
0 
1     # # 
2     # #   # 
3     # #         # 
4   # # # 
y
  0 1 2 3 4 5 6 7 8 9 x 
0 
1     # # 
2     # #   # 
3 #       # #         
4   # # # 
y
let rotateColumn index by screen = 
  let mapAt (x, y) = 
    if x = index then x, (y + by) % Height  
    else x, y   
  move mapAt screen 
 
// val rotateColumn : 
//   index:'a ‐> by:int ‐>  
//     screen:Set<int * 'a> ‐> Set<int * 'a> 
//       when 'a : comparison  
type Instruction = 
  | Rect of width: int * height: int 
  | RotateRow of index: int * by: int 
  | RotateColumn of index: int * by: int
let execute screen instruction =  
  match instruction with 
  | Rect (w, h) ‐> turnOnRect (0, 0) (w‐1, h‐1) screen 
  | RotateRow (i, by) ‐> rotateRow i by screen 
  | RotateColumn (i, by) ‐> rotateColumn i by screen
 
// val execute : 
//   screen:Set<int * int> ‐> instruction:Instruction  
//   ‐> Set<int * int>
let rec step screen instructions = 
  match instructions with 
  | [] ‐> screen 
  | instruction :: others ‐>  
    let newScreen = execute screen instruction 
    step newScreen others 
 
let solve1 instructions =  
  step Set.empty instructions
let solve2 instructions = 
 List.fold execute Set.empty instructions
DEMO
WHAT WE SAW
Strong types, cheap to create
Low overhead, no boilerplate
Reusable patterns and data structures
"The pit of functional success"
THANKS!Mikhail Shilkov
You can nd me at @MikhailShilkov and http://mikhail.io

More Related Content

Viewers also liked

Designing with Capabilities
Designing with CapabilitiesDesigning with Capabilities
Designing with CapabilitiesScott Wlaschin
 
Real-World Functional Programming @ Incubaid
Real-World Functional Programming @ IncubaidReal-World Functional Programming @ Incubaid
Real-World Functional Programming @ IncubaidNicolas Trangez
 
Functional programming
Functional programmingFunctional programming
Functional programmingHideshi Ogoshi
 
Slick 3.0 functional programming and db side effects
Slick 3.0   functional programming and db side effectsSlick 3.0   functional programming and db side effects
Slick 3.0 functional programming and db side effectsJoost de Vries
 
16 logical programming
16 logical programming16 logical programming
16 logical programmingjigeno
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Scott Wlaschin
 
Science and software development
Science and software developmentScience and software development
Science and software developmentRobert Pickering
 
Designing with capabilities (DDD-EU 2017)
Designing with capabilities (DDD-EU 2017)Designing with capabilities (DDD-EU 2017)
Designing with capabilities (DDD-EU 2017)Scott Wlaschin
 
Thirteen ways of looking at a turtle
Thirteen ways of looking at a turtleThirteen ways of looking at a turtle
Thirteen ways of looking at a turtleScott Wlaschin
 
Functional Programming in C# and F#
Functional Programming in C# and F#Functional Programming in C# and F#
Functional Programming in C# and F#Alfonso Garcia-Caro
 
[FT-11][ltchen] A Tale of Two Monads
[FT-11][ltchen] A Tale of Two Monads[FT-11][ltchen] A Tale of Two Monads
[FT-11][ltchen] A Tale of Two MonadsFunctional Thursday
 
Streaming ETL With Akka.NET
Streaming ETL With Akka.NETStreaming ETL With Akka.NET
Streaming ETL With Akka.NETpetabridge
 
Distributed Transactions in Akka.NET
Distributed Transactions in Akka.NETDistributed Transactions in Akka.NET
Distributed Transactions in Akka.NETpetabridge
 
Enterprise Tic-Tac-Toe
Enterprise Tic-Tac-ToeEnterprise Tic-Tac-Toe
Enterprise Tic-Tac-ToeScott Wlaschin
 
An introduction to property based testing
An introduction to property based testingAn introduction to property based testing
An introduction to property based testingScott Wlaschin
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slidesOCaml
 

Viewers also liked (20)

Designing with Capabilities
Designing with CapabilitiesDesigning with Capabilities
Designing with Capabilities
 
Doge-driven design
Doge-driven designDoge-driven design
Doge-driven design
 
Real-World Functional Programming @ Incubaid
Real-World Functional Programming @ IncubaidReal-World Functional Programming @ Incubaid
Real-World Functional Programming @ Incubaid
 
The Theory of Chains
The Theory of ChainsThe Theory of Chains
The Theory of Chains
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Slick 3.0 functional programming and db side effects
Slick 3.0   functional programming and db side effectsSlick 3.0   functional programming and db side effects
Slick 3.0 functional programming and db side effects
 
Swift vs. Language X
Swift vs. Language XSwift vs. Language X
Swift vs. Language X
 
16 logical programming
16 logical programming16 logical programming
16 logical programming
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013
 
Science and software development
Science and software developmentScience and software development
Science and software development
 
Designing with capabilities (DDD-EU 2017)
Designing with capabilities (DDD-EU 2017)Designing with capabilities (DDD-EU 2017)
Designing with capabilities (DDD-EU 2017)
 
Thirteen ways of looking at a turtle
Thirteen ways of looking at a turtleThirteen ways of looking at a turtle
Thirteen ways of looking at a turtle
 
Functional Programming in C# and F#
Functional Programming in C# and F#Functional Programming in C# and F#
Functional Programming in C# and F#
 
[FT-11][ltchen] A Tale of Two Monads
[FT-11][ltchen] A Tale of Two Monads[FT-11][ltchen] A Tale of Two Monads
[FT-11][ltchen] A Tale of Two Monads
 
Streaming ETL With Akka.NET
Streaming ETL With Akka.NETStreaming ETL With Akka.NET
Streaming ETL With Akka.NET
 
Distributed Transactions in Akka.NET
Distributed Transactions in Akka.NETDistributed Transactions in Akka.NET
Distributed Transactions in Akka.NET
 
Enterprise Tic-Tac-Toe
Enterprise Tic-Tac-ToeEnterprise Tic-Tac-Toe
Enterprise Tic-Tac-Toe
 
An introduction to property based testing
An introduction to property based testingAn introduction to property based testing
An introduction to property based testing
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slides
 

More from ☁️ Mikhail Shilkov

More from ☁️ Mikhail Shilkov (8)

Monads Explained for OOP Developers
Monads Explained for OOP DevelopersMonads Explained for OOP Developers
Monads Explained for OOP Developers
 
Performance Tales of Serverless - CloudNative London 2018
Performance Tales of Serverless - CloudNative London 2018Performance Tales of Serverless - CloudNative London 2018
Performance Tales of Serverless - CloudNative London 2018
 
Performance Tales of Serverless
Performance Tales of ServerlessPerformance Tales of Serverless
Performance Tales of Serverless
 
Monads Explained for OOP Developers
Monads Explained for OOP DevelopersMonads Explained for OOP Developers
Monads Explained for OOP Developers
 
Azure F#unctions
Azure F#unctionsAzure F#unctions
Azure F#unctions
 
Azure F#unctions
Azure F#unctionsAzure F#unctions
Azure F#unctions
 
Event Driven Applications in F#
Event Driven Applications in F#Event Driven Applications in F#
Event Driven Applications in F#
 
Why Learn F# and Functional Programming
Why Learn F# and Functional ProgrammingWhy Learn F# and Functional Programming
Why Learn F# and Functional Programming
 

Recently uploaded

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxnada99848
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 

Recently uploaded (20)

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptx
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 

The taste of F#