React in 40 minutes (JCON)

R 
 
40
M
Maarten
Mulders
(@mthmulders)
#reactin40mins
“React
is
a
library
for
declaratively
building
user
interfaces
using
JavaScript
and
(optionally)
XML.
Maarten
Mulders
(@mthmulders)
#reactin40mins
R 
 

No
two-way
data
binding
No
templating
language
Just
user
interface
(no
routing,
no
HTTP
client)
Plain
JavaScript
(or
add
JSX,
TypeScript,
...)
Virtual
DOM
vs.
actual
DOM
Maarten
Mulders
(@mthmulders)
#reactin40mins
M 
J S
Maarten
Mulders
(@mthmulders)
#reactin40mins
C
EUR
class
Amount
{




constructor(currency,
value)
{








this.currency
=
currency;








this.value
=
value;




}




getCurrency()
{








return
this.currency;




}
}
const
text
=
new
Amount('EUR',
15).getCurrency();
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
7
8
9
10
11
12
13
Maarten
Mulders
(@mthmulders)
#reactin40mins
F
true
function
isEven(number)
{



return
number
%
2
==
0;
}
const
text
=
isEven(42);
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
Maarten
Mulders
(@mthmulders)
#reactin40mins
A 
F
false
const
isEven
=
(number)
=>
{



return
number
%
2
==
0;
}
const
text
=
isEven(43);
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
Maarten
Mulders
(@mthmulders)
#reactin40mins
O 
D
Jane
Doe
const
person
=
{
name
:
'Jane
Doe',
age:
42,
occupancy:
'JavaScript
dev'
};
const
{
name,
age
}
=
person;
const
text
=
name;
document.getElementById('app').innerText
=
text;
1
2
3
4
5
Maarten
Mulders
(@mthmulders)
#reactin40mins
A 
D
two
const
numbers
=
[
'one',
'two',
'three'
];
const
[
first,
second
]
=
numbers;
const
text
=
second;
document.getElementById('app').innerText
=
text;
1
2
3
4
5
Maarten
Mulders
(@mthmulders)
#reactin40mins
O 
S 
N
42
const
name
=
'Jane
Doe';
const
age
=
42;
const
person
=
{
name,
age
};
const
text
=
age;
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
Maarten
Mulders
(@mthmulders)
#reactin40mins
S 
I
EUR
150
class
Amount
{




constructor(currency,
value)
{








this.currency
=
currency;








this.value
=
value;




}




toString()
{








return
`this.currency{this.currency}
{this.value}`;




}
}
const
text
=
new
Amount('EUR',
150).toString();
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
7
8
9
10
11
12
13
Maarten
Mulders
(@mthmulders)
#reactin40mins
B 
JSX
Maarten
Mulders
(@mthmulders)
#reactin40mins
W 
 
JSX
A
syntax
extension
to
JavaScript
real
XML,
not
a
string
of
characters
allows
embedded
expressions
supports
attributes
Can
be
nested
Automatic
XSS
prevention
But
it
has
its
limitations
Needs
to
be
transpiled
to
JavaScript
e.g.
React.createElement(...)
Maarten
Mulders
(@mthmulders)
#reactin40mins
E
Elements
can
be
regular
DOM
elements...
(for
now,
but
not
for
long)
Hi!
const
element
=
<div>Hi!</div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin40mins
A
Elements
can
have
attributes,
but
they
can
have
different
names
than
HTML
attributes:
Hi!
const
element
=
<div
className='red­text'>Hi!</div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin40mins
...
and
they
can
behave
differently:
Hi!
const
style
=
{
color:
'red',
fontWeight:
'bold'
};
const
element
=
<div
style={
style
}>Hi!</div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
3
Maarten
Mulders
(@mthmulders)
#reactin40mins
S 
R 
N
Values
must
have
a
single
root
node
(or
an
array)
x
y
const
element
=
<><div>x</div><div>y</div></>
ReactDOM.render(element,
document.getElementById('app'));
1
2
3
Maarten
Mulders
(@mthmulders)
#reactin40mins
C
Function
that
takes
props
(think:
arguments)
and
returns
a
React
element.
Hello,
world!
const
Greeter
=
(props)
=>
<div>Hello,
world!</div>
ReactDOM.render(<Greeter
/>,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin40mins
A 
JSX
Maarten
Mulders
(@mthmulders)
#reactin40mins
E 
 
JSX
The
answer
to
the
ultimate
question
of
life,
universe
and
everything:
 42
const
answerToQuestionOfLife
=
40
+
2;
const
askQuestionOfLife
=
()
=>
answerToQuestionOfLife;
const
Example
=
()
=>
<div>




The
answer
to
the
ultimate
question
of
life,




universe
and
everything:




&nbsp;




<strong>{
askQuestionOfLife()
}</strong>
</div>;
ReactDOM.render(<Example
/>,
document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
Maarten
Mulders
(@mthmulders)
#reactin40mins
O 
 
 
 
/

Hello
JCON!
const
Greeter
=
(props)
=>
<div>Hello
{
props.name
}!</div>
ReactDOM.render(<Greeter
name='JCON'
/>,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin40mins
O 
 
 
 
/

Alternatively,
using
object
decomposition:
Hello
JCON!
const
Greeter
=
({
name
})
=>
<div>Hello
{
name
}!</div>
ReactDOM.render(<Greeter
name='JCON'
/>,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin40mins
C 
 
 
JSX
Clapping
hands...
const
ClapHands
=
()
=>
<span>Clapping
hands...</span>;
const
DryTears
=
()
=>
<span>Drying
tears...</span>;
const
ShowEmotion
=
({
happy
})
=>
happy
?
<ClapHands
/>
:
<DryTears
/>;
ReactDOM.render(<ShowEmotion
happy={
true
}
/>,

document.getElementById('app'));
1
2
3
4
5
6
7
Maarten
Mulders
(@mthmulders)
#reactin40mins
C 
 
 
JSX
(2)
HEIA
PHIA
const
Ticker
=
({
symbol
})
=>
<div>{
symbol
}</div>;
const
TickerList
=
({
symbols
})
=>
symbols.map(

(symbol)
=>
<Ticker
symbol={
symbol
}
/>
);
const
symbols
=
['HEIA',
'PHIA'];
ReactDOM.render(<TickerList
symbols={
symbols
}
/>,

document.getElementById('app'));
1
2
3
4
5
6
7
8
9
Maarten
Mulders
(@mthmulders)
#reactin40mins
R 
 M
Maarten
Mulders
(@mthmulders)
#reactin40mins
A 
 

So
far,
we've
written
components
and
wired
them
together.
Babel
or
tsc
transpiles
them
to
React.createElement(...)
invocations:
<Greeter
name={
'World'
}
 



/**
transpiles
into
 



React.createElement(Greeter,
{
name:
'World'
},
null)

Maarten
Mulders
(@mthmulders)
#reactin40mins
A 
 

The
React.createElement
invocations
form
a
tree
of
components.
React
maintains
a
virtual
DOM
based
on
your
component
tree.
The
virtual
DOM
is
compared
to
the
actual
DOM.
Only
necessary
changes
are
executed.
Maarten
Mulders
(@mthmulders)
#reactin40mins
R
React
syncs
the
virtual
and
the
actual
DOM
based
on
two
assumptions:
1.
If
two
elements
are
of
different
type,
the
(sub)
tree
will
be
different.
2.
The
key
prop
identifies
child
elements
over
re-renders.
This
tells
React
what
makes
two
elements
"the
same".
Maarten
Mulders
(@mthmulders)
#reactin40mins
1 
E 
 
 


Hallo,
JCON!
const
DutchGreeter
=
({
name
})
=>
<div> 
Hallo,
{
name
}!</div>;
const
EnglishGreeter
=
({
name
})
=>
<div> 
Hello,
{
name
}!</div>;
const
GermanGreeter
=
({
name
})
=>
<div> 
Hallo,
{
name
}!</div>;
const
App
=
({
lang,
name
})
=>
{


switch(lang)
{




case
'de':
return
<GermanGreeter
name={
name
}
/>




case
'nl':
return
<DutchGreeter
name={
name
}
/>




case
'en':




default

:
return
<EnglishGreeter
name={
name
}
/>


}
};
ReactDOM.render(<App
name='JCON'
lang='nl'
/>,


document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
11
12
13
Maarten
Mulders
(@mthmulders)
#reactin40mins
2 
T 
KEY

 
const
randomPrice
=
()
=>
100
+
Math.floor(Math.random()
*
900)
const
Ticker
=
({
symbol
})
=>
<span>{
symbol
}:
{
randomPrice()
}
&mdash;
</spa
const
symbols
=
['HEIA',
'PHIA',
'ASML',
'KLMR'].map(

(symbol)
=>
<Ticker
key={
key
}
symbol={
symbol
}
/>
);
ReactDOM.render(<Shuffle
children={
symbols
}
/>,

document.getElementById('app'));
1
2
3
4
5
6
7
8
9
Maarten
Mulders
(@mthmulders)
#reactin40mins
Y 
E
1.
Keeping
state
2.
Reacting
to
events
3.
Fetching
data
over
HTTP
4.
Storing
data
Maarten
Mulders
(@mthmulders)
#reactin40mins
L 
S 
 
 
C
Counter:
0
const
Counter
=
()
=>
{



const
[
counter,
setCounter
]
=
React.useState(0);



return
<div>Counter:
{
counter
}</div>
}
ReactDOM.render(<Counter
/>,
document.getElementById('app'));
1
2
3
4
5
6
7
Maarten
Mulders
(@mthmulders)
#reactin40mins
R 
 
E
Similar
to
DOM
event
handling,
but
1.
event
names
are
different:
onClick
vs
onclick.
2.
event
handlers
are
always
functions,
never
strings.
3.
event
handlers
are
bound
to
a
component,
should
not
live
globally.
4.
event
handlers
receive
an
synthetic
event
-
browser-agnostic!
Maarten
Mulders
(@mthmulders)
#reactin40mins
C 
C
Counter:
0

+ 
  ‑
const
Counter
=
()
=>
{




const
[
counter,
setCounter
]
=
React.useState(0);




const
increase
=
()
=>
setCounter(counter
+
1);




const
decrease
=
()
=>
setCounter(counter
­
1);




return
<div>Counter:
{
counter
}<br
/>
















<button
onClick={
increase
}>


+


</button>
&nbsp;
















<button
onClick={
decrease
}>


­


</button>











</div>
}
ReactDOM.render(<Counter
/>,
document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
11
12
Maarten
Mulders
(@mthmulders)
#reactin40mins
C 
C


Greet!
const
Greeter
=
()
=>
{




const
[
name,
setName
]
=
React.useState('');




const
updateName
=
(e)
=>
setName(e.target.value);




const
callback
=
()
=>
alert(`Hi
${name}`);




return
<div><input
type='text'
onChange={
updateName
}
></input><br
/>
















<button
onClick={
callback
}>Greet
{
name
}!</button></div>
}
ReactDOM.render(<Greeter
/>,
document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
Maarten
Mulders
(@mthmulders)
#reactin40mins
F 
 
 
HTTP
What
we
need:
1.
A
bit
of
Plain
Old
JavaScript
to
fetch
some
data
2.
A
component
to
show
the
fetched
data
Maarten
Mulders
(@mthmulders)
#reactin40mins
1 
A
 
 
API




















const
url
=
'https: hqd7fvgovgs2jyoosjgryaylcy.apigateway.eu frankfurt-1.oci














.customer oci.com/v1/joke';

const
getJoke
=
()
 
{





return
fetch(url);







};

Maarten
Mulders
(@mthmulders)
#reactin40mins
1 
A
 
 
API
const
checkStatus
=
(response)
 
{





if
(response.status
 
200
 
response.status
<
300)
{









return
Promise.resolve(response);





}
else
{









return
Promise.reject(`HTTP
${response.status}:
${response.statusText}`);





}

};







const
url
=
'https: hqd7fvgovgs2jyoosjgryaylcy.apigateway.eu frankfurt-1.oci














.customer oci.com/v1/joke';

const
getJoke
=
()
 
{





return
fetch(url)

















.then(checkStatus);





};

Maarten
Mulders
(@mthmulders)
#reactin40mins
1 
A
 
 
API
const
checkStatus
=
(response)
 
{





if
(response.status
 
200
 
response.status
<
300)
{









return
Promise.resolve(response);





}
else
{









return
Promise.reject(`HTTP
${response.status}:
${response.statusText}`);





}

};



const
parseJson
=
(response)
 
response.json();



const
url
=
'https: hqd7fvgovgs2jyoosjgryaylcy.apigateway.eu frankfurt-1.oci














.customer oci.com/v1/joke';

const
getJoke
=
()
 
{





return
fetch(url)

















.then(checkStatus)

















.then(parseJson);



};

Maarten
Mulders
(@mthmulders)
#reactin40mins
1 
A
 
 
API
const
checkStatus
=
(response)
 
{





if
(response.status
 
200
 
response.status
<
300)
{









return
Promise.resolve(response);





}
else
{









return
Promise.reject(`HTTP
${response.status}:
${response.statusText}`);





}

};



const
parseJson
=
(response)
 
response.json();



const
url
=
'https: hqd7fvgovgs2jyoosjgryaylcy.apigateway.eu frankfurt-1.oci














.customer oci.com/v1/joke';

const
getJoke
=
()
 
{





return
fetch(url)

















.then(checkStatus)

















.then(parseJson)

















.then(response
 
response.joke);

};

Maarten
Mulders
(@mthmulders)
#reactin40mins
2 
A
 
 
 
 
 

My
sweater
had
a
lot
of
static
electricity.
The
store
gave
me
a
new
one,
free
of
charge.
const
RandomJoke
=
()
=>
{




const
[
{
joke,
loading
},
setState
]
=
React.useState({
loading:
true
});




const
fetchRandomJoke
=
async
()
=>
{








//
Does
the
actual
API
call
to
Oracle
Cloud
function,
see
before.








const
joke
=
await
getJoke();








setState({
loading:
false,
joke
})




}




React.useEffect(()
=>
{








fetchRandomJoke()




},
[
]);




if
(loading)
return
<div>Loading...</div>




return
<div>{
joke
}</div>;
};
ReactDOM.render(<RandomJoke
/>,
document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Maarten
Mulders
(@mthmulders)
#reactin40mins
S 
 
 
 

Local
Storage
&
Session
Storage
Part
of
the

Stores
and
retrieves
string
values
Serialise
objects
with
JSON.stringify()
Deserialise
with
JSON.parse()
Persistent
during
browser
session
with
sessionStorage
over
browser
shutdowns
with
localStorage
Web
Storage
API
Maarten
Mulders
(@mthmulders)
#reactin40mins
D 
A
1.
Debugging
2.
Testing
3.
Building
Maarten
Mulders
(@mthmulders)
#reactin40mins
D
Install
the
React
Developer
Tools
for
your
browser
of
choice.
Maarten
Mulders
(@mthmulders)
#reactin40mins
I 
C 
T
Maarten
Mulders
(@mthmulders)
#reactin40mins
D
Maarten
Mulders
(@mthmulders)
#reactin40mins
T 
 

Use
Jest
(test
platform
&
library)
and
(React)
Testing
Library
(testing
utilities)
Render
a
React
component
in
a
unit
test
Make
assertions
about
its
output
and
behaviour
Maarten
Mulders
(@mthmulders)
#reactin40mins
T 
 
 
C
import
{
render,
screen
}
from
'@testing library/react'



describe('<Greeter
 ',
()
 
{





it('should
render
text',
()
 
{









render(<Greeter
name='JCON'
 );









expect(screen.getByText(/hello,
jcon/i)).toBeVisible();





});

});

Maarten
Mulders
(@mthmulders)
#reactin40mins
T 
B 
 
 
C
import
{
f reEvent,
render,
screen
}
from
'@testing library/react'



describe('<AwesomeButton
 ',
()
 
{





it('should
invoke
action
on
click',
()
 
{









const
callback
=
jest.mock();









render(<AwesomeButton
action={
callback
}
 );









f reEvent.click(screen.getByRole('link'));









expect(dummy).toHaveBeenCalled();





});

});

Maarten
Mulders
(@mthmulders)
#reactin40mins
D 
 
S 
 

tl;dr:
use
 
(CRA)
Uses
Webpack,
Babel,
ESLint
and
a
dozen
of
other
tools
Tested
to
work
together
Live-reloading
of
changed
code
Source
maps
for
easy
debugging
Have
an
ready-to-go
app
in
one
command
Create
React
App
npx
create react app
my next killer app




or



npm
i
 g
create react app

create react app
my next killer app

Maarten
Mulders
(@mthmulders)
#reactin40mins
U 
CRA
npm
run
start
to
start
developing
npm
run
build
to
create
a
production
build
npm
run
test
to
run
unit
tests
Maarten
Mulders
(@mthmulders)
#reactin40mins
T 

Use
Create
React
App
Think
in
(small)
components
Think
declaratively
U 

Create
React
App:

Dad
Jokes
API:

Philippe
De
Ryck
on
"Building
Secure
React
Applications":
https://bit.ly/c-r-a
https://bit.ly/dad-joke-api
http://bit.ly/secure-react
Maarten
Mulders
(@mthmulders)
#reactin40mins
1 of 52

Recommended

React in 50 minutes (Bucharest Software Craftsmanship Community) by
React in 50 minutes (Bucharest Software Craftsmanship Community)React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)Maarten Mulders
244 views56 slides
React in 50 Minutes (JNation) by
 React in 50 Minutes (JNation)  React in 50 Minutes (JNation)
React in 50 Minutes (JNation) Maarten Mulders
143 views59 slides
React in 50 Minutes (OpenValue) by
React in 50 Minutes (OpenValue) React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue) Maarten Mulders
162 views56 slides
DZone_RC_RxJS by
DZone_RC_RxJSDZone_RC_RxJS
DZone_RC_RxJSLuis Atencio
226 views6 slides
React in 40 minutes (Voxxed Days Romania) by
React in 40 minutes (Voxxed Days Romania) React in 40 minutes (Voxxed Days Romania)
React in 40 minutes (Voxxed Days Romania) Maarten Mulders
93 views52 slides
React in 50 Minutes (DevNexus) by
React in 50 Minutes (DevNexus) React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus) Maarten Mulders
114 views53 slides

More Related Content

Similar to React in 40 minutes (JCON)

Reactive programming every day by
Reactive programming every dayReactive programming every day
Reactive programming every dayVadym Khondar
463 views43 slides
Transitioning from SQL to MongoDB by
Transitioning from SQL to MongoDBTransitioning from SQL to MongoDB
Transitioning from SQL to MongoDBMongoDB
26.8K views43 slides
Benefits of Using MongoDB Over RDBMSs by
Benefits of Using MongoDB Over RDBMSsBenefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSsMongoDB
7.2K views63 slides
Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ... by
Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ...Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ...
Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ...Markus Scheidgen
753 views24 slides
Functional Programming in Java - Code for Maintainability by
Functional Programming in Java - Code for MaintainabilityFunctional Programming in Java - Code for Maintainability
Functional Programming in Java - Code for MaintainabilityMarcin Stepien
1.7K views21 slides
10 ways to make your code rock by
10 ways to make your code rock10 ways to make your code rock
10 ways to make your code rockmartincronje
413 views27 slides

Similar to React in 40 minutes (JCON) (20)

Reactive programming every day by Vadym Khondar
Reactive programming every dayReactive programming every day
Reactive programming every day
Vadym Khondar463 views
Transitioning from SQL to MongoDB by MongoDB
Transitioning from SQL to MongoDBTransitioning from SQL to MongoDB
Transitioning from SQL to MongoDB
MongoDB26.8K views
Benefits of Using MongoDB Over RDBMSs by MongoDB
Benefits of Using MongoDB Over RDBMSsBenefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSs
MongoDB7.2K views
Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ... by Markus Scheidgen
Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ...Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ...
Metamodeling vs Metaprogramming, A Case Study on Developing Client Libraries ...
Markus Scheidgen753 views
Functional Programming in Java - Code for Maintainability by Marcin Stepien
Functional Programming in Java - Code for MaintainabilityFunctional Programming in Java - Code for Maintainability
Functional Programming in Java - Code for Maintainability
Marcin Stepien1.7K views
10 ways to make your code rock by martincronje
10 ways to make your code rock10 ways to make your code rock
10 ways to make your code rock
martincronje413 views
Functional patterns and techniques in C# by Péter Takács
Functional patterns and techniques in C#Functional patterns and techniques in C#
Functional patterns and techniques in C#
Péter Takács1K views
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM by Mario Fusco
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STMConcurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Mario Fusco5K views
Blockchain Developers Malaysia Meetup #4 - CRUDy Ethereum Contracts, Wallet W... by Mark Smalley
Blockchain Developers Malaysia Meetup #4 - CRUDy Ethereum Contracts, Wallet W...Blockchain Developers Malaysia Meetup #4 - CRUDy Ethereum Contracts, Wallet W...
Blockchain Developers Malaysia Meetup #4 - CRUDy Ethereum Contracts, Wallet W...
Mark Smalley513 views
Microservices in Go_Dessi_Massimiliano_Codemotion_2017_Rome by Massimiliano Dessì
Microservices in Go_Dessi_Massimiliano_Codemotion_2017_Rome Microservices in Go_Dessi_Massimiliano_Codemotion_2017_Rome
Microservices in Go_Dessi_Massimiliano_Codemotion_2017_Rome
Is your C# optimized by Woody Pewitt
Is your C# optimizedIs your C# optimized
Is your C# optimized
Woody Pewitt1.1K views
Spark Summit EU talk by Francois Garillot and Mohamed Kafsi by Spark Summit
Spark Summit EU talk by Francois Garillot and Mohamed KafsiSpark Summit EU talk by Francois Garillot and Mohamed Kafsi
Spark Summit EU talk by Francois Garillot and Mohamed Kafsi
Spark Summit1K views
Mobility insights at Swisscom - Understanding collective mobility in Switzerland by François Garillot
Mobility insights at Swisscom - Understanding collective mobility in SwitzerlandMobility insights at Swisscom - Understanding collective mobility in Switzerland
Mobility insights at Swisscom - Understanding collective mobility in Switzerland
François Garillot871 views
Java Svet - Communication Between Android App Components by Aleksandar Ilić
Java Svet - Communication Between Android App ComponentsJava Svet - Communication Between Android App Components
Java Svet - Communication Between Android App Components
Aleksandar Ilić1.9K views
Java Svet - Communication Between Android App Components by PSTechSerbia
Java Svet - Communication Between Android App ComponentsJava Svet - Communication Between Android App Components
Java Svet - Communication Between Android App Components
PSTechSerbia1.2K views
Advanced Interfaces and Repositories in Laravel by Jonathan Behr
Advanced Interfaces and Repositories in LaravelAdvanced Interfaces and Repositories in Laravel
Advanced Interfaces and Repositories in Laravel
Jonathan Behr9.4K views
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ... by MongoDB
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
MongoDB1.5K views

More from Maarten Mulders

What's cooking in Maven? (Devoxx FR) by
What's cooking in Maven? (Devoxx FR)What's cooking in Maven? (Devoxx FR)
What's cooking in Maven? (Devoxx FR)Maarten Mulders
173 views25 slides
Making Maven Marvellous (Devnexus) by
Making Maven Marvellous (Devnexus)Making Maven Marvellous (Devnexus)
Making Maven Marvellous (Devnexus)Maarten Mulders
149 views13 slides
Making Maven Marvellous (Java.il) by
Making Maven Marvellous (Java.il)Making Maven Marvellous (Java.il)
Making Maven Marvellous (Java.il)Maarten Mulders
146 views13 slides
Making Maven Marvellous (JavaZone) by
Making Maven Marvellous (JavaZone)Making Maven Marvellous (JavaZone)
Making Maven Marvellous (JavaZone)Maarten Mulders
90 views13 slides
Dapr: Dinosaur or Developer's Dream? (v1) by
Dapr: Dinosaur or Developer's Dream? (v1)Dapr: Dinosaur or Developer's Dream? (v1)
Dapr: Dinosaur or Developer's Dream? (v1)Maarten Mulders
132 views42 slides
Dapr: Dinosaur or Developer Dream? (J-Fall) by
Dapr: Dinosaur or Developer Dream? (J-Fall)Dapr: Dinosaur or Developer Dream? (J-Fall)
Dapr: Dinosaur or Developer Dream? (J-Fall)Maarten Mulders
137 views42 slides

More from Maarten Mulders(20)

What's cooking in Maven? (Devoxx FR) by Maarten Mulders
What's cooking in Maven? (Devoxx FR)What's cooking in Maven? (Devoxx FR)
What's cooking in Maven? (Devoxx FR)
Maarten Mulders173 views
Making Maven Marvellous (Devnexus) by Maarten Mulders
Making Maven Marvellous (Devnexus)Making Maven Marvellous (Devnexus)
Making Maven Marvellous (Devnexus)
Maarten Mulders149 views
Making Maven Marvellous (Java.il) by Maarten Mulders
Making Maven Marvellous (Java.il)Making Maven Marvellous (Java.il)
Making Maven Marvellous (Java.il)
Maarten Mulders146 views
Dapr: Dinosaur or Developer's Dream? (v1) by Maarten Mulders
Dapr: Dinosaur or Developer's Dream? (v1)Dapr: Dinosaur or Developer's Dream? (v1)
Dapr: Dinosaur or Developer's Dream? (v1)
Maarten Mulders132 views
Dapr: Dinosaur or Developer Dream? (J-Fall) by Maarten Mulders
Dapr: Dinosaur or Developer Dream? (J-Fall)Dapr: Dinosaur or Developer Dream? (J-Fall)
Dapr: Dinosaur or Developer Dream? (J-Fall)
Maarten Mulders137 views
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour) by Maarten Mulders
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
Maarten Mulders128 views
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour) by Maarten Mulders
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
Maarten Mulders114 views
SSL/TLS for Mortals (UtrechtJUG) by Maarten Mulders
SSL/TLS for Mortals (UtrechtJUG)SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)
Maarten Mulders202 views
Building a DSL with GraalVM (javaBin online) by Maarten Mulders
Building a DSL with GraalVM (javaBin online)Building a DSL with GraalVM (javaBin online)
Building a DSL with GraalVM (javaBin online)
Maarten Mulders221 views
SSL/TLS for Mortals (Lockdown Lecture) by Maarten Mulders
SSL/TLS for Mortals (Lockdown Lecture)SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)
Maarten Mulders122 views
Building a DSL with GraalVM (CodeOne) by Maarten Mulders
Building a DSL with GraalVM (CodeOne)Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)
Maarten Mulders160 views
Building a DSL with GraalVM (Full Stack Antwerpen) by Maarten Mulders
Building a DSL with GraalVM (Full Stack Antwerpen)Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)
Maarten Mulders169 views
Building a DSL with GraalVM (Devoxx PL) by Maarten Mulders
Building a DSL with GraalVM (Devoxx PL) Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL)
Maarten Mulders253 views
Building a DSL with GraalVM (VoxxedDays Luxembourg) by Maarten Mulders
Building a DSL with GraalVM (VoxxedDays Luxembourg)Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Maarten Mulders239 views
Mastering Microservices with Kong (DevoxxUK 2019) by Maarten Mulders
Mastering Microservices with Kong (DevoxxUK 2019)Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)
Maarten Mulders304 views

Recently uploaded

Ransomware is Knocking your Door_Final.pdf by
Ransomware is Knocking your Door_Final.pdfRansomware is Knocking your Door_Final.pdf
Ransomware is Knocking your Door_Final.pdfSecurity Bootcamp
59 views46 slides
PRODUCT PRESENTATION.pptx by
PRODUCT PRESENTATION.pptxPRODUCT PRESENTATION.pptx
PRODUCT PRESENTATION.pptxangelicacueva6
15 views1 slide
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...James Anderson
92 views32 slides
"Running students' code in isolation. The hard way", Yurii Holiuk by
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk Fwdays
17 views34 slides
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveNetwork Automation Forum
34 views35 slides
Info Session November 2023.pdf by
Info Session November 2023.pdfInfo Session November 2023.pdf
Info Session November 2023.pdfAleksandraKoprivica4
13 views15 slides

Recently uploaded(20)

GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson92 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays17 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Case Study Copenhagen Energy and Business Central.pdf by Aitana
Case Study Copenhagen Energy and Business Central.pdfCase Study Copenhagen Energy and Business Central.pdf
Case Study Copenhagen Energy and Business Central.pdf
Aitana16 views
STPI OctaNE CoE Brochure.pdf by madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb14 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 views
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2218 views
The Forbidden VPN Secrets.pdf by Mariam Shaba
The Forbidden VPN Secrets.pdfThe Forbidden VPN Secrets.pdf
The Forbidden VPN Secrets.pdf
Mariam Shaba20 views
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10300 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman36 views
"Node.js Development in 2024: trends and tools", Nikita Galkin by Fwdays
"Node.js Development in 2024: trends and tools", Nikita Galkin "Node.js Development in 2024: trends and tools", Nikita Galkin
"Node.js Development in 2024: trends and tools", Nikita Galkin
Fwdays11 views

React in 40 minutes (JCON)