SlideShare a Scribd company logo
1 of 64
Download to read offline
COMPOSABLE CACHING
GEORGE TSIFRIKAS
WHY?
RAM
DISK
NETWORK
0 100 200 300 400
Ram
Disk
Network
Key Value
Error
Miss
Miss
Value
Value
IMAGE CACHING
Ram UIImage
Disk JPEG
Network Request
URL UIImage
Error
Miss
Miss
Value
Value
IMAGE CACHING
Ram Model
Disk JSON
Network Request
URL Model
Error
Miss
Miss
Value
Value
MODEL CACHING
CACHE
protocol Cache {
}
CACHE
protocol Cache {
associatedtype Key
associatedtype Value
}
CACHE
protocol Cache {
associatedtype Key
associatedtype Value
func get(_ key: Key) -> Observable<Value>
func set(_ value: Value, for key: Key) -> Observable<Void>
}
DISK CACHE
class DiskCache<K, V>: Cache
where K: StringConvertible, V: NSCoding {
typealias Key = K
typealias Value = V
func get(_ key: Key) -> Observable<Value> {}
func set(_ value: Value, for key: Key) -> Observable<Void> {}
}
NETWORK CACHE
class NetworkCache: Cache {
typealias Key = URLRequest
typealias Value = NSData
func get(_ key: URLRequest) -> Observable<NSData> {}
func set(_ value: Value, for key: Key) -> Observable<Void> {
return .just(())
}
}
NETWORK CACHE
protocol Fetcher: Cache {}
extension Fetcher {
func set(_ value: Value, for key: Key) -> Observable<Void> {
return .just(())
}
}
NETWORK CACHE
class NetworkCache: Cache {
typealias Key = URLRequest
typealias Value = NSData
func get(_ key: URLRequest) -> Observable<NSData> {}
func set(_ value: Value, for key: Key) -> Observable<Void> {
return .just(())
}
}
NETWORK FETCHER
class NetworkFetcher: Fetcher {
typealias Key = URLRequest
typealias Value = NSData
func get(_ key: URLRequest) -> Observable<NSData> {}
}
CACHE COMPOSITION
Ram
Disk
Network
Key Value
Error
Miss
Miss
Value
Value
CACHE
Ram
Disk
Network
Key Value
Error
Miss
Miss
Value
Value
CACHE
Ram
Disk
Network
Key Value
Error
Miss
Miss
Value
Value
CACHE
Ram
Disk
Network
Key Value
Error
Miss
Miss
Value
Value
CACHE
Ram
Disk
Network
Key Value
Error
Miss
Miss
Value
Value
CACHE
Ram
Disk
Network
Key Value
Error
Miss
Miss
Value
Value
CACHE
Ram
Disk
Miss Value
COMPOSITION
Network
Key Value
Error
Miss Value
COMPOSITION
extension Cache {
public func compose<B: Cache>(other: B)
-> CompositeCache<Key, Value> where Key == B.Key, Value == B.Value {
return CompositeCache(
get: { (key: Key) -> Observable<Value?> in
},
set: {value, key in
})
}
}
COMPOSITION
extension Cache {
public func compose<B: Cache>(other: B)
-> CompositeCache<Key, Value> where Key == B.Key, Value == B.Value {
return CompositeCache(
get: { (key: Key) -> Observable<Value?> in
return self.get(key)
},
set: {value, key in
})
}
}
COMPOSITION
extension Cache {
public func compose<B: Cache>(other: B)
-> CompositeCache<Key, Value> where Key == B.Key, Value == B.Value {
return CompositeCache(
get: { (key: Key) -> Observable<Value?> in
return self.get(key)
.flatMap { (value) -> Observable<Value?> in
if let foundValue = value {
return .just(foundValue)
}
}
},
set: {value, key in
})
}
}
COMPOSITION
extension Cache {
public func compose<B: Cache>(other: B)
-> CompositeCache<Key, Value> where Key == B.Key, Value == B.Value {
return CompositeCache(
get: { (key: Key) -> Observable<Value?> in
return self.get(key)
.flatMap { (value) -> Observable<Value?> in
if let foundValue = value {
return .just(foundValue)
}
return other.get(key)
.flatMap({ (valueFromOther) -> Observable<Value?> in
if let valueFromOther = valueFromOther {
_ = self.set(valueFromOther, for: key).subscribe()
}
return .just(valueFromOther)
})
}
},
set: {value, key in
})
}
}
COMPOSITION
extension Cache {
public func compose<B: Cache>(other: B)
-> CompositeCache<Key, Value> where Key == B.Key, Value == B.Value {
return CompositeCache(
get: { (key: Key) -> Observable<Value?> in
return self.get(key)
.flatMap { (value) -> Observable<Value?> in
if let foundValue = value {
return .just(foundValue)
}
return other.get(key)
.flatMap({ (valueFromOther) -> Observable<Value?> in
if let valueFromOther = valueFromOther {
_ = self.set(valueFromOther, for: key).subscribe()
}
return .just(valueFromOther)
})
}
},
set: {value, key in
return .zip(self.set(value, for: key),
other.set(value, for: key)) { _,_ in }
})
}
}
Ram
Disk
Miss Value
COMPOSITION
Network
Key Value
Error
Miss Value
COMPOSITION
let ramDiskCache = ramCache.compose(other: diskCache)
Ram
Disk
Miss Value
COMPOSITION
Network

Key Value
Error
Miss Value
COMPOSITION
let ramDiskCache = ramCache.compose(other: diskCache)
.compose(other: networkFetcher)
COMPOSITION
let ramDiskCache = (ramCache + diskCache) + networkFetcher
COMPOSITION
let ramDiskCache = (ramCache + diskCache) + networkFetcher
let ramDiskCache = ramCache + (diskCache + networkFetcher)
// vs
COMPOSITION
let ramDiskCache = (ramCache + diskCache) + networkFetcher
let ramDiskCache = ramCache + (diskCache + networkFetcher)
// Equivalent to
Associative
COMPOSITION
Identity
Foo cache
Miss Value
Always misses
Identity
Foo cache
Miss Value
COMPOSITION
Always misses
Foo cache
Identity
Miss Value
Always misses
=
COMPOSITION
Associativity
Identity element
} Monoid
https://en.wikipedia.org/wiki/Monoid
MONOID?? WHAT?
COMPOSITION
extension Cache {
public func compose<B: Cache>(other: B)
-> CompositeCache<Key, Value> where Key == B.Key, Value == B.Value {
return CompositeCache(
get: { (key: Key) -> Observable<Value?> in
},
set: {value, key in
})
}
}
Ram
Disk
Miss Value
COMPOSITION
Network

Key Value
Error
Miss Value
Ram
Disk
Miss Value
COMPOSITION
Network

Key Value
Error
Miss Value
ADAPT
ADAPT
extension Cache {
func mapValues<V2>(f: @escaping (Value) throws -> V2,
fInv: @escaping (V2) throws -> Value)
-> CompositeCache<Key, V2> {}
}
ADAPT
let imageDiskCache = diskCache.mapValues(
f: { (data) -> UIImage in
return UIImage(data: data as Data)!
}) { (image) -> NSData in
return UIImagePNGRepresentation(image) as! NSData
}
Ram
Disk
Network

Key Value
Error
ADAPT, USER PROFILE EXAMPLE
Ram
Disk
Network

ADAPT, USER PROFILE EXAMPLE
Ram
Disk
Network

ADAPT, USER PROFILE EXAMPLE
Ram
Disk
Network

ADAPT, USER PROFILE EXAMPLE
f( ) =
Data -> JSON
Ram
Disk
Network

ADAPT, USER PROFILE EXAMPLE
f( ) =
Data -> JSON
f( ) =
JSON -> User
Profile Model
Ram
Disk
Network

ADAPT, USER PROFILE EXAMPLE
f( ) =
Data -> JSON
f( ) =
JSON -> User
Profile Model
fInv( ) =
fInv( ) =
JSON ->
Data
User Profile
Model -> JSON
Ram
Disk
Network

ADAPT, USER PROFILE EXAMPLE
f( ) =
f( ) =fInv( ) =
fInv( ) =
ADAPT
extension Cache {
func mapKeys<K2>(fInv: @escaping (K2) throws -> Key) ->
CompositeCache<K2, Value> {}
}
Ram
Disk
Network

ADAPT, USER PROFILE EXAMPLE
userId -> url
string
representation
fInv( ) =
fInv( ) =
url string
representation ->
URLRequest
ADAPT
let ramCache = RamCache<URL, User>()
let diskCache = DiskCache<URL, NSData>()
let networkFetcher = NetworkFetcher()
.mapKeys { (url: URL) -> URLRequest in
return URLRequest(url: url)
}
let diskNetworkCache = diskCache + networkFetcher
let userDiskNetworkCache = diskNetworkCache
.mapValues(f: { (userJSONData) -> User in
try JSONDecoder().decode(User.self, from: userJSONData)
}) { (user) -> NSData in
try JSONEncoder().encode(user)
}
let userCache = ramCache + userDiskNetworkCache
OPTIMISATION
REUSE-IN-FLIGHT
extension Cache where Key: Hashable {
func reuseInFlight() -> CompositeCache<Key, Value> {
let dictionary = Dictionary<Key, Observable<Value?>>()
return CompositeCache(
get: { (key) in
return (dictionary[key] ?? ({
let newRequest: Observable<Value?> = self.get(key)
dictionary[key] = newRequest
return newRequest
})())!
},
set: set,
)
}
}
REUSE-IN-FLIGHT
let avatarCache = ramCache + diskCache + networkFetcher.reuseInFlight()
REUSE-IN-FLIGHT
let avatarCache = ramCache + (diskCache + networkFetcher).reuseInFlight()
.forwardRequest
.capRequests
.skipWhile
.switchCache
.. and more
https://github.com/spring-media/Carlos
https://github.com/gtsifrikas/Droste
LIBRARIES
Compatible with RxSwift
WE ARE HIRING!
careers.workable.com
QUESTIONS?
George Tsifrikas
END OF PRESENTATION
THANK YOU!
George Tsifrikas
END OF PRESENTATION

More Related Content

What's hot

Intro to OTP in Elixir
Intro to OTP in ElixirIntro to OTP in Elixir
Intro to OTP in ElixirJesse Anderson
 
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)MongoSF
 
A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...
A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...
A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...Altinity Ltd
 
Neo4j GraphTour: Utilizing Powerful Extensions for Analytics and Operations
Neo4j GraphTour: Utilizing Powerful Extensions for Analytics and OperationsNeo4j GraphTour: Utilizing Powerful Extensions for Analytics and Operations
Neo4j GraphTour: Utilizing Powerful Extensions for Analytics and OperationsMark Needham
 
groovy databases
groovy databasesgroovy databases
groovy databasesPaul King
 
Google App Engine Developer - Day3
Google App Engine Developer - Day3Google App Engine Developer - Day3
Google App Engine Developer - Day3Simon Su
 
The Ring programming language version 1.5.1 book - Part 60 of 180
The Ring programming language version 1.5.1 book - Part 60 of 180The Ring programming language version 1.5.1 book - Part 60 of 180
The Ring programming language version 1.5.1 book - Part 60 of 180Mahmoud Samir Fayed
 
Building Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at StripeBuilding Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at StripeMongoDB
 
Optimization and Mathematical Programming in R and ROI - R Optimization Infra...
Optimization and Mathematical Programming in R and ROI - R Optimization Infra...Optimization and Mathematical Programming in R and ROI - R Optimization Infra...
Optimization and Mathematical Programming in R and ROI - R Optimization Infra...Dr. Volkan OBAN
 
Angular&node js upload file
Angular&node js upload fileAngular&node js upload file
Angular&node js upload fileHu Kenneth
 
Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)Jonathan Katz
 
Deconstructing the Functional Web with Clojure
Deconstructing the Functional Web with ClojureDeconstructing the Functional Web with Clojure
Deconstructing the Functional Web with ClojureNorman Richards
 
Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Michele Orselli
 
How fast ist it really? Benchmarking in practice
How fast ist it really? Benchmarking in practiceHow fast ist it really? Benchmarking in practice
How fast ist it really? Benchmarking in practiceTobias Pfeiffer
 
[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기NAVER D2
 
Webinar: Replication and Replica Sets
Webinar: Replication and Replica SetsWebinar: Replication and Replica Sets
Webinar: Replication and Replica SetsMongoDB
 
The Ring programming language version 1.10 book - Part 56 of 212
The Ring programming language version 1.10 book - Part 56 of 212The Ring programming language version 1.10 book - Part 56 of 212
The Ring programming language version 1.10 book - Part 56 of 212Mahmoud Samir Fayed
 

What's hot (19)

Intro to OTP in Elixir
Intro to OTP in ElixirIntro to OTP in Elixir
Intro to OTP in Elixir
 
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
 
Cache metadata
Cache metadataCache metadata
Cache metadata
 
A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...
A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...
A Practical Introduction to Handling Log Data in ClickHouse, by Robert Hodges...
 
Pdxpugday2010 pg90
Pdxpugday2010 pg90Pdxpugday2010 pg90
Pdxpugday2010 pg90
 
Neo4j GraphTour: Utilizing Powerful Extensions for Analytics and Operations
Neo4j GraphTour: Utilizing Powerful Extensions for Analytics and OperationsNeo4j GraphTour: Utilizing Powerful Extensions for Analytics and Operations
Neo4j GraphTour: Utilizing Powerful Extensions for Analytics and Operations
 
groovy databases
groovy databasesgroovy databases
groovy databases
 
Google App Engine Developer - Day3
Google App Engine Developer - Day3Google App Engine Developer - Day3
Google App Engine Developer - Day3
 
The Ring programming language version 1.5.1 book - Part 60 of 180
The Ring programming language version 1.5.1 book - Part 60 of 180The Ring programming language version 1.5.1 book - Part 60 of 180
The Ring programming language version 1.5.1 book - Part 60 of 180
 
Building Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at StripeBuilding Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at Stripe
 
Optimization and Mathematical Programming in R and ROI - R Optimization Infra...
Optimization and Mathematical Programming in R and ROI - R Optimization Infra...Optimization and Mathematical Programming in R and ROI - R Optimization Infra...
Optimization and Mathematical Programming in R and ROI - R Optimization Infra...
 
Angular&node js upload file
Angular&node js upload fileAngular&node js upload file
Angular&node js upload file
 
Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)
 
Deconstructing the Functional Web with Clojure
Deconstructing the Functional Web with ClojureDeconstructing the Functional Web with Clojure
Deconstructing the Functional Web with Clojure
 
Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17
 
How fast ist it really? Benchmarking in practice
How fast ist it really? Benchmarking in practiceHow fast ist it really? Benchmarking in practice
How fast ist it really? Benchmarking in practice
 
[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기
 
Webinar: Replication and Replica Sets
Webinar: Replication and Replica SetsWebinar: Replication and Replica Sets
Webinar: Replication and Replica Sets
 
The Ring programming language version 1.10 book - Part 56 of 212
The Ring programming language version 1.10 book - Part 56 of 212The Ring programming language version 1.10 book - Part 56 of 212
The Ring programming language version 1.10 book - Part 56 of 212
 

Similar to Composable caching

Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web ModuleMorgan Cheng
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
Ioc container | Hannes Van De Vreken | CODEiD
Ioc container | Hannes Van De Vreken | CODEiDIoc container | Hannes Van De Vreken | CODEiD
Ioc container | Hannes Van De Vreken | CODEiDCODEiD PHP Community
 
Utilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and OperationsUtilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and OperationsNeo4j
 
Herding types with Scala macros
Herding types with Scala macrosHerding types with Scala macros
Herding types with Scala macrosMarina Sigaeva
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wildJoe Morgan
 
Encrypt all transports
Encrypt all transportsEncrypt all transports
Encrypt all transportsEleanor McHugh
 
Utilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and OperationsUtilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and OperationsNeo4j
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs偉格 高
 
solving little problems
solving little problemssolving little problems
solving little problemsAustin Ziegler
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovGeorgiy Shevtsov
 
1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScriptInnovecs
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPJeremy Kendall
 
Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.Workhorse Computing
 
Adding Dependency Injection to Legacy Applications
Adding Dependency Injection to Legacy ApplicationsAdding Dependency Injection to Legacy Applications
Adding Dependency Injection to Legacy ApplicationsSam Hennessy
 
Riak with node.js
Riak with node.jsRiak with node.js
Riak with node.jsSean Cribbs
 

Similar to Composable caching (20)

Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web Module
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
 
Ioc container | Hannes Van De Vreken | CODEiD
Ioc container | Hannes Van De Vreken | CODEiDIoc container | Hannes Van De Vreken | CODEiD
Ioc container | Hannes Van De Vreken | CODEiD
 
Utilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and OperationsUtilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and Operations
 
Herding types with Scala macros
Herding types with Scala macrosHerding types with Scala macros
Herding types with Scala macros
 
Lithium Best
Lithium Best Lithium Best
Lithium Best
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wild
 
Encrypt all transports
Encrypt all transportsEncrypt all transports
Encrypt all transports
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
Utilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and OperationsUtilizing Powerful Extensions for Analytics and Operations
Utilizing Powerful Extensions for Analytics and Operations
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
 
solving little problems
solving little problemssolving little problems
solving little problems
 
Drupal 8 database api
Drupal 8 database apiDrupal 8 database api
Drupal 8 database api
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George Shevtsov
 
1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHP
 
Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.
 
Adding Dependency Injection to Legacy Applications
Adding Dependency Injection to Legacy ApplicationsAdding Dependency Injection to Legacy Applications
Adding Dependency Injection to Legacy Applications
 
Riak with node.js
Riak with node.jsRiak with node.js
Riak with node.js
 

Recently uploaded

CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfAsst.prof M.Gokilavani
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...asadnawaz62
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girlsssuser7cb4ff
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxwendy cai
 
Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...
Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...
Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...srsj9000
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx959SahilShah
 
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...VICTOR MAESTRE RAMIREZ
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort servicejennyeacort
 
pipeline in computer architecture design
pipeline in computer architecture  designpipeline in computer architecture  design
pipeline in computer architecture designssuser87fa0c1
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHC Sai Kiran
 
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVHARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVRajaP95
 
Churning of Butter, Factors affecting .
Churning of Butter, Factors affecting  .Churning of Butter, Factors affecting  .
Churning of Butter, Factors affecting .Satyam Kumar
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvLewisJB
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AIabhishek36461
 
Biology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxBiology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxDeepakSakkari2
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfme23b1001
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxPoojaBan
 

Recently uploaded (20)

CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
 
POWER SYSTEMS-1 Complete notes examples
POWER SYSTEMS-1 Complete notes  examplesPOWER SYSTEMS-1 Complete notes  examples
POWER SYSTEMS-1 Complete notes examples
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girls
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptx
 
Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...
Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...
Gfe Mayur Vihar Call Girls Service WhatsApp -> 9999965857 Available 24x7 ^ De...
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx
 
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
 
pipeline in computer architecture design
pipeline in computer architecture  designpipeline in computer architecture  design
pipeline in computer architecture design
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECH
 
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVHARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
Churning of Butter, Factors affecting .
Churning of Butter, Factors affecting  .Churning of Butter, Factors affecting  .
Churning of Butter, Factors affecting .
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvv
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AI
 
Biology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxBiology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptx
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdf
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptx
 

Composable caching