SlideShare a Scribd company logo
1 of 77
Download to read offline
Swift Rocks 2!
Alexander Voronov iOS Developer @ Stanfy
Swift
Going Functional
What is Functional
Programming?
Functional Programming
Functional Programming
• Higher-order functions
Functional Programming
• Higher-order functions
• Immutable states & pure functions
Functional Programming
• Higher-order functions
• Immutable states & pure functions
• Modularity
Functional Programming
• Higher-order functions
• Immutable states & pure functions
• Modularity
• Types
Swift Power
Swift Power
Swift Power
• First Class Functions
Swift Power
• First Class Functions
• Currying
Swift Power
• First Class Functions
• Currying
• Generics
Swift Power
• First Class Functions
• Currying
• Generics
• Type Inference
Swift Power
• First Class Functions
• Currying
• Generics
• Type Inference
• Enums
First Class Functions
func add(x: Int) -> Int -> Int {
return { y in y + x }
}
let addOne = add(1)
addOne(2)
// 3
First Class Functions
func addTwo(x: Int) -> Int {
return x + 2
}
(1...5).map(addTwo)
// [3, 4, 5, 6, 7]
Currying
func add(a: Int)(b: Int) -> Int {
return a + b
}
let addOne = add(1)
let xs = 1...5
xs.map(addOne)
// [2, 3, 4, 5, 6]
Currying
func curry<A, B, C>(f: (A, B) -> C)
-> A -> B -> C {
return { a in { b in f(a, b) } }
}
Generics
func printEach<T: SequenceType>(items: T) {
for item in items {
print(item)
}
}
printEach(1...5)
printEach(["one", "two", "three"])
Type Inference
let x = 42.0
x.dynamicType // Double
x is Double // true
Type Inference
var xs = [1, 5, 2, 4, 3]
xs.sort(<)
print(xs)
// [1, 2, 3, 4, 5]
Type Inference
var xs = [1, 5, 2, 4, 3]
xs.sort(<)
print(xs)
// [1, 2, 3, 4, 5]
Type Inference
let xs = [1, 5, 2, 4, 3]
let ys = xs.sorted(<)
print(xs) // [1, 5, 2, 4, 3]
print(ys) // [1, 2, 3, 4, 5]
Type Inference
let xs = [1, 5, 2, 4, 3]
let ys = xs.sorted(<)
print(xs) // [1, 5, 2, 4, 3]
print(ys) // [1, 2, 3, 4, 5]
Enumerations
enum Fruit: String {
case Apple = "apple"
case Banana = "banana"
case Cherry = "cherry"
}
Fruit.Apple.rawValue
// "apple"
Enumerations
enum ValidationResult {
case Valid
case NotValid(NSError)
}
Enumerations
enum MyApi {
case xAuth(String, String)
case GetUser(Int)
}
extension MyApi: MoyaTarget {
var baseURL: NSURL { return NSURL(string: "")! }
var path: String {
switch self {
case .xAuth: return "/authorise"
case .GetUser(let id): return "/user/(id)"
}
}
}
https://github.com/Moya/Moya
Optionals
enum Optional<T> {
case None
case Some(T)
}
var x = 5
x = nil
// Error!
Optional Chaining
struct Dog { var name: String }
struct Person { var dog: Dog? }
let dog = Dog(name: "Dodge")
let person = Person(dog: dog)
let dogName = person.dog?.name
Optional Chaining
struct Dog { var name: String }
struct Person { var dog: Dog? }
let dog = Dog(name: "Dodge")
let person = Person(dog: dog)
let dogName = person.dog?.name
Optional Chaining
Functors,
Applicatives,
Monads
Functors, Applicatives,
Monads
let x = 2
x + 3 // == 5
Functors, Applicatives,
Monads
let x = 2
x + 3 // == 5
let y = Optional(2)
Functors
let y = Optional(2)
y + 3
// Error!
// Value of optional type
// Optional<Int> not unwrapped
Functors
let y = Optional(2)
y.map { $0 + 3 }
// Optional(5)
Functors
func map<U>(f: T -> U) -> U? {
switch self {
case .Some(let x):
return f(x)
case .None:
return .None
}
}
Functors
infix operator <^> {
associativity left
}
func <^><T, U>(f: T -> U, a: T?) -> U? {
return a.map(f)
}
Functors
func <^><T, U>(f: T -> U, a: T?) -> U? {
return a.map(f)
}
let addOne = { $0 + 1 }
addOne <^> Optional(2) // Optional(3)
Applicative
func apply<U>(f: (T -> U)?) -> U? {
switch f {
case .Some(let someF):
return self.map(someF)
case .None:
return .None
}
}
Applicatives
infix operator <*> { associativity left }
func <*><T, U>(f: (T -> U)?, a: T?) -> U? {
return a.apply(f)
}
Applicatives
infix operator <*> { associativity left }
func <*><T, U>(f: (T -> U)?, a: T?) -> U? {
return a.apply(f)
}
func add(a: Int)(b: Int) -> Int {
return a + b
}
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
let a = add <^> Optional(2)
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
let a = add <^> Optional(2)
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
let a = add <^> Optional(2)
let a: (b: Int) -> Int?
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
f(g(4, 2))
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
f(g(4, 2))
g: (T, T) -> T?
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
f(g(4, 2))
g: (T, T) -> T?
g(4, 2) >>- { f($0) }
Monads
>>-==
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
Monads
func flatten<U>(a: U??) -> U? {
switch a {
case .Some(let someA):
return someA
case .None:
return .None
}
}
Monads
func flatMap<U>(f: T -> U?) -> U? {
return flatten(map(f))
}
Monads
func flatMap<U>(f: T -> U?) -> U? {
return flatten(map(f))
}
func map<U>(f: T -> U) -> U?
Monads
func flatMap<U>(f: T -> U?) -> U? {
return flatten(map(f))
}
func map<U>(f: T -> U) -> U?
Monads
func flatMap<U>(f: T -> U?) -> U? {
return flatten(map(f))
}
func map<U>(f: T -> U) -> U?
func map<U?>(f: T -> U?) -> U??
Monads
infix operator >>- { associativity left }
func >>-<T, U>(a: T?, f: T -> U?) -> U? {
return a.flatMap(f)
}
Monads
func half(a: Int) -> Int? {
return a % 2 == 0
? a / 2
: .None
}
Monads
func half(a: Int) -> Int? {
return a % 2 == 0
? a / 2
: .None
}
Optional(8) >>- half >>- half
// Optional(2)
Monad Laws
• Left Identity
• Right Identity
• Associativity
Left Identity Law
let f = { Optional($0 + 1) }
let a = 1
let x = Optional(a) >>- f
let y = f(a)
x == y
Right Identity Law
func create<T>(value: T) -> T? {
return Optional(value)
}
let x = Optional(1) >>- create
let y = Optional(1)
x == y
Associativity Law
let double = { Optional(2 * $0) }
let triple = { Optional(3 * $0) }
let x = Optional(1) >>- double >>- triple
let y = Optional(1) >>- { double($0) >>- triple }
let z = { Optional(1) >>- double }() >>- triple
x == y
y == z
Recap
Functor
map<U>(f: T -> U) -> M<U>
Applicative
apply<U>(f: M<(T -> U)>) -> M<U>
Monad
flatMap<U>(f: T -> M<U>) -> M<U>
Pipes & Railways
@ScottWlaschin
Pipes
infix operator |> { associativity left }
public func |> <T, U>(x: T, f: T -> U) -> U {
return f(x)
}
let addTwo = { $0 + 2 }
let prodThree = { $0 * 3 }
5 |> addTwo |> prodThree |> print
// 21
Pipes
let transformedX = x
|> addTwo
|> prodThree
|> increment
|> square
|> pow
VS
(pow(square(increment(prodThree(addTwo(x))))))
Railways
http://fsharpforfunandprofit.com/posts/recipe-part2/
Argo JSON Parser
+
Argo Runes
Argo Example
extension Model: Decodable {
static func decode(json: JSON) -> Decoded<Model> {
return Model.create
<^> json <| "id"
<*> json <| "room"
<*> json <| "guest_name"
<*> json <| "status"
<*> json <| "label"
<*> json <|? "user_comment"
<*> json <| ["channel", "label"]
<*> json <| "severity"
<*> json <|| "epochs"
<*> json <|| "body"
}
}
Argo Example
let entities: [Model]?
entities = data?.json()
>>- { $0["entities"] }
>>- decode
Where Next?
Where Next
• Functors, Applicatives and Monads in Pictures
• Railway Oriented Programming
• Functional Programming in Swift (Objc.io)
• Argo
• Swiftz
• RxSwift
• ReactiveCocoa-3.0
• Haskell, F#, Erlang, Elm
Thanks!
Comments / Questions?
@aleks_voronova-voronov

More Related Content

What's hot

Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기진성 오
 
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...John De Goes
 
Scala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecScala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecLoïc Descotte
 
Haskell for data science
Haskell for data scienceHaskell for data science
Haskell for data scienceJohn Cant
 
One Monad to Rule Them All
One Monad to Rule Them AllOne Monad to Rule Them All
One Monad to Rule Them AllJohn De Goes
 
Scalaz 8: A Whole New Game
Scalaz 8: A Whole New GameScalaz 8: A Whole New Game
Scalaz 8: A Whole New GameJohn De Goes
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocamlpramode_ce
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayKevlin Henney
 
Functor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadFunctor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadOliver Daff
 
Collection v3
Collection v3Collection v3
Collection v3Sunil OS
 
The Death of Final Tagless
The Death of Final TaglessThe Death of Final Tagless
The Death of Final TaglessJohn De Goes
 
Fp in scala part 2
Fp in scala part 2Fp in scala part 2
Fp in scala part 2Hang Zhao
 
Refactoring Functional Type Classes
Refactoring Functional Type ClassesRefactoring Functional Type Classes
Refactoring Functional Type ClassesJohn De Goes
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?osfameron
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to ImmutabilityKevlin Henney
 
ITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingIstanbul Tech Talks
 

What's hot (20)

Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
 
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
 
Scala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecScala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar Prokopec
 
Haskell for data science
Haskell for data scienceHaskell for data science
Haskell for data science
 
One Monad to Rule Them All
One Monad to Rule Them AllOne Monad to Rule Them All
One Monad to Rule Them All
 
Scalaz 8: A Whole New Game
Scalaz 8: A Whole New GameScalaz 8: A Whole New Game
Scalaz 8: A Whole New Game
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocaml
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went Away
 
Functor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadFunctor, Apply, Applicative And Monad
Functor, Apply, Applicative And Monad
 
Collection v3
Collection v3Collection v3
Collection v3
 
The Death of Final Tagless
The Death of Final TaglessThe Death of Final Tagless
The Death of Final Tagless
 
MTL Versus Free
MTL Versus FreeMTL Versus Free
MTL Versus Free
 
A taste of Functional Programming
A taste of Functional ProgrammingA taste of Functional Programming
A taste of Functional Programming
 
Fp in scala part 2
Fp in scala part 2Fp in scala part 2
Fp in scala part 2
 
Refactoring Functional Type Classes
Refactoring Functional Type ClassesRefactoring Functional Type Classes
Refactoring Functional Type Classes
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?
 
Hammurabi
HammurabiHammurabi
Hammurabi
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to Immutability
 
ITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function Programming
 

Viewers also liked

Олександр Краковецький - UWP
Олександр Краковецький - UWPОлександр Краковецький - UWP
Олександр Краковецький - UWPHackraft
 
Ахмед Сулейман - How to boost mobile product development speed
Ахмед Сулейман - How to boost  mobile product  development speedАхмед Сулейман - How to boost  mobile product  development speed
Ахмед Сулейман - How to boost mobile product development speedHackraft
 
Яна Пролис - Team lead. Человек и пароход
Яна Пролис - Team lead. Человек и пароходЯна Пролис - Team lead. Человек и пароход
Яна Пролис - Team lead. Человек и пароходHackraft
 
Hardware workshop with Lampa (Arduino intro course)
Hardware workshop with Lampa (Arduino intro course)Hardware workshop with Lampa (Arduino intro course)
Hardware workshop with Lampa (Arduino intro course)Hackraft
 
Іван Соболєв - Debugging recruitment communications
Іван Соболєв - Debugging recruitment communicationsІван Соболєв - Debugging recruitment communications
Іван Соболєв - Debugging recruitment communicationsHackraft
 
Любомир Косенко - Freelance vs Office
Любомир Косенко - Freelance vs OfficeЛюбомир Косенко - Freelance vs Office
Любомир Косенко - Freelance vs OfficeHackraft
 
Мария Крючок - Sexy twitter
Мария Крючок -   Sexy twitterМария Крючок -   Sexy twitter
Мария Крючок - Sexy twitterHackraft
 

Viewers also liked (7)

Олександр Краковецький - UWP
Олександр Краковецький - UWPОлександр Краковецький - UWP
Олександр Краковецький - UWP
 
Ахмед Сулейман - How to boost mobile product development speed
Ахмед Сулейман - How to boost  mobile product  development speedАхмед Сулейман - How to boost  mobile product  development speed
Ахмед Сулейман - How to boost mobile product development speed
 
Яна Пролис - Team lead. Человек и пароход
Яна Пролис - Team lead. Человек и пароходЯна Пролис - Team lead. Человек и пароход
Яна Пролис - Team lead. Человек и пароход
 
Hardware workshop with Lampa (Arduino intro course)
Hardware workshop with Lampa (Arduino intro course)Hardware workshop with Lampa (Arduino intro course)
Hardware workshop with Lampa (Arduino intro course)
 
Іван Соболєв - Debugging recruitment communications
Іван Соболєв - Debugging recruitment communicationsІван Соболєв - Debugging recruitment communications
Іван Соболєв - Debugging recruitment communications
 
Любомир Косенко - Freelance vs Office
Любомир Косенко - Freelance vs OfficeЛюбомир Косенко - Freelance vs Office
Любомир Косенко - Freelance vs Office
 
Мария Крючок - Sexy twitter
Мария Крючок -   Sexy twitterМария Крючок -   Sexy twitter
Мария Крючок - Sexy twitter
 

Similar to Swift Rocks #2: Going functional

Stanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy MadCode Meetup #9: Functional Programming 101 with SwiftStanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy MadCode Meetup #9: Functional Programming 101 with SwiftStanfy
 
Swift the implicit parts
Swift the implicit partsSwift the implicit parts
Swift the implicit partsMaxim Zaks
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meetMario Fusco
 
関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)riue
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collectionsMyeongin Woo
 
A Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOA Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOJorge Vásquez
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala Knoldus Inc.
 
Build a compiler in 2hrs - NCrafts Paris 2015
Build a compiler in 2hrs -  NCrafts Paris 2015Build a compiler in 2hrs -  NCrafts Paris 2015
Build a compiler in 2hrs - NCrafts Paris 2015Phillip Trelford
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...PROIDEA
 
Why Haskell Matters
Why Haskell MattersWhy Haskell Matters
Why Haskell Mattersromanandreg
 
Idioms in swift 2016 05c
Idioms in swift 2016 05cIdioms in swift 2016 05c
Idioms in swift 2016 05cKaz Yoshikawa
 
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin WayTDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Waytdc-globalcode
 
Five Languages in a Moment
Five Languages in a MomentFive Languages in a Moment
Five Languages in a MomentSergio Gil
 
High Wizardry in the Land of Scala
High Wizardry in the Land of ScalaHigh Wizardry in the Land of Scala
High Wizardry in the Land of Scaladjspiewak
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#bleis tift
 
Frege is a Haskell for the JVM
Frege is a Haskell for the JVMFrege is a Haskell for the JVM
Frege is a Haskell for the JVMjwausle
 

Similar to Swift Rocks #2: Going functional (20)

Stanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy MadCode Meetup #9: Functional Programming 101 with SwiftStanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy MadCode Meetup #9: Functional Programming 101 with Swift
 
Swift the implicit parts
Swift the implicit partsSwift the implicit parts
Swift the implicit parts
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
 
関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collections
 
A Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOA Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIO
 
Monads in Swift
Monads in SwiftMonads in Swift
Monads in Swift
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala
 
Build a compiler in 2hrs - NCrafts Paris 2015
Build a compiler in 2hrs -  NCrafts Paris 2015Build a compiler in 2hrs -  NCrafts Paris 2015
Build a compiler in 2hrs - NCrafts Paris 2015
 
Scala 2 + 2 > 4
Scala 2 + 2 > 4Scala 2 + 2 > 4
Scala 2 + 2 > 4
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
Why Haskell Matters
Why Haskell MattersWhy Haskell Matters
Why Haskell Matters
 
Idioms in swift 2016 05c
Idioms in swift 2016 05cIdioms in swift 2016 05c
Idioms in swift 2016 05c
 
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin WayTDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
 
Five Languages in a Moment
Five Languages in a MomentFive Languages in a Moment
Five Languages in a Moment
 
High Wizardry in the Land of Scala
High Wizardry in the Land of ScalaHigh Wizardry in the Land of Scala
High Wizardry in the Land of Scala
 
Practical cats
Practical catsPractical cats
Practical cats
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#
 
Frege is a Haskell for the JVM
Frege is a Haskell for the JVMFrege is a Haskell for the JVM
Frege is a Haskell for the JVM
 

Recently uploaded

Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
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
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noidabntitsolutionsrishis
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
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
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
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
 
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
 

Recently uploaded (20)

Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
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
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
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
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 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...
 
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...
 

Swift Rocks #2: Going functional