SlideShare a Scribd company logo
1 of 56
Download to read offline
R 
 
50
M
Maarten
Mulders
(@mthmulders)#reactin50mins
“React
is
a
library
for
declaratively
building
user
interfaces
using
JavaScript
and
(optionally)
XML.
Maarten
Mulders
(@mthmulders)#reactin50mins
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)#reactin50mins
M 
J S
Maarten
Mulders
(@mthmulders)#reactin50mins
C
class
Amount
{




constructor(currency,
value)
{








this.currency
=
currency;








this.value
=
value;




}




getCurrency()
{








return
this.currency;




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



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



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




constructor(currency,
value)
{








this.currency
=
currency;








this.value
=
value;




}




toString()
{








return
``;




}
}
const
text
=
new
Amount('USD',
150).toString();
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
7
8
9
10
11
12
13
Maarten
Mulders
(@mthmulders)#reactin50mins
B 
JSX
Maarten
Mulders
(@mthmulders)#reactin50mins
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
Needs
to
be
transpiled
to
JavaScript
e.g.
React.createElement(...)
Maarten
Mulders
(@mthmulders)#reactin50mins
E
Elements
can
be
regular
DOM
elements...
(for
now,
but
not
for
long)
const
element
=
<div></div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)#reactin50mins
A
Elements
can
have
attributes...
const
element
=
<div
id='example'></div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)#reactin50mins
...
but
they
can
have
different
names
than
HTML
attributes:
const
element
=
<div
className='red­text'></div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)#reactin50mins
...
and
they
can
behave
differently:
const
style
=
{
color:
'red',
fontWeight:
'bold'
};
const
element
=
<div
style={
style
}></div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
3
Maarten
Mulders
(@mthmulders)#reactin50mins
S 
R 
N
Values
must
have
a
single
root
node
(or
an
array)
const
element
=
<div>x</div><div>y</div>
ReactDOM.render(element,
document.getElementById('app'));
unknown:
Adjacent
JSX
elements
must
be
wrapped
in
an
enclosing
tag.
Did
you
want
a
JSX
fragment
<>


>
1
|
const
element
=
<div>x</div><div>y</div>





|




























^



2
|
ReactDOM.render(element,
document.getElementById('app'));



3
|

1
2
3
Maarten
Mulders
(@mthmulders)#reactin50mins
C
Function
that
takes
props
(think:
arguments)
and
returns
a
React
element.
Hello,
OpenValue!
const
Greeter
=
(props)
=>
<div>Hello,
OpenValue!</div>
ReactDOM.render(<Greeter
/>,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)#reactin50mins
A 
JSX
Maarten
Mulders
(@mthmulders)#reactin50mins
E 
 
JSX
The
answer
to
the
ultimate
question
of
life,
universe
and
everything:
 
const
answerToQuestionOfLife
=
40
+
2;
const
askQuestionOfLife
=
()
=>
answerToQuestionOfLife;
const
Example
=
()
=>
<div>




The
answer
to
the
ultimate
question
of
life,




universe
and
everything:




&nbsp;




<strong>{

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

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

Alternatively,
using
object
decomposition:
Hello
!
const
Greeter
=
({
name
})
=>
<div>Hello
{
}!</div>
ReactDOM.render(<Greeter
name='OpenValue'
/>,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)#reactin50mins
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)#reactin50mins
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)#reactin50mins
R 
 M
Maarten
Mulders
(@mthmulders)#reactin50mins
A 
 

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



/**
transpiles
into
 



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

Maarten
Mulders
(@mthmulders)#reactin50mins
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)#reactin50mins
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.
Maarten
Mulders
(@mthmulders)#reactin50mins
1 
E 
 
 


Hallo,
OpenValue!
const
DutchGreeter
=
({
name
})
=>
<div> 
Hallo,
{
name
}!</div>;
const
EnglishGreeter
=
({
name
})
=>
<div> 
Hello,
{
name
}!</div>;
const
SpanishGreeter
=
({
name
})
=>
<div> 
¡Hola,
{
name
}!</div>;
const
App
=
({
lang,
name
})
=>
{


switch(lang)
{




case
'es':
return
<SpanishGreeter
name={
name
}
/>




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




case
'en':




default

:
return
<EnglishGreeter
name={
name
}
/>


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


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

HEIA
PHIA
const
Ticker
=
({
symbol
})
=>
<div>{
symbol
}</div>;
const
TickerList
=
({
symbols
})
=>
symbols.map(

(symbol)
=>
<Ticker
key={
symbol
}
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)#reactin50mins
Y 
E
1.
Keeping
state
2.
Reacting
to
events
3.
Fetching
data
over
HTTP
4.
Storing
data
Maarten
Mulders
(@mthmulders)#reactin50mins
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)#reactin50mins
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)#reactin50mins
C 
C
Counter:
0

+ 
  ‑
const
Counter
=
()
=>
{




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




const
increase
=
()
=>
setCounter();




const
decrease
=
()
=>
setCounter();




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)#reactin50mins
C 
C


Greet!
const
Greeter
=
()
=>
{




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




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




const
callback
=
()
=>
alert(``);




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)#reactin50mins
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)#reactin50mins
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)#reactin50mins
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)#reactin50mins
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)#reactin50mins
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)#reactin50mins
2 
A
 
 
 
 
 

Loading...
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();








//
?




}




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)#reactin50mins
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)#reactin50mins
D 
A
1.
Debugging
2.
Testing
3.
Building
Maarten
Mulders
(@mthmulders)#reactin50mins
D
Install
the
React
Developer
Tools
for
your
browser
of
choice.
Maarten
Mulders
(@mthmulders)#reactin50mins
I 
C 
T
Maarten
Mulders
(@mthmulders)#reactin50mins
D
Maarten
Mulders
(@mthmulders)#reactin50mins
T 
 

Use
Jest
(testing
platform
&
library)
and
Enzyme,
a
testing
utility
for
React
Render
a
React
component
in
a
unit
test
Make
assertions
about
its
output
and
behaviour
Maarten
Mulders
(@mthmulders)#reactin50mins
T 
 
 
C
import
{
shallow
}
from
'enzyme';



describe('<Greeter
 ',
()
 
{





it('should
render
text',
()
 
{









const
wrapper
=
shallow(<Greeter
name='DevNexus'
 );









expect(wrapper.text()).toBe('Hello
DevNexus');





});

});

Maarten
Mulders
(@mthmulders)#reactin50mins
T 
B 
 
 
C
import
{
shallow
}
from
'enzyme';



describe('<AwesomeButton
 ',
()
 
{





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









const
callback
=
jest.mock();









const
wrapper
=
mount(<AwesomeButton
action={
callback
}
 );









wrapper.f nd('a').simulate('click');









expect(dummy).toHaveBeenCalled();





});

});

Maarten
Mulders
(@mthmulders)#reactin50mins
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)#reactin50mins
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)#reactin50mins
G 
B
Maarten
Mulders
(@mthmulders)#reactin50mins
T 
R 
 
(C )
H
1.
Name
must
start
with
use!
2.
Only
use
in
React
function
components
not
in
classes
not
outside
React
components
Maarten
Mulders
(@mthmulders)#reactin50mins
C 
H
I
tried
to
organize
a
Hide
and
Seek
tournament,
but
I
eventually
gave
up.
Good
players
are
hard
to
find.
const
useRandomJoke
=
()
=>
{




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




const
fetchRandomJoke
=
async
()
=>
{








const
joke
=
await
getJoke();








setState({
loading:
false,
joke
});




}




React.useEffect(()
=>
{
fetchRandomJoke()
},
[
]);




return
{
loading,
joke
};
};
const
RandomJoke
=
({

})
=>
{




const
{
joke,
loading
}
=
useRandomJoke()




if
(loading)
return
<div>Loading...</div>;
1
2
3
4
5
6
7
8
9
10
11
12
13
14


Maarten
Mulders
(@mthmulders)#reactin50mins
T 

Use
Create
React
App
Think
in
(small)
components
Think
declaratively
I
❤

your
feedback
@

U 

Create
React
App:

Dad
Jokes
API:

schedule.devnexus.com
https://bit.ly/c-r-a
https://bit.ly/dad-joke-api
Maarten
Mulders
(@mthmulders)#reactin50mins

More Related Content

Similar to React in 50 Minutes (OpenValue)

Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
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 Fusco
 
10 ways to make your code rock
10 ways to make your code rock10 ways to make your code rock
10 ways to make your code rock
martincronje
 
ASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CSASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CS
tutorialsruby
 
ASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CSASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CS
tutorialsruby
 

Similar to React in 50 Minutes (OpenValue) (20)

React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)
 
Building web applications with React (Jfokus)
Building web applications with React (Jfokus)Building web applications with React (Jfokus)
Building web applications with React (Jfokus)
 
Vývojařská Plzeň - React
Vývojařská Plzeň - ReactVývojařská Plzeň - React
Vývojařská Plzeň - React
 
React - An Introduction
React - An IntroductionReact - An Introduction
React - An Introduction
 
13-IntroJavascript.pptx
13-IntroJavascript.pptx13-IntroJavascript.pptx
13-IntroJavascript.pptx
 
13-IntroJavascript.pptx
13-IntroJavascript.pptx13-IntroJavascript.pptx
13-IntroJavascript.pptx
 
13-IntroJavascript.pptx
13-IntroJavascript.pptx13-IntroJavascript.pptx
13-IntroJavascript.pptx
 
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael PizzoADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
 
Rails World 2023: Powerful Rails Features You Might Not Know
Rails World 2023: Powerful Rails Features You Might Not KnowRails World 2023: Powerful Rails Features You Might Not Know
Rails World 2023: Powerful Rails Features You Might Not Know
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every day
 
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
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
 
Asp.NET MVC
Asp.NET MVCAsp.NET MVC
Asp.NET MVC
 
MvvmCross Quickstart
MvvmCross QuickstartMvvmCross Quickstart
MvvmCross Quickstart
 
Advanced Interfaces and Repositories in Laravel
Advanced Interfaces and Repositories in LaravelAdvanced Interfaces and Repositories in Laravel
Advanced Interfaces and Repositories in Laravel
 
10 ways to make your code rock
10 ways to make your code rock10 ways to make your code rock
10 ways to make your code rock
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIA
 
Introduction of javascript
Introduction of javascriptIntroduction of javascript
Introduction of javascript
 
ASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CSASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CS
 
ASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CSASPNET_MVC_Tutorial_06_CS
ASPNET_MVC_Tutorial_06_CS
 

More from Maarten Mulders

More from Maarten Mulders (20)

What's cooking in Maven? (Devoxx FR)
What's cooking in Maven? (Devoxx FR)What's cooking in Maven? (Devoxx FR)
What's cooking in Maven? (Devoxx FR)
 
Making Maven Marvellous (Devnexus)
Making Maven Marvellous (Devnexus)Making Maven Marvellous (Devnexus)
Making Maven Marvellous (Devnexus)
 
Making Maven Marvellous (Java.il)
Making Maven Marvellous (Java.il)Making Maven Marvellous (Java.il)
Making Maven Marvellous (Java.il)
 
Making Maven Marvellous (JavaZone)
Making Maven Marvellous (JavaZone)Making Maven Marvellous (JavaZone)
Making Maven Marvellous (JavaZone)
 
Dapr: Dinosaur or Developer's Dream? (v1)
Dapr: Dinosaur or Developer's Dream? (v1)Dapr: Dinosaur or Developer's Dream? (v1)
Dapr: Dinosaur or Developer's Dream? (v1)
 
Dapr: Dinosaur or Developer Dream? (J-Fall)
Dapr: Dinosaur or Developer Dream? (J-Fall)Dapr: Dinosaur or Developer Dream? (J-Fall)
Dapr: Dinosaur or Developer Dream? (J-Fall)
 
SSL/TLS for Mortals (Devoxx UK)
SSL/TLS for Mortals (Devoxx UK)SSL/TLS for Mortals (Devoxx UK)
SSL/TLS for Mortals (Devoxx UK)
 
SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand) SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand)
 
Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)
 
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)
Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)
 
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)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
 
SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)
 
Building a DSL with GraalVM (javaBin online)
Building a DSL with GraalVM (javaBin online)Building a DSL with GraalVM (javaBin online)
Building a DSL with GraalVM (javaBin online)
 
SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)
 
SSL/TLS for Mortals (Devoxx)
 SSL/TLS for Mortals (Devoxx) SSL/TLS for Mortals (Devoxx)
SSL/TLS for Mortals (Devoxx)
 
Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)
 
Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)
 
Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL) Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL)
 
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)
 
Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)
 

Recently uploaded

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Recently uploaded (20)

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 

React in 50 Minutes (OpenValue)