SlideShare a Scribd company logo
1 of 128
Download to read offline
Use ReasonML in your React
applications
David Kopal
Milan | November 29 - 30, 2018
@coding_lawyer
@coding_lawyer
@coding_lawyer
  codinglawyer.io
  meetup organizer
  contributor
I’m David Kopal
@coding_lawyer
@coding_lawyer
Who heard about ason?
@coding_lawyer
@coding_lawyer
Who wants to write better
React?
@coding_lawyer
React isn’t a native JavaScript library
@coding_lawyer
@coding_lawyer
Immutability
@coding_lawyer
Immutability
@coding_lawyer
Immutability
@coding_lawyer
Immutability
Functional
programming
@coding_lawyer
Immutability
Functional
programming
@coding_lawyer
Immutability
Functional
programming
@coding_lawyer
Immutability
Type system
Functional
programming
@coding_lawyer
Immutability
Type system
Functional
programming
@coding_lawyer
Immutability
Type system
Functional
programming
@coding_lawyer
Immutability
Type system
Functional
programming
@coding_lawyer
Immutability
Type system
Functional
programming
@coding_lawyer
Immutability
Type system
Functional
programming
@coding_lawyer
Immutability
Type system
Functional
programming
@coding_lawyer
@coding_lawyer
semanticsfamiliar syntax
@coding_lawyer
let fizzbuzz = (i) =>
switch (i mod 3, i mod 5) {
| (0, 0) => "FizzBuzz"
| (0, _) => "Fizz"
| (_, 0) => "Buzz"
| _ => string_of_int(i)
};
for (i in 1 to 100) {
Js.log(fizzbuzz(i))
};
@coding_lawyer
compiler
@coding_lawyer
function fizzbuzz(i) {
var match = i % 3
var match$1 = i % 5
if (match !== 0) {
if (match$1 !== 0) {
return String(i)
} else {
return 'Buzz'
}
} else if (match$1 !== 0) {
return 'Fizz'
} else {
return 'FizzBuzz'
}
}
for (var i = 1; i <= 100; ++i) {
console.log(fizzbuzz(i))
}
let fizzbuzz = (i) =>
switch (i mod 3, i mod 5) {
| (0, 0) => "FizzBuzz"
| (0, _) => "Fizz"
| (_, 0) => "Buzz"
| _ => string_of_int(i)
};
for (i in 1 to 100) {
Js.log(fizzbuzz(i))
};
@coding_lawyer
JavaScript interop
@coding_lawyer
@coding_lawyer
Reason is compatible with React
@coding_lawyer
Reason is compatible with React
React was developed for Reason
@coding_lawyer
adjusted JavaScript to React’s needs
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
semanticsfamiliar syntax
@coding_lawyer
safer React
@coding_lawyer
“[Reason] is the best way to take
React to the next level”
Jordan Walke, creator of Reason, React
@coding_lawyer
Tic Tac Toe
github.com/codinglawyer/reason-tic-tac-toe
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
components
@coding_lawyer
stateless component
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
let component = ReasonReact.statelessComponent("App");
let make = _children => {
...component,
render: _self =>
<div>
<div className=“title">
(ReasonReact.string("Tic Tac Toe"))
</div>
<Game />
</div>,
};
@coding_lawyer
let component = ReasonReact.statelessComponent("App");
let make = _children => {
...component,
render: _self =>
<div>
<div className="title">
(ReasonReact.string("Tic Tac Toe"))
</div>
<Game />
</div>,
};
@coding_lawyer
let component = ReasonReact.statelessComponent("App");
let make = _children => {
...component,
render: _self =>
<div>
<div className="title">
(ReasonReact.string("Tic Tac Toe"))
</div>
<Game />
</div>,
};
@coding_lawyer
let component = ReasonReact.statelessComponent("App");
let make = _children => {
...component,
render: _self =>
<div>
<div className="title">
(ReasonReact.string("Tic Tac Toe"))
</div>
<Game />
</div>,
};
@coding_lawyer
let component = ReasonReact.statelessComponent("App");
let make = _children => {
...component,
render: _self =>
<div>
<div className=“title">
(ReasonReact.string("Tic Tac Toe"))
</div>
<Game />
</div>,
};
@coding_lawyer
reducer component
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
let component = ReasonReact.reducerComponent("Game");
let make = _children => {
...component,
initialState: () => { board: […], gameState:… },
reducer: (action: action, state: state) =>
switch (action) {
| Restart => …
| ClickSquare((id: string)) => …
},
render: ({state, send}) =>
<div className="game">
<Board
state
onRestart=(_evt => send(Restart))
onMark=(id => send(ClickSquare(id)))
/>
</div>,
};
@coding_lawyer
reducer: (action: action, state: state) =>
switch (action) {
| Restart => ReasonReact.Update(initialState)
| ClickSquare((id: string)) =>
let updatedBoard = updateBoard(
state.board,
state.gameState,
id);
let updatedGs = checkGameState3x3(
updatedBoard,
state.board,
state.gameState);
ReasonReact.Update({
board: updatedBoard,
gameState: updatedGs,
});
},
@coding_lawyer
reducer: (action: action, state: state) =>
switch (action) {
| Restart => ReasonReact.Update(initialState)
| ClickSquare((id: string)) =>
let updatedBoard = updateBoard(
state.board,
state.gameState,
id);
let updatedGs = checkGameState3x3(
updatedBoard,
state.board,
state.gameState);
ReasonReact.Update({
board: updatedBoard,
gameState: updatedGs,
});
},
@coding_lawyer
reducer: (action: action, state: state) =>
switch (action) {
| Restart => ReasonReact.Update(initialState)
| ClickSquare((id: string)) =>
let updatedBoard = updateBoard(
state.board,
state.gameState,
id);
let updatedGs = checkGameState3x3(
updatedBoard,
state.board,
state.gameState);
ReasonReact.UpdateWithSideEffects(
{
board: updatedBoard,
gameState: updatedGs,
},
(_self => Js.log(“Clicked")),
);
},
@coding_lawyer
pure state update and side-effects
separation
@coding_lawyer
less boilerplate
@coding_lawyer
Redux’s principles and component’s
reusability
@coding_lawyer
type system
@coding_lawyer
clearer and safer code
@coding_lawyer
superior to Flow and TypeScript
@coding_lawyer
type inference
@coding_lawyer
!/* type inference by the compiler !*/
let plus = (a, b) !=> a + b
@coding_lawyer
!/* type inference by the compiler !*/
let plus = (a, b) !=> a + b
!/* (int, int) !=> int !*/
@coding_lawyer
type field =
| Empty
| Marked(player);
type gameState =
| Playing(player)
| Winner(player)
| Draw;
type player =
| Cross
| Circle;
@coding_lawyer
type field =
| Empty
| Marked(player);
type gameState =
| Playing(player)
| Winner(player)
| Draw;
type player =
| Cross
| Circle;
@coding_lawyer
type field =
| Empty
| Marked(player);
type gameState =
| Playing(player)
| Winner(player)
| Draw;
type player =
| Cross
| Circle;
@coding_lawyer
type field =
| Empty
| Marked(player);
type gameState =
| Playing(player)
| Winner(player)
| Draw;
type player =
| Cross
| Circle;
@coding_lawyer
type field =
| Empty
| Marked(player);
type gameState =
| Playing(player)
| Winner(player)
| Draw;
type player =
| Cross
| Circle;
@coding_lawyer
@coding_lawyer
pattern matching
@coding_lawyer
Game
Board
App
BoardRow
Square
@coding_lawyer
reducer: (action: action, state: state) =>
switch (action) {
| Restart => ReasonReact.Update(initialState)
| ClickSquare((id: string)) =>
let updatedBoard = updateBoard(
state.board,
state.gameState,
id);
let updatedGs = checkGameState3x3(
updatedBoard,
state.board,
state.gameState);
ReasonReact.Update({
board: updatedBoard,
gameState: updatedGs,
});
},
@coding_lawyer
let updateBoard = (board: board, gameState: gameState, id) =>
board
|> List.mapi((ind: int, row: row) =>
row
|> List.mapi((index: int, value: field) =>
string_of_int(ind) ++ string_of_int(index) === id ?
switch (gameState, value) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
} :
value
)
);
@coding_lawyer
let updateBoard = (board: board, gameState: gameState, id) =>
board
|> List.mapi((ind: int, row: row) =>
row
|> List.mapi((index: int, value: field) =>
string_of_int(ind) ++ string_of_int(index) === id ?
switch (gameState, value) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
} :
value
)
);
@coding_lawyer
type field =
| Empty
| Marked(player);
type gameState =
| Playing(player)
| Winner(player)
| Draw;
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
}
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
}
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
}
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
}
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
}
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
}
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
| (_, _) => Empty
}
@coding_lawyer
/* determines the value of the clicked square */
switch (gameState: gameState, value: field) {
| (Playing(_), Marked(_)) => value
| (Playing(player), Empty) => Marked(player)
/* | (_, _) => Empty */
}
@coding_lawyer
@coding_lawyer
switch (
getWinner(flattenBoard, head),
gameEnded(flattenBoard),
tail,
) {
| (Cross, _, _) => Winner(Cross)
| (Circle, _, _) => Winner(Circle)
| (_, true, []) => Draw
| (_, false, []) => whosPlaying(gameState)
| _ => check(tail)
};
@coding_lawyer
switch (match$1) {
case 0 :
return /* Winner */Block.__(1, [/* Cross */0]);
case 1 :
return /* Winner */Block.__(1, [/* Circle */1]);
case 2 :
if (match$2) {
if (tail) {
_rest = tail;
continue ;
} else {
return /* Draw */0;
}
} else if (tail) {
_rest = tail;
continue ;
} else {
return whosPlaying(gameState);
}
}
@coding_lawyer
Why should you use React in
Reason?
@coding_lawyer
Reason is compatible with React's
principles
@coding_lawyer
strong type system
@coding_lawyer
pattern matching
@coding_lawyer
functional programming features
@coding_lawyer
stateless and stateful component
separation
@coding_lawyer
JavaScript-like syntax
React friendly
@coding_lawyer
Get your hands dirty!
sketch.sh
@coding_lawyer


codinglawyer.io
@coding_lawyer
@coding_lawyer
Thank You
@coding_lawyer
Questions?
@coding_lawyer
@coding_lawyer
codinglawyer.io
github.com/codinglawyer/reason-tic-tac-toe

More Related Content

Similar to David Kopal - Write better React with ReasonML - Codemotion Milan 2018

JavaScript Objects and OOP Programming with JavaScript
JavaScript Objects and OOP Programming with JavaScriptJavaScript Objects and OOP Programming with JavaScript
JavaScript Objects and OOP Programming with JavaScriptLaurence Svekis ✔
 
Learn Dart And Angular, Get Your Web Development Wings With Kevin Moore
Learn Dart And Angular, Get Your Web Development Wings With Kevin MooreLearn Dart And Angular, Get Your Web Development Wings With Kevin Moore
Learn Dart And Angular, Get Your Web Development Wings With Kevin MooreCodeCore
 
Mobile Open Day: React Native: Crossplatform fast dive
Mobile Open Day: React Native: Crossplatform fast diveMobile Open Day: React Native: Crossplatform fast dive
Mobile Open Day: React Native: Crossplatform fast diveepamspb
 
jQuery Foot-Gun Features
jQuery Foot-Gun FeaturesjQuery Foot-Gun Features
jQuery Foot-Gun Featuresdmethvin
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"GeeksLab Odessa
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Applitools
 
Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013Sébastien Deleuze
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptGuy Royse
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needKacper Gunia
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup PerformanceJustin Cataldo
 
Casting for not so strange actors
Casting for not so strange actorsCasting for not so strange actors
Casting for not so strange actorszucaritask
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wildJoe Morgan
 
Database Development Replication Security Maintenance Report
Database Development Replication Security Maintenance ReportDatabase Development Replication Security Maintenance Report
Database Development Replication Security Maintenance Reportnyin27
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015Fernando Daciuk
 

Similar to David Kopal - Write better React with ReasonML - Codemotion Milan 2018 (20)

JavaScript Objects and OOP Programming with JavaScript
JavaScript Objects and OOP Programming with JavaScriptJavaScript Objects and OOP Programming with JavaScript
JavaScript Objects and OOP Programming with JavaScript
 
Jquery examples
Jquery examplesJquery examples
Jquery examples
 
Learn Dart And Angular, Get Your Web Development Wings With Kevin Moore
Learn Dart And Angular, Get Your Web Development Wings With Kevin MooreLearn Dart And Angular, Get Your Web Development Wings With Kevin Moore
Learn Dart And Angular, Get Your Web Development Wings With Kevin Moore
 
Mobile Open Day: React Native: Crossplatform fast dive
Mobile Open Day: React Native: Crossplatform fast diveMobile Open Day: React Native: Crossplatform fast dive
Mobile Open Day: React Native: Crossplatform fast dive
 
compose_speaker_session.pdf
compose_speaker_session.pdfcompose_speaker_session.pdf
compose_speaker_session.pdf
 
jQuery Foot-Gun Features
jQuery Foot-Gun FeaturesjQuery Foot-Gun Features
jQuery Foot-Gun Features
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
 
Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013
 
Protractor Training in Pune by QuickITDotnet
Protractor Training in Pune by QuickITDotnet Protractor Training in Pune by QuickITDotnet
Protractor Training in Pune by QuickITDotnet
 
Protractor Training - Online training On Skype
Protractor Training - Online training On Skype Protractor Training - Online training On Skype
Protractor Training - Online training On Skype
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup Performance
 
Casting for not so strange actors
Casting for not so strange actorsCasting for not so strange actors
Casting for not so strange actors
 
Borrador del blog
Borrador del blogBorrador del blog
Borrador del blog
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wild
 
Separation of concerns - DPC12
Separation of concerns - DPC12Separation of concerns - DPC12
Separation of concerns - DPC12
 
Database Development Replication Security Maintenance Report
Database Development Replication Security Maintenance ReportDatabase Development Replication Security Maintenance Report
Database Development Replication Security Maintenance Report
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015
 

More from Codemotion

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...Codemotion
 
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 storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
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...Codemotion
 
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 2019Codemotion
 
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 2019Codemotion
 
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 - Codemotion
 
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...Codemotion
 
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...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 ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...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...Codemotion
 
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 2019Codemotion
 
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 2019Codemotion
 
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 2019Codemotion
 
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...Codemotion
 
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...Codemotion
 
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 2019Codemotion
 
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 2019Codemotion
 
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 2019Codemotion
 

More from 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
 

Recently uploaded

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 

Recently uploaded (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 

David Kopal - Write better React with ReasonML - Codemotion Milan 2018