Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Going Offline with JS
1. Brendan Kowitz
@brendankowitz
Live Backchannel: #dddbrisbane #web03
Going Offline with JS
and JavaScript Application Development
2. Overview
• Introduction
1 • JavaScript on my Server!
• Dependencies, Patterns, Templates
2 • Client-side JavaScript
3 • WinJS (Windows 8)
• Wrap up
3. What are the issues?
• How to we reuse our own libraries?
• How do we tackle dependency / module
management?
• How do we structure our projects?
• How do we test our projects?
• What tools do we use?
4. What can we gain?
• Vast open source community
• Mostly platform independent
• Some of the fastest Dynamic Language
interpreters around*
• Reduce language ambiguity
5. What can we build?
Windows 8
Node.js + Railsway.js jQuery Mobile + Spine.js
JavaScript Metro
7. Dependency Management
• Downloading Dependent Libraries
– .NET has Nuget (this also works for JS in .NET
projects)
– Ruby has Gems
– Node.js uses NPM (Node.js Package Manager)
8. Dependency Management --cont
• Using those libraries in your page
– CommonJS specification
• RequireJS
• Node.js
• When.js
– Script Loaders (load scripts in parallel)
• YepNope
• Yabble
• LABjs
http://lmgtfy.com/?q=commonjs
9. Railway.js
• railway init blog && cd blog
• npm install -l
• railway generate crud post title content
• railway server 8888
• open http://127.0.0.1:8888/posts
10. Testing from the server
• Node.js
– Zombie.js
– Tobi.js
– … many others
19. Windows 8 Metro - WinJs
• App starts like any web page - HTML page
loads
• HTML page loads its files
– WinJS script & styles
– Your app’s scripts & styles
• Your code wires up to app lifetime events
• Start the app
• … and events happen
22. Navigation
• Multi page (Not recommended in MSDN doco)
– Default behavior of browser
– Navigation loads a new page
– Drops script context
– Have to serialize state that gets passed across pages
(use WinJS to help)
• Single Page
– One page as far as browser is concerned
– DOM elements changed programmatically
– Keeps script context and state for app lifetime
– Harder to design an app in a single HTML file
23. Fragments
• We want separate HTML files
– Easier to design
– Easier to maintain
• Fragments
– Separate files, plus a loader that will bring them in
– In ui.js: WinJS.UI.Fragments namespace
27. Mozilla Chromeless
“The “Chromeless” project experiments with the idea of removing the current
browser user interface and replacing it with a flexible platform which allows for the
creation of new browser UI using standard web technologies such as HTML, CSS and
JavaScript.”
http://mozillalabs.com/chromeless
28. Wrap up
1 2 3
Problems with JS JavaScript Patterns Windows 8
CommonJS Spine.js JavaScript Metro
Node.js PhoneGap
Railway.js QUnit
Tobi.js
Javascript can have a lot of challenges in general
Node's goal is to provide an easy way to build scalable network programs.Node tells the operating system that it should be notified when a new connection is made, and then it goes to sleep. If someone new connects, then it executes the callback. Each connection is only a small heap allocation.
jQuery gives us a great api and it doesn’t restrict how we can structure out applications, this doesn’t mean that we shouldn’t have a nice structureDon’t use jQuery’s namespace, create your own, be your own app
A pure js library that provides the windows metro style for js applicationsProvides the controlsStyle sheets (fonts, margins etc..)Touch interface for win8Helpers, PatternsDesigned for easy toolabilityWinJS is a library not a framework..load whatever pieces you require
A pure js library that provides the windows metro style for js applicationsProvides the controlsStyle sheets (fonts, margins etc..)Touch interface for win8Helpers, PatternsDesigned for easy toolabilityWinJS is a library not a framework..load whatever pieces you requirePromises: Provides a mechanism to schedule work to be done on a value that has not yet been computed. It is an abstraction for managing interactions with asynchronous APIs.