SlideShare una empresa de Scribd logo
1 de 131
Descargar para leer sin conexión
render() to DOM
Boris Dinkevich
MILAN 25-26 NOVEMBER 2016
from
render()
to
DOM
Boris Dinkevich boris@500tech.com
COMPLICATED
BAD ARCHITECTURE
OPTIMISATIONS
Boris Dinkevich
- React evangelist
- Cat aficionado
- Co-Author of “The Redux book”
- Organiser AngularUP & ReactNext
Co-Founder @ 500Tech
A WORD ON TREES
Our code today
const Todos = () => (

<ul>

<li>Todo</li>

</ul>

);

De-JSX
const Todos = () => (

<ul>

<li>Stuff</li>

</ul>

);

const Todos = () => (

React.createElement("ul", null,

React.createElement("li", null,

"Stuff"

),

);

);
Chrome dev tools?
WHY REACT?
DOM is slow
Lets minimise writes…
Our Sample App
Todos
Header
TodoTodo
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“One”
“li”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Our tree Our DOM
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“One”
“li”
Old New
App
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“Million”
“li”
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“Million”
“li”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Our tree Our DOM
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“Million”
“li”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“Million”
“li”
Our tree Our DOM
App
Introducing BorisJS!
1.Call render() to build tree - ”Future Tree”
2.Compare each element to DOM
3.Change when needed
4.Win!
React docs: “reads are slow”
Lets open PR
Simple diff
function updateNode(node, value) {

if (node.innerText !== value) {

node.innerText = value;

}

}

60fps
Time per frame: 16.6ms
Time for 1000 read / write cycles: 36.15ms
Read & Write
Read then Write
Introducing BorisJS 2.0
1.Call render() to build tree
2.Read DOM into temp tree - “Current Tree"
3.Compare each element to temp tree
4.Change when needed
5.Win!
“temp tree”… sounds familiar
Pre cache
1. Call render() to build “Future Tree”
2. Compare each element to “Current Tree“
3. Change DOM when needed
4.Save “Future Tree” as “Current Tree”
5. Win!
What about first “Current Tree”?
Introducing BorisJS 3.0
Initial Render
1.Call render() to build tree
2.Save as “Current Tree”
3.Create initial DOM
Updates
1.Call render() to build “Future Tree”
2.Compare each element to “Current Tree”
4.Change DOM when needed
5.Save “Future Tree” as “Current Tree”
6.Win!
NO READS?
Todos.setState({ todos: [’XXXXX’, ‘Two’] });

Todos
• One
• Two
Todos
• XXXXX
• Two
todos = document.getElementById('app').children[0].children[1];

todos.removeChild(todos.childNodes[0]);
Todos.setState({ todos: [‘XXXXX’, ‘Dos’] });
Todos
• Dos
Todos
• One
• Two
Todos
• Two
I Lied
Get <input /> values?
In React
• Initial Render
• Updates
FIRST RUN
React.createElement(App);

Starting
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“One”
“li”
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“One”
“li”
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“Two”
“li”
“One”
“li”
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Mounting markup
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Mounting markup
“div”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
#app
markup
<body>

<div id="app"></div>

</body>

render(

React.createElement(App),

document.getElementById('app')

);
DOM IS READY!
Or is it?
DOM and React
Event Handers
<Component onClick={} />

Connection
React
onClick
DOM
React DOM
Our Code
Different renderers
DOM - onClick
Native - onPress
What does this mean?
<Header onClick={} />

<Header onPress={} />

What is “React”?
addons 1,334
isomorphic 3,428
shared 7,058
renderers/
art 641
dom 12,337
native 2,735
noop 192
shared 9,368
* lines of code in 15-stable
TREE UPDATE
What will cause React to render again?
• setState()
• forceUpdate()
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
Todos.setState({
todos: ['Uno', 'Dos']
});

function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
Flow
1. setState({ todos: [‘Uno’, ‘Dos’] });
2. Todos updated and rendering starts
3. Todo1 needs update
4. DOM updated
5. Todo2 needs update
6. DOM updated
AGAIN?
Todos.setState({
todos: ['Uno', 'Dos']
});

function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
LIFE CYCLE
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
React Tree
componentWillMount
componentDidMount
componentWillUpdate
componentDidUpdate
componentWillUnmount
…
MULTIPLE UPDATES
Multiple setState calls
Todos.setState({ todos: [‘Uno’, ‘Dos’] });
App.setState({ title: ‘Bye’ });
Todos.setState({ todos: [‘Raz’, ‘Dva’] });
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App()
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App()
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App()
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 0
1
1
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 0
1
1
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 1
1
1
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 1
2
1
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 1
2
2
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 1
2
2
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 1
3
2
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 1
3
3
How many render() ?
App()
Todos()
Todos()
Todos()
Todo()
App() 1
3
3
transactions
How do we group?
Todos.setState({ todos: [‘Uno’, ‘Dos’] });
App.setState({ title: ‘Bye’ });
Todos.setState({ todos: [‘Raz’, ‘Dva’] });
Callback
Before
After
Transaction
Callback
Before
After
• Prepare
• Calculate final state
• Update DOM
• Run Callbacks
Transaction
• multiple setState()
• Build list of changes
Todos
dirtyComponents
Todos.setState({ todos: [‘Uno’, ‘Dos’] });
{ todos: [‘Uno’, ‘Dos’] }
App
dirtyComponents
Todos.setState({ todos: [‘Uno’, ‘Dos’] });
App.setState({ title: ‘Bye’ });
{ todos: [‘Uno’, ‘Dos’] }
Todos
{ title: ‘Bye’ }
dirtyComponents
Todos.setState({ todos: [‘Uno’, ‘Dos’] });
App.setState({ title: ‘Bye’ });
Todos.setState({ todos: [‘Raz’, ‘Dva’] });
{ todos: [‘Uno’, ‘Dos’] } { todos: [‘Raz’, ‘Dva’] }
Todos
{ title: ‘Bye’ }
App
Finalize Transaction
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
0
0
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
0
0
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
0
0
Update the state to it’s latest version
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
1
0
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
1
1
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
1
1
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
1
1
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
1
1
Update the state
How many render() ?
App()
Todos()
Todos()
Todo()
App() 1
1
1
How many render() ?
App()
Todos()
Todos()
Todo()
App() 1
1
1
New props from App?
How many render() ?
App()
Todos()
Todos()
Todo()
App() 1
2
1
How many render() ?
App()
Todos()
Todos()
Todo()
App() 1
2
2
WAIT A MINUTE…
SORT BY ORDER
Set order as components are mounted
How many render() ?
App()
Todos()
Todos()
Todo()
App() 0
0
0
How many render() ?
App()
Todos()Todos()
Todo()
App() 0
0
0
How many render() ?
App()
Todos()Todos()
Todo()
App() 0
0
0
How many render() ?
App()
Todos()Todos()
Todo()
App() 0
0
0
Update the state
How many render() ?
App()
Todos()Todos()
Todo()
App() 1
0
0
How many render() ?
App()
Todos()Todos()
Todo()
App() 1
0
0
Update the state
How many render() ?
App()
Todos()Todos()
Todo()
App() 1
1
0
How many render() ?
App()
Todos()Todos()
Todo()
App() 1
1
1
How many render() ?
App()
Todos()Todos()
Todo()
App() 1
1
1
How many render() ?
App()
Todos()Todos()
Todo()
App() 1
1
1
Callback order in transaction
Todos.setState({ todos: [‘Uno’, ‘Dos’] });
App.setState({ title: ‘Bye’ });
Todos.setState({ todos: [‘Raz’, ‘Dva’] });
1. App setState
2. Todos setState
3. Todos setState
Callbacks order
Transactions In React
Preserving input selection
Suppressing events during DOM work
Collecting “componentDidUpdate”
etc
FINAL WORDS
REACT IS COMPLICATED
SO YOUR CODE DOES’T HAVE TO BE
http://redux-book.com
The Complete Redux Book
And read our blog:
http://blog.500tech.com
Don’t <React />, Plan!

Más contenido relacionado

Destacado

Destacado (20)

Repaint & reflow
Repaint & reflowRepaint & reflow
Repaint & reflow
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
React entry
React entryReact entry
React entry
 
Synchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM treesSynchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM trees
 
Intro to Web Map APIs
Intro to Web Map APIsIntro to Web Map APIs
Intro to Web Map APIs
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOM
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
 
ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会
 
React
ReactReact
React
 
Pjax 深入淺出
Pjax 深入淺出Pjax 深入淺出
Pjax 深入淺出
 
From Back to Front: Rails To React Family
From Back to Front: Rails To React FamilyFrom Back to Front: Rails To React Family
From Back to Front: Rails To React Family
 
React Native - Workshop
React Native - WorkshopReact Native - Workshop
React Native - Workshop
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJS
 
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
 
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
 
Demistifying the 3D Web
Demistifying the 3D WebDemistifying the 3D Web
Demistifying the 3D Web
 
NoSQL on the move
NoSQL on the moveNoSQL on the move
NoSQL on the move
 
Boxcars and Cabooses: When one more XHR is too much - Peter Chittum - Codemot...
Boxcars and Cabooses: When one more XHR is too much - Peter Chittum - Codemot...Boxcars and Cabooses: When one more XHR is too much - Peter Chittum - Codemot...
Boxcars and Cabooses: When one more XHR is too much - Peter Chittum - Codemot...
 

Similar a React - render() to DOM - Boris Dinkevich - Codemotion Milan 2016

Similar a React - render() to DOM - Boris Dinkevich - Codemotion Milan 2016 (20)

Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and Ops
 
RedisConf17 - Searching Billions of Documents with Redis
RedisConf17 - Searching Billions of Documents with RedisRedisConf17 - Searching Billions of Documents with Redis
RedisConf17 - Searching Billions of Documents with Redis
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSP
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
 
Fast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDBFast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDB
 
He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!
 
Exploring Clojurescript
Exploring ClojurescriptExploring Clojurescript
Exploring Clojurescript
 
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun..."ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
 
The Ring programming language version 1.5.2 book - Part 47 of 181
The Ring programming language version 1.5.2 book - Part 47 of 181The Ring programming language version 1.5.2 book - Part 47 of 181
The Ring programming language version 1.5.2 book - Part 47 of 181
 
2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)
2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)
2012-08-29 - NoSQL Bootcamp (Redis, RavenDB & MongoDB für .NET Entwickler)
 
Considerations for using NoSQL technology on your next IT project - Akmal Cha...
Considerations for using NoSQL technology on your next IT project - Akmal Cha...Considerations for using NoSQL technology on your next IT project - Akmal Cha...
Considerations for using NoSQL technology on your next IT project - Akmal Cha...
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
[OSC 2020 Online/Nagoya] MySQLドキュメントストア
[OSC 2020 Online/Nagoya] MySQLドキュメントストア[OSC 2020 Online/Nagoya] MySQLドキュメントストア
[OSC 2020 Online/Nagoya] MySQLドキュメントストア
 
The Ring programming language version 1.6 book - Part 50 of 189
The Ring programming language version 1.6 book - Part 50 of 189The Ring programming language version 1.6 book - Part 50 of 189
The Ring programming language version 1.6 book - Part 50 of 189
 
Automated Spark Deployment With Declarative Infrastructure
Automated Spark Deployment With Declarative InfrastructureAutomated Spark Deployment With Declarative Infrastructure
Automated Spark Deployment With Declarative Infrastructure
 
Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?
 
[Wroclaw #7] Why So Serial?
[Wroclaw #7] Why So Serial?[Wroclaw #7] Why So Serial?
[Wroclaw #7] Why So Serial?
 
NoSQL in SQL - Lior Altarescu
NoSQL in SQL - Lior Altarescu NoSQL in SQL - Lior Altarescu
NoSQL in SQL - Lior Altarescu
 
Working with NoSQL in a SQL Database (XDevApi)
Working with NoSQL in a SQL Database (XDevApi)Working with NoSQL in a SQL Database (XDevApi)
Working with NoSQL in a SQL Database (XDevApi)
 
DevSecCon London 2018: Open DevSecOps
DevSecCon London 2018: Open DevSecOpsDevSecCon London 2018: Open DevSecOps
DevSecCon London 2018: Open DevSecOps
 

Más de Codemotion

Más de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

React - render() to DOM - Boris Dinkevich - Codemotion Milan 2016