React in 50 Minutes (DevNexus)

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
USD
class Amount {
    constructor(currency, value) {
        this.currency = currency;
        this.value = value;
    }
    getCurrency() {
        return this.currency;
    }
}
const text = new Amount('USD', 150).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
one
const numbers = [ 'one', 'two', 'three' ];
const [ first, second ] = numbers;
const text = first
document.getElementById('app').innerText = text;
1
2
3
4
5
Maarten Mulders (@mthmulders)#reactin50mins
O S N
{"name":"Jane Doe","age":42}
const name = 'Jane Doe';
const age = 42;
const person = { name, age };
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
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 World
const element = <div>Hello World</div>
ReactDOM.render(element, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactin50mins
A
Elements can have attributes...
Hello World
const element = <div id='example'>Hello World</div>
ReactDOM.render(element, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactin50mins
... but they can have different names than HTML attributes:
Hello World
const element = <div className='red­text'>Hello World</div>
ReactDOM.render(element, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactin50mins
... and they can behave differently:
Hello World
const style = { color: 'red', fontWeight: 'bold' };
const element = <div style={ style }>Hello World</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, world!
const Greeter = (props) => <div>Hello, world!</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 World!
const Greeter = (props) => <div>Hello { props.name }!</div>
ReactDOM.render(<Greeter name='World' />, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactin50mins
O /
Alternatively, using object decomposition:
Hello World!
const Greeter = ({ name }) => <div>Hello { name }!</div>
ReactDOM.render(<Greeter name='World' />, 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={ 'DevNexus' }
/** transpiles into
React.createElement(Greeter, { name: 'DevNexus' }, 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, World!
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='World' 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 increate = () => setCounter(counter + 1);
    const decreate = () => setCounter(counter ­ 1);
    return <div>Counter: { counter }<br />
                <button onClick={ increate }>   +   </button> &nbsp;
                <button onClick={ decreate }>   ­   </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(`Hello ${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 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
Why did the hipster burn his mouth? He drank the coffee
before it was cool.
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 (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
My sweater had a lot of static electricity. The store gave me a
new one, free of charge.
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
1 of 53

Recommended

React in 45 Minutes (Jfokus) by
React in 45 Minutes (Jfokus)React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)Maarten Mulders
213 views52 slides
Matreshka.js by
Matreshka.jsMatreshka.js
Matreshka.jsИгорь Якименко
465 views50 slides
Matreshka.js by
Matreshka.jsMatreshka.js
Matreshka.jsИгорь Якименко
339 views50 slides
Android Testing by
Android TestingAndroid Testing
Android TestingEvan Lin
3.2K views111 slides
Java Svet - Communication Between Android App Components by
Java Svet - Communication Between Android App ComponentsJava Svet - Communication Between Android App Components
Java Svet - Communication Between Android App ComponentsAleksandar Ilić
1.9K views57 slides
Entity Manager by
Entity ManagerEntity Manager
Entity Managerpatinijava
1K views28 slides

More Related Content

What's hot

Linked In Presentation by
Linked In PresentationLinked In Presentation
Linked In Presentationapweir12
606 views17 slides
Codigos by
CodigosCodigos
CodigosTheFPEstudios
607 views4 slides
Bringing the light to the client with KnockoutJS by
Bringing the light to the client with KnockoutJSBringing the light to the client with KnockoutJS
Bringing the light to the client with KnockoutJSBoyan Mihaylov
1.8K views36 slides
Interoperable Component Patterns by
Interoperable Component PatternsInteroperable Component Patterns
Interoperable Component PatternsMatthew Beale
737 views95 slides
Ramraj by
RamrajRamraj
Ramrajdezyneecole
193 views24 slides
Data normalization &amp; memoized denormalization by
Data normalization &amp; memoized denormalizationData normalization &amp; memoized denormalization
Data normalization &amp; memoized denormalizationSalsita Software
536 views60 slides

What's hot(8)

Linked In Presentation by apweir12
Linked In PresentationLinked In Presentation
Linked In Presentation
apweir12606 views
Bringing the light to the client with KnockoutJS by Boyan Mihaylov
Bringing the light to the client with KnockoutJSBringing the light to the client with KnockoutJS
Bringing the light to the client with KnockoutJS
Boyan Mihaylov1.8K views
Interoperable Component Patterns by Matthew Beale
Interoperable Component PatternsInteroperable Component Patterns
Interoperable Component Patterns
Matthew Beale737 views
Data normalization &amp; memoized denormalization by Salsita Software
Data normalization &amp; memoized denormalizationData normalization &amp; memoized denormalization
Data normalization &amp; memoized denormalization
Salsita Software536 views
JQuery New Evolution by Allan Huang
JQuery New EvolutionJQuery New Evolution
JQuery New Evolution
Allan Huang840 views

Similar to React in 50 Minutes (DevNexus)

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
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 40 minutes (JCON) by
React in 40 minutes (JCON) React in 40 minutes (JCON)
React in 40 minutes (JCON) Maarten Mulders
105 views52 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
Building web applications with React (Jfokus) by
Building web applications with React (Jfokus)Building web applications with React (Jfokus)
Building web applications with React (Jfokus)Maarten Mulders
202 views56 slides

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

React in 50 Minutes (OpenValue) by Maarten Mulders
React in 50 Minutes (OpenValue) React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue)
Maarten Mulders162 views
React in 50 minutes (Bucharest Software Craftsmanship Community) by Maarten Mulders
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 Mulders244 views
React in 50 Minutes (JNation) by Maarten Mulders
 React in 50 Minutes (JNation)  React in 50 Minutes (JNation)
React in 50 Minutes (JNation)
Maarten Mulders143 views
React in 40 minutes (Voxxed Days Romania) by Maarten Mulders
React in 40 minutes (Voxxed Days Romania) React in 40 minutes (Voxxed Days Romania)
React in 40 minutes (Voxxed Days Romania)
Maarten Mulders93 views
Building web applications with React (Jfokus) by Maarten Mulders
Building web applications with React (Jfokus)Building web applications with React (Jfokus)
Building web applications with React (Jfokus)
Maarten Mulders202 views
What did you miss in Java from 9-13? by relix1988
What did you miss in Java from 9-13?What did you miss in Java from 9-13?
What did you miss in Java from 9-13?
relix1988199 views
Realm Mobile Database - An Introduction by Knoldus Inc.
Realm Mobile Database - An IntroductionRealm Mobile Database - An Introduction
Realm Mobile Database - An Introduction
Knoldus Inc.1.1K views
MBLTDev15: Cesar Valiente, Wunderlist by e-Legion
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderlist
e-Legion1.1K 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

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 Mulders127 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

DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h... by
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...Deltares
5 views31 slides
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema by
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - GeertsemaDSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - GeertsemaDeltares
17 views13 slides
DevsRank by
DevsRankDevsRank
DevsRankdevsrank786
11 views1 slide
Unleash The Monkeys by
Unleash The MonkeysUnleash The Monkeys
Unleash The MonkeysJacob Duijzer
7 views28 slides
Dapr Unleashed: Accelerating Microservice Development by
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice DevelopmentMiroslav Janeski
10 views29 slides
Tridens DevOps by
Tridens DevOpsTridens DevOps
Tridens DevOpsTridens
9 views28 slides

Recently uploaded(20)

DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h... by Deltares
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
Deltares5 views
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema by Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - GeertsemaDSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
Deltares17 views
Dapr Unleashed: Accelerating Microservice Development by Miroslav Janeski
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice Development
Miroslav Janeski10 views
Tridens DevOps by Tridens
Tridens DevOpsTridens DevOps
Tridens DevOps
Tridens9 views
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium... by Lisi Hocke
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...
Lisi Hocke28 views
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ... by Donato Onofri
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...
Donato Onofri795 views
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t... by Deltares
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...
Deltares9 views
Fleet Management Software in India by Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable11 views
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J... by Deltares
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
Deltares9 views
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... by Marc Müller
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Marc Müller37 views
Generic or specific? Making sensible software design decisions by Bert Jan Schrijver
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
A first look at MariaDB 11.x features and ideas on how to use them by Federico Razzoli
A first look at MariaDB 11.x features and ideas on how to use themA first look at MariaDB 11.x features and ideas on how to use them
A first look at MariaDB 11.x features and ideas on how to use them
Federico Razzoli45 views
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge... by Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
Deltares17 views
Navigating container technology for enhanced security by Niklas Saari by Metosin Oy
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas Saari
Metosin Oy13 views
DSD-INT 2023 Machine learning in hydraulic engineering - Exploring unseen fut... by Deltares
DSD-INT 2023 Machine learning in hydraulic engineering - Exploring unseen fut...DSD-INT 2023 Machine learning in hydraulic engineering - Exploring unseen fut...
DSD-INT 2023 Machine learning in hydraulic engineering - Exploring unseen fut...
Deltares7 views
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... by TomHalpin9
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
TomHalpin95 views

React in 50 Minutes (DevNexus)