SlideShare una empresa de Scribd logo
1 de 93
Descargar para leer sin conexión
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>
<((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

Más contenido relacionado

La actualidad más candente

@media - Even Faster Web Sites
@media - Even Faster Web Sites@media - Even Faster Web Sites
@media - Even Faster Web Sites
Steve Souders
 
Joomla! Frappe - Κατασκευή εφαρμογών για το Joomla! χωρίς να τραβάτε τα μαλιά...
Joomla! Frappe - Κατασκευή εφαρμογών για το Joomla! χωρίς να τραβάτε τα μαλιά...Joomla! Frappe - Κατασκευή εφαρμογών για το Joomla! χωρίς να τραβάτε τα μαλιά...
Joomla! Frappe - Κατασκευή εφαρμογών για το Joomla! χωρίς να τραβάτε τα μαλιά...
Nicholas Dionysopoulos
 
Souders WPO Web2.0Expo
Souders WPO Web2.0ExpoSouders WPO Web2.0Expo
Souders WPO Web2.0Expo
guest0b3d92d
 
Responsive Design Tools & Resources
Responsive Design Tools & ResourcesResponsive Design Tools & Resources
Responsive Design Tools & Resources
Clarissa Peterson
 
Don't sh** in the Pool
Don't sh** in the PoolDon't sh** in the Pool
Don't sh** in the Pool
Chris Jean
 

La actualidad más candente (19)

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

Destacado

Centro de investigación y estudios superiores en estomatología
Centro de investigación y estudios superiores en estomatologíaCentro de investigación y estudios superiores en estomatología
Centro de investigación y estudios superiores en estomatología
1tze
 
Celovito razmišljanje za celovito poročanje: kako lahko komunikatorji prispev...
Celovito razmišljanje za celovito poročanje: kako lahko komunikatorji prispev...Celovito razmišljanje za celovito poročanje: kako lahko komunikatorji prispev...
Celovito razmišljanje za celovito poročanje: kako lahko komunikatorji prispev...
18. Slovenska konferenca o odnosih z javnostmi
 
Question2 evaluation
Question2 evaluationQuestion2 evaluation
Question2 evaluation
Huong Le
 
Teorías del curriculum clase
Teorías del curriculum claseTeorías del curriculum clase
Teorías del curriculum clase
crisenith
 
ITSM herramienta estrategica de ayuda al negocio
ITSM herramienta estrategica de ayuda al negocioITSM herramienta estrategica de ayuda al negocio
ITSM herramienta estrategica de ayuda al negocio
Diego García
 
Presentació5
Presentació5Presentació5
Presentació5
Noeb
 
No sólo de ERES de extinción de contratos vive (y trabaja) la Audiencia Nacio...
No sólo de ERES de extinción de contratos vive (y trabaja) la Audiencia Nacio...No sólo de ERES de extinción de contratos vive (y trabaja) la Audiencia Nacio...
No sólo de ERES de extinción de contratos vive (y trabaja) la Audiencia Nacio...
Universidad Autónoma de Barcelona
 

Destacado (20)

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

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

Widget Summit 2008
Widget Summit 2008Widget Summit 2008
Widget Summit 2008
Volkan Unsal
 
Http/2 - What's it all about?
Http/2  - What's it all about?Http/2  - What's it all about?
Http/2 - What's it all about?
Andy Davies
 
[refreshpitt] Adaptive Images in Responsive Web Design
[refreshpitt] Adaptive Images in Responsive Web Design[refreshpitt] Adaptive Images in Responsive Web Design
[refreshpitt] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
[drupalcampatx] Adaptive Images in Responsive Web Design
[drupalcampatx] Adaptive Images in Responsive Web Design[drupalcampatx] Adaptive Images in Responsive Web Design
[drupalcampatx] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
[wcatx] Adaptive Images in Responsive Web Design
[wcatx] Adaptive Images in Responsive Web Design[wcatx] Adaptive Images in Responsive Web Design
[wcatx] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
[psuweb] Adaptive Images in Responsive Web Design
[psuweb] Adaptive Images in Responsive Web Design[psuweb] Adaptive Images in Responsive Web Design
[psuweb] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
[HEWEBFL] Adaptive Images in Responsive Web Design
[HEWEBFL] Adaptive Images in Responsive Web Design[HEWEBFL] Adaptive Images in Responsive Web Design
[HEWEBFL] Adaptive Images in Responsive Web Design
Christopher Schmitt
 

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

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

Último

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

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