SlideShare una empresa de Scribd logo
1 de 120
Descargar para leer sin conexión
#JavalandJavaslang @koenighotze
java
slang
The Monad strikes back
#JavalandJavaslang @koenighotze
David Schmitz - koenighotze
Senacor Technologies
Principal Architect
Programmer!
That’s me coding Scala
#JavalandJavaslang @koenighotze
What’s in it for you?
Functional programming is hip
How Javaslang helped us
Live Code - OMG!
Because
of
Beamer
#JavalandJavaslang @koenighotze
Functors,
applicatives, monads
stay home
#JavalandJavaslang @koenighotze
Code that is easier
to reason about
#JavalandJavaslang @koenighotze
Side-effects are evil
try {
int i = 1/0;
} catch (Throwable t) {
…
}
Exceptions are goto-statements
:(
#JavalandJavaslang @koenighotze
Referential Transparency
Math.random();
Math.max(1, 2);
Math.random();
Math.max(1, 2);
Pure functions are a Good ThingTm
:(
#JavalandJavaslang @koenighotze
Thinking in values
Immutability
Performance
Safety
#JavalandJavaslang @koenighotze
In a nutshell, think about
“what to code“
not
“how to code”
#JavalandJavaslang @koenighotze
Enter java Eight
(a) -> a + 2
list.stream().filter…
Excitement…
#JavalandJavaslang @koenighotze
Try filtering all
invalid users from
a list of users
#JavalandJavaslang @koenighotze
Excitement?…until
users.stream()
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#JavalandJavaslang @koenighotze
import static javaslang.API.*;
#JavalandJavaslang @koenighotze
What we’ll cover
Immutable collections
Some functional sugar
Pattern matching
Property based testing
Circuit breaker
#JavalandJavaslang @koenighotze
Before we get to the details…
Let’s fix that ugly code
#JavalandJavaslang @koenighotze
Fixing Things….
users.stream()
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#JavalandJavaslang @koenighotze
Functional collections
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#JavalandJavaslang @koenighotze
No need for Collectors
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}})
.collect(Collectors.toList());
#JavalandJavaslang @koenighotze
No need for Collectors
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}}); .collect(Collectors.toLis
t());
#JavalandJavaslang @koenighotze
Wrapping Exceptions
List.ofAll(users)
.filter(user -> {
try {
return user.validate();
} catch (Exception ex) {
return false;
}}); .collect(Collectors.toLis
t());
#JavalandJavaslang @koenighotze
Wrapping Exceptions
List.ofAll(users)
.filter(user ->
Try.of(user::validateAddress)
.getOrElse(false)
); } catch (IllegalStateException
ex) { return
); .collect(Collectors.toList();
#JavalandJavaslang @koenighotze
List.ofAll(users)
List.filter(user ->
Try.of(user::validateAddress)
.getOrElse(false));
#JavalandJavaslang @koenighotze
immutable Collections
#JavalandJavaslang @koenighotze
Mutable Collections are Evil
Returning void == Side-Effect!
interface Collection<E> {
…
void clear();
}
interface Collection<E> {
…
void clear();
}
#JavalandJavaslang @koenighotze
java.util.Collections
Collections
.unmodifiableList(list);
.add(“💥”)
#JavalandJavaslang @koenighotze
java.util.Collections
Collections
.unmodifiableList(list)
.add(“💥”);
#JavalandJavaslang @koenighotzePainting by Gustav Courbet
java.lang.UnsupportedOperationException at
java.util.Collections$UnmodifiableCollection
.add(Collections.java:1055)
at java.util.stream.AbstractPipeline.<init>
(AbstractPipeline.java:203)
at java.util.stream.ReferencePipeline.<init>
(ReferencePipeline.java:94)
#JavalandJavaslang @koenighotze
Javaslang Collections
https://cdn.infoq.com/statics_s2_20170314-0434/resource/news/2016/11/the-road-to-javaslang-3/en/resources/1infoq-version2.0-library.png
#JavalandJavaslang @koenighotze
Functional data structures
Immutable
Referentially transparent
Persistent
#JavalandJavaslang @koenighotze
heroes = List.of("Han", "Luke")
Cons@661 “Han” T
Cons@666 “Luke” ()
heroes
Effectively immutable
#JavalandJavaslang @koenighotze
Cons@661 “Han” T
Cons@666 “Luke” ()
heroes
Cons@662 “Ben” Tmore
more = heroes.prepend("Ben")
Effectively immutable
#JavalandJavaslang @koenighotze
droids =
TreeSet.of(
"C3PO",
"R2D2",
"K2SO"
)
Node@676
Node@679 Node@681“K2SO”
() ()“C3PO”
() ()“R2D2”
Effectively immutable
#JavalandJavaslang @koenighotze
droids.add("Chopper");
Effectively immutable
#JavalandJavaslang @koenighotze
Node@689
Node@691
() Node@694
() ()“Chopper”
Node@676
Node@679 Node@681“K2SO”
() ()“C3PO”
() ()“R2D2”
Effectively immutable
#JavalandJavaslang @koenighotze
old == new
Checking for updates?
#JavalandJavaslang @koenighotze
Streams are glorified iterators
Stream<String> jdk
= Stream.of("a", “B");
jdk.map(String::toUpperCase);
jdk.map(String::toLowerCase);
#JavalandJavaslang @koenighotzePainting by Gustav Courbet
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)
#JavalandJavaslang @koenighotze
Stream<String> slang =
Stream.of("a", "B");
slang.map(String::toUpperCase);
// “A”,“B”
slang.map(String::toLowerCase);
// “a”,“b”
Javaslang streams
#JavalandJavaslang @koenighotze
Javaslang Streams
Stream<String> slang =
Stream.of("a", "B");
slang.map(String::toUpperCase)
.take(2);
slang.map(String::toLowerCase)
.take(2);
#JavalandJavaslang @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”
#JavalandJavaslang @koenighotze
Better performance
Less unexpected behaviour
#Devoxx #Javaslang @koenighotze
functional Sugar
#JavalandJavaslang @koenighotze
find a user and, if
an address is
available, fetch
the user’s street
#JavalandJavaslang @koenighotze
Cascading Pile of Shame
User user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#JavalandJavaslang @koenighotze
optional?
Optional<User> opt =
Optional.ofNullable(user);
if (optional.isPresent()) {
User user = optional.get();
}
#JavalandJavaslang @koenighotze
And now, young
coder...
you will die.
#JavalandJavaslang @koenighotze
#JavalandJavaslang @koenighotze
map or flatmap
There is no
isPresent()
#JavalandJavaslang @koenighotze
optional or option?
Optional
#JavalandJavaslang @koenighotze
optional or option?
Option
Some None
#JavalandJavaslang @koenighotze
optional or option?
Option
Some None
Value
Iterable
#JavalandJavaslang @koenighotze
optional or option?
Option
Some None
Value
Iterable
#JavalandJavaslang @koenighotze
optional or option?
Option
Some None
Value
Iterable
Serializable
#JavalandJavaslang @koenighotze
An option is like a Gift Box
NoneSome
#JavalandJavaslang @koenighotze
Map opens the Gift Box
Map
Some Some
( )->
#JavalandJavaslang @koenighotze
nothing from nothing
( )->
Map
None None
#JavalandJavaslang @koenighotze
Fixing the Pile of Shame
User user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#JavalandJavaslang @koenighotze
option all the Things
User user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#JavalandJavaslang @koenighotze
option all the Things
Option<User> user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#JavalandJavaslang @koenighotze
option all the Things
Option<User> user = repo.findOne("id");
if (user != null) {
Address address = user.getAddress();
if (null != address) {
return address.getStreet();
}
}
#JavalandJavaslang @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()
#JavalandJavaslang @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();
}
}
#JavalandJavaslang @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();
}
}
#JavalandJavaslang @koenighotze
repo.findOne("id")
.flatMap(User::getAddress)
.map(Address::getStreet)
.getOrElse("");
#JavalandJavaslang @koenighotze
option.of(value)
.map(nested code)
== understandable story
#JavalandJavaslang @koenighotze
working with legacy code
#JavalandJavaslang @koenighotze
Nice validation Code
public static String check(String iban){
if (validationMagic(iban)) {
return iban;
}
throw new IllegalArgumentException(“Peng”);
}
#JavalandJavaslang @koenighotze
Awesome WTF Code
String iban;
try {
iban = check(“AL47…”);
}
catch (IllegalArgumentException ex) {
iban = "";
}
#JavalandJavaslang @koenighotze
From Exceptions to options
String iban = lift(Iban::check)
.apply("AL47...")
.getOrElse("");
#JavalandJavaslang @koenighotze
From Exceptions to options
String iban = lift(Iban::check)
.apply("AL47...")
.getOrElse("");
#JavalandJavaslang @koenighotze
Wrapping Exceptions with Try
Try.of(() -> stuffToDo())
#JavalandJavaslang @koenighotze
Wrapping Exceptions with Try
Failure
Exception
Success
Result
Try.of(() -> stuffToDo())
#JavalandJavaslang @koenighotze
Exceptions to options with Try
Try.of(() -> check("AL.."))
.getOrElse("")
#JavalandJavaslang @koenighotze
Exceptions to options with Try
Try.of(() -> check("AL.."))
.getOrElse("")
#JavalandJavaslang @koenighotze
Lifting and Try-ing reduce
exception handling
clutter and side-effects
#JavalandJavaslang @koenighotze
Structural Decomposition
#JavalandJavaslang @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
#JavalandJavaslang @koenighotze
Pattern Matching Basics
Match(expression)
.of(cases)
#JavalandJavaslang @koenighotze
Cases map patterns to function
Case(pattern, function)
#JavalandJavaslang @koenighotze
Example Patterns
$() wildcard pattern
$(“foo”) equals pattern
isIn(“a”, “b”) conditional pattern
#JavalandJavaslang @koenighotze
Classic HTTP Handling
if (OK.equals(res.getStatusCode()))
{
return res.getBody();
}
return emptyList();
#JavalandJavaslang @koenighotze
HTTP Handling Fixed
*Note: some type details missing
Match(res.getStatusCode())
.of(

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

Case($(), emptyList())

);
#JavalandJavaslang @koenighotze
Match(res.getStatusCode())
.of(

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

Case($(), emptyList())

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

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

Case($(), emptyList())

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

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

Case($(), emptyList())

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

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

Case($(), emptyList())

);
*Note: some type details missing
#JavalandJavaslang @koenighotze
Matching a Try
public Try<…> fetchFromUrl(…) {
…
}
#JavalandJavaslang @koenighotze
Matching a Try
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#JavalandJavaslang @koenighotze
Matching a Try
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#JavalandJavaslang @koenighotze
Matching a Try
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#JavalandJavaslang @koenighotze
Presto
Match(fetchFromUrl(“…”))
.of(
Case(Success($()), identity()),
Case(Failure($()), emptyList())
);
#JavalandJavaslang @koenighotze
Pattern matching
replaces complex if-
then-else sequences
with clear expressions
#JavalandJavaslang @koenighotze
property tEST
#JavalandJavaslang @koenighotze
property Based - The idea
Describe the arguments
Describe the results
Let the olde computer prove you
wrong
#JavalandJavaslang @koenighotze
Javaslang property test
Property.def(“Add works")
.forAll(Generated Data)
.suchThat(Checked Function)
.check()
.assertIsSatisfied();
#JavalandJavaslang @koenighotze
Javaslang property test
Property.def(“Add works")
.forAll(integer(), integer())
.suchThat(
(a,b)-> calc.add(a, b) == a + b)
.check()
.assertIsSatisfied();
#JavalandJavaslang @koenighotze
Running tests
2017-03-21 10:45:59.913 INFO 45701 --- FrameworkServlet '': initialization started
2017-03-21 10:45:59.925 INFO 45701 --- FrameworkServlet '': initialization completed in 12 ms
Storing User@217b0952[username=rwxbeoigyesbeqqz,email=W`a@0c..-.--db-.T5-.2-g,
Storing User@4e6280de[username=vptafghfwuwwrwall,email=sByP@6jLA4.J.1c..5h269O3-1M6-c6...-.-,,,
Storing User@2fca282c[username=qmhkjdtvbtjzfciwcceqgzfznzkhhcokiyoipdefbr,email=Q96!@6.n8.
Storing User@64d53f0d[publicId=e9d7a121-9f23-483a-828a-f9e3045fc297,username=unflrpvztxtmi...
...
Storing User@1b10f60e[publicId=6f084c18-415c-42c4-b1a8-00c5c1fc9e67,username=xwhpdpjowirsmjym...
Storing User@4b916cc2[publicId=a2b9db2c-0189-4fe8-843d-e709ef3886fa,username=yxdidpexnayyjpzo...
Should not go boom: OK, passed 1000 tests in 3719 ms.
#JavalandJavaslang @koenighotze
Failures
Should not go boom: Falsified after 23 passed tests in 3005 ms.
java.lang.AssertionError: Expected satisfied check result but was Falsified(…,
sample = ( 풧 ꜏, 燤䠽뾌密ᵓ뫶খᄀ ꌎ ⬆鹮 라鄽뾮魨 붐맧놌 엍첮
䏨➰ìឧ寅罟 溌椡‫ﲡ‬셋欙밶ῴ‫ﯯ‬缲ꢶꇞ⌽ꪂ惗 쎂蘄펮뎷粻뵞?푠쏽쥎,
fzqlbkljxhfrghllzcthvgqiglaabihkzgsqwgfcichamyonmayiewwsfwmw
ntzvozqqydkqillhpyi, +g4@F.8yOkj.-....C6GUP..3.4.-..h-
V74.E.-----2T.z97..3f1ZM6))
#JavalandJavaslang @koenighotze
Why property Based tests?
Declarative, infinit test cases
Have you tested for all characters…
…even for 💩?
Have you tested usernames like…
౧ప唆⏑쀋䯰㨼ᮁ娤즶?搃蘸阁뺬ᡧ㫈葷㖒‫ܪ‬匘ᤫ䳴㻅
댇껓痯믶㙃銐璚풔랾ᄰ 䩰삀싲闆䩟嗀嗀侀
#JavalandJavaslang @koenighotze
functional resilience
#JavalandJavaslang @koenighotze
Circuit breaker one-o-one
Consumer Backend
#JavalandJavaslang @koenighotze
Fallback
Resilience decorator
Circuit breaker one-o-one
Closed
Open
Half-Open
Consumer
#JavalandJavaslang @koenighotze
Resilience decorator
Circuit breaker one-o-one
Closed
Open
Half-Open
Consumer
Fallback
#JavalandJavaslang @koenighotze
Fallback
Resilience decorator
Circuit breaker one-o-one
Closed
Open
Half-Open
Consumer
#JavalandJavaslang @koenighotze
Fallback
Resilience decorator
Circuit breaker one-o-one
Closed
Open
Half-Open
Consumer
#JavalandJavaslang @koenighotze
Resilience For J
BackendConsumer
Backend
Service
Resilience decorator
Circuit Breaker
Retry
Cache
#JavalandJavaslang @koenighotze
Option<…> fetchBoard(String id) {
result = restTemplate.getForEntity(…);
return Match(result.getStatusCode())
.option(…);
}
flakey functions
#JavalandJavaslang @koenighotze
Option<…> fetchBoard(String id) {
result = restTemplate.getForEntity(…);
return Match(result.getStatusCode())
.option(…);
}
flakey functions
#JavalandJavaslang @koenighotze
Decorators.ofCheckedFunction(db::fetchBoard)
.withCircuitBreaker(circuitBreaker)
.decorate();
Decorating a function
#JavalandJavaslang @koenighotze
Try.of(() -> decorated.apply(stationId))
.getOrElse(Option.of(empty()))
Functional resilience
#JavalandJavaslang @koenighotze
final celebration
#JavalandJavaslang @koenighotze
HashMap.of("Foo", "Bar",
"Qux", "Baz")
Tuple.of("Foo", 1)
String help = TODO("Implement me")
Javaslang offers much more
#JavalandJavaslang @koenighotze
Javaslang offers much more
#JavalandJavaslang @koenighotze
So, is this is the
mother of all free
lunches?
#JavalandJavaslang @koenighotze
What are the drawbacks?
#JavalandJavaslang @koenighotze
What are the drawbacks?
count(Collection-libs)
>
count(Logging-libs)
#JavalandJavaslang @koenighotze
What are the drawbacks?
Option.of(foo)
.map
.filter
.flatMap
.map
.flatMap
.getOrElse(null)
N
O
T
a
drawback!
#JavalandJavaslang @koenighotze
Wrapping up
Slick, stable, consistent API
Object-functional advantages now
Complex(?)
Version 3 coming soon!
#JavalandJavaslang @koenighotze
RESISTTHE TYRANNY OF THE
COLLECTIONS FRAMEWORK
JOIN THE RESISTANCE!
#JavalandJavaslang @koenighotze
thank
you
david.schmitz at senacor.com

Más contenido relacionado

La actualidad más candente

Art of Javascript
Art of JavascriptArt of Javascript
Art of JavascriptTarek Yehia
 
The Sincerest Form of Flattery
The Sincerest Form of FlatteryThe Sincerest Form of Flattery
The Sincerest Form of FlatteryJosé Paumard
 
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
 
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
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScriptCodemotion
 
Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015Iakiv Kramarenko
 
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
 
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
 
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
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript FunctionsColin DeCarlo
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascriptguest4d57e6
 

La actualidad más candente (20)

Art of Javascript
Art of JavascriptArt of Javascript
Art of Javascript
 
The Sincerest Form of Flattery
The Sincerest Form of FlatteryThe Sincerest Form of Flattery
The Sincerest Form of Flattery
 
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
 
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
 
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
 
Core Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug HuntCore Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug Hunt
 
TDD, BDD, RSpec
TDD, BDD, RSpecTDD, BDD, RSpec
TDD, BDD, RSpec
 
Java concurrency questions and answers
Java concurrency questions and answers Java concurrency questions and answers
Java concurrency questions and answers
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScript
 
Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015Polyglot automation - QA Fest - 2015
Polyglot automation - QA Fest - 2015
 
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 Full Throttle
Java Full ThrottleJava Full Throttle
Java Full Throttle
 
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
 
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
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript Functions
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascript
 
Structure on a freeform world
Structure on a freeform worldStructure on a freeform world
Structure on a freeform world
 

Destacado

10 Tips for failing at microservices
10 Tips for failing at microservices10 Tips for failing at microservices
10 Tips for failing at microservicesDavid Schmitz
 
JavaLand 2017 - Pipeline as code
JavaLand 2017 - Pipeline as codeJavaLand 2017 - Pipeline as code
JavaLand 2017 - Pipeline as codeBert Jan Schrijver
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallChristoph Engelbert
 
Javaslang - Functional Sugar For Java
Javaslang - Functional Sugar For JavaJavaslang - Functional Sugar For Java
Javaslang - Functional Sugar For JavaDavid Schmitz
 
Welcome alexa, your personal assistant
Welcome alexa, your personal assistantWelcome alexa, your personal assistant
Welcome alexa, your personal assistantJohan Janssen
 
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)🎤 Hanno Embregts 🎸
 
FULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGT
FULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGTFULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGT
FULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGTCgt Seat Martorell
 
Retailers, Meet the Centennials
Retailers, Meet the CentennialsRetailers, Meet the Centennials
Retailers, Meet the CentennialsAptosRetail
 
Model of risk and return
Model of risk and returnModel of risk and return
Model of risk and returnTeguh Pribadi
 
Rapid Application Development with Docker
Rapid Application Development with DockerRapid Application Development with Docker
Rapid Application Development with DockerNiklas Heidloff
 
Social media for recruitng 1
Social media for recruitng 1Social media for recruitng 1
Social media for recruitng 1Alan Murdock
 
Secuencia de actividades inteligencias multiples
Secuencia de actividades inteligencias multiplesSecuencia de actividades inteligencias multiples
Secuencia de actividades inteligencias multiplesLucy Fernandez
 
Distribution and ex dividend dates-upto 28 mar-2017
Distribution and ex dividend dates-upto 28 mar-2017Distribution and ex dividend dates-upto 28 mar-2017
Distribution and ex dividend dates-upto 28 mar-2017RAFI SECURITIES (PVT.)LTD.
 
Entreprendre
EntreprendreEntreprendre
EntreprendreLe Shift
 
الادارة الرياضية
الادارة الرياضيةالادارة الرياضية
الادارة الرياضيةKhaled Ramadan
 
Science for Peace – Equal Education to Everyone!
Science for Peace – Equal Education to Everyone!Science for Peace – Equal Education to Everyone!
Science for Peace – Equal Education to Everyone!OpenPolicyFoundation
 
Sustaining Scholarly Infrastructures through Collective Action: The lessons t...
Sustaining Scholarly Infrastructures through Collective Action: The lessons t...Sustaining Scholarly Infrastructures through Collective Action: The lessons t...
Sustaining Scholarly Infrastructures through Collective Action: The lessons t...Cameron Neylon
 
Fast Fish Forum key take-outs 15 Mar 2017
Fast Fish Forum key take-outs 15 Mar 2017Fast Fish Forum key take-outs 15 Mar 2017
Fast Fish Forum key take-outs 15 Mar 2017BSGAfrica
 
Pravin Rajpal on How to Drive Innovation Driven Growth & Market Leadership
Pravin Rajpal on How to Drive Innovation Driven Growth & Market LeadershipPravin Rajpal on How to Drive Innovation Driven Growth & Market Leadership
Pravin Rajpal on How to Drive Innovation Driven Growth & Market LeadershipPravin Rajpal
 

Destacado (20)

10 Tips for failing at microservices
10 Tips for failing at microservices10 Tips for failing at microservices
10 Tips for failing at microservices
 
Migrating to Java 9 Modules
Migrating to Java 9 ModulesMigrating to Java 9 Modules
Migrating to Java 9 Modules
 
JavaLand 2017 - Pipeline as code
JavaLand 2017 - Pipeline as codeJavaLand 2017 - Pipeline as code
JavaLand 2017 - Pipeline as code
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) Wall
 
Javaslang - Functional Sugar For Java
Javaslang - Functional Sugar For JavaJavaslang - Functional Sugar For Java
Javaslang - Functional Sugar For Java
 
Welcome alexa, your personal assistant
Welcome alexa, your personal assistantWelcome alexa, your personal assistant
Welcome alexa, your personal assistant
 
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
 
FULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGT
FULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGTFULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGT
FULL/HOJA INFORMATIU/ INFORMATIVA 170329 CGT
 
Retailers, Meet the Centennials
Retailers, Meet the CentennialsRetailers, Meet the Centennials
Retailers, Meet the Centennials
 
Model of risk and return
Model of risk and returnModel of risk and return
Model of risk and return
 
Rapid Application Development with Docker
Rapid Application Development with DockerRapid Application Development with Docker
Rapid Application Development with Docker
 
Social media for recruitng 1
Social media for recruitng 1Social media for recruitng 1
Social media for recruitng 1
 
Secuencia de actividades inteligencias multiples
Secuencia de actividades inteligencias multiplesSecuencia de actividades inteligencias multiples
Secuencia de actividades inteligencias multiples
 
Distribution and ex dividend dates-upto 28 mar-2017
Distribution and ex dividend dates-upto 28 mar-2017Distribution and ex dividend dates-upto 28 mar-2017
Distribution and ex dividend dates-upto 28 mar-2017
 
Entreprendre
EntreprendreEntreprendre
Entreprendre
 
الادارة الرياضية
الادارة الرياضيةالادارة الرياضية
الادارة الرياضية
 
Science for Peace – Equal Education to Everyone!
Science for Peace – Equal Education to Everyone!Science for Peace – Equal Education to Everyone!
Science for Peace – Equal Education to Everyone!
 
Sustaining Scholarly Infrastructures through Collective Action: The lessons t...
Sustaining Scholarly Infrastructures through Collective Action: The lessons t...Sustaining Scholarly Infrastructures through Collective Action: The lessons t...
Sustaining Scholarly Infrastructures through Collective Action: The lessons t...
 
Fast Fish Forum key take-outs 15 Mar 2017
Fast Fish Forum key take-outs 15 Mar 2017Fast Fish Forum key take-outs 15 Mar 2017
Fast Fish Forum key take-outs 15 Mar 2017
 
Pravin Rajpal on How to Drive Innovation Driven Growth & Market Leadership
Pravin Rajpal on How to Drive Innovation Driven Growth & Market LeadershipPravin Rajpal on How to Drive Innovation Driven Growth & Market Leadership
Pravin Rajpal on How to Drive Innovation Driven Growth & Market Leadership
 

Similar a Javaslang Talk @ Javaland 2017

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
 
JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...
JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...
JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...Leonardo De Moura Rocha Lima
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group RheinlandDavid Schmitz
 
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
 
Kotlin – the future of android
Kotlin – the future of androidKotlin – the future of android
Kotlin – the future of androidDJ Rausch
 
To inject or not to inject: CDI is the question
To inject or not to inject: CDI is the questionTo inject or not to inject: CDI is the question
To inject or not to inject: CDI is the questionAntonio Goncalves
 
Kotlin: forse è la volta buona (Trento)
Kotlin: forse è la volta buona (Trento)Kotlin: forse è la volta buona (Trento)
Kotlin: forse è la volta buona (Trento)Davide Cerbo
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptGuy Royse
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkDaniel Spector
 
Боремся с NPE вместе с Kotlin, Павел Шацких СберТех
Боремся с NPE вместе с Kotlin, Павел Шацких СберТехБоремся с NPE вместе с Kotlin, Павел Шацких СберТех
Боремся с NPE вместе с Kotlin, Павел Шацких СберТехСбертех | SberTech
 
Functional Java 8 - Introduction
Functional Java 8 - IntroductionFunctional Java 8 - Introduction
Functional Java 8 - IntroductionŁukasz Biały
 
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
 
Scala uma poderosa linguagem para a jvm
Scala   uma poderosa linguagem para a jvmScala   uma poderosa linguagem para a jvm
Scala uma poderosa linguagem para a jvmIsaias Barroso
 
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...GreeceJS
 
Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!Eric Phan
 
Not your father's tests
Not your father's testsNot your father's tests
Not your father's testsSean P. Floyd
 

Similar a Javaslang Talk @ Javaland 2017 (20)

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
 
JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...
JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...
JavaOne 2017 - JNoSQL: The Definitive Solution for Java and NoSQL Database [C...
 
Clojure class
Clojure classClojure class
Clojure class
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group Rheinland
 
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)
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
 
Kotlin – the future of android
Kotlin – the future of androidKotlin – the future of android
Kotlin – the future of android
 
To inject or not to inject: CDI is the question
To inject or not to inject: CDI is the questionTo inject or not to inject: CDI is the question
To inject or not to inject: CDI is the question
 
Kotlin: forse è la volta buona (Trento)
Kotlin: forse è la volta buona (Trento)Kotlin: forse è la volta buona (Trento)
Kotlin: forse è la volta buona (Trento)
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
Beyond java8
Beyond java8Beyond java8
Beyond java8
 
Боремся с NPE вместе с Kotlin, Павел Шацких СберТех
Боремся с NPE вместе с Kotlin, Павел Шацких СберТехБоремся с NPE вместе с Kotlin, Павел Шацких СберТех
Боремся с NPE вместе с Kotlin, Павел Шацких СберТех
 
Scala ntnu
Scala ntnuScala ntnu
Scala ntnu
 
Functional Java 8 - Introduction
Functional Java 8 - IntroductionFunctional Java 8 - Introduction
Functional Java 8 - Introduction
 
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
 
Scala uma poderosa linguagem para a jvm
Scala   uma poderosa linguagem para a jvmScala   uma poderosa linguagem para a jvm
Scala uma poderosa linguagem para a jvm
 
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
 
Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!
 
Not your father's tests
Not your father's testsNot your father's tests
Not your father's tests
 

Más de 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
 
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
 
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
 
Docker for the Brave
Docker for the BraveDocker for the Brave
Docker for the BraveDavid Schmitz
 
Spring boot - Getting Started
Spring boot - Getting StartedSpring boot - Getting Started
Spring boot - Getting StartedDavid Schmitz
 

Más de David Schmitz (13)

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)
 
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
 
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
 
Docker for the Brave
Docker for the BraveDocker for the Brave
Docker for the Brave
 
Spring boot - Getting Started
Spring boot - Getting StartedSpring boot - Getting Started
Spring boot - Getting Started
 

Último

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 

Último (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

Javaslang Talk @ Javaland 2017