SlideShare a Scribd company logo
TechTalk
The fundamental problems of
GUI applications
& why people choose React
Vu Nguyen
vu.nguyen@will.vn
TL;DR
• All applications for normal users are GUI applications.
• The fundamental problem is rendering GUI
(include assembling GUI, handling user input and
integrating with application logic).
• This is not another talk about React, ES2015, Webpack,
and other fancy things!
Desktop applications are GUI applications
Desktop applications are GUI applications
Mobile applications are GUI applications
Desktop applications are GUI applications
Mobile applications are GUI applications
Web applications are GUI applications
Every application you use daily
is
GUI applications
Every application you use daily
is
GUI applications
(We developers* are the only ones
that work with terminal**)
* Including programmers, hackers, specialists, etc.
** Even the terminal itself is a GUI application!
So if you want to build an application
for normal users,
you have no choice but GUI application!
Let’s build a basic GUI application (1)
(without GUI library & framework)
Tier 1: Operating System
Bare metal
What do we have?
• A drawing buffer for output
• An input processing unit
• A programming language
• No GUI library or framework
Let’s build things from scratch*!
* Sample code using JavaScript.
1235
The game loop
Process input
Update state
Render
while (playing) {
processInput();
updateState();
render();
waitForNextFrame();
}
The game state
var gameState = {
score: 1235,
time: 1200,
player: {
x: 120,
y: 30,
},
enemies: [ … ],
bullets: [ … ]
};
1235
The rendering function
function render() {
renderBackground();
renderEnemies();
renderCharacter();
renderBullets();
renderScore();
renderTimeBar();
swapBuffer();
}
1235
Updating state
function updateScore(val) {
gameState.score += val;
}
function updatePosition(dx, dy) {
gameState.player.x += dx;
gameState.player.y += dy;
}
Life of a GUI application
state
1
1235
render()
Life of a GUI application
state
1
1235
1235
state
2
render()
render()
updateState()
Life of a GUI application
state
1
1235
1235
state
2
render()
render()
processInput()
updateState()
processInput()
Life of a GUI application
state
1
1235
1235
state
2
render()
render()
processInput()
updateState()
processInput()
Luckily you don’t have to
write “the loop” yourself.
The operating system handles it for you.
The fundamental problems
of GUI applications
The problems
• Creating and assembling GUI
• Handling user input
• Integrating GUI & business logic
Basic GUI application architecture
Viewstate
render()
input input
logic
Assembling GUI
Viewstate
render()
input input
logic
Viewstate
render()
input input
logic
Viewstate
render()
input input
logic
Assembling GUI
Viewstate
render()
input input
logic
Viewstate
render()
input input
logic
Viewstate
render()
input input
logic
input
render()
Tier 1
• Creating and assembling GUI → render() function
• Handling user input → (…)
• Integrating GUI & business logic → do it yourself
What does a modern
operating system offers?
Tier 1: Operating System
Bare metal
Process input
Update state
Render
onClick()
onKeydown()
WM_LBUTTONDOWN
WM_KEYDOWN
onPaint()
WM_PAINT
Application
business logic
Application
input logic
Application
rendering logic
Operating System ApplicationEvent system
What does a modern operating system offers?
• Handle “the loop”
• Process raw input and provide event system
What does a modern operating system offers?
• Creating and assembling GUI → (defer to app platform)
• Handling user input → Event system
• Integrating GUI & business logic → do it yourself
Let’s build a basic GUI application (2)
(without GUI library & framework)
Tier 1: Operating System
Tier 2: App Platform
Close to bare metal
What do we have? (at tier 2)
• Component system
• Event system
Sample code using Windows API*
* Win32 & COM API. Read more:
https://msdn.microsoft.com/en-us/library/windows/desktop/ff381399(v=vs.85).aspx
The application state
struct {
int score,
int time,
PLAYER player,
ENEMIES enemies,
BULLETS bullets
} gameState;
1235
The rendering function
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
PAINT_STRUCT ps;
HDC hdc;
switch (message) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// ...
EndPaint(hWnd, &ps);
break;
}
};
1235
Composing components
• Create child windows
• Attach them to the app window
• In response to WM_PAINT:
• Pass WM_PAINT to child windows
Handling input
• Handling user input
Response to input events WM_LBUTTONDOWN, WM_KEYDOWN
• Handling application life cycle WM_CREATE, WM_DESTROY
Process input
Update state
Render
onClick()
onKeydown()
WM_LBUTTONDOWN
WM_KEYDOWN
onPaint()
WM_PAINT
Application
business logic
Application
input logic
Application
rendering logic
Operating System ApplicationEvent system
What does a modern
application platform offers?
Tier 1: Operating System
Tier 2: App Platform
Close to bare metal
Android Platform
• Composing elements: XML Layout, GUI components
• Handling user input: Event system
• Integrating business logic: Callback
<Button
xmlns:android="http://schemas..."
android:id="@+id/button_send"
android:text="@string/button_send"
android:onClick="sendMessage" />
public void sendMessage(View view) {
// Do something
}
http://developer.android.com/guide/topics/ui/controls/button.html
Windows Presentation Foundation (WPF)
• Composing elements: XAML, GUI components
• Handling user input: Event system
• Integrating business logic: Handler
<Button
Grid.Column="1" Grid.Row="3"
Margin="0,10,0,0" Width="125"
Height="25" HorizontalAlignment="Right"
Click="Button_Click">View</Button>
private void Button_Click(
object sender, RoutedEventArgs e) {
// Do something
}
https://msdn.microsoft.com/en-us/library/mt270964.aspx
Web Platform (HTML & JS)
• Composing elements: HTML, GUI components
• Handling user input: Event system
• Integrating business logic: Callback
<button
style="width:100px;height:40px"
onclick="sayHello()">
Say Hello
</button>
function sayHello(e) {
// Do something
}
What does an application platform offers?
• Creating and assembling GUI → Pre-built components,
Domain specific language (DSL) for GUI
• Handling user input → Event system
• Integrating GUI & business logic → Callback, set state
Let’s build a basic GUI application (3)
(without GUI library & framework)
Tier 1: Operating System
Tier 2: App Platform
Tier 3: App
What do we have? (at tier 3, HTML & JS)
• DSL & pre-built GUI components
• Event system
• Callback & set component state
• No GUI library or framework.
We still want to create our custom components!
Let’s build a TODO application.
The application state
var appState = {
todos: [{
title: “hello”,
complete: false
}, {
title: “world”,
complete: false
}]
};
Updating state
function addTodo(label) {
appState.todos.push({
title: label,
completed: false
});
}
function toggle(index) {
var item = appState.todos[index];
item.completed = !item.completed;
}
The rendering function
function render() {
// !?
}
The rendering function – First try
function render() {
var $listTodos = document.getElementById(“todos”)
for (var i=0; i < appState.todos; i++) {
// update, insert or delete DOM elements
}
var $numActive = document.getElementById(“num-active”)
$numActive.innerHTML = getNumActive();
// ...
}
So far, we have defined application state
and logic just fine.
The only hard part that kept us back is
rendering step.
(Include generating HTML, keeping updated with app state
and registering event callbacks)
The rendering function – Second try
var lastState; // store last appState for comparing
function render() {
var $listTodos = document.getElementById(“todos”)
for (var i=0; i < appState.todos; i++) {
// update, insert or delete DOM elements
}
var $numActive = document.getElementById(“num-active”)
$numActive.innerHTML = getNumActive();
// ...
lastState = deepClone(appState);
}
We have tried storing last application state
for rendering only changed parts.
This is what frameworks like Angular.js or
Backbone (Underscore) offers.
Enter
MVC & MVP
MVC
• Applying Separation of
Concern to GUI applications.
• Input event
→ Controller
→ Model
→ View
MVP
• Applying Separation of
Concern to GUI applications.
• Model → Presenter → View
• View → Presenter → Model
Backbone.js
var Todo = Backbone.Model.extend({
default: { title: "", complete: false },
toggle: function() {
this.save(…); // trigger "change" (model)
}
});
var TodoView = Backbone.View.extend({
template: …,
events: …, // callback to manipulate model (handled by controller)
initialize: {
this.listenTo(this.model, "change", this.render); // listen to "change"
},
render: function() { … }, // rendering function (view)
// …
});
Angular.js (version 1)
function TodoCtrl($scope) {
var todos = $scope.todos = [];
$scope.addTodo = function() { // user event
todos.push({ title: $scope.newTodo, completed: false }); // update state
};
$scope.$watchCollection("todos", function() { // state-change event
// …
});
}
<form id="todo-form" ng-submit="addTodo()"> … </form>
<ul id="todo-list">
<li ng-repeat="todo in todos"> … </li>
</ul>
What does a
application MV* framework offers?
Tier 1: Operating System
Tier 2: App Platform
Tier 3: App
What does a MV* framework offers?
• Creating and assembling GUI → view, template
• Handling user input → user event
• Integrating GUI & business logic
→ state-change event (Backbone.js, Angular.js)
Wow, so many concepts!
model, view, template, controller, presenter,
user event, state-change event
Let’s return to our starting architecture
Life of a GUI application
state
1
1235
1235
state
2
render()
render()
processInput()
updateState()
processInput()
Enter React solution
Let’s put aside the fancy ways to define
application state.
The only hard part is rendering step.
The application state
var appState = {
todos: [{
title: “hello”,
complete: false
}, {
title: “world”,
complete: false
}]
};
Updating state
function addTodo(label) {
appState.todos.push({
title: label,
completed: false
});
}
function toggle(index) {
var item = appState.todos[index];
item.completed = !item.completed;
}
The rendering function
React.createClass({
render: function() {
return (
<ul>
{
appState.todos.map(function(item) {
return <li> { item.title } </li>;
})
}
</ul>
);
}
});
Handle state change
React.createClass({
addTodoHandler: function() {
var label = this.refs.inputTodo.value;
addTodo(label); // update application state
this.forceUpdate(); // trigger rendering function
},
render: function() {
return (
<div>
<input ref="inputTodo"/>
<button onClick={this.addTodoHandler}/>
<ul> … </ul>
</div>
);}
});
Life of a GUI application
state
1
1235
1235
state
2
render()
render()
addTodoHandler()
addTodo()
toggleHandler()
toggle()
React lets us work with our classic architecture
and helps solving the hard part: rendering!
No need to rewrite our application in an opinion way.
We only need to understand 2 functions
to start working with React:
- forceUpdate()
- render()
What does React offers?
• Creating and assembling GUI → React components
• Handling user input → user events
• Integrating GUI & business logic
→ keep GUI updated when application state changed
Why do people choose React?
What do people choose React?
• As we see, the only hard part is rendering step.
• React is a view library. It solves the right problem and
solves it well.
• It leaves application state for us. This is good because:
• We work with classic architecture of GUI applications.
• We can choose which architecture works best for us.
• We can migrate legacy applications to React without
changing so much code.
How to choose a library or framework?
1. Write the prototype by your own
without using library or framework.
2. Understand what them offer.
3. Choose only which ones you need.
4. Keep in mind the design that you can switch to
another library later.
What’s next?
• Redux, an application state solution for React.
• Because we understand how to handle application state,
we can decide to use Redux or not. It’s up to you.
THANK YOU
Vu Nguyen
vu.nguyen@will.vn
TechTalk
TechTalk
The fundamental problems of
GUI applications
& why people choose React
Vu Nguyen
vu.nguyen@will.vn
Ad

More Related Content

What's hot (20)

Angular 4
Angular 4Angular 4
Angular 4
Saurabh Juneja
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)
ColdFusionConference
 
From MEAN to the MERN Stack
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN Stack
Troy Miles
 
Node, express & sails
Node, express & sailsNode, express & sails
Node, express & sails
Brian Shannon
 
React js Online Training
React js Online TrainingReact js Online Training
React js Online Training
Learntek1
 
HTML5 Web Workers-unleashed
HTML5 Web Workers-unleashedHTML5 Web Workers-unleashed
HTML5 Web Workers-unleashed
Peter Lubbers
 
Isomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master ClassIsomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master Class
Spike Brehm
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
Marco Breveglieri
 
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
민태 김
 
JavaScript front end performance optimizations
JavaScript front end performance optimizationsJavaScript front end performance optimizations
JavaScript front end performance optimizations
Chris Love
 
Develop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will loveDevelop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will love
Chris Love
 
Алексей Швайка "Bundling: you are doing it wrong"
Алексей Швайка "Bundling: you are doing it wrong"Алексей Швайка "Bundling: you are doing it wrong"
Алексей Швайка "Bundling: you are doing it wrong"
Fwdays
 
Booting up with polymer
Booting up with polymerBooting up with polymer
Booting up with polymer
Marcus Hellberg
 
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and BackboneJavascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Deepu S Nath
 
Polymer / WebComponents
Polymer / WebComponentsPolymer / WebComponents
Polymer / WebComponents
Arnaud Kervern
 
General Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScriptGeneral Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScript
Spike Brehm
 
Developing, building, testing and deploying react native apps
Developing, building, testing and deploying react native appsDeveloping, building, testing and deploying react native apps
Developing, building, testing and deploying react native apps
Leena N
 
Refactoring to a Single Page Application
Refactoring to a Single Page ApplicationRefactoring to a Single Page Application
Refactoring to a Single Page Application
Codemotion
 
Angular - Chapter 1 - Introduction
 Angular - Chapter 1 - Introduction Angular - Chapter 1 - Introduction
Angular - Chapter 1 - Introduction
WebStackAcademy
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applications
Chris Love
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)
ColdFusionConference
 
From MEAN to the MERN Stack
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN Stack
Troy Miles
 
Node, express & sails
Node, express & sailsNode, express & sails
Node, express & sails
Brian Shannon
 
React js Online Training
React js Online TrainingReact js Online Training
React js Online Training
Learntek1
 
HTML5 Web Workers-unleashed
HTML5 Web Workers-unleashedHTML5 Web Workers-unleashed
HTML5 Web Workers-unleashed
Peter Lubbers
 
Isomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master ClassIsomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master Class
Spike Brehm
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
Marco Breveglieri
 
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
민태 김
 
JavaScript front end performance optimizations
JavaScript front end performance optimizationsJavaScript front end performance optimizations
JavaScript front end performance optimizations
Chris Love
 
Develop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will loveDevelop a vanilla.js spa you and your customers will love
Develop a vanilla.js spa you and your customers will love
Chris Love
 
Алексей Швайка "Bundling: you are doing it wrong"
Алексей Швайка "Bundling: you are doing it wrong"Алексей Швайка "Bundling: you are doing it wrong"
Алексей Швайка "Bundling: you are doing it wrong"
Fwdays
 
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and BackboneJavascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Deepu S Nath
 
Polymer / WebComponents
Polymer / WebComponentsPolymer / WebComponents
Polymer / WebComponents
Arnaud Kervern
 
General Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScriptGeneral Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScript
Spike Brehm
 
Developing, building, testing and deploying react native apps
Developing, building, testing and deploying react native appsDeveloping, building, testing and deploying react native apps
Developing, building, testing and deploying react native apps
Leena N
 
Refactoring to a Single Page Application
Refactoring to a Single Page ApplicationRefactoring to a Single Page Application
Refactoring to a Single Page Application
Codemotion
 
Angular - Chapter 1 - Introduction
 Angular - Chapter 1 - Introduction Angular - Chapter 1 - Introduction
Angular - Chapter 1 - Introduction
WebStackAcademy
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applications
Chris Love
 

Viewers also liked (19)

Primero bgu e
Primero bgu ePrimero bgu e
Primero bgu e
EvelynLegarda6
 
Seymour Paper on December 1, 2015 Changes in the Discovery Rules
Seymour Paper on December 1, 2015 Changes in the Discovery RulesSeymour Paper on December 1, 2015 Changes in the Discovery Rules
Seymour Paper on December 1, 2015 Changes in the Discovery Rules
Richard Seymour
 
Your Future
Your FutureYour Future
Your Future
Holland Codes Resource Center
 
The Power of Storytelling: Why Stories Matter
The Power of Storytelling: Why Stories MatterThe Power of Storytelling: Why Stories Matter
The Power of Storytelling: Why Stories Matter
Marie Ennis-O'Connor
 
Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...
Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...
Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...
Capgemini
 
Cements
CementsCements
Cements
aruncs92
 
PPT Shalat Sunnah Muakkad dan Ghoiru Muakkad
PPT Shalat Sunnah Muakkad dan Ghoiru MuakkadPPT Shalat Sunnah Muakkad dan Ghoiru Muakkad
PPT Shalat Sunnah Muakkad dan Ghoiru Muakkad
Intanrizkaagustia17
 
ИБ-игры для взрослых в стиле Agile
ИБ-игры для взрослых в стиле AgileИБ-игры для взрослых в стиле Agile
ИБ-игры для взрослых в стиле Agile
Aleksey Lukatskiy
 
Lambda architecture: from zero to One
Lambda architecture: from zero to OneLambda architecture: from zero to One
Lambda architecture: from zero to One
Serg Masyutin
 
Digital Transformation in Retail Banking
Digital Transformation in Retail BankingDigital Transformation in Retail Banking
Digital Transformation in Retail Banking
Ferran Garcia Pagans
 
NLP meetup 2016.10.05 - Bódogh Attila: xdroid
NLP meetup 2016.10.05 - Bódogh Attila: xdroidNLP meetup 2016.10.05 - Bódogh Attila: xdroid
NLP meetup 2016.10.05 - Bódogh Attila: xdroid
Zoltan Varju
 
Dev ops with smell v1.2
Dev ops with smell v1.2Dev ops with smell v1.2
Dev ops with smell v1.2
Antons Kranga
 
MasterCard Digital Strategy
MasterCard Digital StrategyMasterCard Digital Strategy
MasterCard Digital Strategy
Megan Hodgman
 
пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016
Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
пр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистовпр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистов
Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
Healthcare guide to Social Media Marketing
Healthcare guide to Social Media MarketingHealthcare guide to Social Media Marketing
Healthcare guide to Social Media Marketing
Jessika Phillips | NOW Marketing Group
 
Digital Banking
Digital BankingDigital Banking
Digital Banking
Nikolay Spasov
 
Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...
Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...
Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...
CA Technologies
 
Backbase webinar feat. Jim Marous: State of the Digital Customer Journey
Backbase webinar feat. Jim Marous: State of the Digital Customer Journey Backbase webinar feat. Jim Marous: State of the Digital Customer Journey
Backbase webinar feat. Jim Marous: State of the Digital Customer Journey
Backbase
 
Seymour Paper on December 1, 2015 Changes in the Discovery Rules
Seymour Paper on December 1, 2015 Changes in the Discovery RulesSeymour Paper on December 1, 2015 Changes in the Discovery Rules
Seymour Paper on December 1, 2015 Changes in the Discovery Rules
Richard Seymour
 
The Power of Storytelling: Why Stories Matter
The Power of Storytelling: Why Stories MatterThe Power of Storytelling: Why Stories Matter
The Power of Storytelling: Why Stories Matter
Marie Ennis-O'Connor
 
Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...
Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...
Telstra: Securing a Bright Digital Future for One of Australia’s Most Iconic ...
Capgemini
 
PPT Shalat Sunnah Muakkad dan Ghoiru Muakkad
PPT Shalat Sunnah Muakkad dan Ghoiru MuakkadPPT Shalat Sunnah Muakkad dan Ghoiru Muakkad
PPT Shalat Sunnah Muakkad dan Ghoiru Muakkad
Intanrizkaagustia17
 
ИБ-игры для взрослых в стиле Agile
ИБ-игры для взрослых в стиле AgileИБ-игры для взрослых в стиле Agile
ИБ-игры для взрослых в стиле Agile
Aleksey Lukatskiy
 
Lambda architecture: from zero to One
Lambda architecture: from zero to OneLambda architecture: from zero to One
Lambda architecture: from zero to One
Serg Masyutin
 
Digital Transformation in Retail Banking
Digital Transformation in Retail BankingDigital Transformation in Retail Banking
Digital Transformation in Retail Banking
Ferran Garcia Pagans
 
NLP meetup 2016.10.05 - Bódogh Attila: xdroid
NLP meetup 2016.10.05 - Bódogh Attila: xdroidNLP meetup 2016.10.05 - Bódogh Attila: xdroid
NLP meetup 2016.10.05 - Bódogh Attila: xdroid
Zoltan Varju
 
Dev ops with smell v1.2
Dev ops with smell v1.2Dev ops with smell v1.2
Dev ops with smell v1.2
Antons Kranga
 
MasterCard Digital Strategy
MasterCard Digital StrategyMasterCard Digital Strategy
MasterCard Digital Strategy
Megan Hodgman
 
пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016
Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
пр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистовпр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистов
Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...
Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...
Case Study: Open Banking, APIs and Digital Transformation—the Banco Original ...
CA Technologies
 
Backbase webinar feat. Jim Marous: State of the Digital Customer Journey
Backbase webinar feat. Jim Marous: State of the Digital Customer Journey Backbase webinar feat. Jim Marous: State of the Digital Customer Journey
Backbase webinar feat. Jim Marous: State of the Digital Customer Journey
Backbase
 
Ad

Similar to The fundamental problems of GUI applications and why people choose React (20)

Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Innomatic Platform
 
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con InnomaticCostruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Innoteam Srl
 
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB
 
R programming for statistics and dash board
R programming for statistics and dash boardR programming for statistics and dash board
R programming for statistics and dash board
SrinivasacharG1
 
R scripts for statistics and dashboard designs
R scripts for statistics and dashboard designsR scripts for statistics and dashboard designs
R scripts for statistics and dashboard designs
SrinivasacharG1
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
anistar sung
 
AngularJS for Web and Mobile
 AngularJS for Web and Mobile AngularJS for Web and Mobile
AngularJS for Web and Mobile
Rocket Software
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
Eric Deng
 
Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説
shinobu takahashi
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shiny
anamarisaguedes
 
cse581_03_EventProgramming.ppt
cse581_03_EventProgramming.pptcse581_03_EventProgramming.ppt
cse581_03_EventProgramming.ppt
tadudemise
 
5809566 programming concepts in vasters
5809566  programming concepts in vasters5809566  programming concepts in vasters
5809566 programming concepts in vasters
ag3777499
 
Faites évoluer votre accès aux données avec MongoDB Stitch
Faites évoluer votre accès aux données avec MongoDB StitchFaites évoluer votre accès aux données avec MongoDB Stitch
Faites évoluer votre accès aux données avec MongoDB Stitch
MongoDB
 
Busy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript AppsBusy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript Apps
JAX London
 
Android101
Android101Android101
Android101
David Marques
 
Angular performance slides
Angular performance slidesAngular performance slides
Angular performance slides
David Barreto
 
Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008
Jonas Follesø
 
Highload JavaScript Framework without Inheritance
Highload JavaScript Framework without InheritanceHighload JavaScript Framework without Inheritance
Highload JavaScript Framework without Inheritance
FDConf
 
Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"
Fwdays
 
Android class provider in mumbai
Android class provider in mumbaiAndroid class provider in mumbai
Android class provider in mumbai
Vibrant Technologies & Computers
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Innomatic Platform
 
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con InnomaticCostruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Innoteam Srl
 
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB
 
R programming for statistics and dash board
R programming for statistics and dash boardR programming for statistics and dash board
R programming for statistics and dash board
SrinivasacharG1
 
R scripts for statistics and dashboard designs
R scripts for statistics and dashboard designsR scripts for statistics and dashboard designs
R scripts for statistics and dashboard designs
SrinivasacharG1
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
anistar sung
 
AngularJS for Web and Mobile
 AngularJS for Web and Mobile AngularJS for Web and Mobile
AngularJS for Web and Mobile
Rocket Software
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
Eric Deng
 
Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説
shinobu takahashi
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shiny
anamarisaguedes
 
cse581_03_EventProgramming.ppt
cse581_03_EventProgramming.pptcse581_03_EventProgramming.ppt
cse581_03_EventProgramming.ppt
tadudemise
 
5809566 programming concepts in vasters
5809566  programming concepts in vasters5809566  programming concepts in vasters
5809566 programming concepts in vasters
ag3777499
 
Faites évoluer votre accès aux données avec MongoDB Stitch
Faites évoluer votre accès aux données avec MongoDB StitchFaites évoluer votre accès aux données avec MongoDB Stitch
Faites évoluer votre accès aux données avec MongoDB Stitch
MongoDB
 
Busy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript AppsBusy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript Apps
JAX London
 
Angular performance slides
Angular performance slidesAngular performance slides
Angular performance slides
David Barreto
 
Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008
Jonas Follesø
 
Highload JavaScript Framework without Inheritance
Highload JavaScript Framework without InheritanceHighload JavaScript Framework without Inheritance
Highload JavaScript Framework without Inheritance
FDConf
 
Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"
Fwdays
 
Ad

More from Oliver N (8)

High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014
Oliver N
 
WebRTC: Bring real-time to the web - Barcamp Saigon 2012
WebRTC: Bring real-time to the web - Barcamp Saigon 2012WebRTC: Bring real-time to the web - Barcamp Saigon 2012
WebRTC: Bring real-time to the web - Barcamp Saigon 2012
Oliver N
 
New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...
New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...
New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...
Oliver N
 
Concurrency in Golang
Concurrency in GolangConcurrency in Golang
Concurrency in Golang
Oliver N
 
What does people say when they switch to Go?
What does people say when they switch to Go?What does people say when they switch to Go?
What does people say when they switch to Go?
Oliver N
 
Litibook - Feb 2016
Litibook - Feb 2016Litibook - Feb 2016
Litibook - Feb 2016
Oliver N
 
Golang #5: To Go or not to Go
Golang #5: To Go or not to GoGolang #5: To Go or not to Go
Golang #5: To Go or not to Go
Oliver N
 
Isomorphic web application
Isomorphic web applicationIsomorphic web application
Isomorphic web application
Oliver N
 
High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014
Oliver N
 
WebRTC: Bring real-time to the web - Barcamp Saigon 2012
WebRTC: Bring real-time to the web - Barcamp Saigon 2012WebRTC: Bring real-time to the web - Barcamp Saigon 2012
WebRTC: Bring real-time to the web - Barcamp Saigon 2012
Oliver N
 
New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...
New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...
New trends of web technology on mobile: HTML5, PhoneGap & NaCl - Barcamp Saig...
Oliver N
 
Concurrency in Golang
Concurrency in GolangConcurrency in Golang
Concurrency in Golang
Oliver N
 
What does people say when they switch to Go?
What does people say when they switch to Go?What does people say when they switch to Go?
What does people say when they switch to Go?
Oliver N
 
Litibook - Feb 2016
Litibook - Feb 2016Litibook - Feb 2016
Litibook - Feb 2016
Oliver N
 
Golang #5: To Go or not to Go
Golang #5: To Go or not to GoGolang #5: To Go or not to Go
Golang #5: To Go or not to Go
Oliver N
 
Isomorphic web application
Isomorphic web applicationIsomorphic web application
Isomorphic web application
Oliver N
 

Recently uploaded (20)

Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 

The fundamental problems of GUI applications and why people choose React

  • 1. TechTalk The fundamental problems of GUI applications & why people choose React Vu Nguyen [email protected]
  • 2. TL;DR • All applications for normal users are GUI applications. • The fundamental problem is rendering GUI (include assembling GUI, handling user input and integrating with application logic). • This is not another talk about React, ES2015, Webpack, and other fancy things!
  • 3. Desktop applications are GUI applications
  • 4. Desktop applications are GUI applications Mobile applications are GUI applications
  • 5. Desktop applications are GUI applications Mobile applications are GUI applications Web applications are GUI applications
  • 6. Every application you use daily is GUI applications
  • 7. Every application you use daily is GUI applications (We developers* are the only ones that work with terminal**) * Including programmers, hackers, specialists, etc. ** Even the terminal itself is a GUI application!
  • 8. So if you want to build an application for normal users, you have no choice but GUI application!
  • 9. Let’s build a basic GUI application (1) (without GUI library & framework) Tier 1: Operating System Bare metal
  • 10. What do we have? • A drawing buffer for output • An input processing unit • A programming language • No GUI library or framework Let’s build things from scratch*! * Sample code using JavaScript.
  • 11. 1235
  • 12. The game loop Process input Update state Render while (playing) { processInput(); updateState(); render(); waitForNextFrame(); }
  • 13. The game state var gameState = { score: 1235, time: 1200, player: { x: 120, y: 30, }, enemies: [ … ], bullets: [ … ] }; 1235
  • 14. The rendering function function render() { renderBackground(); renderEnemies(); renderCharacter(); renderBullets(); renderScore(); renderTimeBar(); swapBuffer(); } 1235
  • 15. Updating state function updateScore(val) { gameState.score += val; } function updatePosition(dx, dy) { gameState.player.x += dx; gameState.player.y += dy; }
  • 16. Life of a GUI application state 1 1235 render()
  • 17. Life of a GUI application state 1 1235 1235 state 2 render() render() updateState()
  • 18. Life of a GUI application state 1 1235 1235 state 2 render() render() processInput() updateState() processInput()
  • 19. Life of a GUI application state 1 1235 1235 state 2 render() render() processInput() updateState() processInput()
  • 20. Luckily you don’t have to write “the loop” yourself. The operating system handles it for you.
  • 21. The fundamental problems of GUI applications
  • 22. The problems • Creating and assembling GUI • Handling user input • Integrating GUI & business logic
  • 23. Basic GUI application architecture Viewstate render() input input logic
  • 24. Assembling GUI Viewstate render() input input logic Viewstate render() input input logic Viewstate render() input input logic
  • 25. Assembling GUI Viewstate render() input input logic Viewstate render() input input logic Viewstate render() input input logic input render()
  • 26. Tier 1 • Creating and assembling GUI → render() function • Handling user input → (…) • Integrating GUI & business logic → do it yourself
  • 27. What does a modern operating system offers? Tier 1: Operating System Bare metal
  • 28. Process input Update state Render onClick() onKeydown() WM_LBUTTONDOWN WM_KEYDOWN onPaint() WM_PAINT Application business logic Application input logic Application rendering logic Operating System ApplicationEvent system
  • 29. What does a modern operating system offers? • Handle “the loop” • Process raw input and provide event system
  • 30. What does a modern operating system offers? • Creating and assembling GUI → (defer to app platform) • Handling user input → Event system • Integrating GUI & business logic → do it yourself
  • 31. Let’s build a basic GUI application (2) (without GUI library & framework) Tier 1: Operating System Tier 2: App Platform Close to bare metal
  • 32. What do we have? (at tier 2) • Component system • Event system Sample code using Windows API* * Win32 & COM API. Read more: https://msdn.microsoft.com/en-us/library/windows/desktop/ff381399(v=vs.85).aspx
  • 33. The application state struct { int score, int time, PLAYER player, ENEMIES enemies, BULLETS bullets } gameState; 1235
  • 34. The rendering function LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) PAINT_STRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // ... EndPaint(hWnd, &ps); break; } }; 1235
  • 35. Composing components • Create child windows • Attach them to the app window • In response to WM_PAINT: • Pass WM_PAINT to child windows
  • 36. Handling input • Handling user input Response to input events WM_LBUTTONDOWN, WM_KEYDOWN • Handling application life cycle WM_CREATE, WM_DESTROY
  • 37. Process input Update state Render onClick() onKeydown() WM_LBUTTONDOWN WM_KEYDOWN onPaint() WM_PAINT Application business logic Application input logic Application rendering logic Operating System ApplicationEvent system
  • 38. What does a modern application platform offers? Tier 1: Operating System Tier 2: App Platform Close to bare metal
  • 39. Android Platform • Composing elements: XML Layout, GUI components • Handling user input: Event system • Integrating business logic: Callback <Button xmlns:android="http://schemas..." android:id="@+id/button_send" android:text="@string/button_send" android:onClick="sendMessage" /> public void sendMessage(View view) { // Do something } http://developer.android.com/guide/topics/ui/controls/button.html
  • 40. Windows Presentation Foundation (WPF) • Composing elements: XAML, GUI components • Handling user input: Event system • Integrating business logic: Handler <Button Grid.Column="1" Grid.Row="3" Margin="0,10,0,0" Width="125" Height="25" HorizontalAlignment="Right" Click="Button_Click">View</Button> private void Button_Click( object sender, RoutedEventArgs e) { // Do something } https://msdn.microsoft.com/en-us/library/mt270964.aspx
  • 41. Web Platform (HTML & JS) • Composing elements: HTML, GUI components • Handling user input: Event system • Integrating business logic: Callback <button style="width:100px;height:40px" onclick="sayHello()"> Say Hello </button> function sayHello(e) { // Do something }
  • 42. What does an application platform offers? • Creating and assembling GUI → Pre-built components, Domain specific language (DSL) for GUI • Handling user input → Event system • Integrating GUI & business logic → Callback, set state
  • 43. Let’s build a basic GUI application (3) (without GUI library & framework) Tier 1: Operating System Tier 2: App Platform Tier 3: App
  • 44. What do we have? (at tier 3, HTML & JS) • DSL & pre-built GUI components • Event system • Callback & set component state • No GUI library or framework. We still want to create our custom components! Let’s build a TODO application.
  • 45. The application state var appState = { todos: [{ title: “hello”, complete: false }, { title: “world”, complete: false }] };
  • 46. Updating state function addTodo(label) { appState.todos.push({ title: label, completed: false }); } function toggle(index) { var item = appState.todos[index]; item.completed = !item.completed; }
  • 47. The rendering function function render() { // !? }
  • 48. The rendering function – First try function render() { var $listTodos = document.getElementById(“todos”) for (var i=0; i < appState.todos; i++) { // update, insert or delete DOM elements } var $numActive = document.getElementById(“num-active”) $numActive.innerHTML = getNumActive(); // ... }
  • 49. So far, we have defined application state and logic just fine. The only hard part that kept us back is rendering step. (Include generating HTML, keeping updated with app state and registering event callbacks)
  • 50. The rendering function – Second try var lastState; // store last appState for comparing function render() { var $listTodos = document.getElementById(“todos”) for (var i=0; i < appState.todos; i++) { // update, insert or delete DOM elements } var $numActive = document.getElementById(“num-active”) $numActive.innerHTML = getNumActive(); // ... lastState = deepClone(appState); }
  • 51. We have tried storing last application state for rendering only changed parts. This is what frameworks like Angular.js or Backbone (Underscore) offers.
  • 53. MVC • Applying Separation of Concern to GUI applications. • Input event → Controller → Model → View
  • 54. MVP • Applying Separation of Concern to GUI applications. • Model → Presenter → View • View → Presenter → Model
  • 55. Backbone.js var Todo = Backbone.Model.extend({ default: { title: "", complete: false }, toggle: function() { this.save(…); // trigger "change" (model) } }); var TodoView = Backbone.View.extend({ template: …, events: …, // callback to manipulate model (handled by controller) initialize: { this.listenTo(this.model, "change", this.render); // listen to "change" }, render: function() { … }, // rendering function (view) // … });
  • 56. Angular.js (version 1) function TodoCtrl($scope) { var todos = $scope.todos = []; $scope.addTodo = function() { // user event todos.push({ title: $scope.newTodo, completed: false }); // update state }; $scope.$watchCollection("todos", function() { // state-change event // … }); } <form id="todo-form" ng-submit="addTodo()"> … </form> <ul id="todo-list"> <li ng-repeat="todo in todos"> … </li> </ul>
  • 57. What does a application MV* framework offers? Tier 1: Operating System Tier 2: App Platform Tier 3: App
  • 58. What does a MV* framework offers? • Creating and assembling GUI → view, template • Handling user input → user event • Integrating GUI & business logic → state-change event (Backbone.js, Angular.js)
  • 59. Wow, so many concepts! model, view, template, controller, presenter, user event, state-change event Let’s return to our starting architecture
  • 60. Life of a GUI application state 1 1235 1235 state 2 render() render() processInput() updateState() processInput()
  • 62. Let’s put aside the fancy ways to define application state. The only hard part is rendering step.
  • 63. The application state var appState = { todos: [{ title: “hello”, complete: false }, { title: “world”, complete: false }] };
  • 64. Updating state function addTodo(label) { appState.todos.push({ title: label, completed: false }); } function toggle(index) { var item = appState.todos[index]; item.completed = !item.completed; }
  • 65. The rendering function React.createClass({ render: function() { return ( <ul> { appState.todos.map(function(item) { return <li> { item.title } </li>; }) } </ul> ); } });
  • 66. Handle state change React.createClass({ addTodoHandler: function() { var label = this.refs.inputTodo.value; addTodo(label); // update application state this.forceUpdate(); // trigger rendering function }, render: function() { return ( <div> <input ref="inputTodo"/> <button onClick={this.addTodoHandler}/> <ul> … </ul> </div> );} });
  • 67. Life of a GUI application state 1 1235 1235 state 2 render() render() addTodoHandler() addTodo() toggleHandler() toggle()
  • 68. React lets us work with our classic architecture and helps solving the hard part: rendering! No need to rewrite our application in an opinion way.
  • 69. We only need to understand 2 functions to start working with React: - forceUpdate() - render()
  • 70. What does React offers? • Creating and assembling GUI → React components • Handling user input → user events • Integrating GUI & business logic → keep GUI updated when application state changed
  • 71. Why do people choose React?
  • 72. What do people choose React? • As we see, the only hard part is rendering step. • React is a view library. It solves the right problem and solves it well. • It leaves application state for us. This is good because: • We work with classic architecture of GUI applications. • We can choose which architecture works best for us. • We can migrate legacy applications to React without changing so much code.
  • 73. How to choose a library or framework? 1. Write the prototype by your own without using library or framework. 2. Understand what them offer. 3. Choose only which ones you need. 4. Keep in mind the design that you can switch to another library later.
  • 74. What’s next? • Redux, an application state solution for React. • Because we understand how to handle application state, we can decide to use Redux or not. It’s up to you.
  • 76. TechTalk The fundamental problems of GUI applications & why people choose React Vu Nguyen [email protected]