SlideShare une entreprise Scribd logo
1  sur  151
Télécharger pour lire hors ligne
Progressive
   nhancement

by Aaron Gustafson
@aarongustafson
http://slideshare.net/AaronGustafson
?
TECHNOLOGICAL
 RESTRICTIONS
MCMLXXVII
  (that’s 1977)
HTML   CSS
fault tolerance
n. a system’s ability to continue to
operate when it encounters and
unexpected error.
BROWSERS
IGNORE WHAT
 THEY DON’T
UNDERSTAND
GRACEFUL
DEGRADATION
MODERN
BROWSERS
   OLDER BROWSERS
MODERN
BROWSERS
   OLDER BROWSERS
PROGRESSIVE
ENHANCEMENT
CONTENT
ACCESSIBILITY
“SPECIAL NEEDS”
“SPECIAL NEEDS”
    CAN BE
  CONTEXTUAL
PROGRESSIVE
GRACEFUL DEGRADATION   ENHANCEMENT
OOOH, SHINY!
PROGRESSIVE
ENHANCEMENT
 ISN’T ABOUT
  BROWSERS
BROWSERS AND
TECHNOLOGIES
 COME AND GO
DON’T LOSE
 SIGHT OF
YOUR USERS
User Experience




             BASIC                          ADVANCED

                     Browser Capabilities
User Experience




             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience




                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience




                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience




                     Interactivity

                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience



                     Accessibility

                     Interactivity

                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience



                          ARIA

                      JavaScript

                           CSS

                         HTML
             BASIC                          ADVANCED

                     Browser Capabilities


                     Text & HTTP
Content
Content
 is WHY
we build
websites
Clear,
well-written
prose is key.
Don’t put up
roadblocks.
Semantics
Progressive EEnhancement




Fault tolerance
  <p>HTML5 introduces several <em>really</em>
  useful elements and a ton of new APIs.</p>


  <p>Please fill out the form below.
  <strong>Note: all fields are required.</strong></p>


  <p>I like to work with markup languages because
  <strong>they are simple and easy to read</strong>.
  They also have that certain <i lang="fr" title="I
  don&#8217;t know what">je ne sais quoi</i>.</p>




EECI - October 2011                                     46
Progressive EEnhancement




Fault tolerance
  HTML5 introduces several really
  useful elements and a ton of new APIs.


  Please fill out the form below.
  Note: all fields are required.


  I like to work with markup languages because
  they are simple and easy to read.
  They also have that certain je ne sais quoi.




EECI - October 2011                              47
Progressive EEnhancement




Fault tolerance
  <video poster=”poster.png”>
   <source src=”video.m4v”/>
   <source src=”video.webm”/>
   <source src=”video.ogv”/>
   <img src=”poster.png” alt=””/>
   <ul>
     <li><a href="video.m4v">Download MP4</a></li>
     <li><a href="video.webm">Download WebM</a></li>
     <li><a href="video ogv">Download Ogg</a></li>
   </ul>
  </video>




EECI - October 2011                                    48
Progressive EEnhancement




Fault tolerance
  <video poster=”poster.png”>
   <source src=”video.m4v”/>
   <source src=”video.webm”/>
   <source src=”video.ogv”/>
   <img src=”poster.png” alt=””/>
   <ul>
     <li><a href="video.m4v">Download MP4</a></li>
     <li><a href="video.webm">Download WebM</a></li>
     <li><a href="video ogv">Download Ogg</a></li>
   </ul>
  </video>




EECI - October 2011                                    49
Progressive EEnhancement




Fault tolerance
  <input type="date" name="dob"/>


                      I get it!     I don’t get it :-(




EECI - October 2011                                      50
Ad-hoc
Semantics
Progressive EEnhancement




Classi cation
Progressive EEnhancement




Identi cation
Progressive EEnhancement




Microformats
  <section class="vcard">
   <figure>
     <img class="photo" src="aaron-gustafson.jpg" alt=""/>
   </figure>
   <h1 class="fn">Aaron Gustafson</h1>
   …
   <p>Aaron … is <b class="role">Group Manager</b> of the
     <a class="org" href="http://webstandards.org">Web
     Standards Project (WaSP)</a> ….</p>
  </section>




EECI - October 2011                                          56
Progressive EEnhancement




Microformats
  <body class="hentry">
   <h1 class="entry-title">
    {exp:typogrify}{title}{/exp:typogrify}
   </h1>
   <h3 class="author vcard">Posted by
     <a class="fn" href="/archives/by-author/{username}/">
    {author}</a> on
     <time class="updated"
           datetime="{entry_date format='%Y-%m-%dT%H:%i:%s'}"
           pubdate="pudate">{entry_date format='%d %F %Y'}
    </time>
     <a rel="bookmark" href="{the_permalink}">Permalink</a></h3>
   </h3>
   <div class=”entry-content”>
    {exp:typogrify}{entry_body}{/exp:typogrify}
   </div>
  </body>


EECI - October 2011                                                59
Readability
Progressive EEnhancement




EE/CI helpers
CI Microformats (helper)
hcard, rel-license
http://codeigniter.com/wiki/microformats


VZ Address ( eldtype)
hcard
https://github.com/elivz/vz_address.ee_addon


Easy Figures (plug-in)
 gure
https://github.com/easy-designs/easy_figures.eeaddon




EECI - October 2011                                    61
Design
Progressive EEnhancement




Parsing errors


                           p{
                             color: red;
                           }




EECI - October 2011                        65
Progressive EEnhancement




Parsing errors


                           p{
                             color: red;
                           }




EECI - October 2011                        65
Progressive EEnhancement




Parsing errors


                           p{
                             color: red;
                             font-weight: bold;
                           }



EECI - October 2011                               66
Progressive EEnhancement




Parsing errors


                           p{
                             color: red;
                             font-weight: bold;
                           }



EECI - October 2011                               66
Progressive EEnhancement




Parsing errors
  p {
    color: #ccc;
    color: rgba( 0, 0, 0, .5 );
  }




EECI - October 2011               67
Progressive EEnhancement




Parsing errors
  html[lang] p {
    color: #ccc;
    color: rgba( 0, 0, 0, .5 );
  }




EECI - October 2011               68
Progressive EEnhancement




Parsing errors
  @-moz-document url-prefix() {
    html[lang] p {
      color: #ccc;
      color: rgba( 0, 0, 0, .5 );
    }
  }




EECI - October 2011                 69
#intro {
  /* Basic Layout */
}

/* ... */

body[id=css-zen-garden] #intro {
 /* Advanced Layout */
}
#intro {
  /* Basic Layout */
}

/* ... */

[foo], #intro {
  /* Advanced Layout */
}
Progressive EEnhancement




Parsing errors
  @import 'not-for-IE7-or-below.css' screen;

  @media screen, print, refrigerator {
    /* IE will get these rules */
  }




EECI - October 2011                            72
Progressive EEnhancement




Organization



                           design




EECI - October 2011                 73
Progressive EEnhancement




Organization


                           type        color


                              layout


EECI - October 2011                            74
Progressive EEnhancement




Organization
  /* =Typography */
  img {
    display: block;
  }

  /* =Layout */
  @media screen {
    .frame .inner {
      border: 10px solid;
    }
  }

  /* =Color */
  .frame .inner {
    background-color: rgb(227, 222, 215);
    border-color: rgb(227, 222, 215);
  }


EECI - October 2011                         75
Progressive EEnhancement




Organization

                      type.css




                      layout.css




                      color.css




EECI - October 2011                76
Progressive EEnhancement




Organization

                      type.css




                      layout.css   main.css




                      color.css




EECI - October 2011                           76
Progressive EEnhancement




Organization
  # Setup
  RewriteEngine on
  RewriteBase /

  # rewrite css, img & js
  RewriteRule ^css/(.*).css$ /styles/$1 [L]




EECI - October 2011                             77
Progressive EEnhancement




Organization
  {embed="styles/typography"}

  @media screen {
    {embed="styles/layout-screen"}
  }

  {embed="styles/color"}




EECI - October 2011                  78
Progressive EEnhancement




Organization
  {embed="styles/reset"}
  {embed="styles/typography"}

  @media screen {
    {embed="styles/layout-screen"}
  }

  @media print {
    {embed="styles/layout-print"}
  }

  {embed="styles/color"}
  {embed="styles/effects"}




EECI - October 2011                  79
Progressive EEnhancement




Mobile- rst
  {embed="styles/reset"}
  {embed="styles/typography"}

  @media screen {
    {embed="styles/layout-mobile"}
  }

  {embed="styles/layout-tablet"}

  @media screen and (min-width:860px) {
    {embed="styles/layout-screen"}
  }

  @media print {
    {embed="styles/layout-print"}
  }

  {embed="styles/color"}
  {embed="styles/effects"}
EECI - October 2011                       80
Progressive EEnhancement




Mobile- rst
  {embed="styles/reset"}
  {embed="styles/typography"}

  @media screen {
    {embed="styles/layout-mobile"}
  }

  {embed="styles/layout-tablet"}

  @media screen and (min-width:860px) {
    {embed="styles/layout-screen"}
  }

  @media print {
    {embed="styles/layout-print"}
  }

  {embed="styles/color"}
  {embed="styles/effects"}
EECI - October 2011                       81
Progressive EEnhancement




Mobile- rst
  @media screen and (min-width:481px) {
    /* … */
  }

  @media screen and (min-width:570px) {
    /* … */
  }

  @media screen and (min-width:650px) {
    /* … */
  }

  @media screen and (min-width:700px) {
    /* … */
  }




EECI - October 2011                       82
Progressive EEnhancement




Monkey-patching
  <link rel="stylesheet" href="main.css"/>
  <!--[if IE 9]><link rel="stylesheet" href="ie9.css"/><![endif]-->
  <!--[if lte IE 8]><link rel="stylesheet" href="ie8.css"/><![endif]-->
  <!--[if lte IE 7]><link rel="stylesheet" href="ie7.css"/><![endif]-->
  <!--[if lte IE 6]><link rel="stylesheet" href="ie6.css"/><![endif]-->




EECI - October 2011                                                       87
Progressive EEnhancement




Monkey-patching
  @-moz-document url-prefix() {

        /* GENERATED CONTENT - FF3 doesn't allow positioning */
        #extra-mile:before {
           content: '';
        }
        #extra-mile:first-of-type:before {
           content: url(extra-mile-sign.png);
        }

  }




EECI - October 2011                                               88
Interactivity
Photo credit: spike55151
Progressive EEnhancement




Sins of our past
  <a href="javascript:someFunction();">some text</a>


  <a href="javascript:void(null);"
     onclick="someFunction();">some text</a>


  <a href="#" onclick="someFunction();">some text</a>




EECI - October 2011                                     93
Progressive EEnhancement




A minor improvement
  <a href="http://offsite.com"
     onclick="newWin( this.href ); return false;">
     some text</a>




EECI - October 2011                                  94
Photo credit: Giando
Progressive EEnhancement




Event listeners
  window.onload = handleExternalLinks;

  function handleExternalLinks()
  {
    var server = document.location.hostname;
    var anchors = document.getElementsByTagName("a");
    var i, href;
    for( i=0; i < anchors.length; i++ )
    {
      href = anchors[i].href;
      if ( href.indexOf("http://" + server) == -1 &&
            href.indexOf("https://" + server) == -1 )
      {
         // HREF is not a file on my server
         anchors[i].onclick = function()
         {
            newWin( this.href );
         };
      }
    }
  }
EECI - October 2011                                     96
Photo credit: hebedesign
Progressive EEnhancement




Listen and delegate
  document
    .getElementsByTagName( 'body' )[0]
      .onclick = clickDelegator;

  function clickDelegator( e )
  {
    e = ( e ) ? e : event;
    var el = e.target || e.srcElement;
    // external links
    if ( el.nodeName.toLowerCase() == 'a' &&
         el.getAttribute( 'rel' ) == 'external' )
    {
       newWin( el.href );
    }
  }




EECI - October 2011                                 98
Photo credit: ambery
Progressive EEnhancement




Anchor-include pattern
  <a data-replace="/comments/{url_title}/"
     href="/archives/{entry_date format='%Y/%m/%d'}/{url_title}/
     comments/#comments">View comments on this entry and add your
     own</a>


  {if segment_4=="comments"}
      <section id="comments" class="focal">
      {embed="inc/.comments" url_title="{url_title}"}
      </section>
  {if:else}
      {comment_loader}
  {/if}




EECI - October 2011                                             104
Progressive EEnhancement




Anchor-include pattern
  {embed="inc/.comments" url_title="{segment_3}"}




EECI - October 2011                                 105
Progressive EEnhancement




Anchor-include pattern
                                                                   https://gist.github.com/b976b67e88ffbfc9f125


  $.fn.ajaxInclude = function(){
       return this.each(function() {
            var $el               = $( this ),
                  target          = $el.data( 'target' ),
                  $targetEl       = target && $( target ) || $el,
                  methods         = [ 'append', 'replace', 'before', 'after' ],
                  ml              = methods.length,
                  method,
                  url;
            while ( ml-- ) {
                  method = methods[ ml ];
                  if ( $el.is( '[data-' + method + ']' ) ) {
                        url       = $el.data( method );
                        break;
                  }
            }
            if ( method == 'replace' ) { method += 'With'; }
            if ( url && method ) {
                  $.get( url, function( data ){
                        $el.trigger( 'ajaxInclude', [$targetEl, data] );
                        $targetEl[ method ]( data );
                  });
            }
       });
  };
EECI - October 2011                                                                                        106
Progressive EEnhancement




Anchor-include pattern
Replace:
  <a data-replace="articles/latest/fragment"
     href="...">Latest Articles</a>


Before:
  <a data-before="articles/latest/fragment"
     href="...">Latest Articles</a>


After:
  <a data-after="articles/latest/fragment"
     href="...">Latest Articles</a>



EECI - October 2011                            107
Progressive EEnhancement




Anchor-include pattern
  $("[data-append],[data-replace],”+
    “[data-after],[data-before]").ajaxInclude();




EECI - October 2011                                108
Progressive EEnhancement




Media Queries
Progressive EEnhancement




Mobile interfaces




EECI - October 2011        110
Progressive EEnhancement




Swapping content
  var trigger = 659;

  // …

  function toggleDisplay()
  {
      var width = $window.width();
      if ( showing == 'old' &&
            width <= trigger )
      {
           $old_nav.replaceWith($new_nav);
           showing = 'new';
      }
      else if ( showing == 'new' &&
                 width > trigger )
      {
           $new_nav.replaceWith($old_nav);
           showing = 'old';
      }
  }
EECI - October 2011                          111
Accessibility
Progressive EEnhancement




What is it?




EECI - October 2011        116
Progressive EEnhancement




What is it?




 <button>Tweet</button>

 <a class=”button”>Tweet</a>




EECI - October 2011            116
Progressive EEnhancement




What is it?




 <button>Tweet</button>

 <a class=”button”>Tweet</a>




EECI - October 2011            116
Progressive EEnhancement




What is it?




EECI - October 2011        117
Progressive EEnhancement




What is it?




 <button>Search Mail</button>

 <div>Search Mail</div>




EECI - October 2011             117
Progressive EEnhancement




What is it?




 <button>Search Mail</button>

 <div>Search Mail</div>




EECI - October 2011             117
Progressive EEnhancement




ARIA maps the OS to the web




EECI - October 2011           118
Semantics+
Progressive EEnhancement




All the web’s a play…
  <section id="main" role="main">
   <!-- The primary content for the page would go here -->
  </section>




EECI - October 2011                                          120
<header role="banner">
<nav role="navigation">
<form role="search">
<section role="main">
<footer role="contentinfo">
<nav role="navigation">
Progressive EEnhancement




Semantic comparison
                Ad-hoc            ARIA Role               HTML5

  #header, #top            banner                header (kind of)


  #main, #content          main                  none


  #extra, .sidebar         complementary, note   aside


  #footer, #bottom         contentinfo           footer


  #nav                     navigation            nav


  .hentry                  article               article


EECI - October 2011                                                 128
Progressive EEnhancement




These are the droids you seek
  <span role="button">OK</span>


  <div role="alert">
   <p>Something went wrong.</p>
  </div>


  <div role="alertdialog">
   <p>Something went wrong.</p>
   <img src="x.png" alt="dismiss" role="button" />
  </div>




EECI - October 2011                                  130
Progressive EEnhancement




What is it?




 <a role=”button”>Tweet</a>
    class=”button”>Tweet</a>




EECI - October 2011            131
Progressive EEnhancement




What is it?




 <a role=”button”>Tweet</a>




EECI - October 2011           131
Progressive EEnhancement




EECI - October 2011        132
Progressive EEnhancement




What’s happening?

                            B         B
                           (off)      (on)




  <span>
   <img src="bold-off.png" alt="bold" />
  </span>
  <span>
   <img src="bold-on.png" alt="bold" />
  </span>




EECI - October 2011                          134
Progressive EEnhancement




What’s happening?

                            B         B
                            (off)     (on)




  <span>
   <img src="bold-off.png" alt="not bold" />
  </span>
  <span>
   <img src="bold-on.png" alt="bold" />
  </span>




EECI - October 2011                            135
Progressive EEnhancement




What’s happening?

                            B         B
                            (off)     (on)




  <span role="button" aria-pressed="false">
   <img src="bold-off.png" alt="not bold" />
  </span>
  <span role="button" aria-pressed="true">
   <img src="bold-on.png" alt="bold" />
  </span>




EECI - October 2011                            136
Progressive EEnhancement




Hey! Over here!




EECI - October 2011        138
Progressive EEnhancement




Hey! Over here!




  <input class="tweet-counter" value="140" disabled="disabled">




EECI - October 2011                                               139
Progressive EEnhancement




Hey! Over here!




  <span id="chars_left_notice" class="numeric">
   <strong id="status-field-char-counter"
         class="char-counter">140</strong>
  </span>




EECI - October 2011                               140
Progressive EEnhancement




Hey! Over here!




  <span class="tweet-counter">140
   <b class="hidden"> characters remaining</b></span>


  .hidden {
    position: absolute;
    left: −999em;
  }



EECI - October 2011                                     141
Progressive EEnhancement




Hey! Over here!




  <span class="tweet-counter">maximum of 140 characters</span>



  <span class="tweet-counter">140
   <b class="hidden"> characters remaining</b></span>




EECI - October 2011                                              142
Progressive EEnhancement




Hey! Over here!




  <span aria-live="polite" aria-atomic="true"
        class="tweet-counter">140<b class="hidden">
        characters remaining</b></span>




EECI - October 2011                                   143
Progressive EEnhancement




Hey! Over here!




EECI - October 2011        144
ARIA

JavaScript

   CSS

  HTML

Text & HTTP
AdaptiveWebDesign.info
Progressive                          nhancement
                    by Aaron Gustafson
                    More of the same:
             http://adaptivewebdesign.info
                 http://easy-designs.net
                  http://easy-reader.net
              http://aaron-gustafson.com
                    Slides available at
         http://slideshare.net/AaronGustafson
           This presentation is licensed under
                   Creative Commons
      Attribution-Noncommercial-Share Alike 3.0

                flickr Photo Credits
  flickr.com/photos/aarongustafson/galleries/72157627891060114/

                  “Usability Fail” by soopahgrover
              “ferris wheel? not yet…” by drcorneilus
            “Compost 06/08/2007” by suavehouse113
               “CORNERSTONE” by spike55151
                     “Headphone” by Giando
                “Shout, shout..” by hebedesign

Contenu connexe

Similaire à Progressive EEnhancement [EECI 2011]

Adaptive Web Design [WebVisions Portland 2012]
Adaptive Web Design [WebVisions Portland 2012]Adaptive Web Design [WebVisions Portland 2012]
Adaptive Web Design [WebVisions Portland 2012]
Aaron Gustafson
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWeb
George Kanellopoulos
 
WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)
Shumpei Shiraishi
 
HiUED 前端/web 發展和體驗
HiUED 前端/web 發展和體驗HiUED 前端/web 發展和體驗
HiUED 前端/web 發展和體驗
Bobby Chen
 
Wordcamp Thessaloniki 2011 The Nextweb
Wordcamp Thessaloniki 2011 The NextwebWordcamp Thessaloniki 2011 The Nextweb
Wordcamp Thessaloniki 2011 The Nextweb
George Kanellopoulos
 
내꺼내꺼
내꺼내꺼내꺼내꺼
내꺼내꺼
misty915
 

Similaire à Progressive EEnhancement [EECI 2011] (20)

Adaptive Web Design Workshop [WebVisions NYC 2012]
Adaptive Web Design Workshop [WebVisions NYC 2012]Adaptive Web Design Workshop [WebVisions NYC 2012]
Adaptive Web Design Workshop [WebVisions NYC 2012]
 
Adaptive Web Design Workshop [inspire 2011]
Adaptive Web Design Workshop [inspire 2011]Adaptive Web Design Workshop [inspire 2011]
Adaptive Web Design Workshop [inspire 2011]
 
Adaptive Web Design Workshop [Iceweb 2011]
Adaptive Web Design Workshop [Iceweb 2011]Adaptive Web Design Workshop [Iceweb 2011]
Adaptive Web Design Workshop [Iceweb 2011]
 
Word camp nextweb
Word camp nextwebWord camp nextweb
Word camp nextweb
 
Word camp nextweb
Word camp nextwebWord camp nextweb
Word camp nextweb
 
Adaptive Web Design [WebVisions Portland 2012]
Adaptive Web Design [WebVisions Portland 2012]Adaptive Web Design [WebVisions Portland 2012]
Adaptive Web Design [WebVisions Portland 2012]
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWeb
 
WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)
 
WHAT IS HTML5?(20100510)
WHAT IS HTML5?(20100510)WHAT IS HTML5?(20100510)
WHAT IS HTML5?(20100510)
 
Progressive Enhancement & Mobile [Funka 2012]
Progressive Enhancement & Mobile [Funka 2012]Progressive Enhancement & Mobile [Funka 2012]
Progressive Enhancement & Mobile [Funka 2012]
 
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
 
HiUED 前端/web 發展和體驗
HiUED 前端/web 發展和體驗HiUED 前端/web 發展和體驗
HiUED 前端/web 發展和體驗
 
HTML5와 모바일
HTML5와 모바일HTML5와 모바일
HTML5와 모바일
 
The Rich Standard: Getting Familiar with HTML5
The Rich Standard: Getting Familiar with HTML5The Rich Standard: Getting Familiar with HTML5
The Rich Standard: Getting Familiar with HTML5
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
 
Wordcamp Thessaloniki 2011 The Nextweb
Wordcamp Thessaloniki 2011 The NextwebWordcamp Thessaloniki 2011 The Nextweb
Wordcamp Thessaloniki 2011 The Nextweb
 
Html5
Html5Html5
Html5
 
내꺼내꺼
내꺼내꺼내꺼내꺼
내꺼내꺼
 
HTML5 Intoduction for Web Developers
HTML5 Intoduction for Web DevelopersHTML5 Intoduction for Web Developers
HTML5 Intoduction for Web Developers
 

Plus de Aaron Gustafson

Plus de Aaron Gustafson (20)

Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]
 
Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]
 
Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]
 
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
 
Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?
 
Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]
 
Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]
 
Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]
 
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
 
PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]
 
Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]
 
Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]
 
Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]
 
The Web Should Just Work for Everyone
The Web Should Just Work for EveryoneThe Web Should Just Work for Everyone
The Web Should Just Work for Everyone
 
Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]
 
Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]
 
Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2
 
Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1
 
Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]
 
Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]
 

Dernier

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Dernier (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

Progressive EEnhancement [EECI 2011]