SlideShare a Scribd company logo
Wrestling with
ASP.NET and Web
   Standards
    Anthony Williams




              Image: c http://www.flickr.com/photos/kenmccown/220565863
Hello!
         Image: c Me
Work for a Car Dealer
       Group
                Image: © Listers Group. Used with permission.
IW
       ork
             He
               re




Work for a Car Dealer
       Group
                    Image: © Listers Group. Used with permission.
NOT a used car salesman



         Image: © http://www.bbc.co.uk/comedy/fastshow/wallpaper/images/swiss_1024.jpg
Windows
    IIS
SQL Server
 ASP.NET
             Image: © Microsoft
ASP ≠ ASP.NET


       Image: c http://www.flickr.com/photos/planettelex/826864344
Web Standards
      +
  ASP.NET

       Image: c http://www.flickr.com/photos/wheatfields/515063339
Before we start...


         Image: c http://www.flickr.com/photos/paix_et_amour/2398468615
★ .NET   3.5
★ C#
★ XHTML    1.0 Transitional

               Image: c http://www.flickr.com/photos/paix_et_amour/2398468615
1

    Out of the box


            Image: c http://www.flickr.com/photos/z287marc/3189567558
<%@ Page Language="C#" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/
xhtml1‐transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/
xhtml1‐transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/
wEPDwULLTE2MTY2ODcyMjlkZCHkJbOA8HXUlbSk8AyRMGmtOpja" />
</div>
    <div>
    
    </div>
    </form>
</body>
</html>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/
xhtml1‐transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/
wEPDwULLTE2MTY2ODcyMjlkZCHkJbOA8HXUlbSk8AyRMGmtOpja" />
</div>
    <div>
    
    </div>
    </form>
</body>
</html>
XHTML
Conformance

      Image: c http://www.flickr.com/photos/mikahiironniemi/76988191
<system.web>
      <XhtmlConformance mode="Transitional" />
</system.web>
<system.web>
      <XhtmlConformance mode="Strict" />
                        mode="Strict"
</system.web>
<system.web>
      <XhtmlConformance mode="Strict" />
</system.web>
<%@ Page Language="C#" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1‐
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/
strict.dtd">
xhtml1‐transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1‐
strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1‐
strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/
wEPDwULLTE2MTY2ODcyMjlkZCHkJbOA8HXUlbSk8AyRMGmtOpja" />
</div>
    <div>
    
    </div>
    </form>
</body>
</html>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1‐
strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
                           Won’t Validate
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/
wEPDwULLTE2MTY2ODcyMjlkZCHkJbOA8HXUlbSk8AyRMGmtOpja" />
</div>
    <div>
    
    </div>
    </form>
</body>
</html>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1‐
strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/
wEPDwULLTE2MTY2ODcyMjlkZCHkJbOA8HXUlbSk8AyRMGmtOpja" />
</div>
    <div>
    
    </div>
    </form>
</body>
</html>
<system.web>
      <XhtmlConformance mode="Legacy" />
                        mode="Legacy"
</system.web>
<system.web>
      <XhtmlConformance mode="Legacy" />
</system.web>
2

<asp:repeater />

         Image: c http://www.flickr.com/photos/beatxm/2535486395
<asp:repeater id="rptNavigationLinks" runat="server">
    <headertemplate>
        <ul id="MainNavigation">
    </headertemplate>
    <itemtemplate>
            <li <%# Eval("Link", "class="{0}"") %>>
                <a href="<%# Eval("LinkUrl") %>"><% Eval("LinkTitle") %></a>
            </li>
    </itemtemplate>
    <footertemplate>
        </ul>
    </footertemplate>
</asp:repeater>
<ul id="MainNavigation">
    <li class="Home">
        <a href="/">Home</a>
    </li>
    <li>
        <a href="/New">New Cars</a>
    </li>
    <li>
        <a href="/Used">Used Cars</a>
    </li>
    <li>
        <a href="/Jobs">Jobs</a>
    </li>
    <li>
        <a href="/About">About Us</a>
    </li>
</ul>
<asp:repeater id="rptNavigationLinks" runat="server">
    <headertemplate>
        <table id="DataTable">
            <thead>
                <tr>
                    <th> ... </th>
                    <th> ... </th>
                </tr>
            </thead>
            <tbody>
    </headertemplate>
    <itemtemplate>
                <tr>
                    <td> ... </td>
                    <td> ... </td>
                </tr>
    </itemtemplate>
    <footertemplate>
            </tbody>
        </table>
    </footertemplate>
</asp:repeater>
<table id="DataTable">
    <thead>
        <tr>
            <th>Letter</th>
            <th>Phonetic</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>A</td>
            <td>Alpha</td>
        </tr>
        <tr>
            <td>B</td>
            <td>Bravo</td>
        </tr>
        <tr>
            <td>C</td>
            <td>Charlie</td>
        </tr>
    </tbody>
</table>
3

    runat="server"

          Image: http://users.upwardaccess.com/plong/images/btvserver_treadmill.jpg
visible="false"


        Image: c http://www.flickr.com/photos/antonystanley/3093398360
Image: c http://www.flickr.com/photos/antonystanley/3093398360
Image: c http://www.flickr.com/photos/antonystanley/3093398360
Image: c http://www.flickr.com/photos/antonystanley/3093398360
Image: c http://www.flickr.com/photos/antonystanley/3093398360
Image: c http://www.flickr.com/photos/antonystanley/3093398360
Image: c http://www.flickr.com/photos/antonystanley/3093398360
Image: c http://www.flickr.com/photos/antonystanley/3093398360
4

    Blank Alt Text

            Image: c http://www.flickr.com/photos/wolfsoul/1368661325
<asp:image runat="server" id="Image1"
           imageurl="~/accept.png" />
<img id="Image1" src="accept.png"
      style="border‐width:0px;" />
<img id="Image1" src="accept.png"
      style="border‐width:0px;" />
      style="border‐width:0px;"
<img id="Image1" src="accept.png"
      style="border‐width:0px;" />
<asp:image runat="server" id="Image1"
      imageurl="~/accept.png"
      alternatetext="" />
<img id="Image1" src="accept.png"
      style="border‐width:0px;" />
                                alt="" />
<img id="Image1" src="accept.png"
      style="border‐width:0px;" />
<asp:image runat="server" id="Image1"
      imageurl="~/accept.png"
      alternatetext=""
      generateemptyalternatetext="true" />
<asp:image runat="server" id="Image1"
      imageurl="~/accept.png"
      alternatetext=""
      generateemptyalternatetext="true" />
      generateemptyalternatetext="true"
<asp:image runat="server" id="Image1"
      imageurl="~/accept.png"
      alternatetext=""
      generateemptyalternatetext="true" />
<img id="Image1" src="accept.png"
      style="border‐width:0px;" alt="" />
                                alt="" />
<img id="Image1" src="accept.png"
      style="border‐width:0px;" alt="" />
<img id="Image1" src="accept.png" alt=""
     runat="server" />
<!‐‐ Original HTML ‐‐>
<img id="Image1" src="accept.png" />
<!‐‐ Original HTML ‐‐>
<img id="Image1" src="accept.png" />

// Add this to your code‐behind (C#)
Image1.Attributes.Add("alt", "");
<!‐‐ Original HTML ‐‐>
<img id="Image1" src="accept.png" />

// Add this to your code‐behind (C#)
Image1.Attributes.Add("alt", "");

<!‐‐ HTML after additional code‐behind ‐‐>
<img id="Image1" src="accept.png" alt="" />
// You’ll need .NET 3.0 (but seriously, use 3.5) for this to work, as well as needing to import
// (using) the System.Linq and System.Collections.Generic namespaces in all code files that use this. 

// Put the ControlHelper class somewhere in your solution ‐ not necessarily your page:
public static class ControlHelper
{
      public static IEnumerable<Control> AllControls(this ControlCollection Controls)
      {
            foreach (Control CurrentControl in Controls)
            {
                  foreach(var ChildControls in CurrentControl.Controls.AllControls())
                  {
                        yield return ChildControls;
                  }
                  yield return CurrentControl;
            }
      }
}

// Then run this code in your pages that have img elements with runat="server" attributes:
IEnumerable<HtmlImage> ImageControls = 
      Page.Controls
          .AllControls()
          .OfType<HtmlImage>()
          .Where(r => r.Attributes["alt"] == null);

foreach (HtmlImage ImageControl in ImageControls) ImageControl.Attributes.Add("alt", "");
5

    Dealing with
    Submissions

           Image: c http://www.flickr.com/photos/barnett/2836828090
Content Editors


         Image: c http://www.flickr.com/photos/kristiand/3223920178
Sanitise user input


           Image: c http://www.flickr.com/photos/herrolm/2699835587
Sanitise user input
                c http://xkcd.com/327/




           Image: c http://www.flickr.com/photos/herrolm/2699835587
Image: c http://www.flickr.com/photos/herrolm/2699835587
Image: c http://www.flickr.com/photos/herrolm/2699835587
Exception Details: System.Web.HttpRequestValidationException




                                   Image: c http://www.flickr.com/photos/herrolm/2699835587
!"#$%&'($)&*+,&-(.(/0(1-234&*1(3$"5




                       Image: c http://www.flickr.com/photos/herrolm/2699835587
!"#$%&'($)&*+,&-(.(/0(1-234&*1(3$"5




                       Image: c http://www.flickr.com/photos/herrolm/2699835587
!"#"$%&'(%)*
++++++!,-.%"+/-012-$%3%45%"$678-0"%7+9*
!9"#"$%&'(%)*




                       Image: c http://www.flickr.com/photos/herrolm/2699835587
Image: c http://www.flickr.com/photos/herrolm/2699835587
Server.HtmlEncode




          Image: c http://www.flickr.com/photos/herrolm/2699835587
Server.HtmlEncode
  String.Replace()


           Image: c http://www.flickr.com/photos/herrolm/2699835587
Server.HtmlEncode
  String.Replace()
Regular Expressions

           Image: c http://www.flickr.com/photos/herrolm/2699835587
<h1>I can&rsquo;t be bothered</h1>
<p>I&rsquo;ve had enough. Balls to this.</p>
<p>Time to play havoc with the website:</p>
<style>
    * {
        display: none !important;
    }
</style>
<p>Have fun!</p>
<script type="text/javascript">
    alert("I wonder what's happened to the website? Tee‐hee.");
</script>
The Multipack Presents: "Wrestling With Asp.Net And Web Standards" by Anthony Williams
The Multipack Presents: "Wrestling With Asp.Net And Web Standards" by Anthony Williams
<((script|style|iframe|object|embed)b[^>]*)>(.*?)</2>
(script|style|iframe|object|embed)
<((script|style|iframe|object|embed)b[^>]*)>(.*?)</2>
// Create a string loaded with our HTML
String InputHtml = " ... ";

// Create a new regular expression, and make sure you treat the 
// entire input as a single line, so that you match n in your
// dot (.) matches.
Regex re = new Regex(
      @"<((script|style|iframe|object|embed)b[^>]*)>(.*?)</2>", 
      RegexOptions.Singleline
);

// Create a new string which replaces any instance of ‘naughty’
// code with a blank string.
String OutputHtml = re.Replace(InputHtml, String.Empty);
<h1>I can&rsquo;t be bothered</h1>
<p>I&rsquo;ve had enough. Balls to this.</p>
<p>Time to play havoc with the website:</p>

<p>Have fun!</p>
Validating (X)HTML


        Image: http://www.aharef.info/static/htmlgraph/?url=http://listersgroup.co.uk
Ampersands


      Image: c http://www.flickr.com/photos/mattwright/237415989
Render it Yourself


          Image: c http://www.flickr.com/photos/brullonulla/2971684462
&(?!(?:[a‐zA‐Z][a‐zA‐Z0‐9]*|#d+);)(?!(?>(?:(?!<![CDATA[|]]>).)*)]]>)
public override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter HtmlWriter = new HtmlTextWriter(new System.IO.StringWriter()))
    {
        base.Render(HtmlWriter);
        string Html = HtmlWriter.InnerWriter.ToString();

        // Create the regular expression to find the un‐encoded ampersands...
        Regex re = new Regex(
            @"&(?!(?:[a‐zA‐Z][a‐zA‐Z0‐9]*|#d+);)(?!(?>(?:(?!<![CDATA[|]]>).)*)]]>)",
            RegexOptions.Multiline | RegexOptions.IgnoreCase
        );

        // Use it to replace them with encoded ampersands (&amp;)
        Html = re.Replace("&amp;");

        // Send the HTML to the browser
        HtmlWriter.Write(Html);
    }
}
public override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter HtmlWriter = new HtmlTextWriter(new System.IO.StringWriter()))
    {
        base.Render(HtmlWriter);
        string Html = HtmlWriter.InnerWriter.ToString();

        // Create the regular expression to find the un‐encoded ampersands...
        Regex re = new Regex(
            @"&(?!(?:[a‐zA‐Z][a‐zA‐Z0‐9]*|#d+);)(?!(?>(?:(?!<![CDATA[|]]>).)*)]]>)",
            RegexOptions.Multiline | RegexOptions.IgnoreCase
        );

        // Use it to replace them with encoded ampersands (&amp;)
        Html = re.Replace("&amp;");

        // Send the HTML to the browser
        HtmlWriter.Write(Html);
    }
}
<p>Some HTML that will include some encoded ampersands &amp; like 
that one, some double encoded ampersands like this one &amp;amp; 
and some unencoded ampersands, like this one & and this one &. 
Unfortunately& this &ampersand here could actually mean something 
else.</p>

<script type="text/javascript">
    // <![CDATA[
        if (a && b) doSomething("a & b &amp; c");
    // ]]>
</script>
<p>Some HTML that will include some encoded ampersands &amp; like 
that one, some double encoded ampersands like this one &amp;amp; 
and some unencoded ampersands, like this one &amp; and this one 
&amp;. Unfortunately&amp; this &amp;ampersand here could actually 
mean something else.</p>

<script type="text/javascript">
    // <![CDATA[
        if (a && b) doSomething("a & b &amp; c");
    // ]]>
</script>
public override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter HtmlWriter = new HtmlTextWriter(new System.IO.StringWriter()))
    {
        base.Render(HtmlWriter);
        string Html = HtmlWriter.InnerWriter.ToString();

        // Create the regular expression to find the un‐encoded ampersands...
        Regex re = new Regex(
            @"&(?!(?:[a‐zA‐Z][a‐zA‐Z0‐9]*|#d+);)(?!(?>(?:(?!<![CDATA[|]]>).)*)]]>)",
            RegexOptions.Multiline | RegexOptions.IgnoreCase
        );

        // Use it to replace them with encoded ampersands (&amp;)
        Html = re.Replace("&amp;");

        // Send the HTML to the browser
        HtmlWriter.Write(Html);
    }
}
public override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter HtmlWriter = new HtmlTextWriter(new System.IO.StringWriter()))
    {
        base.Render(HtmlWriter);
        string Html = HtmlWriter.InnerWriter.ToString();

        // Create the regular expression to find the un‐encoded ampersands...
        Regex re = new Regex(
            @"&(?!(?:[a‐zA‐Z][a‐zA‐Z0‐9]*|#d+);)(?!(?>(?:(?!<![CDATA[|]]>).)*)]]>)",
            RegexOptions.Multiline | RegexOptions.IgnoreCase
        );

        // Use it to replace them with encoded ampersands (&amp;)
        Html = re.Replace("&amp;");

        // Send the HTML to the browser
        HtmlWriter.Write(Html);
    }
}
★   Standards out of the box
★   Use the repeater control
★   Use HTML controls (runat=”server”)
★   Fix ASP.NET’s handling of alt=””
★   Be careful with user submissions


                        Image: c http://www.flickr.com/photos/runneralan/3091055611
Questions?
     Image: c http://www.flickr.com/photos/seandreilinger/2326448445
Slides:
http://slideshare.net/
       abitgone


                 Image: c http://www.flickr.com/photos/videocrab/116136642
Videos:
vimeo.com/channels/
  multipackpresents


               Image: c http://www.flickr.com/photos/videocrab/116136642
Thank you!
          Twitter:
        @abitgone
            Web:
      abitgone.co.uk
        Email/Jabber:
  anthony@abitgone.co.uk

More Related Content

PDF
Prebrowsing - Velocity NY 2013
PDF
Metrics of Joy
PDF
Preconnect, prefetch, prerender...
PPTX
High Performance HTML5 (SF HTML5 UG)
PPTX
Web Directions South - Even Faster Web Sites
PPTX
Design+Performance
PPTX
High Performance Mobile (SF/SV Web Perf)
PDF
Speed is Essential for a Great Web Experience
Prebrowsing - Velocity NY 2013
Metrics of Joy
Preconnect, prefetch, prerender...
High Performance HTML5 (SF HTML5 UG)
Web Directions South - Even Faster Web Sites
Design+Performance
High Performance Mobile (SF/SV Web Perf)
Speed is Essential for a Great Web Experience

What's hot (19)

PDF
Dreamweaver CS6, jQuery, PhoneGap, mobile design
PDF
The web is too slow
PDF
Technical Introduction to YDN
PPTX
@media - Even Faster Web Sites
PDF
Making Mobile Sites Faster
PDF
The Case for HTTP/2 - GreeceJS - June 2016
PDF
Joomla! Frappe - Κατασκευή εφαρμογών για το Joomla! χωρίς να τραβάτε τα μαλιά...
PPT
WordPress Standardized Loop API
PDF
Mobile Web Performance - Getting and Staying Fast
PDF
Jason Wilson Final PPP slide show
PDF
Tim Hill 4.4 PPP Presentation
PDF
Building an Appier Web - Velocity Amsterdam 2016
PPTX
Souders WPO Web2.0Expo
PDF
Responsive Design Tools & Resources
ODP
Don't sh** in the Pool
PDF
Building iPad apps with Flex - 360Flex
PDF
Tanner Floyd PPP Final Slides
PDF
Responsive Design Workshop
PPT
Augmented Reality (AR) - The Future of Mobile Applications?
Dreamweaver CS6, jQuery, PhoneGap, mobile design
The web is too slow
Technical Introduction to YDN
@media - Even Faster Web Sites
Making Mobile Sites Faster
The Case for HTTP/2 - GreeceJS - June 2016
Joomla! Frappe - Κατασκευή εφαρμογών για το Joomla! χωρίς να τραβάτε τα μαλιά...
WordPress Standardized Loop API
Mobile Web Performance - Getting and Staying Fast
Jason Wilson Final PPP slide show
Tim Hill 4.4 PPP Presentation
Building an Appier Web - Velocity Amsterdam 2016
Souders WPO Web2.0Expo
Responsive Design Tools & Resources
Don't sh** in the Pool
Building iPad apps with Flex - 360Flex
Tanner Floyd PPP Final Slides
Responsive Design Workshop
Augmented Reality (AR) - The Future of Mobile Applications?
Ad

Viewers also liked (20)

PDF
TRAZUR TRANSFIERE CONOCIMIENTO Y EXPERIENCIA EN TRAZABILIDAD ANIMAL
PPTX
Centro de investigación y estudios superiores en estomatología
PPTX
Celovito razmišljanje za celovito poročanje: kako lahko komunikatorji prispev...
PPT
Adhesivos..Dolly
RTF
Antnio lira
PDF
Making Life Easier for Investigators: A Shared Solution for Smarter, Faster C...
PPT
Tarea colaborativa
PDF
Analisis imprimir1
DOC
Mesas 2013 tt
PPTX
Categorizacion bovina
PPTX
Question2 evaluation
PPTX
Teorías del curriculum clase
PPT
Azure Overview Capgemini
PDF
Klm airfrance horario_verao_2014_consolidador
PPS
ETERNIDADE
PDF
Muestreo decuencial
PDF
ITSM herramienta estrategica de ayuda al negocio
PPT
Presentació5
PDF
No sólo de ERES de extinción de contratos vive (y trabaja) la Audiencia Nacio...
TRAZUR TRANSFIERE CONOCIMIENTO Y EXPERIENCIA EN TRAZABILIDAD ANIMAL
Centro de investigación y estudios superiores en estomatología
Celovito razmišljanje za celovito poročanje: kako lahko komunikatorji prispev...
Adhesivos..Dolly
Antnio lira
Making Life Easier for Investigators: A Shared Solution for Smarter, Faster C...
Tarea colaborativa
Analisis imprimir1
Mesas 2013 tt
Categorizacion bovina
Question2 evaluation
Teorías del curriculum clase
Azure Overview Capgemini
Klm airfrance horario_verao_2014_consolidador
ETERNIDADE
Muestreo decuencial
ITSM herramienta estrategica de ayuda al negocio
Presentació5
No sólo de ERES de extinción de contratos vive (y trabaja) la Audiencia Nacio...
Ad

Similar to The Multipack Presents: "Wrestling With Asp.Net And Web Standards" by Anthony Williams (20)

PPT
Widget Summit 2008
PDF
Speed Matters!
PDF
Http/2 - What's it all about?
PPTX
Website performance optimisation
PDF
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
KEY
HTML5: Markup Evolved
PPT
Oscon 20080724
PDF
[refreshpitt] Adaptive Images in Responsive Web Design
PDF
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
PDF
[drupalcampatx] Adaptive Images in Responsive Web Design
PDF
[wcatx] Adaptive Images in Responsive Web Design
PDF
The case for HTTP/2
PPTX
Devoxx be fast and beautiful images
PDF
[convergese] Adaptive Images in Responsive Web Design
PDF
Responsive Email Design and Development
PDF
Mume HTML5 Intro
PDF
[psuweb] Adaptive Images in Responsive Web Design
PDF
分层语义化模板实践 ---- 张克军
PDF
LSM实践
PDF
[HEWEBFL] Adaptive Images in Responsive Web Design
Widget Summit 2008
Speed Matters!
Http/2 - What's it all about?
Website performance optimisation
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
HTML5: Markup Evolved
Oscon 20080724
[refreshpitt] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[drupalcampatx] Adaptive Images in Responsive Web Design
[wcatx] Adaptive Images in Responsive Web Design
The case for HTTP/2
Devoxx be fast and beautiful images
[convergese] Adaptive Images in Responsive Web Design
Responsive Email Design and Development
Mume HTML5 Intro
[psuweb] Adaptive Images in Responsive Web Design
分层语义化模板实践 ---- 张克军
LSM实践
[HEWEBFL] Adaptive Images in Responsive Web Design

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Encapsulation theory and applications.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Big Data Technologies - Introduction.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
20250228 LYD VKU AI Blended-Learning.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Spectral efficient network and resource selection model in 5G networks
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Encapsulation theory and applications.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Dropbox Q2 2025 Financial Results & Investor Presentation
sap open course for s4hana steps from ECC to s4
Encapsulation_ Review paper, used for researhc scholars
Review of recent advances in non-invasive hemoglobin estimation
Diabetes mellitus diagnosis method based random forest with bat algorithm
The Rise and Fall of 3GPP – Time for a Sabbatical?
Reach Out and Touch Someone: Haptics and Empathic Computing
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
The AUB Centre for AI in Media Proposal.docx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Big Data Technologies - Introduction.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...

The Multipack Presents: "Wrestling With Asp.Net And Web Standards" by Anthony Williams