SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
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
EUR
class
Amount
{




constructor(currency,
value)
{








this.currency
=
currency;








this.value
=
value;




}




getCurrency()
{








return
this.currency;




}
}
const
text
=
new
Amount('EUR',
50).getCurrency();
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
7
8
9
10
11
12
13
Maarten
Mulders
(@mthmulders)
#reactin50mins
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)
#reactin50mins
A 
F
true
const
isEven
=
(number)
=>
{



return
number
%
2
==
0;
}
const
text
=
isEven(42);
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
Maarten
Mulders
(@mthmulders)
#reactin50mins
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)
#reactin50mins
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)
#reactin50mins
O 
S 
N
{"name":"Jane
Doe","age":42,"occupation":"JS
dev"}
const
name
=
'Jane
Doe';
const
age
=
42;
const
person
=
{
name,
age,
occupation:
'JS
dev'
};
const
text
=
JSON.stringify(person);
document.getElementById('app').innerText
=
text;
1
2
3
4
5
6
Maarten
Mulders
(@mthmulders)
#reactin50mins
S 
I
USD
150
class
Amount
{




constructor(currency,
value)
{








this.currency
=
currency;








this.value
=
value;




}




toString()
{








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




}
}
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
But
it
has
its
limitations
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)
Hello,
Coimbra
const
element
=
<div>Hello,
Coimbra</div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin50mins
A
Elements
can
have
attributes...
Hello,
Coimbra
const
element
=
<div
id='example'>Hello,
Coimbra</div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin50mins
...
but
they
can
have
different
names
than
HTML
attributes:
Hello,
Coimbra
const
element
=
<div
className='red­text'>Hello,
Coimbra</div>
ReactDOM.render(element,
document.getElementById('app'));
1
2
Maarten
Mulders
(@mthmulders)
#reactin50mins
...
and
they
can
behave
differently:
Hello,
Coimbra
const
style
=
{
color:
'red',
fontWeight:
'bold'
};
const
element
=
<div
style={
style
}>Hello,
Coimbra</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)
x
y
const
element
=
[<div>x</div>,<div>y</div>]
ReactDOM.render(element,
document.getElementById('app'));
1
2
3
Maarten
Mulders
(@mthmulders)
#reactin50mins
C
Function
that
takes
props
(think:
arguments)
and
returns
a
React
element.
Hello,
Coimbra
const
Greeter
=
(props)
=>
<div>Hello,
Coimbra</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:
 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)
#reactin50mins
O 
 
 
 
/

Hello
!
const
Greeter
=
(props)
=>
<div>Hello
{
}!</div>
ReactDOM.render(<Greeter
name='Bucharest'
/>,
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='Bucharest'
/>,
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={
'World'
}
 



/**
transpiles
into
 



React.createElement(Greeter,
{
name:
'World'
},
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,
Bucharest!
const
DutchGreeter
=
({
name
})
=>
<div> 
Hallo,
{
name
}!</div>;
const
EnglishGreeter
=
({
name
})
=>
<div> 
Hello,
{
name
}!</div>;
const
RomanianGreeter
=
({
name
})
=>
<div> 
Hei,
{
name
}!</div>;
const
App
=
({
lang,
name
})
=>
{


switch(lang)
{




case
'ro':
return
<RomanianGreeter
name={
name
}
/>




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




case
'en':




default

:
return
<EnglishGreeter
name={
name
}
/>


}
};
ReactDOM.render(<App
name='Bucharest'
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(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)
#reactin50mins
C 
C


Greet!
const
Greeter
=
()
=>
{




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




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




const
callback
=
()
=>
alert(`${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)
#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
 
 
 
 
 

Scientists
studied
the
earth's
rotation.
After
24
hours,
they
called
it
a
day.
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)
#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
(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)
#reactin50mins
T 
 
 
C
import
{
render,
screen
}
from
'@testing library/react'



describe('<Greeter
 ',
()
 
{





it('should
render
text',
()
 
{









render(<Greeter
name='Bucharest'
 );









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





});

});

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

Weitere ähnliche Inhalte

Ähnlich wie React in 50 minutes (Bucharest Software Craftsmanship Community)

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
 
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
 
Is your C# optimized
Is your C# optimizedIs your C# optimized
Is your C# optimized
Woody Pewitt
 

Ähnlich wie React in 50 minutes (Bucharest Software Craftsmanship Community) (20)

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
 
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
 
Vývojařská Plzeň - React
Vývojařská Plzeň - ReactVývojařská Plzeň - React
Vývojařská Plzeň - React
 
MvvmCross Quickstart
MvvmCross QuickstartMvvmCross Quickstart
MvvmCross Quickstart
 
Functional patterns and techniques in C#
Functional patterns and techniques in C#Functional patterns and techniques in C#
Functional patterns and techniques in C#
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIA
 
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
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
 
Choose'10: Ralf Laemmel - Dealing Confortably with the Confusion of Tongues
Choose'10: Ralf Laemmel - Dealing Confortably with the Confusion of TonguesChoose'10: Ralf Laemmel - Dealing Confortably with the Confusion of Tongues
Choose'10: Ralf Laemmel - Dealing Confortably with the Confusion of Tongues
 
4Developers: Dominik Przybysz- Message Brokers
4Developers: Dominik Przybysz- Message Brokers4Developers: Dominik Przybysz- Message Brokers
4Developers: Dominik Przybysz- Message Brokers
 
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
 
Introduction of javascript
Introduction of javascriptIntroduction of javascript
Introduction of javascript
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
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
 
Is your C# optimized
Is your C# optimizedIs your C# optimized
Is your C# optimized
 
"An introduction to object-oriented programming for those who have never done...
"An introduction to object-oriented programming for those who have never done..."An introduction to object-oriented programming for those who have never done...
"An introduction to object-oriented programming for those who have never done...
 
React - An Introduction
React - An IntroductionReact - An Introduction
React - An Introduction
 

Mehr von Maarten Mulders

Mehr von 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)
 
React in 50 Minutes (JNation)
 React in 50 Minutes (JNation)  React in 50 Minutes (JNation)
React in 50 Minutes (JNation)
 
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)
 

Kürzlich hochgeladen

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
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Kürzlich hochgeladen (20)

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
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
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...
 
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
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
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
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
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
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
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
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
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-...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.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 🔝✔️✔️
 

React in 50 minutes (Bucharest Software Craftsmanship Community)