SlideShare a Scribd company logo
1 of 124
Types Working
For You
Richard Dallaway, @d6y
underscore.io
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/scala-patterns-types
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon London
www.qconlondon.com
Modern type system
with lots of power
Two Themes
Straightforward Scala
Types Working for Us
Progression
Part 1 Straightforward Scala
Part 2 Functional Programming
Part 3 Typelevel Programming
Straightforward Scala
— Part 1 —
The only problem was we had no idea what the code
was doing at first.
We came across a strange symbol we hadn’t seen in
our projects before
The spaceship operator <|*|>
Someone said out loud “what the hell is that?”
http://jimplush.com/talk/
The only problem was we had no idea what the code
was doing at first.
We came across a strange symbol we hadn’t seen in
our projects before
The spaceship operator <|*|>
Someone said out loud “what the hell is that?”
http://jimplush.com/talk/
The only problem was we had no idea what the code
was doing at first.
We came across a strange symbol we hadn’t seen in
our projects before
The spaceship operator <|*|>
Someone said out loud “what the hell is that?”
http://jimplush.com/talk/
The only problem was we had no idea what the code
was doing at first.
We came across a strange symbol we hadn’t seen in
our projects before
The spaceship operator <|*|>
Someone said out loud “what the hell is that?”
http://jimplush.com/talk/
“It’s about having a maintainable
code base where you can have 

people cross projects easily and
get new hires up to speed rapidly”
Power!
Protect the team from it
and
Get the benefit of it
What can we do?
1. Expressions, types, & values
2. Objects and classes
3. Algebraic data types
4. Structural recursion
5. Sequencing computation
6. Type classes
1. Expressions, types, & values
2. Objects and classes
3. Algebraic data types
4. Structural recursion
5. Sequencing computation
6. Type classes
Algebraic data types
Structural recursion
Algebraic data types
data into code
Structural recursion
transformation
Model data with logical
ors and logical ands
A website visitor is:
• anonymous; or
• logged in
A logged in user has:
• an ID; and
• facts we know about
them
Two Patterns
and (product types)
or (sum types)
Sum and product together
make algebraic data types
Structure of the code
follows the structure of
the data
A website visitor is:
• anonymous; or
• logged in
sealed trait Visitor
case class Anonymous()

extends Visitor
case class User()

extends Visitor
A logged in user has:
• an ID; and
• facts we know about
them

An anonymous has:
• an ID
sealed trait Visitor
case class Anonymous()

extends Visitor
case class User()

extends Visitor
sealed trait Visitor
case class Anonymous(id: Id)

extends Visitor
case class User(id: Id, facts: Set[Fact])

extends Visitor
Structural recursion
def serveAd(v: Visitor): Advert = ???
Structure of the code
follows the structure of
the data
def serveAd(v: Visitor): Advert = ???
def serveAd(v: Visitor): Advert =
v match {
case User(_, info) => relevantAd(info)
case Anonymous(id) => adRotation(id)
}
def serveAd(v: Visitor): Advert =
v match {
case User(_, info) => relevantAd(info)
case Anonymous(id) => adRotation(id)
}
def serveAd(v: Visitor): Advert =
v match {
case User(_, info) => relevantAd(info)
case Anonymous(id) => adRotation(id)
}
Structure
ADT & Structural Recursion
Straightforward part of Scala.
Clear, productive, occurs frequently.
Be opinionated in what you use.
Structure helps us.
Help from FP Ideas
— Part 2 —
Combining lists
Concatenating strings
Union of sets
Combining things in a loop
Chaining logical operations
Adding numbers
Building up a JavaScript expression
Showing errors in a UI
...
A combine function and
an empty value
Addition
Empty Combine
0 +
Set
Empty Combine
Set.empty union
For any T
Empty Combine
A zero for T
A way to
combine two Ts
and give me
back a T
A combine function and
an empty value
Monoid
A combine function and
an empty value
…and laws
The boss asks…
What’s the total visits to the web site?
def report(vs: List[Int]): Int = ???
For any T
Empty Combine
A zero for T
A way to
combine two Ts
and give me
back a T
For any T
trait Monoid[T] {
def empty: T
def combine(x: T, y: T): T
}
val addition = new Monoid[Int] {
def empty = 0
def combine(x: Int, y: Int) = x+y
}
fold
def fold(vs: List[Int]): Int =
vs match {
case Nil => 0
case v :: rest => v + fold(rest)
}
fold(List(1,2,3))

// 6
fold(1,2,3)
1 + fold(2,3)
2 + fold(3)
3 + fold()
0
0 + 3 + 2 + 1 = 6
fold(1,2,3)
1 + fold(2,3)
2 + fold(3)
3 + fold()
0
0 + 3 + 2 + 1 = 6
fold(1,2,3)
1 + fold(2,3)
2 + fold(3)
3 + fold()
0
0 + 3 + 2 + 1 = 6
fold(1,2,3)
1 + fold(2,3)
2 + fold(3)
3 + fold()
0
0 + 3 + 2 + 1 = 6
fold(1,2,3)
1 + fold(2,3)
2 + fold(3)
3 + fold()
0
0 + 3 + 2 + 1 = 6
fold(1,2,3)
1 + fold(2,3)
2 + fold(3)
3 + fold()
0
0 + 3 + 2 + 1 = 6
def fold(vs: List[Int]): Int =
vs match {
case Nil => 0
case v :: rest => v + fold(rest)
}
fold(List(1,2,3))

// 6
def fold(vs: List[Int], m: Monoid[Int]): Int =
vs match {
case Nil => 0
case v :: rest => v + fold(rest)
}
fold(List(1,2,3), addition)

// 6
def fold(vs: List[Int], m: Monoid[Int]): Int =
vs match {
case Nil => m.empty
case v :: rest => m.combine(v, fold(rest,m))
}
fold(List(1,2,3), addition)

// 6
def fold[T](vs: List[T], m: Monoid[T]): T =
vs match {
case Nil => m.empty
case v :: rest => m.combine(v, fold(rest,m))
}
fold(List(1,2,3), addition)

// 6
Split on cases,
inspect values you have
def fold[T](vs: List[T], m: Monoid[T]): T =
vs match {
case Nil => ???
case v :: rest => ???
}
fold(List(1,2,3), addition)

// 6
def fold[T](vs: List[T], m: Monoid[T]): T =
vs match {
case Nil => m.empty
case v :: rest => ???
}
fold(List(1,2,3), addition)

// 6
But back to Monoids…
The boss asks…
What’s the total visits to the web site?
def report(vs: List[Int]): Int =
fold(vs, addition)
Benefits
Composition
Flexibility
Problem Solving
The boss asks…
How many distinct visitors?
def report(vs: List[Visitor]): Int = ???
Set
Empty Combine
Set.empty union
The boss says…
Argh! 

The servers are OutOfMemory
HyperLogLog
Empty Combine
new HLL() HLL.plus
Armon Dadgar (Papers We Love, 2015)

“Bloom Filters and HyperLogLog”
The boss asks…
Who are the really keen 

visitors to the site?
Count-Min Sketch
Empty Combine
new CMS() CMS.plus
Laura Bledaite (Scala eXchange 2015) 

“Count-Min Sketch in Real Data Applications”
We can safely run 

a parallel version 

of fold
Laws
a + 0 = a
(a + b) + c = a + (b + c)
Identity & Associativity
a combine empty = a
(a combine b) combine c 

= a combine (b combine c)
a combine b
combine combine
c d e f
Errors: 10 Warnings: 0
Its a monoid
I know this
…so we fold
Summary
Types and laws give us flexibility &
help lead us to solutions.
They help us every day.
A Taste of Typelevel
— Part 3 —
Date Metric
Mon Low
Tue High
csv(
List(“Date”, “Metric”),
List(
List(“Mon”, “Low”),
List(“Tue”, “High”) )
)
Date
Mon Low
Tue High
csv(
List(“Date”),
List(
List(“Mon”, “Low”),
List(“Tue”, “High”) )
)
How can we prevent that error
happening again?
def csv(
hdrs: List[String],
rows: List[List[String]]
): String = ???
def csv[N <: Nat](
hdrs: List[String],
rows: List[List[String]]
): String = ???
import shapeless._
import syntax.sized._
def csv[N <: Nat](
hdrs: Sized[List[String], N],
rows: List[Sized[List[String], N]]
): String = ???
import shapeless._
import syntax.sized._
csv(
Sized(“Date”),
List(
Sized(“Mon”, “Low”),
Sized(“Tue”, “High”) )
)
csv(
Sized(“Date”),
List(
Sized(“Mon”, “Low”),
Sized(“Tue”, “High”) )
)
Sized[List, 1]
Sized[List, 2]
How?
Sized(“Date”) constructs
Sized[Nat]
Nat implements numbers as
types
sealed trait Nat
trait Succ[P <: Nat] extends Nat
trait Zero extends Nat
Zero 0
Succ[Zero] 1
Succ[Succ[Zero]] 2
Succ[Succ[Succ[Zero]]] 3
sealed trait Nat
trait Succ[P <: Nat] extends Nat
trait Zero extends Nat
sealed trait Nat
trait Succ[P <: Nat] extends Nat
trait Zero extends Nat
type One = Succ[Zero]
type Two = Succ[One]
implicitly[Succ[Zero] =:= One]
implicitly[Succ[One] =:= Succ[Succ[Zero]]]
sealed trait Nat
trait Succ[P <: Nat] extends Nat
trait Zero extends Nat
type One = Succ[Zero]
type Two = Succ[One]
implicitly[Succ[Zero] =:= One]
implicitly[Succ[One] =:= Succ[Succ[Zero]]]
sealed trait Nat
trait Succ[P <: Nat] extends Nat
trait Zero extends Nat
type One = Succ[Zero]
type Two = Succ[One]
implicitly[Succ[Zero] =:= One]
implicitly[Succ[One] =:= Succ[Succ[Zero]]]
sealed trait Nat
trait Succ[P <: Nat] extends Nat
trait Zero extends Nat
type One = Succ[Zero]
type Two = Succ[One]
implicitly[Succ[Zero] =:= Two]
error:
Cannot prove that Succ[Zero] =:= Two.
Merging Fields
case class User(

id : Long,

name : String,

email : Option[String])
val user = User(

123L, 

“Bruce Wayne”,

Some(“bruce@example.org”))
PATCH /user/123
{

“name” : “Batman”

}
case class User(

id : Long,

name : String,

email : Option[String])
case class Update(

name : Option[String],

email : Option[Option[String]])
val user = User(

123L, 

“Bruce Wayne”,

Some(“bruce@example.org”))
val update = Update( 

Some(“Batman”), 

None)
How do we get to…
User(

123L, 

“Batman”, 

Some(“bruce@example.org”))
Bulletin
https://github.com/davegurnell/bulletin
How?
User String Option[String] …
Option[String]
Option[

Option[String]
]
…Update
How?
User String Option[String] …
Option[String]
Option[

Option[String]
]
…Update
Head
How?
User String Option[String] …
Option[String]
Option[

Option[String]
]
…Update
Head The Rest…
How?
Type constraints
Implicit methods
HLists
Labelled generic
Macros
…
val user = User(

123L, 

"Bruce Wayne”,

Some(“bruce@example.org”))
val update = Update( 

Some(“Batman”), 

None)
import bulletin._
val updated = user.merge(update)
// User(

// 123L, 

// “Batman”, 

// Some(“bruce@example.org”))
val user = User(

123L, 

"Bruce Wayne”,

Some(“bruce@example.org”))
val update = Update( 

Some(“Batman”), 

None)
import bulletin._
val updated = user.merge(update)
// User(

// 123L, 

// “Batman”, 

// Some(“bruce@example.org”))
Summary
The compiler can help (maybe more than
you thought).
Reduce boilerplate code.
Using Power Tools
Can go one of two ways…
Using Power Tools
Can go one of two ways…
What the hell
is that?
It’s a monoid!

I know this
Simple
Types
Power
Share
2008
‘The name Scala stands for
“scalable language.”



The language is so named
because it was designed
to grow with the demands of its
users.’
What have we seen?
Some straightforward parts of Scala

—Clear, maintainable, helpful
Encoding ideas in types

—flexibility, leads us to solutions



Let the compiler do it 

—when it make sense for your demands
Summary
Scala scaling with your needs

—be opinionated in what you use, more when needed
Types working for us, not stopping us

—functional programming, share what you learn
Thanks!
Richard Dallaway, @d6y
underscore.io
Thanks!
Richard Dallaway, @d6y
underscore.io
Amanda Laucher
Wesley Reisz
Noel Welsh
Dave Gurnell
Miles Sabin
Jono Ferguson
Julio Capote
Alessandro Zoffoli
Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/scala-
patterns-types

More Related Content

What's hot

Table Retrieval and Generation
Table Retrieval and GenerationTable Retrieval and Generation
Table Retrieval and Generationkrisztianbalog
 
mm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data Typemm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data TypeMarko Rodriguez
 
Polyglot persistence for Java developers - moving out of the relational comfo...
Polyglot persistence for Java developers - moving out of the relational comfo...Polyglot persistence for Java developers - moving out of the relational comfo...
Polyglot persistence for Java developers - moving out of the relational comfo...Chris Richardson
 
The Ring programming language version 1.6 book - Part 182 of 189
The Ring programming language version 1.6 book - Part 182 of 189The Ring programming language version 1.6 book - Part 182 of 189
The Ring programming language version 1.6 book - Part 182 of 189Mahmoud Samir Fayed
 
Types and Immutability: why you should care
Types and Immutability: why you should careTypes and Immutability: why you should care
Types and Immutability: why you should careJean Carlo Emer
 

What's hot (8)

Table Retrieval and Generation
Table Retrieval and GenerationTable Retrieval and Generation
Table Retrieval and Generation
 
mm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data Typemm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data Type
 
Introduction to r
Introduction to rIntroduction to r
Introduction to r
 
Scala vs java 8
Scala vs java 8Scala vs java 8
Scala vs java 8
 
Polyglot persistence for Java developers - moving out of the relational comfo...
Polyglot persistence for Java developers - moving out of the relational comfo...Polyglot persistence for Java developers - moving out of the relational comfo...
Polyglot persistence for Java developers - moving out of the relational comfo...
 
The Ring programming language version 1.6 book - Part 182 of 189
The Ring programming language version 1.6 book - Part 182 of 189The Ring programming language version 1.6 book - Part 182 of 189
The Ring programming language version 1.6 book - Part 182 of 189
 
Types and Immutability: why you should care
Types and Immutability: why you should careTypes and Immutability: why you should care
Types and Immutability: why you should care
 
Json demo
Json demoJson demo
Json demo
 

Similar to Types Working For You

Adopting F# at SBTech
Adopting F# at SBTechAdopting F# at SBTech
Adopting F# at SBTechAntya Dev
 
Lambdas: Myths and Mistakes
Lambdas: Myths and MistakesLambdas: Myths and Mistakes
Lambdas: Myths and MistakesRichardWarburton
 
Breaking down data silos with the open data protocol
Breaking down data silos with the open data protocolBreaking down data silos with the open data protocol
Breaking down data silos with the open data protocolWoodruff Solutions LLC
 
Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
 Deep Anomaly Detection from Research to Production Leveraging Spark and Tens... Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...Databricks
 
Performing Data Science with HBase
Performing Data Science with HBasePerforming Data Science with HBase
Performing Data Science with HBaseWibiData
 
Extreme Swift
Extreme SwiftExtreme Swift
Extreme SwiftMovel
 
Linq in C# 3.0: An Overview
Linq in C# 3.0: An OverviewLinq in C# 3.0: An Overview
Linq in C# 3.0: An Overviewpradeepkothiyal
 
Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)Paulo Gandra de Sousa
 
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTechNETFest
 
What's next in Julia
What's next in JuliaWhat's next in Julia
What's next in JuliaJiahao Chen
 
Software Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and PracticesSoftware Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and PracticesGanesh Samarthyam
 
Tutorial semantic wikis and applications
Tutorial   semantic wikis and applicationsTutorial   semantic wikis and applications
Tutorial semantic wikis and applicationsMark Greaves
 
A Map of the PyData Stack
A Map of the PyData StackA Map of the PyData Stack
A Map of the PyData StackPeadar Coyle
 
Introduction to R Short course Fall 2016
Introduction to R Short course Fall 2016Introduction to R Short course Fall 2016
Introduction to R Short course Fall 2016Spencer Fox
 
Fast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDBFast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDBMongoDB
 
Scala 3 Is Coming: Martin Odersky Shares What To Know
Scala 3 Is Coming: Martin Odersky Shares What To KnowScala 3 Is Coming: Martin Odersky Shares What To Know
Scala 3 Is Coming: Martin Odersky Shares What To KnowLightbend
 

Similar to Types Working For You (20)

Adopting F# at SBTech
Adopting F# at SBTechAdopting F# at SBTech
Adopting F# at SBTech
 
Lambdas: Myths and Mistakes
Lambdas: Myths and MistakesLambdas: Myths and Mistakes
Lambdas: Myths and Mistakes
 
F sharp - an overview
F sharp - an overviewF sharp - an overview
F sharp - an overview
 
Breaking down data silos with the open data protocol
Breaking down data silos with the open data protocolBreaking down data silos with the open data protocol
Breaking down data silos with the open data protocol
 
Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
 Deep Anomaly Detection from Research to Production Leveraging Spark and Tens... Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
 
Performing Data Science with HBase
Performing Data Science with HBasePerforming Data Science with HBase
Performing Data Science with HBase
 
Extreme Swift
Extreme SwiftExtreme Swift
Extreme Swift
 
Linq in C# 3.0: An Overview
Linq in C# 3.0: An OverviewLinq in C# 3.0: An Overview
Linq in C# 3.0: An Overview
 
PoEAA by Example
PoEAA by ExamplePoEAA by Example
PoEAA by Example
 
Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)
 
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
 
What's next in Julia
What's next in JuliaWhat's next in Julia
What's next in Julia
 
Software Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and PracticesSoftware Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and Practices
 
PyData Paris 2015 - Track 1.2 Gilles Louppe
PyData Paris 2015 - Track 1.2 Gilles LouppePyData Paris 2015 - Track 1.2 Gilles Louppe
PyData Paris 2015 - Track 1.2 Gilles Louppe
 
Tutorial semantic wikis and applications
Tutorial   semantic wikis and applicationsTutorial   semantic wikis and applications
Tutorial semantic wikis and applications
 
A Map of the PyData Stack
A Map of the PyData StackA Map of the PyData Stack
A Map of the PyData Stack
 
R and Data Science
R and Data ScienceR and Data Science
R and Data Science
 
Introduction to R Short course Fall 2016
Introduction to R Short course Fall 2016Introduction to R Short course Fall 2016
Introduction to R Short course Fall 2016
 
Fast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDBFast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDB
 
Scala 3 Is Coming: Martin Odersky Shares What To Know
Scala 3 Is Coming: Martin Odersky Shares What To KnowScala 3 Is Coming: Martin Odersky Shares What To Know
Scala 3 Is Coming: Martin Odersky Shares What To Know
 

More from C4Media

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileC4Media
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like OwnersC4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideC4Media
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDC4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine LearningC4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerC4Media
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleC4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeC4Media
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereC4Media
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing ForC4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data EngineeringC4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
 

More from C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Recently uploaded

Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 

Recently uploaded (20)

Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 

Types Working For You