Building web applications with React (Jfokus)

B
R
Maarten Mulders (@mthmulders)#reactworkshop
T M
a short intro in React and JSX
Starter — Work on your own task management app!
discuss event handling, interacting with REST, state
Main Course — Add behaviours to the app you've created
discuss testing
Dessert — Wrap-up
Maarten Mulders (@mthmulders)#reactworkshop
R JSX
Maarten Mulders (@mthmulders)#reactworkshop
“React is a library for declaratively
building user interfaces using
JavaScript and (optionally) XML.
Maarten Mulders (@mthmulders)#reactworkshop
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)#reactworkshop
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)#reactworkshop
E
Elements can be regular DOM elements... (for now, but not for long)
Hej!
const element = <div>Hej!</div>
ReactDOM.render(element, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactworkshop
A
Elements can have attributes...
Hej
const element = <div id='foo'>Hej</div>
ReactDOM.render(element, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactworkshop
... but they can have different names than HTML attributes:
Hej
const element = <div className='red­text'>Hej</div>
ReactDOM.render(element, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactworkshop
... and they can behave differently:
Hej
const style = { color: 'red' };
const element = <div style={ style }>Hej</div>
ReactDOM.render(element, document.getElementById('app'));
1
2
3
Maarten Mulders (@mthmulders)#reactworkshop
C
“Reusable building blocks for composing
user interfaces.
Maarten Mulders (@mthmulders)#reactworkshop
S (F )
Function that takes props and returns a React element.
Hi, Jfokus!
const Greeter = (props) => <div>Hi, { props.name }!</div>
ReactDOM.render(<Greeter name='Jfokus' />, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactworkshop
S
Class that can store state; render() method returns a React element.
Hi, Jfokus!
class Greeter extends React.Component {
   constructor(props) {
       super(props)
       // Usually you don't copy props into state
       this.state = { name: props.name };
   }
   render() {
       return <div>Hi, { this.state.name }!</div>;
   }
}
ReactDOM.render(<Greeter name='Jfokus' />, document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
11
Maarten Mulders (@mthmulders)#reactworkshop
S R N
Values must have a single root node
x
y
const element = <><div>x</div><div>y</div></>
ReactDOM.render(element, document.getElementById('app'));
1
2
Maarten Mulders (@mthmulders)#reactworkshop
T R
Compose applications from (re-usable) components
consistent
verifiable & testable
clear interface
⟶ single responsibility principle
Maarten Mulders (@mthmulders)#reactworkshop
L D T
Start with a mockup of what you want to build
Inbox
@Work
@Home
@Supermarket
Learn React
Build my first React app
Add new task Add
Task Learn React
Due date April 13, 2020
Completed yes
List Inbox
Group exercise: identify component hierarchy
Maarten Mulders (@mthmulders)#reactworkshop
G T D S
Maarten Mulders (@mthmulders)#reactworkshop
L D T
Start with a mockup of what you want to build
Inbox
@Work
@Home
@Supermarket
Learn React
Build my first React app
Add new task Add
Task Learn React
Due date April 13, 2020
Completed yes
List Inbox
1. Identify component hierarchy
2. Create skeleton of component hierarchy
Use background or border colors to distinguish componentsMaarten Mulders (@mthmulders)#reactworkshop
S JSX
Maarten Mulders (@mthmulders)#reactworkshop
E JSX
42
const answerToQuestionOfLife = 42;
const askQuestionOfLife = () => answerToQuestionOfLife;
const App = () => <div>{ askQuestionOfLife() }</div>;
ReactDOM.render(<App/>, document.getElementById('app'));
1
2
3
4
5
6
Maarten Mulders (@mthmulders)#reactworkshop
C JSX
Clapping hands...
const ClapHands = () => <span>Clapping hands...</span>;
const DryTears = () => <span>Drying tears...</span>;
const App = ({ isHappy }) => <div>{ isHappy ? <ClapHands /> : <DryTears /> }</div>;
ReactDOM.render(<App isHappy={ true } />, document.getElementById('app'));
1
2
3
4
5
Maarten Mulders (@mthmulders)#reactworkshop
C JSX (2)
ASML
PHIA
RDSA
const Ticker = ({ symbol }) => <div>{ symbol }</div>;
const TickerList = ({ symbols }) => symbols.map(
  (symbol) => <Ticker symbol={ symbol } />
);
const symbols = ['ASML', 'PHIA', 'RDSA'];
ReactDOM.render(<TickerList symbols={ symbols } />, document.getElementById('app'));
1
2
3
4
5
6
7
8
Maarten Mulders (@mthmulders)#reactworkshop
M
Maarten Mulders (@mthmulders)#reactworkshop
A
So far, we've declared components and elements.
Babel or tsc transpiles JSX into React.createElement(...)
invocations:
<Greeter name={ 'world' }
/** transpiles into
React.createElement(Greeter, { name: 'world' }, null)
Maarten Mulders (@mthmulders)#reactworkshop
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)#reactworkshop
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)#reactworkshop
1 E
Hej, Jfokus
const SwedishGreeter = ({ name }) => <div>Hej, { name }</div>
const DutchGreeter = ({ name }) => <div>Hallo, { name }</div>;
const EnglishGreeter = ({ name }) => <div>Hello, { name }</div>;
const App = ({ language, name }) => {
 switch(language) {
   case 'se': return <SwedishGreeter name={ name } />
   case 'nl': return <DutchGreeter name={ name } />
   case 'en':
   default  : return <EnglishGreeter name={ name } />
 }
};
ReactDOM.render(<App name='Jfokus' language='se' />, document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Maarten Mulders (@mthmulders)#reactworkshop
2 T KEY
ASML
PHIA
RDSA
const Ticker = ({ symbol }) => <div>{ symbol }</div>;
const TickerList = ({ symbols }) => symbols.map(
  (symbol) => <Ticker key={ symbol } symbol={ symbol } />
);
const symbols = ['ASML', 'PHIA', 'RDSA'];
ReactDOM.render(<TickerList symbols={ symbols } />,
document.getElementById('app'));
1
2
3
4
5
6
7
8
9
Maarten Mulders (@mthmulders)#reactworkshop
L D T
Start with a mockup of what you want to build
Inbox
@Work
@Home
@Supermarket
Learn React
Build my first React app
Add new task Add
Task Learn React
Due date April 13, 2020
Completed yes
List Inbox
1. Identify component hierarchy
2. Create skeleton of component hierarchy
Use background or border colors to distinguish componentsMaarten Mulders (@mthmulders)#reactworkshop
A B
1. Event handling
2. Storing data
1. Temporarily (in your app)
2. Permanent (in your browser)
3. Getting data over HTTP
Maarten Mulders (@mthmulders)#reactworkshop
R E
Similar to DOM event handling, but
1. event names are different: onClick vs onclick.
2. event handles are always functions, never strings.
3. event handlers receive an synthetic event - browser-agnostic!
Maarten Mulders (@mthmulders)#reactworkshop
B C C
Clickme!
const Greeter = ({ name }) => {
    const callback = () => alert(name)
    return <button onClick={ callback }>Click me!</button>
}
ReactDOM.render(<Greeter name='Jfokus' />, document.getElementById('app'));
1
2
3
4
5
6
Maarten Mulders (@mthmulders)#reactworkshop
K
1. Inside a component
2. Shared in your app
Maarten Mulders (@mthmulders)#reactworkshop
L S C
Counter: 0
+   ‑
const Counter = () => {
   const [ counter, setCounter ] = React.useState(0); // Look, a Hook!
   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)#reactworkshop
U U I
Greetme!
const Greeter = () => {
   const [ name, setName ] = React.useState('');
   const updateName = (e) => setName(e.target.value);
   const callback = () => window.alert('Hi ' + name + '!');
   return <div><input type='text' onChange={ updateName } ></input><br />
               <button onClick={ callback }>Greet me!</button></div>
}
ReactDOM.render(<Greeter />, document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
Maarten Mulders (@mthmulders)#reactworkshop
S S A
Share state between components by passing props. But what if they
have a few components in between?
          Producer                    In Between 1                  In Between 2                    Consumer           
“Seperation of concerns, anyone?
Maarten Mulders (@mthmulders)#reactworkshop
C
Welcome, Jfokus
const UserContext = React.createContext();
const UserDisplay = () => {
   const user = React.useContext(UserContext);
   return <div>Welcome, { user ? user.name : 'guest' }</div>;
};
const InBetween2 = () => <UserDisplay />
const InBetween1 = () => <InBetween2 />
const App = ({ name }) => {
   const user = name ? { name } : undefined;
   return (<UserContext.Provider value={ user }>
               <InBetween1 />
           </UserContext.Provider>);
}
ReactDOM.render(<App name='Jfokus' />, document.getElementById('app'));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Maarten Mulders (@mthmulders)#reactworkshop
U C
Current theme: light.
Toggle!
const ThemeContext = React.createContext();
const ThemeDisplay = () => {
   const context = React.useContext(ThemeContext);
   return <div>Current theme: { context.theme }.</div>
};
const ThemeToggle = () => {
   const context = React.useContext(ThemeContext);
   return <button onClick={ context.toggle }>Toggle!</button>
};
const App = () => {
   const [ theme, setTheme ] = React.useState('light');
   const toggle = () => setTheme(theme === 'dark' ? 'light' : 'dark');
   return <ThemeContext.Provider value={ { theme, toggle } } >
              <ThemeDisplay />
/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Maarten Mulders (@mthmulders)#reactworkshop
Alternatively, use .contextType for consuming a Context
⟶ Only works for classes!
class WhateverDisplay extends React.Component {
render() {
return <div className={ this.context.theme }> div>;
}
}
WhateverDisplay.contextType = ThemeContext;
Maarten Mulders (@mthmulders)#reactworkshop
G
1. What state do we have?
2. Where does it live?
Maarten Mulders (@mthmulders)#reactworkshop
S
, anyone?
limited storage (~ 4096 bytes each, max 50 per domain)
can be insecure (sent to web server)
Maarten Mulders (@mthmulders)#reactworkshop
L S S S
Part of the
Stores and retrieves string values
Serialise objects with JSON.stringify()
Deserialise with JSON.parse()
Aren't sent to a web server
Persistent
during browser session with sessionStorage
over browser shutdowns with localStorage
Web Storage API
Maarten Mulders (@mthmulders)#reactworkshop
U S S
Counter: 0
+ ‑
const initialValue = Number(sessionStorage.getItem('counter')) || 0;
const App = () => {
   const [ counter, setCounter ] = React.useState(initialValue);
   const updateCounter = (value) => {
       setCounter(Number(value));
       sessionStorage.setItem('counter', value);
   }
   const increase = () => updateCounter(counter + 1);
   const decrease = () => updateCounter(counter ­ 1);
   return <div>Counter: { counter }<br />
               <button onClick={ increase }>   +   </button>
               <button onClick={ decrease }>   ­   </button>
          </div>
};
/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Maarten Mulders (@mthmulders)#reactworkshop
F HTTP
Prerequisites:
1. A JavaScript function to fetch some data
2. A component to show the fetched data
Maarten Mulders (@mthmulders)#reactworkshop
1 A API
const checkStatus = (response) {
if (response.status 200 response.status < 300) {
return Promise.resolve(response);
} else {
return Promise.reject(`HTTP error ${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)#reactworkshop
2 A
My friend didn't understand cloning. That makes two of us.
const RandomJoke = () => {
   const [ { joke, loading }, setState ] = React.useState({ loading: true });
   const fetchRandomJoke = async () => {
       // Does the actual API call to Oracle Cloud function,
       // see code on previous slide.
       const joke = await getJoke();
       setState({ loading: false, joke });
   }
   React.useEffect(() => {
       fetchRandomJoke()
   }, [ /* intentionally left empty */ ]);
   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
15
16
17
18
Maarten Mulders (@mthmulders)#reactworkshop
W
If the API will be available at the same domain as the web app, use a
proxy.
Add to package.json (assuming you use )Create React App
"proxy": "https: gtdapp.mulders.it"
Maarten Mulders (@mthmulders)#reactworkshop
L D T
Start with a mockup of what you want to build
Inbox
@Work
@Home
@Supermarket
Learn React
Build my first React app
Add new task Add
Task Learn React
Due date April 13, 2020
Completed yes
List Inbox
1. Identify component hierarchy
2. Create skeleton of component hierarchy
Use background or border colors to distinguish componentsMaarten Mulders (@mthmulders)#reactworkshop
W GTD REST API
1. Register an account:
2. Install the client lib:
3. Update package.json:
4. Restart NPM:
curl d 'username= &password= '
https: gtdapp.mulders.it/public/users/register
npm i gtd lib
"proxy": "https: gtdapp.mulders.it"
Maarten Mulders (@mthmulders)#reactworkshop
V O S
Maarten Mulders (@mthmulders)#reactworkshop
T
For unit testing, Jest and Enzyme are very powerful solution. Install
them with
Create a file src/setupTests.js with
npm i -D enzyme enzyme adapter react-16 react test renderer
import { conf gure } from 'enzyme';
import Adapter from 'enzyme adapter react-16';
conf gure({ adapter: new Adapter() });
Maarten Mulders (@mthmulders)#reactworkshop
W
Tests go in:
Files with .js suffix in __tests__ folders.
Files with .test.js suffix.
Files with .spec.js suffix.
Run them with npm test.
Maarten Mulders (@mthmulders)#reactworkshop
T : S R
⚠ Does not render any child components
import React from 'react';
import { shallow } from 'enzyme';
import Greeter from ' /Greeter';
describe('<Greeter ', () {
it('renders a friendly greeting', () {
const wrapper = shallow(<Greeter name='folks' );
expect(wrapper.text()).toBe('Hi folks!');
});
});
Maarten Mulders (@mthmulders)#reactworkshop
T E H
describe('<MyButton ', () {
it('handles click events', () {
const onButtonClick = jest.mock();
const wrapper = shallow(<Foo onButtonClick={ onButtonClick } );
wrapper.f nd('button').simulate('click');
expect(onButtonClick).toBeCalled();
});
});
Maarten Mulders (@mthmulders)#reactworkshop
F DOM R
⚠ Needs an environment that "looks like" a browser, e.g. .
Otherwise, add ­­env=node to the test script in package.json.
import React from 'react';
import { mount } from 'enzyme';
import Greeter from ' /Greeter';
describe('<Greeter ', () {
it('renders a friendly greeting', () {
const wrapper = mount(<Greeter name='Folks' );
expect(wrapper.text()).toBe('Hi Folks!');
});
});
jsdom
Maarten Mulders (@mthmulders)#reactworkshop
W -
Start with a mockup of what you want to build
Inbox
@Work
@Home
@Supermarket
Learn React
Build my first React app
Add new task Add
Task Learn React
Due date April 13, 2020
Completed yes
List Inbox
1. Identify component hierarchy
2. Create skeleton of component hierarchy
Use background or border colors to distinguish componentsMaarten Mulders (@mthmulders)#reactworkshop
1 of 56

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
Hibernate Mapping by
Hibernate MappingHibernate Mapping
Hibernate MappingInnovationM
20 views11 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
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 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

More Related Content

Similar to Building web applications with React (Jfokus)

Refactoring by
RefactoringRefactoring
RefactoringAmir Barylko
967 views101 slides
Simple React Todo List by
Simple React Todo ListSimple React Todo List
Simple React Todo ListRitesh Chaudhari
342 views22 slides
React js - The Core Concepts by
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core ConceptsDivyang Bhambhani
3.1K views27 slides
React Native +Redux + ES6 (Updated) by
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)Chiew Carol
697 views31 slides
React/Redux by
React/ReduxReact/Redux
React/ReduxDurgesh Vaishnav
295 views27 slides
A Note On Computer Statement by
A Note On Computer StatementA Note On Computer Statement
A Note On Computer StatementKrista Clark
2 views33 slides

Similar to Building web applications with React (Jfokus)(20)

React Native +Redux + ES6 (Updated) by Chiew Carol
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)
Chiew Carol697 views
A Note On Computer Statement by Krista Clark
A Note On Computer StatementA Note On Computer Statement
A Note On Computer Statement
Krista Clark2 views
Having Fun Building Web Applications (Day 2 slides) by Clarence Ngoh
Having Fun Building Web Applications (Day 2 slides)Having Fun Building Web Applications (Day 2 slides)
Having Fun Building Web Applications (Day 2 slides)
Clarence Ngoh59 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
Mobile Software Engineering Crash Course - C04 Android Cont. by Mohammad Shaker
Mobile Software Engineering Crash Course - C04 Android Cont.Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.
Mohammad Shaker764 views
Save time by applying clean code principles by Edorian
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principles
Edorian3K views
Reactive programming in clojure script using reactjs wrappers by Konrad Szydlo
Reactive programming in clojure script using reactjs wrappersReactive programming in clojure script using reactjs wrappers
Reactive programming in clojure script using reactjs wrappers
Konrad Szydlo656 views
Time to React! by STX Next
Time to React!Time to React!
Time to React!
STX Next290 views
Crafted Design - GeeCON 2014 by Sandro Mancuso
Crafted Design - GeeCON 2014Crafted Design - GeeCON 2014
Crafted Design - GeeCON 2014
Sandro Mancuso5.1K views
Building user interface with react by Amit Thakkar
Building user interface with reactBuilding user interface with react
Building user interface with react
Amit Thakkar1.7K views
A full introductory guide to React by Jean Carlo Emer
A full introductory guide to ReactA full introductory guide to React
A full introductory guide to React
Jean Carlo Emer603 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

DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs by
DSD-INT 2023 The Danube Hazardous Substances Model - KovacsDSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
DSD-INT 2023 The Danube Hazardous Substances Model - KovacsDeltares
10 views17 slides
Myths and Facts About Hospice Care: Busting Common Misconceptions by
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common MisconceptionsCare Coordinations
6 views1 slide
Ports-and-Adapters Architecture for Embedded HMI by
Ports-and-Adapters Architecture for Embedded HMIPorts-and-Adapters Architecture for Embedded HMI
Ports-and-Adapters Architecture for Embedded HMIBurkhard Stubert
21 views19 slides
nintendo_64.pptx by
nintendo_64.pptxnintendo_64.pptx
nintendo_64.pptxpaiga02016
5 views7 slides
Programming Field by
Programming FieldProgramming Field
Programming Fieldthehardtechnology
5 views9 slides
FIMA 2023 Neo4j & FS - Entity Resolution.pptx by
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptxNeo4j
8 views26 slides

Recently uploaded(20)

DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs by Deltares
DSD-INT 2023 The Danube Hazardous Substances Model - KovacsDSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
Deltares10 views
Myths and Facts About Hospice Care: Busting Common Misconceptions by Care Coordinations
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common Misconceptions
Ports-and-Adapters Architecture for Embedded HMI by Burkhard Stubert
Ports-and-Adapters Architecture for Embedded HMIPorts-and-Adapters Architecture for Embedded HMI
Ports-and-Adapters Architecture for Embedded HMI
Burkhard Stubert21 views
FIMA 2023 Neo4j & FS - Entity Resolution.pptx by Neo4j
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptx
Neo4j8 views
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...
Deltares9 views
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft... by Deltares
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
Deltares7 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...
Deltares12 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 Onofri860 views
Headless JS UG Presentation.pptx by Jack Spektor
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptx
Jack Spektor8 views
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... by Marc Müller
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra....NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
Marc Müller40 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...
TomHalpin96 views
Software evolution understanding: Automatic extraction of software identifier... by Ra'Fat Al-Msie'deen
Software evolution understanding: Automatic extraction of software identifier...Software evolution understanding: Automatic extraction of software identifier...
Software evolution understanding: Automatic extraction of software identifier...
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 Oy14 views
FOSSLight Community Day 2023-11-30 by Shane Coughlan
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30
Shane Coughlan5 views

Building web applications with React (Jfokus)