JavaScript: The Machine Language of the Ambient Computing Era
Javascript the Language of the Web
-
Upload
andersjanmyr -
Category
Technology
-
view
1.394 -
download
1
description
Transcript of Javascript the Language of the Web
![Page 1: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/1.jpg)
Javascriptthe Programming Language of the Web
http://[email protected]
Anders Janmyr
Tuesday, November 9, 2010
![Page 2: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/2.jpg)
Ugly Javascript
Tuesday, November 9, 2010
![Page 3: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/3.jpg)
Beautiful Javascript
Tuesday, November 9, 2010
![Page 4: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/4.jpg)
Y-CombinatorScheme (Lisp)
(define Y (lambda (X) ((lambda (procedure) (X (lambda (arg)
((procedure procedure) arg))))
(lambda (procedure) (X (lambda (arg)
((procedure procedure) arg)))))))
Tuesday, November 9, 2010
![Page 5: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/5.jpg)
Y-CombinatorJavascript
function Y (X) { return (function(procedure) { return X(function(arg) { return procedure(procedure)(arg); }); })(function(procedure) { return X(function(arg) { return procedure(procedure)(arg); }); });}
Tuesday, November 9, 2010
![Page 6: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/6.jpg)
Syntax
Tuesday, November 9, 2010
![Page 7: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/7.jpg)
Values
Tuesday, November 9, 2010
![Page 8: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/8.jpg)
Number
• 64-bit floating point Double
• 0.1 + 0.2 = 0.30000000000000004
• NaN
Tuesday, November 9, 2010
![Page 9: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/9.jpg)
Strings
• Immutable
• ‘a string’ == “a string”
Tuesday, November 9, 2010
![Page 10: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/10.jpg)
Booleans
• true
• false
• Boolean()
• returns false for falsy values
• false, null, undefined, "", 0, NaN
Tuesday, November 9, 2010
![Page 11: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/11.jpg)
null
Tuesday, November 9, 2010
![Page 12: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/12.jpg)
Undefined
• Not even null
• Default value
• Parameters
• Arguments
• Non-existent members
Tuesday, November 9, 2010
![Page 13: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/13.jpg)
Object
• Everything else
• Including functions
Tuesday, November 9, 2010
![Page 14: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/14.jpg)
Statements
Tuesday, November 9, 2010
![Page 15: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/15.jpg)
var
• Declares a variable
• If you forget, it will be defined globally!
• Scope of variable is the function
Tuesday, November 9, 2010
![Page 16: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/16.jpg)
Conditionals
• If
• Switch - Case
if (unit == 'Litre') return value;else return this.withTwoDecimals(value / 3.7854);
Tuesday, November 9, 2010
![Page 17: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/17.jpg)
Loops• while
• do - while
• for(var i; i<42; i++)
• for (key in object)
for (var key in market) { current.market[key] = gui.convert(market[key]);}
Tuesday, November 9, 2010
![Page 18: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/18.jpg)
Exceptionstry { setSelected(target); f();} catch (err) { console.log(err);}
throw(anyObject)
Tuesday, November 9, 2010
![Page 19: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/19.jpg)
Disruptive
• return [value]
• break [label]
• continue [label]
• throw object
Tuesday, November 9, 2010
![Page 20: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/20.jpg)
Literals
number 1.234
string ‘anders’, “janmyr”
object { }
array [ ]
function function() {}
regexp /^anders$/
Tuesday, November 9, 2010
![Page 21: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/21.jpg)
typeoftype typeof
object 'object'
function 'function'
array 'object'
number 'number'
string 'string'
boolean 'boolean'
null 'object'
undefined 'undefined'
Tuesday, November 9, 2010
![Page 22: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/22.jpg)
Equality
• 5 == “5” // true
• 5 === “5” // false
Tuesday, November 9, 2010
![Page 23: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/23.jpg)
Object
Tuesday, November 9, 2010
![Page 24: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/24.jpg)
Object
Hashtable
Tuesday, November 9, 2010
![Page 25: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/25.jpg)
Object
Dynamic
Tuesday, November 9, 2010
![Page 26: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/26.jpg)
Object Literal
var empty_object = {};
Tuesday, November 9, 2010
![Page 27: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/27.jpg)
var kjell = { name: "Kjell", "kind": "Malayan"};
Tuesday, November 9, 2010
![Page 28: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/28.jpg)
var kjell = { name: "Kjell", "kind": "Malayan" address: { country: "Denmark" }};
Tuesday, November 9, 2010
![Page 29: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/29.jpg)
Retrievalkjell.name // “Kjell”kjell["name"] // “Kjell”
// Denmarkkjell.address.country kjell['address']["country"]
Tuesday, November 9, 2010
![Page 30: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/30.jpg)
Retrieving non-existent properties
kjell.firstname // undefinedkjell["NAME"] // undefinedkjell.home.country // Error
Tuesday, November 9, 2010
![Page 31: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/31.jpg)
Setting non-existent properties
kjell.firstname = 'Sven';kjell["NAME"] = 'SVEN';
kjell.firstname // 'Sven'
Tuesday, November 9, 2010
![Page 32: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/32.jpg)
delete kjell.firstname
kjell.firstname // undefined
Tuesday, November 9, 2010
![Page 33: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/33.jpg)
Prototypical
Tuesday, November 9, 2010
![Page 34: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/34.jpg)
Prototypical Inheritance using Object.create
var rudolph = Object.create(kjell);
rudolph.name // “Kjell”
Tuesday, November 9, 2010
![Page 35: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/35.jpg)
Prototypical Inheritance
name Kjell
kind Malayan
id a4r54ed
prototype
Tuesday, November 9, 2010
![Page 36: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/36.jpg)
rudolph.name = 'Rudolph';
rudolph.name // “Rudolph”kjell.name // “Kjell”
rudolph.kind // ‘Malayan’
Tuesday, November 9, 2010
![Page 37: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/37.jpg)
kjell.kind = 'Baird';
rudolph.kind // ‘Baird’
rudolph.kind // ‘Malayan’
Tuesday, November 9, 2010
![Page 38: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/38.jpg)
delete rudolph.name
rudolph.name // ‘Kjell’
Tuesday, November 9, 2010
![Page 39: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/39.jpg)
Prototypical Inheritance
new Constructor();
Returns a new object with a link toConstructor.prototype
Tuesday, November 9, 2010
![Page 40: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/40.jpg)
Prototypical Inheritance
Object.create = function(o) { function F() {} F.prototype = o; return new F();}
Tuesday, November 9, 2010
![Page 41: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/41.jpg)
Prototypical Inheritance
name kjell
kind Malayan...
id a4r54edname rudolph
prototype
Tuesday, November 9, 2010
![Page 42: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/42.jpg)
Array
Tuesday, November 9, 2010
![Page 43: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/43.jpg)
Arrays
• Array inherits from object
• Indexes are converted to strings
• Magic length property
• Always one larger than the highest int property
Tuesday, November 9, 2010
![Page 44: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/44.jpg)
Array Literals
• [ ]
• names = [ ‘Rudolph’, ‘Kjell’, ‘Torsten’]
• typeof value == ‘object’
• value.constructor === Array
Tuesday, November 9, 2010
![Page 45: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/45.jpg)
Array Methods
• concat
• join
• pop
• push
• slice
• sort
• splice
Tuesday, November 9, 2010
![Page 46: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/46.jpg)
JSON
Tuesday, November 9, 2010
![Page 47: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/47.jpg)
JSON{ "version": "1.0", "markets": [ { "name": "Europe", "currency": "EUR"}, { "name": "North America", "currency": "USD"}, { "name": "Other", "currency": "USD"} ], "serviceTypes": ["Maintenence", "WearingPart"], "valueTypes": ["Market value", "Trade in value"]}
Tuesday, November 9, 2010
![Page 48: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/48.jpg)
Functions
Tuesday, November 9, 2010
![Page 49: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/49.jpg)
Function
function() {};
lambda
Tuesday, November 9, 2010
![Page 50: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/50.jpg)
Function
First class object
Tuesday, November 9, 2010
![Page 51: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/51.jpg)
Function Statement
function foo() {}
expands to
var foo = function foo() {};
Tuesday, November 9, 2010
![Page 52: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/52.jpg)
Functions
Can be defined inside other functions!
Tuesday, November 9, 2010
![Page 53: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/53.jpg)
residualValues: function(cur) { var self = this; return function() { return [1,2,3,4,5].map(function(age) { return { years: age, value: self.tradePercent(cur, age) }; }); }}
Tuesday, November 9, 2010
![Page 54: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/54.jpg)
Methods
functions stored in objects
Tuesday, November 9, 2010
![Page 55: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/55.jpg)
Built-in Prototypes
• Object.prototype
• Array.prototype
• Function.prototype
• Number.prototype
• String.prototype
• Boolean.prototype
Tuesday, November 9, 2010
![Page 56: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/56.jpg)
Array.prototype.contains = function(element) { for (var i = 0; i < this.length; i++) { if (this[i] == element) return true; } return false;}
[1, 2, 3].contains(3); // true
Tuesday, November 9, 2010
![Page 57: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/57.jpg)
Function.prototype.method = function(name, func) {
this.prototype[name] = func;return this;
}
Tuesday, November 9, 2010
![Page 58: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/58.jpg)
String.method(‘trim’, function() { return this.replace(/^\s+|\s+$/g, ‘’);}
“ tapir “.trim(); // “tapir”
Tuesday, November 9, 2010
![Page 59: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/59.jpg)
Scope
Tuesday, November 9, 2010
![Page 60: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/60.jpg)
Scope
The function is the scope of the variables
Tuesday, November 9, 2010
![Page 61: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/61.jpg)
Invocation Forms
• Function form
• sleep(10)
• Method form• kjell.sleep(10)
• kjell[“sleep”](10)
• Constructor form• new sleep(10)
• Apply form• sleep.apply(rudolph, 10)
Tuesday, November 9, 2010
![Page 62: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/62.jpg)
thisInvocation
Formthis
functionthe global
object
method kjell
constructor a new object
apply rudolph
this is an extra parameter that depends on the
calling form
Tuesday, November 9, 2010
![Page 63: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/63.jpg)
arguments
• A special array like, DYNAMIC, parameter
• All the arguments of the invocation
Tuesday, November 9, 2010
![Page 64: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/64.jpg)
function sum() { var i, n = arguments.length, total = 0; for (i = 0; i < n; i += 1) { total += arguments[i]; } return total;}
sum(1, 2, 3, 4);
Tuesday, November 9, 2010
![Page 65: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/65.jpg)
Dynamic Compilation
• eval
• Evaluates a string and returns the result.
• new Function(parameterArray, codeString)
• Creates and returns a function.
• var add=new Function("a", "b", "return a+b;");
Tuesday, November 9, 2010
![Page 66: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/66.jpg)
Global Variables
Tuesday, November 9, 2010
![Page 67: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/67.jpg)
The global Object
• Container for all variables
• On browsers window == global
• Any var not declared is global
• Global variables are BAD
Tuesday, November 9, 2010
![Page 68: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/68.jpg)
Good Practices
Tuesday, November 9, 2010
![Page 69: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/69.jpg)
Modules
var MyNamespace = {};
var MyNS = MyNS || {};
Tuesday, November 9, 2010
![Page 70: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/70.jpg)
Cascade
setFirst: function(name) { this.first = name; return this;}
person.setFirst(“Anders”).setLast(“Janmyr”).setAge(40);
Tuesday, November 9, 2010
![Page 71: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/71.jpg)
Encapsulationvar Esperanto = Esperanto || {};
Esperanto.Lab = function() { var privVar = "example"; function privFunc() { return privVar; } return { example: function() { return privFunc(); } }}()
Tuesday, November 9, 2010
![Page 72: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/72.jpg)
Local FunctionscostData: function(current) { var data = {}; function addEntry(name, cost) { data[name + "PerHour"] = model.withTwoDec(cost/hours); data[name] = model.noDecimalsWithSeparator(cost); };
addEntry("interest", this.financialCost(current)), addEntry("depreciation", this.depreciationCost(current)), return data;},
Tuesday, November 9, 2010
![Page 73: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/73.jpg)
self = this
attachFormListener: function(form, object) { var self = this; function populator(event) { self.populateFromForm(form, object); object.notify(); }; form.getElements().each(function(child) { child.observe('change', populator); });},
Tuesday, November 9, 2010
![Page 74: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/74.jpg)
Mixins
Object.mixin = function(destination, source) { for (property in source) destination[property] = source[property]; return destination;}
Tuesday, November 9, 2010
![Page 75: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/75.jpg)
Enforcing New
function User(first, last) { if ( !(this instanceOf User)) return new User(first, last); this.name = first + ‘ ‘ + last;}
Tuesday, November 9, 2010
![Page 76: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/76.jpg)
Tools
Tuesday, November 9, 2010
![Page 77: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/77.jpg)
Debuggers
• Firebug
• Apple Dev Tools
• Chrome Dev Tools
• Internet Explorer Developer Tools
Tuesday, November 9, 2010
![Page 78: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/78.jpg)
CSS Tools
• http://codylindley.com/jqueryselectors/
• Selector Gadget
• Nokogiri• XML, HTML, SAX Parser
Tuesday, November 9, 2010
![Page 79: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/79.jpg)
Minification
• JsMin• http://www.crockford.com/javascript/
jsmin.html
• YUI Compressor• http://developer.yahoo.com/yui/compressor/
Tuesday, November 9, 2010
![Page 80: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/80.jpg)
Build Tools
• Rake
• SCons
• Ant
• Scripts
Tuesday, November 9, 2010
![Page 81: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/81.jpg)
File Watchers
• xrefresh for Firefox and IE• http://xrefresh.binaryage.com/
• LiveReload for Safari and Chrome• http://github.com/mockko/livereload
• Watchr• gem install watchr
Tuesday, November 9, 2010
![Page 82: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/82.jpg)
Localtunnel
• gem install localtunnel
• localtunnel -k my_public_ssh.key
• localtunnel 80• Port 80 is now publicly accessible from
http://8bv2.localtunnel.com ...
•
Tuesday, November 9, 2010
![Page 83: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/83.jpg)
Tuesday, November 9, 2010
![Page 84: Javascript the Language of the Web](https://reader030.fdocuments.net/reader030/viewer/2022020207/55535477b4c9059e688b5344/html5/thumbnails/84.jpg)
Lab
http://10.48.44.155/~andersjanmyr/
Tuesday, November 9, 2010