SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Copyright © 2016 M/Gateway Developments Ltd
EWD 3 Training Course
Part 5 (a)
Building a QEWD Application
First Steps
(Using Windows & Caché)
Rob Tweed
Director, M/Gateway Developments Ltd
Twitter: @rtweed
Copyright © 2016 M/Gateway Developments Ltd
Pre-requisites
• Node.js installed
• Caché installed and running
• cache.node installed
• QEWD installed and running
• At least a basic text editor available
• These steps are covered in Part 4 of this
course
Copyright © 2016 M/Gateway Developments Ltd
Assumptions in this tutorial
• Windows & Caché
• QEWD installed in C:qewd
• Default HTTP configuration for Express
– ie not SSL / HTTPS
• ewd-xpress port = 8080
• IP address of QEWD machine:
– 192.168.1.100
• Change paths etc accordingly for your set-up
Copyright © 2016 M/Gateway Developments Ltd
Let’s Get Started…
Copyright © 2016 M/Gateway Developments Ltd
Create new application
• Create new directory:
– C:qewdwwwdemo1
• Create index.html file
– C:qewdwwwdemo1index.html
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
This is a demo!
</body>
</html>
Copyright © 2016 M/Gateway Developments Ltd
Try loading in browser
• http://192.168.1.100:8080/demo1/index.html
• Should display:
• If so, QEWD successfully fetched your
index.html file from C:qewddemo1index.html
– How did it know to do that?
This is a demo!
Copyright © 2016 M/Gateway Developments Ltd
Web Server Root Path
• Look in:
– C:qewdnode_modulesqewdlibmaster.js
• Around line 95:
var config = {
managementPassword: params.managementPassword || 'keepThisSecret',
serverName: params.serverName || 'ewd-xpress',
port: params.port || 8080,
poolSize: params.poolSize || 1,
webServerRootPath: params.webServerRootPath || process.cwd() + '/www/',
no_sockets: params.no_sockets || false,
qxBuild: qx.build,
ssl: params.ssl || false,
cors: params.cors || false,
masterProcessPid: process.pid,
database: params.database,
errorLogFile: params.errorLogFile || false,
mode: params.mode || 'production',
…etc
cwd = Current Working Directory
ie where you started QEWD
Copyright © 2016 M/Gateway Developments Ltd
Web Server Root Path
• Look in:
– C:qewdnode_modulesqewdlibmaster.js
• Around line 95:
var config = {
managementPassword: params.managementPassword || 'keepThisSecret',
serverName: params.serverName || 'ewd-xpress',
port: params.port || 8080,
poolSize: params.poolSize || 1,
webServerRootPath: params.webServerRootPath || process.cwd() + '/www/',
no_sockets: params.no_sockets || false,
qxBuild: qx.build,
masterProcessPid: process.pid,
database: params.database,
errorLogFile: params.errorLogFile || false,
mode: params.mode || 'production',
bodyParser: params.bodyParser || false
};
So in our case,
http://192.168.1.100:8080/
maps to C:qewd/www/
Copyright © 2016 M/Gateway Developments Ltd
QEWD URL mapping
http://192.168.1.100:8080/{applicationName}/{pageName}
maps to
C:qewd/www/{applicationName}/{pageName}
So:
http://192.168.1.100:8080/demo1/index.html
maps to
C:qewd/www/demo1/index.html
Copyright © 2016 M/Gateway Developments Ltd
Detect that the page is ready
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Copyright © 2016 M/Gateway Developments Ltd
Detect that the page is ready
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Load jQuery from CDN site
Could use local installation
Copyright © 2016 M/Gateway Developments Ltd
Detect that the page is ready
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
jQuery function detects that
Page DOM is ready
All JavaScript, CSS loaded
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload the URL in the browser
– Click Reload button
• To see output from console.log:
– In Chrome, open menu
• Developer Tools
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload the URL in the browser
– Click Reload button
– In JavaScript console, you’ll now see:
Copyright © 2016 M/Gateway Developments Ltd
Make the page dynamic
• Communicate with QEWD back-end
• To do this, need to use another EWD 3
module:
– ewd-client
• Client-side JavaScript file / module
• Provides the secure APIs to communicate between
a browser or React Native mobile device and the
ewd-xpess back-end
Copyright © 2016 M/Gateway Developments Ltd
Make the page dynamic
• Install ewd-client:
– Open Command Prompt Window
• Then copy the file:
– C:qewdnode_modulesewd-clientlibprotoewd-client.js
• to:
– C:qewdwwwewd-client.js
cd qewd
npm install ewd-client
Copyright © 2016 M/Gateway Developments Ltd
Loading ewd-client
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Loads it from C:qewdwwwewd-client.js
Copyright © 2016 M/Gateway Developments Ltd
Check that it loads
• Reload index.html in browser
• Click the Sources tab in the Developer
Tools window
Successfully loaded
Copyright © 2016 M/Gateway Developments Ltd
Using WebSockets
• In this demo we’ll use WebSockets as the
means of communication between
browser and the QEWD back-end
• We could use Ajax instead
– WebSockets are faster and more flexible
– Ajax may be more scalable at high-end
• ewd-client normalises the two transports
so it’s easy to switch between the two
Copyright © 2016 M/Gateway Developments Ltd
Using WebSockets
• QEWD relies on a standard module
named socket.io to provide WebSocket
support
• You must therefore load socket.io client-
side JavaScript library into the browser
Copyright © 2016 M/Gateway Developments Ltd
Loading socket.io
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Loads it from a virtual directory
created by socket.io at back-end
Copyright © 2016 M/Gateway Developments Ltd
Check that it loads
• Reload index.html in browser
• Click the Sources tab in the Developer
Tools window
Successfully loaded
Copyright © 2016 M/Gateway Developments Ltd
Ready to communicate with QEWD
• Everything is now in place to use QEWD
and ewd-client
Copyright © 2016 M/Gateway Developments Ltd
Starting ewd-client
• EWD.start() function
– Creates the client environment
• Everything protected within a closure
– Establishes a web socket connection to the QEWD
back-end
– Registers the client application with QEWD
• Will examine this step in more detail later
• Must not be invoked until everything has
been loaded into the browser’s DOM
Copyright © 2016 M/Gateway Developments Ltd
Starting ewd-client
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
EWD.start('demo1', $, io);
});
</script>
This is a demo!
</body>
</html>
Safe to start within $(document).ready() function
‘demo1’ is our application name
$ is jQuery object
io is socket.io object
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload index.html in browser
EWD has started successfully and
registered the application on QEWD
Copyright © 2016 M/Gateway Developments Ltd
Ensuring that EWD is safe to use
• EWD.start() takes time to complete and
involves several round-trips between client
and back-end
• How do we know when it’s completed and
safe for us to begin communicating
between client and back-end?
Copyright © 2016 M/Gateway Developments Ltd
ewd-registered Event
• When EWD.start() completes, it emits an
event:
– ewd-registered
• This can be used to safely commence
user functionality of application
Copyright © 2016 M/Gateway Developments Ltd
Handling the ewd-registered event
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
EWD.on('ewd-registered', function() {
// OK the app is now ready for use
console.log('*** application registered and ready for us to start!!');
});
console.log('everything loaded!’);
EWD.start('demo1', $, io);
});
</script>
This is a demo!
</body>
</html>
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload index.html in browser
Copyright © 2016 M/Gateway Developments Ltd
Tidy up the page
• Bad practice to have in-line JavaScript
within HTML pages
– Move to a separate JavaScript file
• C:qewdwwwdemo1app.js
Copyright © 2016 M/Gateway Developments Ltd
Revised application files
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script src=”app.js"></script>
<div id=”content”>
Content goes here
</div>
</body>
</html>
$(document).ready(function() {
EWD.on('ewd-registered', function() {
// EWD app code goes here
});
EWD.start('demo1', $, io);
});
index.html
app.js
Copyright © 2016 M/Gateway Developments Ltd
Now we’re ready to begin
• Use these index.html and app.js files as
templates for other applications
– Creates the basic environment needed for all
your hand-crafted QEWD applications

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

EWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a ServiceEWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a Service
 
EWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD ServicesEWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD Services
 
EWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD SessionEWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD Session
 
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
 
EWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
EWD 3 Training Course Part 6: What Happens when a QEWD Application is StartedEWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
EWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
 
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
 
EWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD ApplicationsEWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD Applications
 
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST ServicesEWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
 
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging CycleEWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
 
EWD 3 Training Course Part 2: EWD 3 Overview
EWD 3 Training Course Part 2: EWD 3 OverviewEWD 3 Training Course Part 2: EWD 3 Overview
EWD 3 Training Course Part 2: EWD 3 Overview
 
EWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session LockingEWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session Locking
 
EWD 3 Training Course Part 3: Summary of EWD 3 Modules
EWD 3 Training Course Part 3: Summary of EWD 3 ModulesEWD 3 Training Course Part 3: Summary of EWD 3 Modules
EWD 3 Training Course Part 3: Summary of EWD 3 Modules
 
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService FunctionalityEWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
 
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST ServicesEWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
 
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.jsEWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
 
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWDEWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
 
EWD 3 Training Course Part 4: Installing & Configuring QEWD
EWD 3 Training Course Part 4: Installing & Configuring QEWDEWD 3 Training Course Part 4: Installing & Configuring QEWD
EWD 3 Training Course Part 4: Installing & Configuring QEWD
 
QEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServicesQEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServices
 

Andere mochten auch

Andere mochten auch (6)

EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...
EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...
EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...
 
EWD 3 Training Course Part 9: Complex QEWD Messages and Responses
EWD 3 Training Course Part 9: Complex QEWD Messages and ResponsesEWD 3 Training Course Part 9: Complex QEWD Messages and Responses
EWD 3 Training Course Part 9: Complex QEWD Messages and Responses
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode Object
 
EWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker ApplianceEWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker Appliance
 
GT.M: A Tried and Tested Open-Source NoSQL Database
GT.M: A Tried and Tested Open-Source NoSQL DatabaseGT.M: A Tried and Tested Open-Source NoSQL Database
GT.M: A Tried and Tested Open-Source NoSQL Database
 

Ähnlich wie EWD 3 Training Course Part 5a: First Steps in Building a QEWD Application

Day in a life of a node.js developer
Day in a life of a node.js developerDay in a life of a node.js developer
Day in a life of a node.js developer
Edureka!
 

Ähnlich wie EWD 3 Training Course Part 5a: First Steps in Building a QEWD Application (20)

App development with quasar (pdf)
App development with quasar (pdf)App development with quasar (pdf)
App development with quasar (pdf)
 
qewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tierqewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tier
 
Day in a life of a node.js developer
Day in a life of a node.js developerDay in a life of a node.js developer
Day in a life of a node.js developer
 
Day In A Life Of A Node.js Developer
Day In A Life Of A Node.js DeveloperDay In A Life Of A Node.js Developer
Day In A Life Of A Node.js Developer
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
 
Improving WordPress Performance with Xdebug and PHP Profiling
Improving WordPress Performance with Xdebug and PHP ProfilingImproving WordPress Performance with Xdebug and PHP Profiling
Improving WordPress Performance with Xdebug and PHP Profiling
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
Love at first Vue
Love at first VueLove at first Vue
Love at first Vue
 
Improving WordPress performance (xdebug and profiling)
Improving WordPress performance (xdebug and profiling)Improving WordPress performance (xdebug and profiling)
Improving WordPress performance (xdebug and profiling)
 
Zend
ZendZend
Zend
 
Building and deploying React applications
Building and deploying React applicationsBuilding and deploying React applications
Building and deploying React applications
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
 
WordCamp Montreal 2016 WP-API + React with server rendering
WordCamp Montreal 2016  WP-API + React with server renderingWordCamp Montreal 2016  WP-API + React with server rendering
WordCamp Montreal 2016 WP-API + React with server rendering
 
Write php deploy everywhere tek11
Write php deploy everywhere   tek11Write php deploy everywhere   tek11
Write php deploy everywhere tek11
 
Spring Lab
Spring LabSpring Lab
Spring Lab
 
Pyramid deployment
Pyramid deploymentPyramid deployment
Pyramid deployment
 
Write php deploy everywhere
Write php deploy everywhereWrite php deploy everywhere
Write php deploy everywhere
 
Intro To Node.js
Intro To Node.jsIntro To Node.js
Intro To Node.js
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
 
Node.js to the rescue
Node.js to the rescueNode.js to the rescue
Node.js to the rescue
 

Mehr von Rob Tweed

Mehr von Rob Tweed (12)

QEWD Update
QEWD UpdateQEWD Update
QEWD Update
 
Data Persistence as a Language Feature
Data Persistence as a Language FeatureData Persistence as a Language Feature
Data Persistence as a Language Feature
 
LNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooLNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It Too
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It Too
 
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Servicesewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
 
EWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient ModeEWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient Mode
 
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORSEWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
 
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPSEWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
 
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWDEWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
 
EWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven IndexingEWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven Indexing
 
EWD 3 Training Course Part 25: Document Database Capabilities
EWD 3 Training Course Part 25: Document Database CapabilitiesEWD 3 Training Course Part 25: Document Database Capabilities
EWD 3 Training Course Part 25: Document Database Capabilities
 
EWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
EWD 3 Training Course Part 24: Traversing a Document's Leaf NodesEWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
EWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
 

Kürzlich hochgeladen

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Kürzlich hochgeladen (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 

EWD 3 Training Course Part 5a: First Steps in Building a QEWD Application

  • 1. Copyright © 2016 M/Gateway Developments Ltd EWD 3 Training Course Part 5 (a) Building a QEWD Application First Steps (Using Windows & Caché) Rob Tweed Director, M/Gateway Developments Ltd Twitter: @rtweed
  • 2. Copyright © 2016 M/Gateway Developments Ltd Pre-requisites • Node.js installed • Caché installed and running • cache.node installed • QEWD installed and running • At least a basic text editor available • These steps are covered in Part 4 of this course
  • 3. Copyright © 2016 M/Gateway Developments Ltd Assumptions in this tutorial • Windows & Caché • QEWD installed in C:qewd • Default HTTP configuration for Express – ie not SSL / HTTPS • ewd-xpress port = 8080 • IP address of QEWD machine: – 192.168.1.100 • Change paths etc accordingly for your set-up
  • 4. Copyright © 2016 M/Gateway Developments Ltd Let’s Get Started…
  • 5. Copyright © 2016 M/Gateway Developments Ltd Create new application • Create new directory: – C:qewdwwwdemo1 • Create index.html file – C:qewdwwwdemo1index.html <html> <head> <title>Demo QEWD application</title> </head> <body> This is a demo! </body> </html>
  • 6. Copyright © 2016 M/Gateway Developments Ltd Try loading in browser • http://192.168.1.100:8080/demo1/index.html • Should display: • If so, QEWD successfully fetched your index.html file from C:qewddemo1index.html – How did it know to do that? This is a demo!
  • 7. Copyright © 2016 M/Gateway Developments Ltd Web Server Root Path • Look in: – C:qewdnode_modulesqewdlibmaster.js • Around line 95: var config = { managementPassword: params.managementPassword || 'keepThisSecret', serverName: params.serverName || 'ewd-xpress', port: params.port || 8080, poolSize: params.poolSize || 1, webServerRootPath: params.webServerRootPath || process.cwd() + '/www/', no_sockets: params.no_sockets || false, qxBuild: qx.build, ssl: params.ssl || false, cors: params.cors || false, masterProcessPid: process.pid, database: params.database, errorLogFile: params.errorLogFile || false, mode: params.mode || 'production', …etc cwd = Current Working Directory ie where you started QEWD
  • 8. Copyright © 2016 M/Gateway Developments Ltd Web Server Root Path • Look in: – C:qewdnode_modulesqewdlibmaster.js • Around line 95: var config = { managementPassword: params.managementPassword || 'keepThisSecret', serverName: params.serverName || 'ewd-xpress', port: params.port || 8080, poolSize: params.poolSize || 1, webServerRootPath: params.webServerRootPath || process.cwd() + '/www/', no_sockets: params.no_sockets || false, qxBuild: qx.build, masterProcessPid: process.pid, database: params.database, errorLogFile: params.errorLogFile || false, mode: params.mode || 'production', bodyParser: params.bodyParser || false }; So in our case, http://192.168.1.100:8080/ maps to C:qewd/www/
  • 9. Copyright © 2016 M/Gateway Developments Ltd QEWD URL mapping http://192.168.1.100:8080/{applicationName}/{pageName} maps to C:qewd/www/{applicationName}/{pageName} So: http://192.168.1.100:8080/demo1/index.html maps to C:qewd/www/demo1/index.html
  • 10. Copyright © 2016 M/Gateway Developments Ltd Detect that the page is ready <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html>
  • 11. Copyright © 2016 M/Gateway Developments Ltd Detect that the page is ready <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> Load jQuery from CDN site Could use local installation
  • 12. Copyright © 2016 M/Gateway Developments Ltd Detect that the page is ready <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> jQuery function detects that Page DOM is ready All JavaScript, CSS loaded
  • 13. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload the URL in the browser – Click Reload button • To see output from console.log: – In Chrome, open menu • Developer Tools
  • 14. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload the URL in the browser – Click Reload button – In JavaScript console, you’ll now see:
  • 15. Copyright © 2016 M/Gateway Developments Ltd Make the page dynamic • Communicate with QEWD back-end • To do this, need to use another EWD 3 module: – ewd-client • Client-side JavaScript file / module • Provides the secure APIs to communicate between a browser or React Native mobile device and the ewd-xpess back-end
  • 16. Copyright © 2016 M/Gateway Developments Ltd Make the page dynamic • Install ewd-client: – Open Command Prompt Window • Then copy the file: – C:qewdnode_modulesewd-clientlibprotoewd-client.js • to: – C:qewdwwwewd-client.js cd qewd npm install ewd-client
  • 17. Copyright © 2016 M/Gateway Developments Ltd Loading ewd-client <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> Loads it from C:qewdwwwewd-client.js
  • 18. Copyright © 2016 M/Gateway Developments Ltd Check that it loads • Reload index.html in browser • Click the Sources tab in the Developer Tools window Successfully loaded
  • 19. Copyright © 2016 M/Gateway Developments Ltd Using WebSockets • In this demo we’ll use WebSockets as the means of communication between browser and the QEWD back-end • We could use Ajax instead – WebSockets are faster and more flexible – Ajax may be more scalable at high-end • ewd-client normalises the two transports so it’s easy to switch between the two
  • 20. Copyright © 2016 M/Gateway Developments Ltd Using WebSockets • QEWD relies on a standard module named socket.io to provide WebSocket support • You must therefore load socket.io client- side JavaScript library into the browser
  • 21. Copyright © 2016 M/Gateway Developments Ltd Loading socket.io <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> Loads it from a virtual directory created by socket.io at back-end
  • 22. Copyright © 2016 M/Gateway Developments Ltd Check that it loads • Reload index.html in browser • Click the Sources tab in the Developer Tools window Successfully loaded
  • 23. Copyright © 2016 M/Gateway Developments Ltd Ready to communicate with QEWD • Everything is now in place to use QEWD and ewd-client
  • 24. Copyright © 2016 M/Gateway Developments Ltd Starting ewd-client • EWD.start() function – Creates the client environment • Everything protected within a closure – Establishes a web socket connection to the QEWD back-end – Registers the client application with QEWD • Will examine this step in more detail later • Must not be invoked until everything has been loaded into the browser’s DOM
  • 25. Copyright © 2016 M/Gateway Developments Ltd Starting ewd-client <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); EWD.start('demo1', $, io); }); </script> This is a demo! </body> </html> Safe to start within $(document).ready() function ‘demo1’ is our application name $ is jQuery object io is socket.io object
  • 26. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload index.html in browser EWD has started successfully and registered the application on QEWD
  • 27. Copyright © 2016 M/Gateway Developments Ltd Ensuring that EWD is safe to use • EWD.start() takes time to complete and involves several round-trips between client and back-end • How do we know when it’s completed and safe for us to begin communicating between client and back-end?
  • 28. Copyright © 2016 M/Gateway Developments Ltd ewd-registered Event • When EWD.start() completes, it emits an event: – ewd-registered • This can be used to safely commence user functionality of application
  • 29. Copyright © 2016 M/Gateway Developments Ltd Handling the ewd-registered event <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { EWD.on('ewd-registered', function() { // OK the app is now ready for use console.log('*** application registered and ready for us to start!!'); }); console.log('everything loaded!’); EWD.start('demo1', $, io); }); </script> This is a demo! </body> </html>
  • 30. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload index.html in browser
  • 31. Copyright © 2016 M/Gateway Developments Ltd Tidy up the page • Bad practice to have in-line JavaScript within HTML pages – Move to a separate JavaScript file • C:qewdwwwdemo1app.js
  • 32. Copyright © 2016 M/Gateway Developments Ltd Revised application files <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script src=”app.js"></script> <div id=”content”> Content goes here </div> </body> </html> $(document).ready(function() { EWD.on('ewd-registered', function() { // EWD app code goes here }); EWD.start('demo1', $, io); }); index.html app.js
  • 33. Copyright © 2016 M/Gateway Developments Ltd Now we’re ready to begin • Use these index.html and app.js files as templates for other applications – Creates the basic environment needed for all your hand-crafted QEWD applications