SlideShare a Scribd company logo
1 of 133
Download to read offline
State of the Open Web



Mark Pilgrim
Patrick Chanezon
Google, Inc.
What is the open web?




                        2
What is the open web?
“The open web is a beautiful soup of barely
  compatible clients and servers. It comprises
  billions of pages, millions of users, and thousands
  of browser-based applications. You can access
  the open web with open source and proprietary
  browsers, on open source and proprietary
  operating systems, on open source and
  proprietary hardware.”




                                                    3
Again without the elevator pitch...




                                      4
Again without the elevator pitch...
>   HTML




                                      5
Again without the elevator pitch...
>   HTML
>   CSS




                                      6
Again without the elevator pitch...
>   HTML
>   CSS
>   JavaScript (DOM)‫‏‬




                                      7
Again without the elevator pitch...
>   HTML
>   CSS
>   JavaScript (DOM)‫‏‬
>   SVG, MathML, audio, video...




                                      8
Who cares about the open web?




                                9
Who cares about the open web?
>   Google




                                10
Who cares about the open web?
>   Google
>   probably some other people, too




                                      11
Why does Google care?




                        12
Why does Google care?
>   Nobody “owns” the open web




                                 13
Why does Google care?
>   Nobody “owns” the open web
>   It works on all platforms




                                 14
Why does Google care?
>   Nobody “owns” the open web
>   It works on all platforms
>   You can deploy web applications without asking
    anyone's permission




                                                     15
Why does Google care?
>   Nobody “owns” the open web
>   It works on all platforms
>   You can deploy web applications without asking
    anyone's permission
>   You can build your own browser without asking
    anyone's permission




                                                     16
Why does Google care?
>   Nobody “owns” the open web
>   It works on all platforms
>   You can deploy web applications without asking
    anyone's permission
>   You can build your own browser without asking
    anyone's permission
>   You can index it without asking anyone's
    permission


                                                     17
HTML 5




         18
HTML 5
>   Evolution of HTML 4
>   Started outside W3C
>   “Web Forms 2.0”
>   “Web Applications 1.0”
>   Folded back into W3C
>   “HTML 5”




                             19
HTML 5
>   <canvas>
     ●
         2-D drawing surface
     ●
         Fully scriptable




                               20
HTML 5
>   <canvas>
     ●
         2-D drawing surface
     ●
         Fully scriptable

     ctx = a_canvas_element.getContext('2d');
     ctx.fillStyle = quot;rgb(200,0,0)quot;;
     ctx.fillRect(10, 10, 55, 50);




                                                21
HTML 5
>   <video>
     ●
         Like <img>, but moving
     ●
         Native UI for controls
     ●
         Fully scriptable (start, stop, pause, rewind, CC)‫‏‬
     ●
         Apply CSS transformations to video in real time
     ●
         Apply SVG filters to video in real time




                                                              22
HTML 5
>   <video>


     <video src=mymovie.ogg>




                               23
HTML 5
>   <video>


     <video src=mymovie.ogg
            controls>




                              24
HTML 5
>   <video>


     <video src=mymovie.ogg
            controls
            autoplay>




                              25
HTML 5
>   <video>


     <video src=mymovie.ogg
            controls
            autoplay
            loop>




                              26
HTML 5
>   <video>


     <video src=mymovie.ogg
            controls
            autoplay
            loop
            poster=frame.jpg>


                                27
HTML 5
>   <audio>
     ●
         Like <video> without the video
     ●
         Native UI for controls
     ●
         Fully scriptable (start, stop, pause, rewind)‫‏‬




                                                          28
HTML 5
>   <audio>


     <audio src=my‐podcast.ogg>




                                  29
HTML 5
>   <audio>


     <audio src=my‐podcast.ogg
            controls>




                                 30
HTML 5
>   <audio>


     <audio src=my‐podcast.ogg
            controls
            autoplay>




                                 31
HTML 5
>   <audio>


     <audio src=my‐podcast.ogg
            controls
            autoplay
            loop>




                                 32
HTML 5
>   Offline applications




                           33
HTML 5
>   Offline applications
     ●
         Huh?




                           34
HTML 5
>   Offline applications
     ●
         You heard me




                           35
HTML 5
>   Offline applications
     ●
         Application manifests
     ●
         Local storage
     ●
         Background (threaded) JavaScript




                                            36
HTML 5
>   Offline applications


     <html manifest=quot;/sitemanifestquot;>




                                       37
HTML 5
>   Offline applications


     CACHE MANIFEST
     jsfile1.js
     jsfile2.js
     styles.css
     /images/image1.png
     /images/image2.png

                           38
HTML 5
>   Offline applications


     if (window.applicationCache.status == 0) {
       // Loaded from network
     } else {
       // Loaded from AppCache (offline)‫‏‬
     }


                                              39
HTML 5
>   Local database storage


     var database = openDatabase(quot;Database 
       Namequot;, quot;Database Versionquot;);




                                              40
HTML 5
>   Local database storage


     var database = openDatabase(quot;Database 
       Namequot;, quot;Database Versionquot;);
     database.executeSql(quot;SELECT * FROM testquot;, 
       function(result1) {
        // do something with the results
     }


                                              41
HTML 5
>   Offline applications
     ●
         Already here
     ●
         iPhone
     ●
         Gmail, Gcalendar for mobile



     quot;gmail for mobile html5 seriesquot;



                                       42
What's New in JavaScript
>   Fast JavaScript VMs (V8, Squirrelfish, etc.)
>   quot;programming in the largequot; support like
    ECMAScript 3.1/4
>   query-like syntaxes when working with the DOM
>   Demos
>   State of cross-browser support




                                                    43
                                                    43
Fast JavaScript VMs




                      44
The Challenge
–    JavaScript is a highly dynamic language
–    Objects are basically hash maps
–    Properties are added and removed on-the-fly
–    Prototype chains are modified during execution
–    'eval' can change the calling context
–    'with' introduces objects in the scope chain dynamically
V8 Design Decisions
Design Goals
–    Make large object-oriented programs perform well
–    Fast property access
–    Fast function calls
–    Fast and scalable memory mangement
Key V8 Components
– Hidden classes and class transitions
– Compilation to native code with inline caching
– Efficient generational garbage collection
V8 Internals
Hidden Classes
– Wanted to take advantage of optimization techniques from statically
  typed object oriented languages
– Introduced the concept of hidden classes to get there
– Hidden classes group objects that have the same structure
Hidden Classes by Example

 – JavaScript objects constructed in the same way should get
   the same hidden class

•     function Point(x, y) {
•       this.x = x;
•       this.y = y;
•     }
•     var p1 = new Point(0,1);
•     var p2 = new Point(2,3);
Hidden Classes by Example
•     function Point(x, y) {
•       this.x = x;
•       this.y = y;
•     }
•     var p1 = new Point(0,1);
•     var p2 = new Point(2,3);
Hidden Classes by Example
•   function Point(x, y) {
•     this.x = x;
•     this.y = y;
•   }
•   var p1 = new Point(0,1);
•   var p2 = new Point(2,3);
Hidden Classes by Example
•   function Point(x, y) {
•     this.x = x;
•     this.y = y;
•   }
•   var p1 = new Point(0,1);
•   var p2 = new Point(2,3);
Hidden Classes by Example
•   function Point(x, y) {
•     this.x = x;
•     this.y = y;
•   }
•   var p1 = new Point(0,1);
•   var p2 = new Point(2,3);
Hidden Classes by Example
•   function Point(x, y) {
•     this.x = x;
•     this.y = y;
•   }
•   var p1 = new Point(0,1);
•   var p2 = new Point(2,3);
Hidden Classes by Example
•   function Point(x, y) {
•     this.x = x;
•     this.y = y;
•   }
•   var p1 = new Point(0,1);
•   var p2 = new Point(2,3);
Hidden Classes by Example
•   function Point(x, y) {
•     this.x = x;
•     this.y = y;
•   }
•   var p1 = new Point(0,1);
•   var p2 = new Point(2,3);
Hidden Classes by Example
•   function Point(x, y) {
•     this.x = x;
•     this.y = y;
•   }
•   var p1 = new Point(0,1);
•   var p2 = new Point(2,3);
Hidden Classes by Example
•     function Point(x, y) {
•       this.x = x;
•       this.y = y;
•     }
•     var p1 = new Point(0,1);
•     var p2 = new Point(2,3);
How Dynamic is JavaScript?
– In 90% of the cases, only objects having the same map are seen at an
  access site

– Hidden classes provides enough structure to use optimization techniques
  from more static object-oriented language

– We do not know the hidden class of objects at compile time

– We use runtime code generation and a technique called inline caching
Inline Caching


• ...

• load 'x'

• ...

• load 'y'

• ...
Inline Caching


• ...

• load 'x'

• ...

• load 'y'

• ...
Inline Caching


• ...

• load 'x'

• ...

• load 'y'

• ...
Inline Caching


• ...

• load 'x'

• ...

• load 'y'

• ...
Efficient Memory Management
– Precise generational garbage collection
– Two generations
   o Young generation is one small, contiguous space that is collected
      often
   o Old generation is divided into a number of spaces that are
      only occasionally collected
           Code space (executable)
           Map space (hidden classes)
           Large object space (>8K)
           Old data space (no pointers)
           Old pointer space
– Objects are allocated in the young generation and moved to the old
  generation if they survive in the young generation
Types of Garbage Collection
– Scavenge
   o Copying collection of only the young generation
   o Pause times ~2ms
– Full non-compacting collection
   o Mark-Sweep collection of both generations
   o Free memory gets added to free lists
   o Might cause fragmentation
   o Pause times ~50ms
– Full compacting collection
   o Mark-Sweep-Compact collection of both generations
   o Pause times ~100ms
Recent developments
Irregexp: New Regular Expression Engine
– V8 initially used a library from WebKit called JSCRE
– JSCRE did not fit well with the string types in V8 and did not perform
  well
– Implemented Irregexp giving a 10x speedup on regular expression
  matching on benchmark programs
– Irregexp implements full JS regular expressions and there is no fallback
  to other libraries
New Compiler Infrastructure
– Original compiler was very simple
– No static analysis of any kind
– No register allocation
– We have implemented a new compiler infrastructure which performs
  register allocation
– Still a one pass compiler
– Forms the basis for further native code optimizations
Object Heap Scalability
Scalability
– Users use multiple tabs running full applications
   o Mail
   o Calendar
   o News
– Applications are becoming bigger with more objects
– JavaScript execution should be fast in these situations
– The challenge is to scale well with respect to the size of the object heap
– The key to scaling well is generational garbage collection
Scalability Experiment
– Artificial scalability experiment approximating this situation
   o Raytrace benchmark from the V8 benchmark suite
   o Allocate extra live data on the side
   o 1MB of extra data per iteration
Scalability Experiment - Execution Speed




                  Bigger is better!
Scalability
– This experiment is artificial

– Try loading GMail in different browsers and then run JavaScript
  benchmarks in another tab

– Try out your own scalability experiments!
Summary
– V8 was designed for speed and scalability
– The goal is to raise the performance bar for JavaScript




– The full source code is available under a BSD license
Ecmascript versions smorgasbord
Edition 3: what you probably use today
Edition 4 (Historical): never completed, influenced
 version 5
Edition 5: final candidate draft of ECMA-262
   completed and is available for public review and
     testing.
Edition 6 (quot;Harmonyquot;): next-generation version of
 ECMAScript
JavaScript 1.6-1.9: code names for the interim
 versions of ECMAScript (Gecko) -> JavaScript
 2.0 (ECMAScript 4)
                                                      77
                                                      77
quot;programming in the largequot; support like
ECMAScript 3.1/4
Classes
Getters and Setters
Packages and Namespaces
Type annotations
Block scope let
Iterators and Generators
Extra array methods
Safer Json
Strict mode for easier debugging
                                          78
                                          78
Classes
class Programmer {
    var name;
    var city = 'Boston, MA';
    const interest = 'computers';
    function work() {}
}




                                    79
                                    79
ECMAScript 5
Getters and Setters
   Object.preventExtensions( obj )
   Object.isExtensible( obj )
   {
      value: quot;testquot;,
      writable: true,
      enumerable: true,
      configurable: true
   }


                                     80
ECMAScript 5
Getters and Setters
   (function(){
      var name = quot;Johnquot;;

    Object.defineProperty( obj, quot;namequot;, {
      get: function(){ return name; },
      set: function(value){ name = value; }
    });
  })();


                                              81
                                              81
Packages and namespaces
 namespace ns1
 namespace ns4 = quot;www.ecma-international.orgquot;
 use default namespace ns
  package org.ecmascript.experiment {
       internal var v;
  }
  package org.ecmascript.experiment {
      public function f(k) { v += k; return v-1 }
  }
  import org.ecmascript.experiment.*
  f(37) // calls org.ecmascript.experiment.f

                                                    82
                                                    82
Type Annotations
type Point = { x: int, y: int }




                                  83
                                  83
Block scope with let
var x = 5;
var y = 0;

let (x = x+10, y = 12) {
   print(x+y + quot;nquot;);
}
print((x + y) + quot;nquot;);

                           84
                           84
Generators/Iterators
function fib() {
    var i = 0, j = 1;

    while (true) {

        yield i;
        var t = i;

        i = j;
        j += t;

    }

}
var g = fib();

for (var i = 0; i < 10; i++) {
    document.write(g.next() + quot;<br>nquot;);

}

                                           85
                                           85
Iterators, Array Comprehensions
for (var i in objectWithIterator)
{
    document.write(objectWithIterator[i] + quot;<br>nquot;);
}
function range(begin, end) {
    for (let i = begin; i < end; ++i) {
        yield i;
    }
}
var ten_squares = [i * i for each (i in range(0, 10))];


                                                          86
                                                          86
Expression closures
 function(x) x * x
//instead of
 function(x) { return x * x; }




                                 87
                                 87
Generator Expression
 let it = (i + 3 for (i in someObj));
 try {
     while (true) {
         document.write(it.next() + quot;<br>nquot;);
     }
 } catch (err if err instanceof
StopIteration) {
     document.write(quot;End of record.<br>nquot;);
 }
                                                 88
                                                 88
Generator Expression
 handleResults( i for ( i in obj ) if ( i >
3 ) );


 function handleResults( results ) {
     for ( let i in results )
       // ...
 }



                                          89
                                          89
ECMAScript 5
Extra array methods
  indexOf, lastIndexOf, every, some, forEach, map,
    filter, reduce, and reduceRight.
Reflective meta-programming




                                                     90
                                                     90
ECMAScript 5
Safer Json
  Use Crockford’s json2.js
  var obj = JSON.parse('{quot;namequot;:quot;Johnquot;}');
  var str = JSON.stringify({ name: quot;Johnquot; });
Strict mode for easier debugging
  quot;use strictquot;;
  like Perl strict mode, different than FF strict mode
  deprecated methods from ES3 throw errors
  defined variables, no evals, no messing with arguments,
     no with
                                                    91
                                                    91
query-like syntaxes when working with
the DOM
var cells =
 document.querySelectorAll(quot;#score>t
 body>tr>td:nth-of-type(2)quot;);




                                        92
                                        92
quot;programming in the largequot; support like
ECMAScript 3.1/4
Olav Junker Kjær’s Mascara
  http://ecmascript4.com/
  ES4-> javascript translator in python




                                          93
                                          93
State of cross-browser support
>IE 6-7 support JScript 5 (which is equivalent to ECMAScript 3, JavaScript 1.5)
>IE 8 supports JScript 6 (which is equivalent to ECMAScript 3, JavaScript 1.5 - more bug
fixes over JScript 5)
>Firefox 1.0 supports JavaScript 1.5 (ECMAScript 3 equivalent)
>Firefox 1.5 supports JavaScript 1.6 (1.5 + Array Extras + E4X + misc.)
>Firefox 2.0 supports JavaScript 1.7 (1.6 + Generator + Iterators + let + misc.)
>Firefox 3.0 supports JavaScript 1.8 (1.7 + Generator Expressions + Expression Closures
+ misc.)
>The next version of Firefox will support JavaScript 1.9 (1.8 + To be determined)
>Opera supports a language that is equivalent to ECMAScript 3 + Getters and Setters +
misc.
>Safari supports a language that is equivalent to ECMAScript 3 + Getters and Setters +
misc.
Source John Resig http://ejohn.org/blog/versions-of-javascript/

                                                                                         94
                                                                                         94
Acknowledgements
Mads Sig Ager, Google for V8 slides
Brendan Eich
http://www.sdtimes.com/blog/post/2009/04/16/
  Brendan-Eich-Explains-ECMAScript-Fifth-Edition-
  To-You.aspx
John Resig
http://ejohn.org/blog/tags/ecmascript/



                                                95
                                                95
What’s new in CSS?




                     96
                     96
What’s new in CSS?
Generated content




                     97
                     97
What’s new in CSS?
Generated content

  h1:before {content: quot;Chapter quot; counter(h1) quot;. quot;}




                                                     98
                                                     98
What’s new in CSS?
Generated content

  h1:before {content: quot;Chapter quot; counter(h1) quot;. quot;}
  h1 {counter-reset: h2}
  h2:before {
      counter-increment: h2;
      content: counter(h1) quot;.quot; counter(h2) quot;. quot;;
  }




                                                     99
                                                     99
What’s new in CSS?
Generated content

  <h1>Your First Python Program</h1>


  <h2>Diving in</h2>


  <h2>Declaring functions</h2>


  <h2>Writing readable code</h2>




                                       100
                                       100
What’s new in CSS?
Generated content

  Chapter 1. Your First Python Program


  1.1 Diving in


  1.2 Declaring functions


  1.3 Writing readable code




                                         101
                                         101
What’s new in CSS?
Generated content

    h1:before {content: quot;Chapter quot; counter(h1) quot;. quot;}
    h1 {counter-reset: h2}
    h2:before {
        counter-increment: h2;
        content: counter(h1) quot;.quot; counter(h2) quot;. quot;;
    }


Safari, Firefox, Chrome, Opera… and Internet Explorer (8)



                                                            102
                                                            102
What’s new in CSS?
Transforms
  •scale, scaleX, scaleY
  •rotate
  •translate, translateX, translateY
  •skew, skewX, skewY
  •matrix




                                       103
                                       103
CSS Transforms
    div {
     height: 100px; width: 100px;
     transform: translate(80px, 80px)
          scale(1.5, 1.5) rotate(45deg);
}




                                           104
What’s new in CSS?
Transforms




                     105
                     104
What’s new in CSS?
Transforms
  •scale, scaleX, scaleY
  •rotate
  •translate, translateX, translateY
  •skew, skewX, skewY
  •matrix

  Safari 3, Firefox 3.5, Chrome,
  iPhone, Android, Palm Pre, Blackberry Storm

                                                106
                                                105
CSS Animation
@keyframes 'wobble' {

    0% {
        left: 100px;

    }

    40% {

        left: 150px;

    }

    60% {

        left: 75px;
    }

    100% {

        left: 100px;

    }

}                       107
CSS Animation
div {
    animation-name: 'wobble';
    animation-duration: 5s;
    animation-iteration-count: 10;
}




                                     108
What’s new in CSS?
Embedded fonts




                     109
                     106
What’s new in CSS?
Embedded fonts


 … because the web didn’t look bad enough already




                                                    110
                                                    107
What’s new in CSS?
Embedded fonts

  @font-face {
    font-family: GoudyBookletter;
    src: url(…);
    format(“truetype”);
  }




                                    111
                                    108
What’s new in CSS?
Embedded fonts

  @font-face {
    font-family: GoudyBookletter;
    src: url(goudybookletter.ttf);
    format(“truetype”);
  }

  Safari 3, Firefox 3.5, Chrome, iPhone, Android…

                                                    112
                                                    109
What’s new in CSS?
Embedded fonts

  @font-face {
    font-family: GoudyBookletter;
    src: url(goudybookletter.eot);
  }

  Because Internet Explorer is… “special”


                                            113
                                            110
CSS Support in browsers




    http://www.quirksmode.org/compatibility.html
                                               114
What’s new in vector graphics?
Canvas
SVG




                                 115
                                 111
13 years of web vector graphics history
>   1996 Macromedia Flash 1
>   1998 Macromedia and Microsoft VML
>   1998 Adobe Systems and Sun Microsystems PGML
>   1998 SVG W3C
>   2001 SVG 1.0
>   2003 SVG 1.1: modularization, Tiny and Basic
>   2004 Apple Canvas -> WHATWG - HTML5, Mozilla
>   2006 Microsoft Silverlight 1.0 (WPF/E)
>   2007 Adobe Flash 9
>   2008 SVG Tiny 1.2 (R) Full 1.2 (WD) core and modules

                                                           116
Web vector graphics today


             99%             33%




                            33%
             20%



                                   117
OpenWeb vector graphics available in a browser
near you
 >   Firefox, Safari (+iPhone),   http://a.deveria.com/caniuse/
     Opera, Chrome
 >   ~33% browsers natively
 >   Open Source JS Shims
     for Canvas and SVG
     (autumn 2009) support in IE
     •    Much of SVG 1.1 Full
          supported by all
          browsers except IE
     •    Most of Canvas
          (except for text
          extensions) supported
          by all browsers except
          IE
 >   No Flash in iPhone &
     Android                                                      118
<canvas> tag and Context object

    >    Immediate mode graphics: fire and forget
<canvas id=quot;clockquot; width=quot;150quot; height=quot;150quot;>
  <img src=quot;fallback.pngquot; width=quot;150quot; height=quot;150quot; alt=quot;quot;/>
</canvas>

>       In Javascript get a rendering context and draw

var canvas = document.getElementById(quot;canvasquot;);if
(canvas.getContext) { var ctx =
canvas.getContext(quot;2dquot;); ctx.fillStyle =
quot;rgb(200,0,0)quot;; ctx.fillRect (10, 10, 55, 50);}

                Examples from http://dev.opera.com/articles/view/html-5-canvas-the-basics/   119
Demos

>   Yahoo Pipes
>   Bespin
>   All demos at http://delicious.com/chanezon/j1+canvas
>   More at http://delicious.com/chanezon/canvas
    +demos




                                                       120
Canvas Resources

>   http://delicious.com/chanezon/canvas
>   https://developer.mozilla.org/en/Canvas_tutorial
>   http://dev.opera.com/articles/view/html-5-canvas-the-
    basics/
>   http://blog.mozbox.org/tag/demo




                                                            121
SVG

>   XML vocabulary for Vector Graphics
>   Retained mode graphics
>   Versions: 1.0, 1.1, 1.2
>   Profiles: Full, Basic, Tiny
>   Safe to use: SVG 1.1 Full (except some features)
    •   Not widely implemented: Fonts, Animation, some
        Filters



                                                         122
Coordinates, Viewbox
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?><svg xmlns=quot;http://
www.w3.org/2000/svgquot;
   viewBox=quot;50 50 500 400quot;   width=quot;800pxquot; height=quot;600pxquot;
id=quot;ex1quot;> <g id=quot;layer1quot;>     <rect
style=quot;fill:#fffc00;stroke:#fac305;stroke-width:20quot;
id=quot;rect1quot; width=quot;400quot; height=quot;300quot;
       x=quot;100quot; y=quot;100quot; rx=quot;20quot; ry=quot;30quot;/> </g></svg>




                                                        123
Browser Support

    >    http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28SVG%29




>       SVG 1.1 partially supported in Firefox, Safari (+iPhone), Opera, Chrome
>       33% browsers
                                                                                  124
Browser Support (details)




    >http://www.codedread.com/svg-support.php   - Thanks to Jeff Schiller   125
Authoring   http://www.inkscape.org/




                                       126
Whatʼs New?

>   IE Shim layer http://code.google.com/p/sgweb/
>   Conference




                                                    127
Demos

>   All demos at http://delicious.com/chanezon/
    j1+svg
>   More at http://delicious.com/chanezon/svg
    +demos




                                                  128
SVG Resources




>   http://delicious.com/chanezon/svg
>   http://www.w3.org/Consortium/Offices/Presentations/SVG/0.svg




                                                                  129
When to use Canvas or SVG
Not competing

SVG                        <canvas>
 retained mode graphics      immediate mode graphics
 Editable static images      Script-based scene graph
 Accessibility               Programmatic generation of
 High-quality printing       images
 Interaction                 Drawing pixels
 Mixing markupText           Constant performance




      Combining them possible in some browsers
                                                          130
HTML5 Resources

>   http://blog.whatwg.org
>   http://code.google.com/doctype
>   https://developer.mozilla.org/En
>   http://dev.opera.com/
>   http://webkit.org/blog/
>   Gmail mobile HTML5 blog posts
>   http://delicious.com/chanezon/openweb


                                            131
Conclusion
    quot;The Web has won -- it's the dominant
    programming model of our timequot;
    Vic Gundotra, Google
>   HTML5 is already here
>   ... see http://www.quirksmode.org/ for definition of
    “here”
>   If you want to know more about Canvas and SVG
    come to our talk at 6 pm: “2D vector graphics, the
    openweb way”
                                                          132
Mark Pilgrim
Patrick Chanezon
chanezon@google.com
Google, Inc.

More Related Content

Viewers also liked

Elige tu calzado con criterio científico
Elige tu calzado con criterio científicoElige tu calzado con criterio científico
Elige tu calzado con criterio científicoToni Solves Navalón
 
Burnout Seminars 08 & 09
Burnout Seminars 08 & 09Burnout Seminars 08 & 09
Burnout Seminars 08 & 09DAVIDMALAM
 
Triptico curso (logos y datos de inscr)
Triptico curso (logos y datos de inscr)Triptico curso (logos y datos de inscr)
Triptico curso (logos y datos de inscr)Luisa López Portos
 
Cyberoam Endpoint Data Protection - aTICser
Cyberoam Endpoint Data Protection - aTICserCyberoam Endpoint Data Protection - aTICser
Cyberoam Endpoint Data Protection - aTICserATICSER STI
 
Mechanisms velocity-ratio jpf--a-_
Mechanisms velocity-ratio jpf--a-_Mechanisms velocity-ratio jpf--a-_
Mechanisms velocity-ratio jpf--a-_Jesus Prieto
 
LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...
LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...
LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...Nelson Cubillos
 
2011 Haworth Sustainability Final (Reduced Size)
2011 Haworth Sustainability Final (Reduced Size)2011 Haworth Sustainability Final (Reduced Size)
2011 Haworth Sustainability Final (Reduced Size)stephenpbrown65
 
USTED PUEDE ELEGIR SU FUTURO FINANCIERO.
USTED PUEDE ELEGIR SU FUTURO FINANCIERO.USTED PUEDE ELEGIR SU FUTURO FINANCIERO.
USTED PUEDE ELEGIR SU FUTURO FINANCIERO.Benito Bonilla Pacheco
 
La noticia de hoy en puerto escondido 25 d marzo 2011
La noticia de hoy en puerto escondido 25 d marzo 2011La noticia de hoy en puerto escondido 25 d marzo 2011
La noticia de hoy en puerto escondido 25 d marzo 2011megaradioexpress
 
Sharp it reference_guide[1]
Sharp it reference_guide[1]Sharp it reference_guide[1]
Sharp it reference_guide[1]Neil Brown
 
Inbound Marketing Aplicado y Contextual Marketing
Inbound Marketing Aplicado y Contextual MarketingInbound Marketing Aplicado y Contextual Marketing
Inbound Marketing Aplicado y Contextual MarketingWe Are Marketing
 
Company Profile Istana Mulia Groups
Company Profile Istana Mulia GroupsCompany Profile Istana Mulia Groups
Company Profile Istana Mulia GroupsKamal Albatawie
 
Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...
Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...
Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...Yerikson Huz
 

Viewers also liked (20)

Elige tu calzado con criterio científico
Elige tu calzado con criterio científicoElige tu calzado con criterio científico
Elige tu calzado con criterio científico
 
Burnout Seminars 08 & 09
Burnout Seminars 08 & 09Burnout Seminars 08 & 09
Burnout Seminars 08 & 09
 
Web On Wheels White Paper
Web On Wheels White PaperWeb On Wheels White Paper
Web On Wheels White Paper
 
Triptico curso (logos y datos de inscr)
Triptico curso (logos y datos de inscr)Triptico curso (logos y datos de inscr)
Triptico curso (logos y datos de inscr)
 
Cyberoam Endpoint Data Protection - aTICser
Cyberoam Endpoint Data Protection - aTICserCyberoam Endpoint Data Protection - aTICser
Cyberoam Endpoint Data Protection - aTICser
 
Sistema De Gestion
Sistema De GestionSistema De Gestion
Sistema De Gestion
 
Mechanisms velocity-ratio jpf--a-_
Mechanisms velocity-ratio jpf--a-_Mechanisms velocity-ratio jpf--a-_
Mechanisms velocity-ratio jpf--a-_
 
Tannato de gelatina
Tannato de gelatinaTannato de gelatina
Tannato de gelatina
 
News June 2015
News June 2015News June 2015
News June 2015
 
LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...
LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...
LAS TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN Y SU IMPACTO EN EL CAMBIO...
 
2011 Haworth Sustainability Final (Reduced Size)
2011 Haworth Sustainability Final (Reduced Size)2011 Haworth Sustainability Final (Reduced Size)
2011 Haworth Sustainability Final (Reduced Size)
 
Company profile
Company profileCompany profile
Company profile
 
USTED PUEDE ELEGIR SU FUTURO FINANCIERO.
USTED PUEDE ELEGIR SU FUTURO FINANCIERO.USTED PUEDE ELEGIR SU FUTURO FINANCIERO.
USTED PUEDE ELEGIR SU FUTURO FINANCIERO.
 
Comprensión de textos
Comprensión de textosComprensión de textos
Comprensión de textos
 
La noticia de hoy en puerto escondido 25 d marzo 2011
La noticia de hoy en puerto escondido 25 d marzo 2011La noticia de hoy en puerto escondido 25 d marzo 2011
La noticia de hoy en puerto escondido 25 d marzo 2011
 
Sharp it reference_guide[1]
Sharp it reference_guide[1]Sharp it reference_guide[1]
Sharp it reference_guide[1]
 
Inbound Marketing Aplicado y Contextual Marketing
Inbound Marketing Aplicado y Contextual MarketingInbound Marketing Aplicado y Contextual Marketing
Inbound Marketing Aplicado y Contextual Marketing
 
Company Profile Istana Mulia Groups
Company Profile Istana Mulia GroupsCompany Profile Istana Mulia Groups
Company Profile Istana Mulia Groups
 
Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...
Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...
Sesión 3 serres, y. (2004). una vision de la comunidad venezolana en edc mat ...
 
Tecnologoa scada
Tecnologoa  scadaTecnologoa  scada
Tecnologoa scada
 

Similar to 2009 Java One State Of The Open Web

SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13Fred Sauer
 
What's New in Web Development
What's New in Web DevelopmentWhat's New in Web Development
What's New in Web DevelopmentKonstantin Käfer
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008Association Paris-Web
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGuillaume Laforge
 
IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009Christopher Judd
 
GWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformGWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformDidier Girard
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersTodd Anglin
 
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and BeyondWebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyondmguillem
 
Widget Summit 2008
Widget Summit 2008Widget Summit 2008
Widget Summit 2008Volkan Unsal
 
GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009marpierc
 
Google Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocialGoogle Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocialPatrick Chanezon
 
Ajax World Comet Talk
Ajax World Comet TalkAjax World Comet Talk
Ajax World Comet Talkrajivmordani
 
Intro To Django
Intro To DjangoIntro To Django
Intro To DjangoUdi Bauman
 

Similar to 2009 Java One State Of The Open Web (20)

GWT
GWTGWT
GWT
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
 
What's New in Web Development
What's New in Web DevelopmentWhat's New in Web Development
What's New in Web Development
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
 
IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009
 
Looking into HTML5
Looking into HTML5Looking into HTML5
Looking into HTML5
 
GWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformGWT + Gears : The browser is the platform
GWT + Gears : The browser is the platform
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
 
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and BeyondWebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
 
Widget Summit 2008
Widget Summit 2008Widget Summit 2008
Widget Summit 2008
 
Shifting Gears
Shifting GearsShifting Gears
Shifting Gears
 
Open Social Summit Korea
Open Social Summit KoreaOpen Social Summit Korea
Open Social Summit Korea
 
HTML5
HTML5HTML5
HTML5
 
GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009
 
Google Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocialGoogle Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocial
 
Ajax World Comet Talk
Ajax World Comet TalkAjax World Comet Talk
Ajax World Comet Talk
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
Ilog Ria2
Ilog Ria2Ilog Ria2
Ilog Ria2
 

More from Patrick Chanezon

KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)Patrick Chanezon
 
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...Patrick Chanezon
 
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesDockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesPatrick Chanezon
 
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesGIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesPatrick Chanezon
 
Docker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroDocker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroPatrick Chanezon
 
Docker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalDocker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalPatrick Chanezon
 
The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018Patrick Chanezon
 
Microsoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftMicrosoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftPatrick Chanezon
 
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
Develop and deploy Kubernetes  applications with Docker - IBM Index 2018Develop and deploy Kubernetes  applications with Docker - IBM Index 2018
Develop and deploy Kubernetes applications with Docker - IBM Index 2018Patrick Chanezon
 
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerDocker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerPatrick Chanezon
 
The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017Patrick Chanezon
 
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Patrick Chanezon
 
Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Patrick Chanezon
 
Moby Introduction - June 2017
Moby Introduction - June 2017Moby Introduction - June 2017
Moby Introduction - June 2017Patrick Chanezon
 
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsDocker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsPatrick Chanezon
 
Weave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapWeave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapPatrick Chanezon
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectPatrick Chanezon
 

More from Patrick Chanezon (20)

KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)
 
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
 
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesDockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
 
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesGIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
 
Docker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroDocker Enterprise Workshop - Intro
Docker Enterprise Workshop - Intro
 
Docker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalDocker Enterprise Workshop - Technical
Docker Enterprise Workshop - Technical
 
The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018
 
Moby KubeCon 2017
Moby KubeCon 2017Moby KubeCon 2017
Moby KubeCon 2017
 
Microsoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftMicrosoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and Microsoft
 
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
Develop and deploy Kubernetes  applications with Docker - IBM Index 2018Develop and deploy Kubernetes  applications with Docker - IBM Index 2018
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
 
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerDocker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
 
DockerCon EU 2017 Recap
DockerCon EU 2017 RecapDockerCon EU 2017 Recap
DockerCon EU 2017 Recap
 
Docker Innovation Culture
Docker Innovation CultureDocker Innovation Culture
Docker Innovation Culture
 
The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017
 
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
 
Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017
 
Moby Introduction - June 2017
Moby Introduction - June 2017Moby Introduction - June 2017
Moby Introduction - June 2017
 
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsDocker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
 
Weave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapWeave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 Recap
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby project
 

Recently uploaded

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 

Recently uploaded (20)

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 

2009 Java One State Of The Open Web

  • 1. State of the Open Web Mark Pilgrim Patrick Chanezon Google, Inc.
  • 2. What is the open web? 2
  • 3. What is the open web? “The open web is a beautiful soup of barely compatible clients and servers. It comprises billions of pages, millions of users, and thousands of browser-based applications. You can access the open web with open source and proprietary browsers, on open source and proprietary operating systems, on open source and proprietary hardware.” 3
  • 4. Again without the elevator pitch... 4
  • 5. Again without the elevator pitch... > HTML 5
  • 6. Again without the elevator pitch... > HTML > CSS 6
  • 7. Again without the elevator pitch... > HTML > CSS > JavaScript (DOM)‫‏‬ 7
  • 8. Again without the elevator pitch... > HTML > CSS > JavaScript (DOM)‫‏‬ > SVG, MathML, audio, video... 8
  • 9. Who cares about the open web? 9
  • 10. Who cares about the open web? > Google 10
  • 11. Who cares about the open web? > Google > probably some other people, too 11
  • 12. Why does Google care? 12
  • 13. Why does Google care? > Nobody “owns” the open web 13
  • 14. Why does Google care? > Nobody “owns” the open web > It works on all platforms 14
  • 15. Why does Google care? > Nobody “owns” the open web > It works on all platforms > You can deploy web applications without asking anyone's permission 15
  • 16. Why does Google care? > Nobody “owns” the open web > It works on all platforms > You can deploy web applications without asking anyone's permission > You can build your own browser without asking anyone's permission 16
  • 17. Why does Google care? > Nobody “owns” the open web > It works on all platforms > You can deploy web applications without asking anyone's permission > You can build your own browser without asking anyone's permission > You can index it without asking anyone's permission 17
  • 18. HTML 5 18
  • 19. HTML 5 > Evolution of HTML 4 > Started outside W3C > “Web Forms 2.0” > “Web Applications 1.0” > Folded back into W3C > “HTML 5” 19
  • 20. HTML 5 > <canvas> ● 2-D drawing surface ● Fully scriptable 20
  • 21. HTML 5 > <canvas> ● 2-D drawing surface ● Fully scriptable ctx = a_canvas_element.getContext('2d'); ctx.fillStyle = quot;rgb(200,0,0)quot;; ctx.fillRect(10, 10, 55, 50); 21
  • 22. HTML 5 > <video> ● Like <img>, but moving ● Native UI for controls ● Fully scriptable (start, stop, pause, rewind, CC)‫‏‬ ● Apply CSS transformations to video in real time ● Apply SVG filters to video in real time 22
  • 23. HTML 5 > <video> <video src=mymovie.ogg> 23
  • 24. HTML 5 > <video> <video src=mymovie.ogg        controls> 24
  • 25. HTML 5 > <video> <video src=mymovie.ogg        controls        autoplay> 25
  • 26. HTML 5 > <video> <video src=mymovie.ogg        controls        autoplay        loop> 26
  • 27. HTML 5 > <video> <video src=mymovie.ogg        controls        autoplay        loop        poster=frame.jpg> 27
  • 28. HTML 5 > <audio> ● Like <video> without the video ● Native UI for controls ● Fully scriptable (start, stop, pause, rewind)‫‏‬ 28
  • 29. HTML 5 > <audio> <audio src=my‐podcast.ogg> 29
  • 30. HTML 5 > <audio> <audio src=my‐podcast.ogg        controls> 30
  • 31. HTML 5 > <audio> <audio src=my‐podcast.ogg        controls        autoplay> 31
  • 32. HTML 5 > <audio> <audio src=my‐podcast.ogg        controls        autoplay        loop> 32
  • 33. HTML 5 > Offline applications 33
  • 34. HTML 5 > Offline applications ● Huh? 34
  • 35. HTML 5 > Offline applications ● You heard me 35
  • 36. HTML 5 > Offline applications ● Application manifests ● Local storage ● Background (threaded) JavaScript 36
  • 37. HTML 5 > Offline applications <html manifest=quot;/sitemanifestquot;> 37
  • 38. HTML 5 > Offline applications CACHE MANIFEST jsfile1.js jsfile2.js styles.css /images/image1.png /images/image2.png 38
  • 39. HTML 5 > Offline applications if (window.applicationCache.status == 0) {   // Loaded from network } else {   // Loaded from AppCache (offline)‫‏‬ } 39
  • 40. HTML 5 > Local database storage var database = openDatabase(quot;Database  Namequot;, quot;Database Versionquot;); 40
  • 41. HTML 5 > Local database storage var database = openDatabase(quot;Database  Namequot;, quot;Database Versionquot;); database.executeSql(quot;SELECT * FROM testquot;,  function(result1) {    // do something with the results } 41
  • 42. HTML 5 > Offline applications ● Already here ● iPhone ● Gmail, Gcalendar for mobile quot;gmail for mobile html5 seriesquot; 42
  • 43. What's New in JavaScript > Fast JavaScript VMs (V8, Squirrelfish, etc.) > quot;programming in the largequot; support like ECMAScript 3.1/4 > query-like syntaxes when working with the DOM > Demos > State of cross-browser support 43 43
  • 45. The Challenge – JavaScript is a highly dynamic language – Objects are basically hash maps – Properties are added and removed on-the-fly – Prototype chains are modified during execution – 'eval' can change the calling context – 'with' introduces objects in the scope chain dynamically
  • 47. Design Goals – Make large object-oriented programs perform well – Fast property access – Fast function calls – Fast and scalable memory mangement
  • 48. Key V8 Components – Hidden classes and class transitions – Compilation to native code with inline caching – Efficient generational garbage collection
  • 50. Hidden Classes – Wanted to take advantage of optimization techniques from statically typed object oriented languages – Introduced the concept of hidden classes to get there – Hidden classes group objects that have the same structure
  • 51. Hidden Classes by Example – JavaScript objects constructed in the same way should get the same hidden class •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 52. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 53. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 54. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 55. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 56. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 57. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 58. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 59. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 60. Hidden Classes by Example •   function Point(x, y) { •     this.x = x; •     this.y = y; •   } •   var p1 = new Point(0,1); •   var p2 = new Point(2,3);
  • 61. How Dynamic is JavaScript? – In 90% of the cases, only objects having the same map are seen at an access site – Hidden classes provides enough structure to use optimization techniques from more static object-oriented language – We do not know the hidden class of objects at compile time – We use runtime code generation and a technique called inline caching
  • 62. Inline Caching • ... • load 'x' • ... • load 'y' • ...
  • 63. Inline Caching • ... • load 'x' • ... • load 'y' • ...
  • 64. Inline Caching • ... • load 'x' • ... • load 'y' • ...
  • 65. Inline Caching • ... • load 'x' • ... • load 'y' • ...
  • 66. Efficient Memory Management – Precise generational garbage collection – Two generations o Young generation is one small, contiguous space that is collected often o Old generation is divided into a number of spaces that are only occasionally collected  Code space (executable)  Map space (hidden classes)  Large object space (>8K)  Old data space (no pointers)  Old pointer space – Objects are allocated in the young generation and moved to the old generation if they survive in the young generation
  • 67. Types of Garbage Collection – Scavenge o Copying collection of only the young generation o Pause times ~2ms – Full non-compacting collection o Mark-Sweep collection of both generations o Free memory gets added to free lists o Might cause fragmentation o Pause times ~50ms – Full compacting collection o Mark-Sweep-Compact collection of both generations o Pause times ~100ms
  • 69. Irregexp: New Regular Expression Engine – V8 initially used a library from WebKit called JSCRE – JSCRE did not fit well with the string types in V8 and did not perform well – Implemented Irregexp giving a 10x speedup on regular expression matching on benchmark programs – Irregexp implements full JS regular expressions and there is no fallback to other libraries
  • 70. New Compiler Infrastructure – Original compiler was very simple – No static analysis of any kind – No register allocation – We have implemented a new compiler infrastructure which performs register allocation – Still a one pass compiler – Forms the basis for further native code optimizations
  • 72. Scalability – Users use multiple tabs running full applications o Mail o Calendar o News – Applications are becoming bigger with more objects – JavaScript execution should be fast in these situations – The challenge is to scale well with respect to the size of the object heap – The key to scaling well is generational garbage collection
  • 73. Scalability Experiment – Artificial scalability experiment approximating this situation o Raytrace benchmark from the V8 benchmark suite o Allocate extra live data on the side o 1MB of extra data per iteration
  • 74. Scalability Experiment - Execution Speed Bigger is better!
  • 75. Scalability – This experiment is artificial – Try loading GMail in different browsers and then run JavaScript benchmarks in another tab – Try out your own scalability experiments!
  • 76. Summary – V8 was designed for speed and scalability – The goal is to raise the performance bar for JavaScript – The full source code is available under a BSD license
  • 77. Ecmascript versions smorgasbord Edition 3: what you probably use today Edition 4 (Historical): never completed, influenced version 5 Edition 5: final candidate draft of ECMA-262 completed and is available for public review and testing. Edition 6 (quot;Harmonyquot;): next-generation version of ECMAScript JavaScript 1.6-1.9: code names for the interim versions of ECMAScript (Gecko) -> JavaScript 2.0 (ECMAScript 4) 77 77
  • 78. quot;programming in the largequot; support like ECMAScript 3.1/4 Classes Getters and Setters Packages and Namespaces Type annotations Block scope let Iterators and Generators Extra array methods Safer Json Strict mode for easier debugging 78 78
  • 79. Classes class Programmer { var name; var city = 'Boston, MA'; const interest = 'computers'; function work() {} } 79 79
  • 80. ECMAScript 5 Getters and Setters Object.preventExtensions( obj ) Object.isExtensible( obj ) { value: quot;testquot;, writable: true, enumerable: true, configurable: true } 80
  • 81. ECMAScript 5 Getters and Setters (function(){ var name = quot;Johnquot;; Object.defineProperty( obj, quot;namequot;, { get: function(){ return name; }, set: function(value){ name = value; } }); })(); 81 81
  • 82. Packages and namespaces namespace ns1 namespace ns4 = quot;www.ecma-international.orgquot; use default namespace ns package org.ecmascript.experiment { internal var v; } package org.ecmascript.experiment { public function f(k) { v += k; return v-1 } } import org.ecmascript.experiment.* f(37) // calls org.ecmascript.experiment.f 82 82
  • 83. Type Annotations type Point = { x: int, y: int } 83 83
  • 84. Block scope with let var x = 5; var y = 0; let (x = x+10, y = 12) { print(x+y + quot;nquot;); } print((x + y) + quot;nquot;); 84 84
  • 85. Generators/Iterators function fib() { var i = 0, j = 1; while (true) { yield i; var t = i; i = j; j += t; } } var g = fib(); for (var i = 0; i < 10; i++) { document.write(g.next() + quot;<br>nquot;); } 85 85
  • 86. Iterators, Array Comprehensions for (var i in objectWithIterator) { document.write(objectWithIterator[i] + quot;<br>nquot;); } function range(begin, end) { for (let i = begin; i < end; ++i) { yield i; } } var ten_squares = [i * i for each (i in range(0, 10))]; 86 86
  • 87. Expression closures function(x) x * x //instead of function(x) { return x * x; } 87 87
  • 88. Generator Expression let it = (i + 3 for (i in someObj)); try { while (true) { document.write(it.next() + quot;<br>nquot;); } } catch (err if err instanceof StopIteration) { document.write(quot;End of record.<br>nquot;); } 88 88
  • 89. Generator Expression handleResults( i for ( i in obj ) if ( i > 3 ) ); function handleResults( results ) { for ( let i in results ) // ... } 89 89
  • 90. ECMAScript 5 Extra array methods indexOf, lastIndexOf, every, some, forEach, map, filter, reduce, and reduceRight. Reflective meta-programming 90 90
  • 91. ECMAScript 5 Safer Json Use Crockford’s json2.js var obj = JSON.parse('{quot;namequot;:quot;Johnquot;}'); var str = JSON.stringify({ name: quot;Johnquot; }); Strict mode for easier debugging quot;use strictquot;; like Perl strict mode, different than FF strict mode deprecated methods from ES3 throw errors defined variables, no evals, no messing with arguments, no with 91 91
  • 92. query-like syntaxes when working with the DOM var cells = document.querySelectorAll(quot;#score>t body>tr>td:nth-of-type(2)quot;); 92 92
  • 93. quot;programming in the largequot; support like ECMAScript 3.1/4 Olav Junker Kjær’s Mascara http://ecmascript4.com/ ES4-> javascript translator in python 93 93
  • 94. State of cross-browser support >IE 6-7 support JScript 5 (which is equivalent to ECMAScript 3, JavaScript 1.5) >IE 8 supports JScript 6 (which is equivalent to ECMAScript 3, JavaScript 1.5 - more bug fixes over JScript 5) >Firefox 1.0 supports JavaScript 1.5 (ECMAScript 3 equivalent) >Firefox 1.5 supports JavaScript 1.6 (1.5 + Array Extras + E4X + misc.) >Firefox 2.0 supports JavaScript 1.7 (1.6 + Generator + Iterators + let + misc.) >Firefox 3.0 supports JavaScript 1.8 (1.7 + Generator Expressions + Expression Closures + misc.) >The next version of Firefox will support JavaScript 1.9 (1.8 + To be determined) >Opera supports a language that is equivalent to ECMAScript 3 + Getters and Setters + misc. >Safari supports a language that is equivalent to ECMAScript 3 + Getters and Setters + misc. Source John Resig http://ejohn.org/blog/versions-of-javascript/ 94 94
  • 95. Acknowledgements Mads Sig Ager, Google for V8 slides Brendan Eich http://www.sdtimes.com/blog/post/2009/04/16/ Brendan-Eich-Explains-ECMAScript-Fifth-Edition- To-You.aspx John Resig http://ejohn.org/blog/tags/ecmascript/ 95 95
  • 96. What’s new in CSS? 96 96
  • 97. What’s new in CSS? Generated content 97 97
  • 98. What’s new in CSS? Generated content h1:before {content: quot;Chapter quot; counter(h1) quot;. quot;} 98 98
  • 99. What’s new in CSS? Generated content h1:before {content: quot;Chapter quot; counter(h1) quot;. quot;} h1 {counter-reset: h2} h2:before { counter-increment: h2; content: counter(h1) quot;.quot; counter(h2) quot;. quot;; } 99 99
  • 100. What’s new in CSS? Generated content <h1>Your First Python Program</h1> <h2>Diving in</h2> <h2>Declaring functions</h2> <h2>Writing readable code</h2> 100 100
  • 101. What’s new in CSS? Generated content Chapter 1. Your First Python Program 1.1 Diving in 1.2 Declaring functions 1.3 Writing readable code 101 101
  • 102. What’s new in CSS? Generated content h1:before {content: quot;Chapter quot; counter(h1) quot;. quot;} h1 {counter-reset: h2} h2:before { counter-increment: h2; content: counter(h1) quot;.quot; counter(h2) quot;. quot;; } Safari, Firefox, Chrome, Opera… and Internet Explorer (8) 102 102
  • 103. What’s new in CSS? Transforms •scale, scaleX, scaleY •rotate •translate, translateX, translateY •skew, skewX, skewY •matrix 103 103
  • 104. CSS Transforms div { height: 100px; width: 100px; transform: translate(80px, 80px) scale(1.5, 1.5) rotate(45deg); } 104
  • 105. What’s new in CSS? Transforms 105 104
  • 106. What’s new in CSS? Transforms •scale, scaleX, scaleY •rotate •translate, translateX, translateY •skew, skewX, skewY •matrix Safari 3, Firefox 3.5, Chrome, iPhone, Android, Palm Pre, Blackberry Storm 106 105
  • 107. CSS Animation @keyframes 'wobble' { 0% { left: 100px; } 40% { left: 150px; } 60% { left: 75px; } 100% { left: 100px; } } 107
  • 108. CSS Animation div { animation-name: 'wobble'; animation-duration: 5s; animation-iteration-count: 10; } 108
  • 109. What’s new in CSS? Embedded fonts 109 106
  • 110. What’s new in CSS? Embedded fonts … because the web didn’t look bad enough already 110 107
  • 111. What’s new in CSS? Embedded fonts @font-face { font-family: GoudyBookletter; src: url(…); format(“truetype”); } 111 108
  • 112. What’s new in CSS? Embedded fonts @font-face { font-family: GoudyBookletter; src: url(goudybookletter.ttf); format(“truetype”); } Safari 3, Firefox 3.5, Chrome, iPhone, Android… 112 109
  • 113. What’s new in CSS? Embedded fonts @font-face { font-family: GoudyBookletter; src: url(goudybookletter.eot); } Because Internet Explorer is… “special” 113 110
  • 114. CSS Support in browsers http://www.quirksmode.org/compatibility.html 114
  • 115. What’s new in vector graphics? Canvas SVG 115 111
  • 116. 13 years of web vector graphics history > 1996 Macromedia Flash 1 > 1998 Macromedia and Microsoft VML > 1998 Adobe Systems and Sun Microsystems PGML > 1998 SVG W3C > 2001 SVG 1.0 > 2003 SVG 1.1: modularization, Tiny and Basic > 2004 Apple Canvas -> WHATWG - HTML5, Mozilla > 2006 Microsoft Silverlight 1.0 (WPF/E) > 2007 Adobe Flash 9 > 2008 SVG Tiny 1.2 (R) Full 1.2 (WD) core and modules 116
  • 117. Web vector graphics today 99% 33% 33% 20% 117
  • 118. OpenWeb vector graphics available in a browser near you > Firefox, Safari (+iPhone), http://a.deveria.com/caniuse/ Opera, Chrome > ~33% browsers natively > Open Source JS Shims for Canvas and SVG (autumn 2009) support in IE • Much of SVG 1.1 Full supported by all browsers except IE • Most of Canvas (except for text extensions) supported by all browsers except IE > No Flash in iPhone & Android 118
  • 119. <canvas> tag and Context object > Immediate mode graphics: fire and forget <canvas id=quot;clockquot; width=quot;150quot; height=quot;150quot;> <img src=quot;fallback.pngquot; width=quot;150quot; height=quot;150quot; alt=quot;quot;/> </canvas> > In Javascript get a rendering context and draw var canvas = document.getElementById(quot;canvasquot;);if (canvas.getContext) { var ctx = canvas.getContext(quot;2dquot;); ctx.fillStyle = quot;rgb(200,0,0)quot;; ctx.fillRect (10, 10, 55, 50);} Examples from http://dev.opera.com/articles/view/html-5-canvas-the-basics/ 119
  • 120. Demos > Yahoo Pipes > Bespin > All demos at http://delicious.com/chanezon/j1+canvas > More at http://delicious.com/chanezon/canvas +demos 120
  • 121. Canvas Resources > http://delicious.com/chanezon/canvas > https://developer.mozilla.org/en/Canvas_tutorial > http://dev.opera.com/articles/view/html-5-canvas-the- basics/ > http://blog.mozbox.org/tag/demo 121
  • 122. SVG > XML vocabulary for Vector Graphics > Retained mode graphics > Versions: 1.0, 1.1, 1.2 > Profiles: Full, Basic, Tiny > Safe to use: SVG 1.1 Full (except some features) • Not widely implemented: Fonts, Animation, some Filters 122
  • 123. Coordinates, Viewbox <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?><svg xmlns=quot;http:// www.w3.org/2000/svgquot; viewBox=quot;50 50 500 400quot; width=quot;800pxquot; height=quot;600pxquot; id=quot;ex1quot;> <g id=quot;layer1quot;> <rect style=quot;fill:#fffc00;stroke:#fac305;stroke-width:20quot; id=quot;rect1quot; width=quot;400quot; height=quot;300quot; x=quot;100quot; y=quot;100quot; rx=quot;20quot; ry=quot;30quot;/> </g></svg> 123
  • 124. Browser Support > http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28SVG%29 > SVG 1.1 partially supported in Firefox, Safari (+iPhone), Opera, Chrome > 33% browsers 124
  • 125. Browser Support (details) >http://www.codedread.com/svg-support.php - Thanks to Jeff Schiller 125
  • 126. Authoring http://www.inkscape.org/ 126
  • 127. Whatʼs New? > IE Shim layer http://code.google.com/p/sgweb/ > Conference 127
  • 128. Demos > All demos at http://delicious.com/chanezon/ j1+svg > More at http://delicious.com/chanezon/svg +demos 128
  • 129. SVG Resources > http://delicious.com/chanezon/svg > http://www.w3.org/Consortium/Offices/Presentations/SVG/0.svg 129
  • 130. When to use Canvas or SVG Not competing SVG <canvas> retained mode graphics immediate mode graphics Editable static images Script-based scene graph Accessibility Programmatic generation of High-quality printing images Interaction Drawing pixels Mixing markupText Constant performance Combining them possible in some browsers 130
  • 131. HTML5 Resources > http://blog.whatwg.org > http://code.google.com/doctype > https://developer.mozilla.org/En > http://dev.opera.com/ > http://webkit.org/blog/ > Gmail mobile HTML5 blog posts > http://delicious.com/chanezon/openweb 131
  • 132. Conclusion quot;The Web has won -- it's the dominant programming model of our timequot; Vic Gundotra, Google > HTML5 is already here > ... see http://www.quirksmode.org/ for definition of “here” > If you want to know more about Canvas and SVG come to our talk at 6 pm: “2D vector graphics, the openweb way” 132