SlideShare a Scribd company logo
1 of 97
Download to read offline
#Devoxx #Javaslang @koenighotze
JΛVΛSLΛNGFunctional Sugar For Java
#Devoxx #Javaslang @koenighotze
Senacor Technologies
Programmer!
That’s me coding Scala
David Schmitz / @koenighotze
Senacor Technologies
Programmer!
That’s me coding Scala
#Devoxx #Javaslang @koenighotze
What’s in it for you?
Functional programming is hip
How Javaslang helped us
Examples, Code!
#Devoxx #Javaslang @koenighotze
Functors,
applicatives,
monads and friends
stay home
#Devoxx #Javaslang @koenighotze
Code that is easier to
reason about
#Devoxx #Javaslang @koenighotze
Side-effects are evil
try {
int i = 1/0;
} catch (Throwable t) {
…
}
Exceptions are goto-statements
:(
#Devoxx #Javaslang @koenighotze
Referential Transparency
Math.random();
Math.max(1, 2);
Math.random();
Math.max(1, 2);
Pure functions are a Good ThingTm
:(
#Devoxx #Javaslang @koenighotze
Thinking in Values
Immutability
Performance
Safety
#Devoxx #Javaslang @koenighotze
In a nutshell, think about
“what to code“
not
“how to code”
#Devoxx #Javaslang @koenighotze
Enter Java 8
(a) -> a + 2
list.stream().filter…
Excitement…
#Devoxx #Javaslang @koenighotze
“Try filtering all invalid users
from a list of users”
#Devoxx #Javaslang @koenighotze
Excitement?…until
users.stream()
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#Devoxx #Javaslang @koenighotzePainting by Gustav Courbet
#Devoxx #Javaslang @koenighotze
import static javaslang.API.*;
+
#Devoxx #Javaslang @koenighotze
What we’ll cover
Immutable collections
Some functional sugar
Pattern matching
#Devoxx #Javaslang @koenighotze
Before we get to the details…
Let’s fix that ugly code
#Devoxx #Javaslang @koenighotze
Fixing Things….
users.stream()
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#Devoxx #Javaslang @koenighotze
Functional collections
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#Devoxx #Javaslang @koenighotze
No need for Collectors
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#Devoxx #Javaslang @koenighotze
No need for Collectors
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}}); .collect(Collectors.toLis
t());
#Devoxx #Javaslang @koenighotze
Wrapping Exceptions
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}}); .collect(Collectors.toLis
t());
#Devoxx #Javaslang @koenighotze
Wrapping Exceptions
List.ofAll(users)
.filter(user ->
Try.of(user::validateAddress)
.getOrElse(false)
); } catch (IllegalStateException
ex) { return
); .collect(Collectors.toList();
#Devoxx #Javaslang @koenighotze
List.ofAll(users)
List.filter(user ->
Try.of(user::validateAddress)
.getOrElse(false));
“Try filtering all invalid users
from a list of users”
#Devoxx #Javaslang @koenighotze
Immutable Collections
Image by Douglas Muth, https://flic.kr/p/acFwxG
#Devoxx #Javaslang @koenighotze
Mutable Collections are Evil
Returning void == Side-Effect!
interface Collection<E> {
…
void clear();
}
interface Collection<E> {
…
void clear();
}
#Devoxx #Javaslang @koenighotze
Easy solution? Collections
Collections
.unmodifiableList(list);
.add("BUMM");
#Devoxx #Javaslang @koenighotze
Easy solution? Collections
Collections
.unmodifiableList(list)
.add("BUMM");
#Devoxx #Javaslang @koenighotze
#Devoxx #Javaslang @koenighotze
Javaslang Collections
List<~> t = List.of(“F95”);
List<~> t2 = t.append(withName(“FCK”));
F95 /t
#Devoxx #Javaslang @koenighotze
Immutable
List<~> t = List.of(“F95”);
List<~> t2 = t.prepend(“FCK”);
F95 /t
FCKt2
#Devoxx #Javaslang @koenighotze
List<~> t = List.of(“F95”);
List<~> t2 = t.prepend(“FCK”);
F95 /
FCK
t
t2
Persistent and Efficient
#Devoxx #Javaslang @koenighotze
Streams are glorified Iterators
Stream<String> jdk
= Stream.of("a", “B");
jdk.map(String::toUpperCase);
jdk.map(String::toLowerCase);
#Devoxx #Javaslang @koenighotze
java.lang.IllegalStateException:
stream has already been operated upon
or closed
at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
at java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:94)
at
java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java
:618)
at java.util.stream.ReferencePipeline$3.<init>(ReferencePipeline.java:187)
at java.util.stream.ReferencePipeline.map(ReferencePipeline.java:186)
#Devoxx #Javaslang @koenighotze
Javaslang Streams
Stream<String> slang =
Stream.of("a", "B");
slang.map(String::toUpperCase);
// “A”,“B”
slang.map(String::toLowerCase);
// “a”,“b”
#Devoxx #Javaslang @koenighotze
Javaslang Streams
Stream<String> slang =
Stream.of("a", "B");
slang.map(String::toUpperCase)
.take(2);
slang.map(String::toLowerCase)
.take(2);
#Devoxx #Javaslang @koenighotze
Javaslang Streams
Stream<String> slang =
Stream.of("a", "B");
slang.map(String::toUpperCase)
.take(2);// “A”,“B”
slang.map(String::toLowerCase)
.take(2);// “a”,“b”
#Devoxx #Javaslang @koenighotze
Functional data structures
improve performance and
reduce the chance of
unexpected behaviour
#Devoxx #Javaslang @koenighotze
Functional Sugar
#Devoxx #Javaslang @koenighotze
“Find a user and, if an
address is available, fetch
the user’s street”
#Devoxx #Javaslang @koenighotze
Cascading Pile of Shame
User user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#Devoxx #Javaslang @koenighotze
We’ve got java.util.Optional
Optional<User> opt =
Optional.ofNullable(user);
if (optional.isPresent()) {
…
}
#Devoxx #Javaslang @koenighotze
#Devoxx #Javaslang @koenighotze
Please stop using
Optional#isPresent()
#Devoxx #Javaslang @koenighotze
An Option is like a Gift Box
NoneSome
#Devoxx #Javaslang @koenighotze
Map opens the Gift Box
Map
Some Some
( )->
#Devoxx #Javaslang @koenighotze
Nothing from Nothing
( )->
Map
None None
#Devoxx #Javaslang @koenighotze
Optional or Option?
Optional
#Devoxx #Javaslang @koenighotze
Optional or Option?
Option
Some None
#Devoxx #Javaslang @koenighotze
Optional or Option?
Option
Some None
Value
Iterable
#Devoxx #Javaslang @koenighotze
Optional or Option?
Option
Some None
Value
Iterable
#Devoxx #Javaslang @koenighotze
Optional or Option?
Option
Some None
Value
Iterable
Serializable
#Devoxx #Javaslang @koenighotze
Fixing the Pile of Shame
User user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#Devoxx #Javaslang @koenighotze
Option all the Things
User user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#Devoxx #Javaslang @koenighotze
Option all the Things
Option<User> user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#Devoxx #Javaslang @koenighotze
Option all the Things
Option<User> user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#Devoxx #Javaslang @koenighotze
Option all the Things
Option<User> user = repo.findOne("id");
user.flatMap(User::getAddress)
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
Option<User> user = repo.findOne("id");
user.flatMap(User::getAddress)
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
} Option<Address> getAddress()
#Devoxx #Javaslang @koenighotze
Option all the Things
Option<User> user = repo.findOne("id");
user.flatMap(User::getAddress)
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#Devoxx #Javaslang @koenighotze
Option all the Things
Option<User> user = repo.findOne("id");
user.flatMap(User::getAddress)
Address address = user.getAddress();
.map(Address::getStreet)
return address.getStreet();
}
}
#Devoxx #Javaslang @koenighotze
repo.findOne("id")
.flatMap(User::getAddress)
.map(Address::getStreet)
.getOrElse("");
“Find a user and, if an address is
available, fetch the user’s street”
#Devoxx #Javaslang @koenighotze
Option and map transform
nested code into an
understandable story
#Devoxx #Javaslang @koenighotze
Working with legacy code
Painting by Eero Järnefelt
#Devoxx #Javaslang @koenighotze
Nice Validation Code
public static String check(String iban){
if (validationMagic(iban)) {
return iban;
}
throw new IllegalArgumentException(“Peng”);
}
#Devoxx #Javaslang @koenighotze
Awesome WTF Code
String iban;
try {
iban = check("AL47");
}
catch (IllegalArgumentException ex) {
iban = "";
}
#Devoxx #Javaslang @koenighotze
From Exceptions to Options
String iban = lift(Iban::check)
.apply("AL47...")
.getOrElse("");
#Devoxx #Javaslang @koenighotze
From Exceptions to Options
String iban = lift(Iban::check)
.apply("AL47...")
.getOrElse("");
#Devoxx #Javaslang @koenighotze
Wrapping Exceptions with Try
Try.of(() -> stuffToDo())
#Devoxx #Javaslang @koenighotze
Wrapping Exceptions with Try
Failure
Exception
Success
Result
Try.of(() -> stuffToDo())
#Devoxx #Javaslang @koenighotze
Exceptions to Options with Try
Try.of(() -> check("AL.."))
.getOrElse("")
#Devoxx #Javaslang @koenighotze
Exceptions to Options with Try
Try.of(() -> check("AL.."))
.getOrElse("")
#Devoxx #Javaslang @koenighotze
Lifting and Try-ing reduce
exception handling clutter
and side-effects
#Devoxx #Javaslang @koenighotze
Structural Decomposition
Image by Arend, https://flic.kr/p/pkBe4g
#Devoxx #Javaslang @koenighotze
Classic HTTP Handling
if (OK.equals(res.getStatusCode()))
{
return res.getBody();
}
return emptyList();
#Devoxx #Javaslang @koenighotze
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?
^_`{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-
x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f])*")@(?:(?:
[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-
z0-9-]*[a-z0-9])?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]
[0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-
z0-9-]*[a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-
x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
Pattern Matching Basics
#Devoxx #Javaslang @koenighotze
Pattern Matching Basics
Match(expression)
.of(cases)
#Devoxx #Javaslang @koenighotze
Cases map functions to patterns
Case(pattern, function)
#Devoxx #Javaslang @koenighotze
Example Patterns
$() wildcard pattern
$(“foo”) equals pattern
isIn(“a”, “b”) conditional pattern
#Devoxx #Javaslang @koenighotze
HTTP Handling Fixed
*Note: some type details missing
Match(res.getStatusCode())
.of(

Case($(OK), res.getBody()),

Case($(), emptyList())

);
#Devoxx #Javaslang @koenighotze
Match(res.getStatusCode())
.of(

Case($(OK), res.getBody()),

Case($(), emptyList())

);
HTTP Handling Fixed
*Note: some type details missing
OK or anything else
#Devoxx #Javaslang @koenighotze
HTTP Handling Fixed
*Note: some type details missing
Match(res.getStatusCode())
.of(

Case($(OK), res.getBody()),

Case($(), emptyList())

);
#Devoxx #Javaslang @koenighotze
HTTP Handling Fixed
*Note: some type details missing
Match(res.getStatusCode())
.of(

Case($(OK), res.getBody()),

Case($(), emptyList())

);
#Devoxx #Javaslang @koenighotze
HTTP Handling Fixed
Match(res.getStatusCode())
.of(

Case($(OK), res.getBody()),

Case($(), emptyList())

);
*Note: some type details missing
#Devoxx #Javaslang @koenighotze
Matching a Try
public Try<…> fetchFromUrl(…) {
…
}
#Devoxx #Javaslang @koenighotze
Matching a Try
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#Devoxx #Javaslang @koenighotze
Matching a Try
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#Devoxx #Javaslang @koenighotze
Matching a Try
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#Devoxx #Javaslang @koenighotze
Presto!
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#Devoxx #Javaslang @koenighotze
Pattern matching
replaces complex if-
then-else sequences
with clear expressions
#Devoxx #Javaslang @koenighotze
HashMap.of("Foo", "Bar",
"Qux", "Baz")
.bimap(String::toLowerCase,
String::toUpperCase)
.get("qux"); // BAZ
Javaslang offers much more
#Devoxx #Javaslang @koenighotze
Javaslang offers much more
Tuple.of("Foo", 1)
.map((s, i) ->
Tuple.of(s + "Bar",
i + 5))
// “FooBar”, 6
#Devoxx #Javaslang @koenighotze
Javaslang offers much more
#Devoxx #Javaslang @koenighotze
So, is this is the mother
of all free lunches?
#Devoxx #Javaslang @koenighotze
What are the drawbacks?
#Devoxx #Javaslang @koenighotze
What are the drawbacks?
count(Collection-libs)
>
count(Logging-libs)
#Devoxx #Javaslang @koenighotze
What are the drawbacks?
Option.of(foo)
.map
.filter
.flatMap
#Devoxx #Javaslang @koenighotze
Wrapping up
Slick, stable, consistent API
Object-functional
Complex(?)
Version 3 in 2017
#Devoxx #Javaslang @koenighotze
.iohttp://
Do you want to know more?
#Devoxx #Javaslang @koenighotze
Thank You!
<david.schmitz@senacor.com>

More Related Content

What's hot

Lambda and Stream Master class - part 1
Lambda and Stream Master class - part 1Lambda and Stream Master class - part 1
Lambda and Stream Master class - part 1José Paumard
 
The Sincerest Form of Flattery
The Sincerest Form of FlatteryThe Sincerest Form of Flattery
The Sincerest Form of FlatteryJosé Paumard
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of JavascriptTarek Yehia
 
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Iakiv Kramarenko
 
You do not need automation engineer - Sqa Days - 2015 - EN
You do not need automation engineer  - Sqa Days - 2015 - ENYou do not need automation engineer  - Sqa Days - 2015 - EN
You do not need automation engineer - Sqa Days - 2015 - ENIakiv Kramarenko
 
Lambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeLambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeIan Robertson
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
 
Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015Iakiv Kramarenko
 
Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)Scott Wlaschin
 
Dr Frankenfunctor and the Monadster
Dr Frankenfunctor and the MonadsterDr Frankenfunctor and the Monadster
Dr Frankenfunctor and the MonadsterScott Wlaschin
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScriptCodemotion
 
React Native One Day
React Native One DayReact Native One Day
React Native One DayTroy Miles
 
JavaScript in 2016
JavaScript in 2016JavaScript in 2016
JavaScript in 2016Codemotion
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript FunctionsColin DeCarlo
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascriptguest4d57e6
 
Write code that writes code!
Write code that writes code!Write code that writes code!
Write code that writes code!Jason Feinstein
 

What's hot (20)

Lambda and Stream Master class - part 1
Lambda and Stream Master class - part 1Lambda and Stream Master class - part 1
Lambda and Stream Master class - part 1
 
The Sincerest Form of Flattery
The Sincerest Form of FlatteryThe Sincerest Form of Flattery
The Sincerest Form of Flattery
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of Javascript
 
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
 
You do not need automation engineer - Sqa Days - 2015 - EN
You do not need automation engineer  - Sqa Days - 2015 - ENYou do not need automation engineer  - Sqa Days - 2015 - EN
You do not need automation engineer - Sqa Days - 2015 - EN
 
TDD, BDD, RSpec
TDD, BDD, RSpecTDD, BDD, RSpec
TDD, BDD, RSpec
 
Core Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug HuntCore Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug Hunt
 
Lambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeLambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive Code
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
 
Java concurrency questions and answers
Java concurrency questions and answers Java concurrency questions and answers
Java concurrency questions and answers
 
Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015
 
Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)
 
Dr Frankenfunctor and the Monadster
Dr Frankenfunctor and the MonadsterDr Frankenfunctor and the Monadster
Dr Frankenfunctor and the Monadster
 
Java Full Throttle
Java Full ThrottleJava Full Throttle
Java Full Throttle
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScript
 
React Native One Day
React Native One DayReact Native One Day
React Native One Day
 
JavaScript in 2016
JavaScript in 2016JavaScript in 2016
JavaScript in 2016
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript Functions
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascript
 
Write code that writes code!
Write code that writes code!Write code that writes code!
Write code that writes code!
 

Viewers also liked

Elixir - Easy fun for busy developers @ Devoxx 2016
Elixir - Easy fun for busy developers @ Devoxx 2016Elixir - Easy fun for busy developers @ Devoxx 2016
Elixir - Easy fun for busy developers @ Devoxx 2016David Schmitz
 
10 Tips for failing at microservices
10 Tips for failing at microservices10 Tips for failing at microservices
10 Tips for failing at microservicesDavid Schmitz
 
Spring boot - Getting Started
Spring boot - Getting StartedSpring boot - Getting Started
Spring boot - Getting StartedDavid Schmitz
 
Javaslang - Functional Sugar For Java
Javaslang - Functional Sugar For JavaJavaslang - Functional Sugar For Java
Javaslang - Functional Sugar For JavaDavid Schmitz
 
Docker for the Brave
Docker for the BraveDocker for the Brave
Docker for the BraveDavid Schmitz
 
Bootstrap |> Elixir - Easy fun for busy developers
Bootstrap |> Elixir - Easy fun for busy developersBootstrap |> Elixir - Easy fun for busy developers
Bootstrap |> Elixir - Easy fun for busy developersDavid Schmitz
 
Resilience testing with Wiremock and Spock
Resilience testing with Wiremock and SpockResilience testing with Wiremock and Spock
Resilience testing with Wiremock and SpockDavid Schmitz
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 

Viewers also liked (8)

Elixir - Easy fun for busy developers @ Devoxx 2016
Elixir - Easy fun for busy developers @ Devoxx 2016Elixir - Easy fun for busy developers @ Devoxx 2016
Elixir - Easy fun for busy developers @ Devoxx 2016
 
10 Tips for failing at microservices
10 Tips for failing at microservices10 Tips for failing at microservices
10 Tips for failing at microservices
 
Spring boot - Getting Started
Spring boot - Getting StartedSpring boot - Getting Started
Spring boot - Getting Started
 
Javaslang - Functional Sugar For Java
Javaslang - Functional Sugar For JavaJavaslang - Functional Sugar For Java
Javaslang - Functional Sugar For Java
 
Docker for the Brave
Docker for the BraveDocker for the Brave
Docker for the Brave
 
Bootstrap |> Elixir - Easy fun for busy developers
Bootstrap |> Elixir - Easy fun for busy developersBootstrap |> Elixir - Easy fun for busy developers
Bootstrap |> Elixir - Easy fun for busy developers
 
Resilience testing with Wiremock and Spock
Resilience testing with Wiremock and SpockResilience testing with Wiremock and Spock
Resilience testing with Wiremock and Spock
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Similar to Javaslang @ Devoxx

SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)ruthmcdavitt
 
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageabilityDaniel Fisher
 
Droidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineDroidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineJavier de Pedro López
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group RheinlandDavid Schmitz
 
TDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with AndroidTDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with AndroidCodemotion
 
What did you miss in Java from 9-13?
What did you miss in Java from 9-13?What did you miss in Java from 9-13?
What did you miss in Java from 9-13?relix1988
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
 
Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015Codemotion
 
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideEvolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideVictor Rentea
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014hwilming
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadDavid Gómez García
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsPROIDEA
 
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017 Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017 Codemotion
 

Similar to Javaslang @ Devoxx (20)

Clojure class
Clojure classClojure class
Clojure class
 
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
 
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
 
Droidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineDroidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offline
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group Rheinland
 
TDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with AndroidTDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with Android
 
What did you miss in Java from 9-13?
What did you miss in Java from 9-13?What did you miss in Java from 9-13?
What did you miss in Java from 9-13?
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Handlebars
HandlebarsHandlebars
Handlebars
 
Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015
 
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideEvolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidad
 
Rails by example
Rails by exampleRails by example
Rails by example
 
Dartprogramming
DartprogrammingDartprogramming
Dartprogramming
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
 
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017 Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
 
jQuery introduction
jQuery introductionjQuery introduction
jQuery introduction
 

More from David Schmitz

Eventsourcing you-are-doing-it-wrong-vxdparis
Eventsourcing you-are-doing-it-wrong-vxdparisEventsourcing you-are-doing-it-wrong-vxdparis
Eventsourcing you-are-doing-it-wrong-vxdparisDavid Schmitz
 
Event Sourcing - You are doing it wrong @ Devoxx
Event Sourcing - You are doing it wrong @ DevoxxEvent Sourcing - You are doing it wrong @ Devoxx
Event Sourcing - You are doing it wrong @ DevoxxDavid Schmitz
 
10 Tipps für ein absolutes Microservice-Desaster
10 Tipps für ein absolutes Microservice-Desaster10 Tipps für ein absolutes Microservice-Desaster
10 Tipps für ein absolutes Microservice-DesasterDavid Schmitz
 
10 tips for failing at microservices @ DevExperience 2018
10 tips for failing at microservices @ DevExperience 201810 tips for failing at microservices @ DevExperience 2018
10 tips for failing at microservices @ DevExperience 2018David Schmitz
 
Real world serverless - architecture, patterns and lessons learned
Real world serverless - architecture, patterns and lessons learnedReal world serverless - architecture, patterns and lessons learned
Real world serverless - architecture, patterns and lessons learnedDavid Schmitz
 
The FaaS and the Furious
The FaaS and the FuriousThe FaaS and the Furious
The FaaS and the FuriousDavid Schmitz
 
10 Tips for failing at microservices - badly (BedCon 2017)
10 Tips for failing at microservices - badly (BedCon 2017)10 Tips for failing at microservices - badly (BedCon 2017)
10 Tips for failing at microservices - badly (BedCon 2017)David Schmitz
 

More from David Schmitz (8)

Going Cloud Native
Going Cloud NativeGoing Cloud Native
Going Cloud Native
 
Eventsourcing you-are-doing-it-wrong-vxdparis
Eventsourcing you-are-doing-it-wrong-vxdparisEventsourcing you-are-doing-it-wrong-vxdparis
Eventsourcing you-are-doing-it-wrong-vxdparis
 
Event Sourcing - You are doing it wrong @ Devoxx
Event Sourcing - You are doing it wrong @ DevoxxEvent Sourcing - You are doing it wrong @ Devoxx
Event Sourcing - You are doing it wrong @ Devoxx
 
10 Tipps für ein absolutes Microservice-Desaster
10 Tipps für ein absolutes Microservice-Desaster10 Tipps für ein absolutes Microservice-Desaster
10 Tipps für ein absolutes Microservice-Desaster
 
10 tips for failing at microservices @ DevExperience 2018
10 tips for failing at microservices @ DevExperience 201810 tips for failing at microservices @ DevExperience 2018
10 tips for failing at microservices @ DevExperience 2018
 
Real world serverless - architecture, patterns and lessons learned
Real world serverless - architecture, patterns and lessons learnedReal world serverless - architecture, patterns and lessons learned
Real world serverless - architecture, patterns and lessons learned
 
The FaaS and the Furious
The FaaS and the FuriousThe FaaS and the Furious
The FaaS and the Furious
 
10 Tips for failing at microservices - badly (BedCon 2017)
10 Tips for failing at microservices - badly (BedCon 2017)10 Tips for failing at microservices - badly (BedCon 2017)
10 Tips for failing at microservices - badly (BedCon 2017)
 

Recently uploaded

HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARHAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARKOUSTAV SARKAR
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Arindam Chakraborty, Ph.D., P.E. (CA, TX)
 
Engineering Drawing focus on projection of planes
Engineering Drawing focus on projection of planesEngineering Drawing focus on projection of planes
Engineering Drawing focus on projection of planesRAJNEESHKUMAR341697
 
PE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and propertiesPE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and propertiessarkmank1
 
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxHOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxSCMS School of Architecture
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXssuser89054b
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTbhaskargani46
 
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...Amil baba
 
Moment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilMoment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilVinayVitekari
 
Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...
Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...
Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...Call Girls Mumbai
 
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxS1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxSCMS School of Architecture
 
Orlando’s Arnold Palmer Hospital Layout Strategy-1.pptx
Orlando’s Arnold Palmer Hospital Layout Strategy-1.pptxOrlando’s Arnold Palmer Hospital Layout Strategy-1.pptx
Orlando’s Arnold Palmer Hospital Layout Strategy-1.pptxMuhammadAsimMuhammad6
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapRishantSharmaFr
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueBhangaleSonal
 
Kuwait City MTP kit ((+919101817206)) Buy Abortion Pills Kuwait
Kuwait City MTP kit ((+919101817206)) Buy Abortion Pills KuwaitKuwait City MTP kit ((+919101817206)) Buy Abortion Pills Kuwait
Kuwait City MTP kit ((+919101817206)) Buy Abortion Pills Kuwaitjaanualu31
 
Hospital management system project report.pdf
Hospital management system project report.pdfHospital management system project report.pdf
Hospital management system project report.pdfKamal Acharya
 
Hostel management system project report..pdf
Hostel management system project report..pdfHostel management system project report..pdf
Hostel management system project report..pdfKamal Acharya
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptNANDHAKUMARA10
 

Recently uploaded (20)

HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARHAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced LoadsFEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
 
Engineering Drawing focus on projection of planes
Engineering Drawing focus on projection of planesEngineering Drawing focus on projection of planes
Engineering Drawing focus on projection of planes
 
PE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and propertiesPE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and properties
 
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxHOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPT
 
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
 
Moment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilMoment Distribution Method For Btech Civil
Moment Distribution Method For Btech Civil
 
Integrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - NeometrixIntegrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - Neometrix
 
Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...
Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...
Bhubaneswar🌹Call Girls Bhubaneswar ❤Komal 9777949614 💟 Full Trusted CALL GIRL...
 
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxS1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
 
Orlando’s Arnold Palmer Hospital Layout Strategy-1.pptx
Orlando’s Arnold Palmer Hospital Layout Strategy-1.pptxOrlando’s Arnold Palmer Hospital Layout Strategy-1.pptx
Orlando’s Arnold Palmer Hospital Layout Strategy-1.pptx
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leap
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torque
 
Kuwait City MTP kit ((+919101817206)) Buy Abortion Pills Kuwait
Kuwait City MTP kit ((+919101817206)) Buy Abortion Pills KuwaitKuwait City MTP kit ((+919101817206)) Buy Abortion Pills Kuwait
Kuwait City MTP kit ((+919101817206)) Buy Abortion Pills Kuwait
 
Hospital management system project report.pdf
Hospital management system project report.pdfHospital management system project report.pdf
Hospital management system project report.pdf
 
Hostel management system project report..pdf
Hostel management system project report..pdfHostel management system project report..pdf
Hostel management system project report..pdf
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.ppt
 

Javaslang @ Devoxx