SlideShare a Scribd company logo
Is HTML5
   ready for
production?
Hi, I’m Remy

@rem
remy@leftlogic.com

I <3 JavaScript

Questions: interrupt
& ask!
There's a lot more down here.
HTML5 is a spec
sort of
"HTML5" is a ^brand
MOAR!!!
"HTML5"




          Geolocation
          Web Workers
          Web Sockets
          Web SQL Databases
          Web Storage
          Offline applications
HTML5
          Offline events
          Canvas
          Video
          Web Forms
H TM L5
N OT


NOT HTM
           L5
CSS != HTML
But maybe we should have been more careful
caniuse.com
When can I
use "HTML5"?
Making it
work in
the "other"
browser
Polyfill
A shim that mimics a future
API providing a fallback to
       older browsers
    http://goo.gl/0Z9eI
Tools
Modernizr to detect support
yepnode.js to conditionally load
(available as part of Modernizr)
Tools
Modernizr.load({
  test: Modernizr.geolocation,
  nope: 'geo-polyfill.js',
  complete: initMyGeoApp
});
Oh, and learn
JavaScript
Web Storage
Cookies
suck.
Not the edible ones, duh.




Cookies
suck.
The code for cookies
 is a pain - I always
       google it.
"Session" cookies
leak across sessions.
Persistent cookies
require special date
       format
Deleting a cookie, isn't
 really deleting, but
 setting in the past.
Varying degrees of
limitations on size and
       number.
Fuck cookies.
Sexy Web Storage FTW
One Interface


localStorage
sessionStorage

 http://dev.w3.org/html5/webstorage/
localStorage

• Persists
• Applied to document origin, i.e.
  scheme/host/port tuple

• No expiry
sessionStorage

• Lasts whilst on the document origin
• Doesn't leak
• Exactly the same API as localStorage
5mb?
Done! o/
However: utf-16 ∴ 2½Mb
API
void setItem(key, value)
any* getItem(key)
void removeItem(key)
string key(index)
void clear()
readonly number length
var store = sessionStorage;
Play
       store.setItem('name','rem');
       store.getItem('name');
       store.removeItem('name');




                    Do it in the console!
API
setter setItem
getter getItem
deleter removeItem
var store = sessionStorage;
Play
       store.name = 'rem';
       store.name;
       delete store.name;




                     Do it in the console!
t ip
   There's no security
   protecting the API
 // Safari debugger broken:
 ss.setItem('key', 12);
Values are strings

      Work around: JSON
 (and http://www.json.org/json2.js)
Play
       var store = sessionStorage,
           user = { screen_name : ‘rem’,
                    rating : 11 };


       store.user = JSON.stringify(user));
       var gotUser = JSON.parse(store.user);
       alert(gotUser.screen_name);
Events too
window.addEventListener('storage', function (event) {
  console.log(event);
}, false);


                                http://jsbin.com/ahafa3
Storage in all
  browsers
window.name
sessionStorage = (function () {
  var data = window.name ? JSON.parse(window.name) : {};

  return {
     clear: function () {
        data = {};
        window.top.name = '';
     },
     getItem: function (key) {
        return data[key] || null;
     },
     removeItem: function (key) {
        delete data[key];
        window.top.name = JSON.stringify(data);
     },
     setItem: function (key, value) {
        data[key] = value;
        window.top.name = JSON.stringify(data);
     }
  };
})();
                       http://gist.github.com/350433
t ip
 Firefox cookie security
 applies to Storage too :(
t ip
var cookiesEnabled = (function () {
  // the id is our test value
  var id = +new Date();

  // generate a cookie to probe cookie access
  document.cookie = '__cookieprobe=' + id + ';path=/';

  // if the cookie has been set, then we're good
  return (document.cookie.indexOf(id) !== -1);
})();
Web SQL Databases




             http://flic.kr/p/drmCJ
IndexedDB



            http://flic.kr/p/5KXFwB
Questions?
Canvas
Cooler than this guy.
Canvas   SVG
http://vimeo.com/6691519
• It's not one is better than the other,
  they do different things

• Select canvas when it makes sense
• Don't assume interactive means
  canvas

• Check out raphaeljs.com
http://mrdoob.com
canvas-1.html
Play
       <!DOCTYPE html>
       <html lang="en">
       <head>
       <meta charset="utf-8" />
       <title>Canvas</title>
       </head>
       <body>
         <canvas></canvas>
       </body>
       </html>
        http://dev.w3.org/html5/canvas-api/canvas-2d-api.html
2D API

ctx = canvas.getContext('2d')
Start Simple
fillRect, strokeRect
      & colours
ctx.fillRect(10, 10, 100, 100);
ctx.fillRect(10, 10, 100, 100);
ctx.fillStyle = '#c00';
ctx.fillRect(10, 10, 100, 100);
ctx.fillStyle = '#c00';
ctx.fillRect(100, 75, 50, 50);
ctx.fillRect(10, 10, 100, 100);
ctx.fillStyle = '#c00';
ctx.fillRect(100, 75, 50, 50);
ctx.strokeStyle = '#0c0';
ctx.fillRect(10, 10, 100, 100);
ctx.fillStyle = '#c00';
ctx.fillRect(100, 75, 50, 50);
ctx.strokeStyle = '#0c0';
ctx.lineWidth = 5;
ctx.fillRect(10, 10, 100, 100);
ctx.fillStyle = '#c00';
ctx.fillRect(100, 75, 50, 50);
ctx.strokeStyle = '#0c0';
ctx.lineWidth = 5;
ctx.arc(100,50,25,0,Math.PI*2,true);
ctx.fillRect(10, 10, 100, 100);
ctx.fillStyle = '#c00';
ctx.fillRect(100, 75, 50, 50);
ctx.strokeStyle = '#0c0';
ctx.lineWidth = 5;
ctx.arc(100,50,25,0,Math.PI*2,true);
ctx.stroke();
t ip

  Math.PI == 180°
t ip

 Math.PI *2 == 360°
t ip
  d * Math.PI / 180
      == radian
t ip   CSS stretches
Gradient fills
1. Create a gradient object

2.Add colour stops

3.Set the gradient to the
 fillStyle

4.Draw
var w = canvas.width,
    h = canvas.height;

var gradient = ctx.createLinearGradient(0, 0, w, h);
var w = canvas.width,
    h = canvas.height;

var gradient = ctx.createLinearGradient(0, 0, w, h);
gradient.addColorStop(0, '#fff');
gradient.addColorStop(0.5, '#f00');
gradient.addColorStop(1, '#000');
var w = canvas.width,
    h = canvas.height;

var gradient = ctx.createLinearGradient(0, 0, w, h);
gradient.addColorStop(0, '#fff');
gradient.addColorStop(0.5, '#f00');
gradient.addColorStop(1, '#000');

ctx.fillStyle = gradient;
var w = canvas.width,
    h = canvas.height;

var gradient = ctx.createLinearGradient(0, 0, w, h);
gradient.addColorStop(0, '#fff');
gradient.addColorStop(0.5, '#f00');
gradient.addColorStop(1, '#000');

ctx.fillStyle = gradient;
ctx.fillRect(0, 0, w, h);
Play



createRadialGradient(x0,y0,r0,x1,y1,r1)
Pattern Fills
var img = new Image();
img.src = url;
var pattern = ctx.createPattern(img,'repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, w, h);
t ip   invalid_state

 img.onload = function () {
    // now use image for canvas
 };
Playing with paths
• For drawing irregular shapes
• Can be filled
• ...or stroked.
lineWidth     rect(x,y,h,w)

lineTo(x,y)   arc(x,y,r,s,e,
              anticw)
moveTo(x,y)
              fill()
beginPath()
              stroke()
closePath()
drawImage
<img>    <canvas>   <video>




        <canvas>
drawImage(src, dx, dy)

drawImage(src, dx, dy, dw, dh)

drawImage(src, sx, sy, sw, sh,
          dx, dy, dw, dh)
Play
       img.onload = function () {
          // this == img
          canvas.width = this.width;
          canvas.height = this.height;
          ctx.drawImage(this, 0, 0);
       };




                           canvas-10.html
pixel
pushing
ctx.getImageData(0,0,w,h)
ctx.getImageData(0, 0, w, h);


         0   1   2    3


 i = 0   r   g   b    a


 i = 1   r   g   b    a


 i...    r   g   b    a
pixels.data[i * 4 + 0];


        0   1   2    3


i = 0   r   g   b    a


i = 1   r   g   b    a


i...    r   g   b    a
pixels.data[i * 4 + 1];


        0   1   2    3


i = 0   r   g   b    a


i = 1   r   g   b    a


i...    r   g   b    a
pixels.data[i * 4 + 2];


        0   1   2    3


i = 0   r   g   b    a


i = 1   r   g   b    a


i...    r   g   b    a
pixels.data[i * 4 + 3];


        0   1   2    3


i = 0   r   g   b    a


i = 1   r   g   b    a


i...    r   g   b    a
var pixels = ctx.getImageData(0, 0, w, h),
    l = pixels.data.length,
    i;

for (i = 0; i < l; i += 4) {




}
var pixels = ctx.getImageData(0, 0, w, h),
    l = pixels.data.length,
    i;

for (i = 0; i < l; i += 4) {


                     This says loop
                     over each pixel
}
var pixels = ctx.getImageData(0, 0, w, h),
    l = pixels.data.length,
    i;

for (i = 0; i < l; i += 4) {
  // red:   pixels.data[i+0]



}
var pixels = ctx.getImageData(0, 0, w, h),
    l = pixels.data.length,
    i;

for (i = 0; i < l; i += 4) {
  // red:   pixels.data[i+0]
  // green: pixels.data[i+1]


}
var pixels = ctx.getImageData(0, 0, w, h),
    l = pixels.data.length,
    i;

for (i = 0;   i < l; i += 4) {
  // red:     pixels.data[i+0]
  // green:   pixels.data[i+1]
  // blue:    pixels.data[i+2]

}
var pixels = ctx.getImageData(0, 0, w, h),
    l = pixels.data.length,
    i;

for (i = 0;   i < l; i += 4) {
  // red:     pixels.data[i+0]
  // green:   pixels.data[i+1]
  // blue:    pixels.data[i+2]
  // alpha:   pixels.data[i+3]
}
ctx.putImageData(pixels, 0, 0)
ctx.putImageData(pixels, 0, 0)

           Needs to be a
         CanvasPixelArray
              object
t ip      security_err

 To use getImageData, your document
 must be served over http (or https) -
 i.e. it doesn't work offline.
/workshop/authors-large.jpg
Play
       greyscale = r*.3 + g*.59 + b*.11;
       r = g = b = greyscale;


       saturation = (Math.max(r,g,b) +
       Math.min(r,g,b))/2;
       r = g = b = saturation;




                      http://jsbin.com/aguho3/2/edit
canvas.toDataURL('image/png');
Play
       save.onclick = function () {
          window.open(
             canvas.toDataURL('image/png')
          );
       };




                                canvas-13.html
Questions?
Offline Applications
Offline Apps

• Application cache / manifest
• Events: offline, online
• navigator.onLine property
http://icanhaz.com/rubiks
Using a Manifest
<!DOCTYPE html>
<html manifest="my.appcache">
<body>
<!-- my page -->
</body>
</html>
my.appcache
CACHE MANIFEST
app.html
css/style.css
js/app.js
#version 13
The Manifest

1. Serve as text/manifest, by
   adding to mime.types:

text/cache-manifest appcache
t ip    Firefox caching

 <IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType text/cache-manifest
  ↪ “access plus 0 seconds”
 </IfModule>
The Manifest

2. First line must be:

    CACHE MANIFEST
The Manifest

3. Including page is implicitly
   included in the cache.
The Manifest

4. Two futher namespaces:
   NETWORK & FALLBACK

    FALLBACK:
    / offline.html
CACHE MANIFEST

/
index.html
range.js
datastore.js

FALLBACK:
# force everything through
# the index url
/ /

# this won't match
# anything unless it's on
# another domain
NETWORK:
*

# v4
CACHE MANIFEST

                    /
                    index.html
Served from cache   range.js
                    datastore.js

                    FALLBACK:
                    # force everything through
                    # the index url
                    / /

                    # this won't match
                    # anything unless it's on
                    # another domain
                    NETWORK:
                    *

                    # v4
CACHE MANIFEST

                          /
                          index.html
                          range.js
Requests for files not    datastore.js

found in the cache, are   FALLBACK:
                          # force everything through
     directed to /        # the index url
                          / /
    i.e. index.html
                          # this won't match
    (when offline).       # anything unless it's on
                          # another domain
                          NETWORK:
                          *

                          # v4
CACHE MANIFEST

                       /
                       index.html
                       range.js
                       datastore.js
Any requests to urls
                       FALLBACK:
that don't match / -   # force everything through
                       # the index url
  i.e. on another      / /

  domain, will be      # this won't match
                       # anything unless it's on
served through the     # another domain
                       NETWORK:
       web.            *

                       # v4
CACHE MANIFEST

                       /
                       index.html
                       range.js
                       datastore.js

                       FALLBACK:
                       # force everything through
                       # the index url
                       / /
   Also ensures
                       # this won't match
  browser even         # anything unless it's on
                       # another domain
attempts to load the   NETWORK:
                       *
       asset
                       # v4
CACHE MANIFEST

                       /
                       index.html
                       range.js
                       datastore.js

                       FALLBACK:
                       # force everything through
                       # the index url
                       / /
The contents of the
                       # this won't match
   manifest must       # anything unless it's on
                       # another domain
change to trigger an   NETWORK:
                       *
      update
                       # v4
The Manifest

5. Include some versioning to
   cache bust your manifest

     # version 16
The process
Browser: I have a
Browser: request   Server: serve all    manifest, cache
                                            assets



                       Browser:
 Server: serve
                   applicationCache    Browser: reload
manifest assets
                       updated



                    Browser: only
 Browser: serve                        Server: 304 Not
                   request manifest
    locally                               Modified
                         file
Browser: I have a
    Problem: serve all
Browser: requestServer:                manifest, cache
                                           assets
    Change of content
    requires 2 refreshes reload
 Server: serve
                   Browser:
               applicationCache Browser:
manifest assets
                       updated



                    Browser: only
 Browser: serve                       Server: 304 Not
                   request manifest
    locally                              Modified
                         file
document.body.onOnline =
function () {
   // fire an update to the cache
   applicationCache.update();
};
applicationCache.onUpdateReady = function () {
   if (confirm("New version ready. Refresh?")) {
     // reload
     window.location.refresh();
   }
};
t ip

 Do offline last
Questions?
Web Sockets
Native or polyfilled
http://github.com/gimite/web-socket-js/
new WebSocket(url)



   http://dev.w3.org/html5/websockets/
ws://node.remysharp.com:8000




 http://github.com/miksago/node-websocket-server
onopen
onmessage
onclose
onerror
var data = JSON.parse(event.data);
.send
var url = 'ws://node.remysharp.com:8000',
       conn = new WebSocket(url);


conn.onopen = function () {
     conn.send('hello world');
};


conn.onmessage = function (event) {
     console.log(event.data);
};
var url = 'ws://node.remysharp.com:8000',
       conn = new WebSocket(url);


conn.onopen = function () {
     conn.send('hello world');
};


conn.onmessage = function (event) {
     console.log(event.data);
};
var url = 'ws://node.remysharp.com:8000',
      conn = new WebSocket(url);


conn.onopen = function () {
     conn.send('hello world');
};


conn.onmessage = function (event) {
     console.log(event.data);
};
var url = 'ws://node.remysharp.com:8000',
       conn = new WebSocket(url);


conn.onopen = function () {
     conn.send('hello world');
};


conn.onmessage = function (event) {
     console.log(event.data);
};
var url = 'ws://node.remysharp.com:8000',
       conn = new WebSocket(url);


conn.onopen = function () {
     conn.send('hello world');
};


conn.onmessage = function (event) {
     console.log(event.data);
};
var url = 'ws://node.remysharp.com:8000',
       conn = new WebSocket(url);


conn.onopen = function () {
     conn.send('hello world');
};


conn.onmessage = function (event) {
     console.log(event.data);
};
var url = 'ws://node.remysharp.com:8000',
       conn = new WebSocket(url);


conn.onopen = function () {
     conn.send('hello world');
};


conn.onmessage = function (event) {
     console.log(event.data);
};


Play
Questions?
      To contact me after my presentation
      – text NHT to INTRO (46876)


      Or --
      remy@leftlogic.com
      @rem

More Related Content

What's hot

Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 AutumnGoptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Masashi Shibata
 
The Ring programming language version 1.5.4 book - Part 40 of 185
The Ring programming language version 1.5.4 book - Part 40 of 185The Ring programming language version 1.5.4 book - Part 40 of 185
The Ring programming language version 1.5.4 book - Part 40 of 185
Mahmoud Samir Fayed
 
Webinar: Building Your First App in Node.js
Webinar: Building Your First App in Node.jsWebinar: Building Your First App in Node.js
Webinar: Building Your First App in Node.js
MongoDB
 
HDTR images with Photoshop Javascript Scripting
HDTR images with Photoshop Javascript ScriptingHDTR images with Photoshop Javascript Scripting
HDTR images with Photoshop Javascript Scripting
David Gómez García
 
Nosql hands on handout 04
Nosql hands on handout 04Nosql hands on handout 04
Nosql hands on handout 04Krishna Sankar
 
Python 내장 함수
Python 내장 함수Python 내장 함수
Python 내장 함수
용 최
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...MongoDB
 
MySQL flexible schema and JSON for Internet of Things
MySQL flexible schema and JSON for Internet of ThingsMySQL flexible schema and JSON for Internet of Things
MySQL flexible schema and JSON for Internet of Things
Alexander Rubin
 
Google App Engine Developer - Day3
Google App Engine Developer - Day3Google App Engine Developer - Day3
Google App Engine Developer - Day3
Simon Su
 
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
NoSQLmatters
 
Building Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at StripeBuilding Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at Stripe
Stripe
 
Building Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at StripeBuilding Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at Stripe
MongoDB
 
Backbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The Browser
Howard Lewis Ship
 
The Ring programming language version 1.5.1 book - Part 44 of 180
The Ring programming language version 1.5.1 book - Part 44 of 180The Ring programming language version 1.5.1 book - Part 44 of 180
The Ring programming language version 1.5.1 book - Part 44 of 180
Mahmoud Samir Fayed
 
Damn Fine CoffeeScript
Damn Fine CoffeeScriptDamn Fine CoffeeScript
Damn Fine CoffeeScript
niklal
 
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
MongoDB
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation Pipeline
Jason Terpko
 
Inside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseInside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source Database
Mike Dirolf
 
this
thisthis
Detection of errors and potential vulnerabilities in C and C++ code using the...
Detection of errors and potential vulnerabilities in C and C++ code using the...Detection of errors and potential vulnerabilities in C and C++ code using the...
Detection of errors and potential vulnerabilities in C and C++ code using the...
Andrey Karpov
 

What's hot (20)

Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 AutumnGoptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
 
The Ring programming language version 1.5.4 book - Part 40 of 185
The Ring programming language version 1.5.4 book - Part 40 of 185The Ring programming language version 1.5.4 book - Part 40 of 185
The Ring programming language version 1.5.4 book - Part 40 of 185
 
Webinar: Building Your First App in Node.js
Webinar: Building Your First App in Node.jsWebinar: Building Your First App in Node.js
Webinar: Building Your First App in Node.js
 
HDTR images with Photoshop Javascript Scripting
HDTR images with Photoshop Javascript ScriptingHDTR images with Photoshop Javascript Scripting
HDTR images with Photoshop Javascript Scripting
 
Nosql hands on handout 04
Nosql hands on handout 04Nosql hands on handout 04
Nosql hands on handout 04
 
Python 내장 함수
Python 내장 함수Python 내장 함수
Python 내장 함수
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
 
MySQL flexible schema and JSON for Internet of Things
MySQL flexible schema and JSON for Internet of ThingsMySQL flexible schema and JSON for Internet of Things
MySQL flexible schema and JSON for Internet of Things
 
Google App Engine Developer - Day3
Google App Engine Developer - Day3Google App Engine Developer - Day3
Google App Engine Developer - Day3
 
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
 
Building Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at StripeBuilding Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at Stripe
 
Building Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at StripeBuilding Real Time Systems on MongoDB Using the Oplog at Stripe
Building Real Time Systems on MongoDB Using the Oplog at Stripe
 
Backbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The Browser
 
The Ring programming language version 1.5.1 book - Part 44 of 180
The Ring programming language version 1.5.1 book - Part 44 of 180The Ring programming language version 1.5.1 book - Part 44 of 180
The Ring programming language version 1.5.1 book - Part 44 of 180
 
Damn Fine CoffeeScript
Damn Fine CoffeeScriptDamn Fine CoffeeScript
Damn Fine CoffeeScript
 
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
MongoDB Europe 2016 - Enabling the Internet of Things at Proximus - Belgium's...
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation Pipeline
 
Inside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseInside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source Database
 
this
thisthis
this
 
Detection of errors and potential vulnerabilities in C and C++ code using the...
Detection of errors and potential vulnerabilities in C and C++ code using the...Detection of errors and potential vulnerabilities in C and C++ code using the...
Detection of errors and potential vulnerabilities in C and C++ code using the...
 

Similar to Is html5-ready-workshop-110727181512-phpapp02

Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with Wings
Remy Sharp
 
Brave new world of HTML5
Brave new world of HTML5Brave new world of HTML5
Brave new world of HTML5
Chris Mills
 
webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5smueller_sandsmedia
 
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....Patrick Lauke
 
How to build a html5 websites.v1
How to build a html5 websites.v1How to build a html5 websites.v1
How to build a html5 websites.v1Bitla Software
 
HTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymoreHTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymore
Remy Sharp
 
Moustamera
MoustameraMoustamera
Moustamera
Bram Vandewalle
 
JavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de DatosJavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de Datosphilogb
 
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
Remy Sharp
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?Remy Sharp
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
Igor Bronovskyy
 
The things browsers can do! SAE Alumni Convention 2014
The things browsers can do! SAE Alumni Convention 2014The things browsers can do! SAE Alumni Convention 2014
The things browsers can do! SAE Alumni Convention 2014
Christian Heilmann
 
Paris js extensions
Paris js extensionsParis js extensions
Paris js extensions
erwanl
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
Ankara JUG
 
JavaScript para Graficos y Visualizacion de Datos - BogotaJS
JavaScript para Graficos y Visualizacion de Datos - BogotaJSJavaScript para Graficos y Visualizacion de Datos - BogotaJS
JavaScript para Graficos y Visualizacion de Datos - BogotaJSphilogb
 
Html5 Overview
Html5 OverviewHtml5 Overview
Html5 Overview
Abdel Moneim Emad
 
codebits 2009 HTML5 JS APIs
codebits 2009 HTML5 JS APIscodebits 2009 HTML5 JS APIs
codebits 2009 HTML5 JS APIs
Remy Sharp
 
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
BradNeuberg
 

Similar to Is html5-ready-workshop-110727181512-phpapp02 (20)

Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with Wings
 
Brave new world of HTML5
Brave new world of HTML5Brave new world of HTML5
Brave new world of HTML5
 
webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5
 
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
 
How to build a html5 websites.v1
How to build a html5 websites.v1How to build a html5 websites.v1
How to build a html5 websites.v1
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
HTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymoreHTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymore
 
Moustamera
MoustameraMoustamera
Moustamera
 
Intro to HTML5
Intro to HTML5Intro to HTML5
Intro to HTML5
 
JavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de DatosJavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de Datos
 
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
The things browsers can do! SAE Alumni Convention 2014
The things browsers can do! SAE Alumni Convention 2014The things browsers can do! SAE Alumni Convention 2014
The things browsers can do! SAE Alumni Convention 2014
 
Paris js extensions
Paris js extensionsParis js extensions
Paris js extensions
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
JavaScript para Graficos y Visualizacion de Datos - BogotaJS
JavaScript para Graficos y Visualizacion de Datos - BogotaJSJavaScript para Graficos y Visualizacion de Datos - BogotaJS
JavaScript para Graficos y Visualizacion de Datos - BogotaJS
 
Html5 Overview
Html5 OverviewHtml5 Overview
Html5 Overview
 
codebits 2009 HTML5 JS APIs
codebits 2009 HTML5 JS APIscodebits 2009 HTML5 JS APIs
codebits 2009 HTML5 JS APIs
 
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
 

More from PL dream

Php internal-release 2011-04-01-v0.5.2
Php internal-release 2011-04-01-v0.5.2Php internal-release 2011-04-01-v0.5.2
Php internal-release 2011-04-01-v0.5.2
PL dream
 
余光中诗集
余光中诗集余光中诗集
余光中诗集PL dream
 
计算机程序的构造和解释
计算机程序的构造和解释计算机程序的构造和解释
计算机程序的构造和解释PL dream
 
Storage cassandra
Storage   cassandraStorage   cassandra
Storage cassandraPL dream
 
Html5 games
Html5 gamesHtml5 games
Html5 games
PL dream
 
Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期PL dream
 
Html5游戏开发实例分享
Html5游戏开发实例分享Html5游戏开发实例分享
Html5游戏开发实例分享PL dream
 
Html5 quick-learning-quide
Html5 quick-learning-quideHtml5 quick-learning-quide
Html5 quick-learning-quidePL dream
 

More from PL dream (9)

Php internal-release 2011-04-01-v0.5.2
Php internal-release 2011-04-01-v0.5.2Php internal-release 2011-04-01-v0.5.2
Php internal-release 2011-04-01-v0.5.2
 
余光中诗集
余光中诗集余光中诗集
余光中诗集
 
李清照
李清照李清照
李清照
 
计算机程序的构造和解释
计算机程序的构造和解释计算机程序的构造和解释
计算机程序的构造和解释
 
Storage cassandra
Storage   cassandraStorage   cassandra
Storage cassandra
 
Html5 games
Html5 gamesHtml5 games
Html5 games
 
Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期
 
Html5游戏开发实例分享
Html5游戏开发实例分享Html5游戏开发实例分享
Html5游戏开发实例分享
 
Html5 quick-learning-quide
Html5 quick-learning-quideHtml5 quick-learning-quide
Html5 quick-learning-quide
 

Recently uploaded

Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 

Recently uploaded (20)

Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 

Is html5-ready-workshop-110727181512-phpapp02