<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Better, Stronger, Faster</title><link>http://blogs.msdn.com/joshzana/default.aspx</link><description>Tales of a Bionic Dev</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Safari Caching Bug</title><link>http://blogs.msdn.com/joshzana/archive/2008/04/06/safari-caching-bug.aspx</link><pubDate>Mon, 07 Apr 2008 00:22:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8363830</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8363830.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8363830</wfw:commentRss><description>&lt;p&gt;From: &lt;a href="http://blogs.smugmug.com/don/2008/04/04/nasty-bug-safari-doesnt-cache-stuff/"&gt;SmugBlog: Don MacAskill &amp;#187; Blog Archive &amp;#187; Nasty Bug: Safari doesn&amp;#8217;t cache stuff.&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;ul&gt;     &lt;li&gt;If your computer has less than 1GB of RAM, Safari fails to cache items larger than 104,857 bytes. &lt;/li&gt;      &lt;li&gt;If your computer has more than 1GB of RAM, Safari failes to cache items larger than 209,715 bytes. &lt;/li&gt;      &lt;li&gt;JPEGs, at least, are temporarily cached in RAM. Whew. But upon browser restart, you&amp;#8217;ll see they didn&amp;#8217;t make it to the disk cache, so you have to get them again. &lt;/li&gt;      &lt;li&gt;Other objects, like SWFs or videos, though, don&amp;#8217;t even make it to the RAM cache, let alone disk. Load the same SWF back-to-back, and you&amp;#8217;ve just transfered the bytes twice. Ugh. &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;Pretty nasty stuff Apple! &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8363830" width="1" height="1"&gt;</description></item><item><title>Windows Live Writer + Source Code?</title><link>http://blogs.msdn.com/joshzana/archive/2008/04/01/windows-live-writer-source-code.aspx</link><pubDate>Tue, 01 Apr 2008 22:14:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8348700</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8348700.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8348700</wfw:commentRss><description>&lt;p&gt;I've been struggling on every post to get source code to look good with my blog style.&amp;#160; Today I found a decent solution as a live writer plugin: &lt;a href="http://gallery.live.com/liveItemDetail.aspx?li=b516cc7b-cea9-497a-9d6e-f6fed9f72d29&amp;amp;bt=9&amp;amp;pl=8"&gt;Insert Source Code Snippet&lt;/a&gt;.&amp;#160; It still requires me to muck with the html a bit though.&amp;#160; I may have to make this blog boring and white...&lt;/p&gt;  &lt;p&gt;Anyway, to try it out, here's an extension method I recently cooked up to help us AntiXss encode a list of strings to a JSON array.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;pre style="background-color: #ffffff"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #0000ff"&gt; System;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #0000ff"&gt; System.Collections.Generic;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #0000ff"&gt; System.Text;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #0000ff"&gt; Microsoft.Security.Application;

&lt;/span&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt;&lt;span style="color: #0000ff"&gt; Microsoft
{
    &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;    &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; A set of extension methods to make encoding untrusted output easier
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;    &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #a31515"&gt;EncodingExtensions
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;    {
        &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; Encodes a list of strings into JavaScript array notation, 
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; with full AntXss encoding of each string in the array
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;param name=&amp;quot;strings&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;The strings to encode&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;span style="color: #2b91af"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;A JavaScript array of strings&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;/returns&amp;gt;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #0000ff"&gt; JavaScriptEncode(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #a31515"&gt;List&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt; strings)
        {
            &lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #0000ff"&gt; (strings == &lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #0000ff"&gt;)
            {
                &lt;/span&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #a31515"&gt;ArgumentNullException&lt;/span&gt;&lt;span style="color: #0000ff"&gt;(&lt;/span&gt;&lt;span style="color: #ffff00"&gt;&amp;quot;strings&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;);
            }

            &lt;/span&gt;&lt;span style="color: #a31515"&gt;StringBuilder&lt;/span&gt;&lt;span style="color: #0000ff"&gt; builder = &lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #0000ff"&gt; &lt;/span&gt;&lt;span style="color: #a31515"&gt;StringBuilder&lt;/span&gt;&lt;span style="color: #0000ff"&gt;();
            builder.Append(&lt;/span&gt;&lt;span style="color: #ffff00"&gt;&amp;quot;[&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;);
            &lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #0000ff"&gt; (strings.Count &amp;gt; 0)
            {
                &lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #0000ff"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #0000ff"&gt; i = 0; i &amp;lt; strings.Count - 1; i++)
                {
                    builder.AppendFormat(&lt;/span&gt;&lt;span style="color: #ffff00"&gt;&amp;quot;{0},&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;, AntiXss.JavaScriptEncode(strings[i]));
                }
                builder.Append(AntiXss.JavaScriptEncode(strings[strings.Count - 1]));
            }
            builder.Append(&lt;/span&gt;&lt;span style="color: #ffff00"&gt;&amp;quot;]&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;);
            &lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #0000ff"&gt; builder.ToString();&lt;/span&gt;
        }
    }
}&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8348700" width="1" height="1"&gt;</description></item><item><title>DataContractJsonSerializer - Json serialization built in to .Net 3.5</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/28/datacontractjsonserializer-json-serialization-built-in-to-net-3-5.aspx</link><pubDate>Fri, 28 Mar 2008 05:07:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8340770</guid><dc:creator>joshzana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8340770.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8340770</wfw:commentRss><description>&lt;p&gt;if you are ever trying to generate javascript objects server side, you should take a look at &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx"&gt;DataContractJsonSerializer&lt;/a&gt;. We used to have this ugly aspx code to spew out a list Urls as a JSON array:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;thumbUrls = [&amp;lt;% if(this.ThumbnailUrls.Count &amp;gt; 0) {&lt;/p&gt;    &lt;p&gt;for (int i=0; i&amp;lt;this.ThumbnailUrls.Count - 1; i++){ %&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;%= AntiXss.JavaScriptEncode(this.ThumbnailUrls[i]) %&amp;gt;,&amp;lt;% } %&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;%= AntiXss.JavaScriptEncode(this.ThumbnailUrls[this.ThumbnailUrls.Count - 1]) %&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;% } %&amp;gt; ];&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is now replaced with the following in the ascx:&lt;/p&gt;  &lt;p&gt;ThumbnailLoader.thumbUrls = &amp;lt;%= this.ThumbnailUrlsToJson %&amp;gt;;&lt;/p&gt;  &lt;p&gt;And the following in the cs codebehind:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/DataContractJsonSerializerJsonserializ.5_10D03/image_2.png"&gt;&lt;img height="212" alt="image" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/DataContractJsonSerializerJsonserializ.5_10D03/image_thumb.png" width="541" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Which yields the following beautiful, compact encoded JSON all on one line:&lt;/p&gt;  &lt;p&gt;thumbUrls = [&amp;quot;https:\/\/sx7ydg.dc1files.livefilestore-int.com\/y1phXFnqIQmEILOwPXTJHzX6mr5hvunDRWHPiA3MfCKmE95hG5ztMSOcy2-rMDc-csXv02Yh5JagAs\/canada20.jpg&amp;quot;,&amp;quot;https:\/\/sx7ydg.dc1files.livefilestore-int.com\/y1p8bBAlNyOkenz_AOQWBE2uu2h1Ygr-bzb38SFwbB3-S_omOdNheUHkxvzIAsAzygBxS-7yPO8Fw4\/c4877_color.bmp&amp;quot;,&amp;quot;https:\/\/jo4b3g.dc1files.livefilestore-int.com\/y1pWK3OlwUeHDJ2_hQRsMVMTPA-Ag_ibzOfgWqu9lxi7SDOq3jNzmNsdo2JZgPv6_rO93jqV3W5RJE\/10.tiff&amp;quot;,&amp;quot;https:\/\/jo4b3g.dc1files.livefilestore-int.com\/y1p04Ff3-o4kOOehSsPJ-AYdvfpje-PaGMfA11CcN9zHEdWJalL-PFT1kTfzR_IbsaQBnAWQ_OBXak\/bcb_carat.gif&amp;quot;]&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8340770" width="1" height="1"&gt;</description></item><item><title>Finally found a good use for C# 3.0 Extension methods</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/20/finally-found-a-good-use-for-c-3-0-extension-methods.aspx</link><pubDate>Thu, 20 Mar 2008 06:14:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8326849</guid><dc:creator>joshzana</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8326849.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8326849</wfw:commentRss><description>&lt;p&gt;I think of Extension methods as mostly a hack introduced so that the LINQ team could implement all their cool features without touching the core .Net dlls.&lt;/p&gt;  &lt;p&gt;Here's a use of extension methods I can get behind though: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.leastprivilege.com - Extension Methods for AntiXss"&gt;www.leastprivilege.com - Extension Methods for AntiXss&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/Finallyfoundagoodusefo.0Extensionmethods_11CAE/image_2.png"&gt;&lt;img height="451" alt="image" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/Finallyfoundagoodusefo.0Extensionmethods_11CAE/image_thumb.png" width="555" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8326849" width="1" height="1"&gt;</description></item><item><title>More testing of IE8 connection limits</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/19/more-testing-of-ie8-connection-limits.aspx</link><pubDate>Wed, 19 Mar 2008 04:05:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8324332</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8324332.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8324332</wfw:commentRss><description>&lt;p&gt; From: &lt;a href="http://www.ajaxperformance.com/2008/03/16/testing-ie8s-connection-parallelism/"&gt;Ajax Performance &amp;#187; Testing IE8's Connection Parallelism&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It appears that IE8 will allow for a total of 18 maximum connections across different subdomains in a page load (over broadband).&amp;#160; Good news for sites that use the multiple host name trick.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8324332" width="1" height="1"&gt;</description></item><item><title>Code Reviews as a Learning Tool</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/17/code-reviews-as-a-learning-tool.aspx</link><pubDate>Mon, 17 Mar 2008 03:35:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8275753</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8275753.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8275753</wfw:commentRss><description>&lt;p&gt;Caught a link to &lt;a href="http://www.moserware.com/2008/03/what-does-it-take-to-become-grandmaster.html"&gt;Moserware: What Does It Take To Become A Grandmaster Developer?&lt;/a&gt; and found the article quite illuminating.&amp;#160; I'd like to think I'm a level 3 or 4 dev by his numbers. :-)&lt;/p&gt;  &lt;p&gt;There are lots of good tips and tidbits in that lengthy article; one part that I really agreed with regarded the value of a good code review:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Reading good blogs, books, or papers can help. But the best resource by far is an environment where coworkers can safely rocket you through the above learning curve. This is why I really value intense code reviews by my peers at work. Good critiques have let me accelerate my learning process as a result and get slightly better. It's just simply way more efficient that way. It'd sort of be like the young &lt;a href="http://en.wikipedia.org/wiki/Garry_Kasparov"&gt;Gary Kasparov&lt;/a&gt; playing a game with &lt;a href="http://en.wikipedia.org/wiki/Bobby_fischer"&gt;Bobby Fischer&lt;/a&gt; and getting beaten badly. It'd hurt the pride initially, but it would probably help him learn much faster than reading books (as long as he kept good notes of the game).&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Our team takes great pride in a full code review. We send out a &amp;quot;pack&amp;quot; that lets each developer &amp;quot;diff&amp;quot; the changes being introduced.&amp;#160; Most feedback is done by email.&amp;#160; (this is Microsoft after all!)&amp;#160; I've found that I've learned a lot from having my code critiqued, as well as from reading the code of my peers.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8275753" width="1" height="1"&gt;</description></item><item><title>ASP.Net MVC Goes to Preview 2</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/14/asp-net-mvc-goes-to-preview-2.aspx</link><pubDate>Fri, 14 Mar 2008 20:02:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8206522</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8206522.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8206522</wfw:commentRss><description>&lt;p&gt;Phil from the MVC team posts some &lt;a href="http://haacked.com/archive/2008/03/10/thoughts-on-asp.net-mvc-preview-2-and-beyond.aspx"&gt;Thoughts on ASP.NET MVC Preview 2 and Beyond&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I've been following the ASP.Net&amp;#160; MVC project from back when it was an internal-only project.&amp;#160; I haven't had a chance to play with Preview 2 yet, but I hope to once my day job calms down a bit.&lt;/p&gt;  &lt;p&gt;One of the main goals of the MVC framework is to make ASP.Net more unit-test friendly.&amp;#160; SkyDrive and FolderShare are built on a &lt;em&gt;PageModel &lt;/em&gt;system that our team sort of invented to help us unit test our business logic.&amp;#160; (See Dan's posts &lt;a href="http://blogs.msdn.com/dancre/archive/tags/PageModel/default.aspx"&gt;Here&lt;/a&gt; )&amp;#160; We hope to at some point move our codebase over to the new MVC framework, as it has lots of cool features like URL routing and clean html generation that we are big fans of.&lt;/p&gt;  &lt;p&gt;I also think it's cool that the team is posting all of their code to CodePlex every few weeks.&amp;#160; Want a new feature?&amp;#160; Write it yourself!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8206522" width="1" height="1"&gt;</description></item><item><title>Steve Souders measures IE 8 page load time improvements</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/13/steve-souders-measures-ie-8-page-load-time-improvements.aspx</link><pubDate>Thu, 13 Mar 2008 17:42:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8180971</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8180971.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8180971</wfw:commentRss><description>&lt;p&gt;From: &lt;a href="http://www.stevesouders.com/blog/2008/03/10/ie8-speeds-things-up/"&gt;High Performance Web Sites :: IE8 speeds things up&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Lots of attention has been focused on the JScript improvements in IE8, but Steve &amp;quot;YSlow&amp;quot; Souders has measured the improvements to page load time based on the new 6 connections per host rule.&amp;#160; The other effect measured is the way IE will now download scripts in parallel, but the execute them sequentially, which unblocks the rest of the page load during large script downloads.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://stevesouders.com/images/facebook-parallel-scripts.gif" /&gt;&lt;/p&gt;  &lt;p&gt;The image shows that scripts are actually downloading in parallel, and that more than two are downloading at once.&amp;#160; Awesome!&lt;/p&gt;  &lt;p&gt;Steve writes:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Increasing parallel downloads makes pages load faster. (For users with slower CPUs or Internet connections it could possibly be worse, but for most users it&amp;#8217;s faster.) The HTTP 1.1 spec recommends that browsers only download &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.4"&gt;two items in parallel per hostname&lt;/a&gt;, but the spec was written in 1999. Today&amp;#8217;s clients and servers can support more parallel downloads, so IE8 has increased the number of &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/DevelopersNew.htm#ajax"&gt;downloads per hostname from 2 to 6&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;What Steve does not mention is that users with slower connections will automatically be defaulted to two connections per host, which will alleviate the original worry of the W3C in suggesting two as the limit.&lt;/p&gt;  &lt;p&gt;I can't wait to measure the improvement for SkyDrive in page load time between IE7 and IE8.&amp;#160; Future post maybe?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8180971" width="1" height="1"&gt;</description></item><item><title>Windows Live FolderShare ships!</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/10/windows-live-foldershare-ships.aspx</link><pubDate>Mon, 10 Mar 2008 20:37:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8135326</guid><dc:creator>joshzana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8135326.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8135326</wfw:commentRss><description>&lt;p&gt;In addition to the site I mostly work on, &lt;a href="http://skydrive.live.com"&gt;Windows Live SkyDrive&lt;/a&gt;, I also worked on a completely new website for Windows Live FolderShare, a product I've been using for about two years now to keep in sync all the files I have on the five or so machines I use daily.&lt;/p&gt;  &lt;p&gt;Check it out &lt;a href="http://www.foldershare.com"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Keep all your files in sync &lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Use FolderShare to create a mirrored image of your most important folders - like your Favorites, Pictures, and Documents - so they're the same on all your computers. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;strong&gt;Sharing files is easier than ever &lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Sharing with friends, co-workers, and family is easy when you add and update files in a shared library. Large files? Not a problem - FolderShare can sync files up to 2 GBs in size. And it works on both Mac and PC. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;strong&gt;Get to your files instantly when you're away from home &lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Install FolderShare on all your computers, and you can access all your files from any computer on the Internet. &lt;/li&gt;   &lt;/ul&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8135326" width="1" height="1"&gt;</description></item><item><title>Going to the Velocity Conference</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/10/going-to-the-velocity-conference.aspx</link><pubDate>Mon, 10 Mar 2008 05:38:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8121771</guid><dc:creator>joshzana</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8121771.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8121771</wfw:commentRss><description>&lt;p&gt;I'll be attending the Velocity Conference (&lt;a href="http://conferences.oreilly.com/velocity"&gt;Link&lt;/a&gt;) this summer.&amp;#160; The conference focuses on web performance and scalability, just like this blog :-) &lt;/p&gt;  &lt;p&gt;I'm particularly excited about the following speakers:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Steve Souders, Google&lt;/li&gt;    &lt;li&gt;Eric Schurman, Live Search&lt;/li&gt;    &lt;li&gt;Julien Lecomte, Yahoo!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Peter Sevcik of Netforecast will be there as well.&amp;#160; I went to a summit he lead a few months back, and he has lots of great industry experience to share.&lt;/p&gt;  &lt;p&gt;It will also be good to catch up with Aladdin Nassar of Hotmail, who I work with, but mostly on the phone.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/schedule/speakers"&gt;Get the full list of speakers here.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8121771" width="1" height="1"&gt;</description></item><item><title>Want to stop Global Warming?  Just follow 14 simple rules</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/10/want-to-stop-global-warming-just-follow-14-simple-rules.aspx</link><pubDate>Mon, 10 Mar 2008 05:33:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8121671</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8121671.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8121671</wfw:commentRss><description>&lt;p&gt;Steve Souders, author of the YSlow 14 rules for high performance websites did some back of the envelope calculations on the carbon footprint impact of not adhering to some of the rules.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.stevesouders.com/blog/2008/03/06/how-green-is-your-web-page/"&gt;High Performance Web Sites :: How green is your web page?&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It's kind of fun to think how much impact some little http headers can have on the world.&amp;#160; By my calculations, I've saved about four rainforests in the last year :-)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8121671" width="1" height="1"&gt;</description></item><item><title>Watch Your Cookie Sizes</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/06/watch-your-cookie-sizes.aspx</link><pubDate>Thu, 06 Mar 2008 09:23:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8067066</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8067066.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8067066</wfw:commentRss><description>&lt;p&gt;If you read my last post, you may have noticed that we recently moved all SkyDrive static content to a CDN.&amp;#160; The CDN we use is sourced at the shared.live.com subdomain, since it's maintained by part of the Windows Live organization.&lt;/p&gt;  &lt;p&gt;I was digging in to some of our performance numbers with HttpWatch today, and noticed that our request sizes are pretty big!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/WatchYourCookieSizes_138D8/clip_image001_2.png"&gt;&lt;img height="133" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/WatchYourCookieSizes_138D8/clip_image001_thumb.png" width="640" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see, the sent column for anything under *.live.com is &amp;gt; 1900 bytes.&amp;#160; In many cases, we only get back a tiny image, but the request is still huge.&lt;/p&gt;  &lt;p&gt;Using HttpWatch, I dug in to the headers, and found that the cookies were really large.&amp;#160; The problem is that all subdomains of live.com share a common set of cookies for login, instrumentation, etc.&lt;/p&gt;  &lt;p&gt;As a result of this problem, we are looking in to moving our static content to a different domain where we don't set any cookies.&lt;/p&gt;  &lt;p&gt;Here's a tip: check you request sizes and make sure you don't have the same problem!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8067066" width="1" height="1"&gt;</description></item><item><title>SkyDrive ships major performance improvements</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/05/skydrive-ships-major-performance-improvements.aspx</link><pubDate>Thu, 06 Mar 2008 02:17:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8058373</guid><dc:creator>joshzana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8058373.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8058373</wfw:commentRss><description>&lt;p&gt;One of the reasons I've been a bit out of commission lately is all the hard work I put in to the latest SkyDrive release.&amp;#160; Along with a few of the other developers, here are some of the things we accomplished in our &amp;quot;Milestone of Quality&amp;quot;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Fixed a few bugs with the way we handled ETAGs and caching headers &lt;/li&gt;    &lt;li&gt;Made a general way of including css sprites instead of images on the server. &lt;/li&gt;    &lt;li&gt;Added sprites for commonly accessed small images across the site.&amp;#160; This reduced some pages from loading 20 images to 5 images. &lt;/li&gt;    &lt;li&gt;Moved all static content to a CDN that supports GZip for both http and https.&amp;#160; This should really help our international users, since it brings our images, script, and styles closer to them. &lt;/li&gt;    &lt;li&gt;Enabled GZip compression on all dynamic html content over both http and https.&amp;#160; This was done with the built in IIS compression parameters, which I'll post about in a future post. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;With all of these changes, we managed to bring our page load times down pretty significantly.&amp;#160; I won't go into all the numbers here, but I will say that a typical user's SkyDrive home page went from 17 seconds to 8.&amp;#160; Not bad!&lt;/p&gt;  &lt;p&gt;For fun, here are some of the sprites you'll see when loading SkyDrive pages:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/SkyDriveshipsmajorperformanceimprovement_D716/commandbar_sprites_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="commandbar_sprites" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/SkyDriveshipsmajorperformanceimprovement_D716/commandbar_sprites_thumb.png" width="12" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/SkyDriveshipsmajorperformanceimprovement_D716/home_sprites_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="home_sprites" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/SkyDriveshipsmajorperformanceimprovement_D716/home_sprites_thumb.png" width="28" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/SkyDriveshipsmajorperformanceimprovement_D716/smallicons_sprites_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="smallicons_sprites" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/SkyDriveshipsmajorperformanceimprovement_D716/smallicons_sprites_thumb.png" width="22" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8058373" width="1" height="1"&gt;</description></item><item><title>IE8 Performance Improvements</title><link>http://blogs.msdn.com/joshzana/archive/2008/03/05/ie8-performance-improvements.aspx</link><pubDate>Thu, 06 Mar 2008 02:05:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8058079</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/8058079.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=8058079</wfw:commentRss><description>&lt;p&gt;[I know I haven't posted in a while, but I'm still here.&amp;#160; Let's give this blogging thing another try!)&lt;/p&gt;  &lt;p&gt;With all the news out of Mix today, one set of items I found interested was all the perf work that went in to IE8.&amp;#160; From a few of the whitepapers on the &lt;a href="http://code.msdn.microsoft.com/ie8whitepapers"&gt;IE msdn page&lt;/a&gt;:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Improved jscript performance - the graphs I saw indicate something like 5-10x improvements on some common benchmarks&lt;/li&gt;    &lt;li&gt;Improved DOM access performance - document.getElementById, document.getElementsByTagName, etc.&lt;/li&gt;    &lt;li&gt;Killing of the infamous IE memory leak issue with circular references&lt;/li&gt;    &lt;li&gt;Improvements to page load performance&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The last one there is particularly interesting, since I think IE is the first browser to make this the default:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;Taking advantage of six connections per host on broadband &lt;/b&gt;&lt;b&gt;Background &lt;/b&gt;An increasing number of users have broadband connections, so client-side bandwidth is not always a gating factor for performance. Typically, the time required to set up a connection and send a request dominates the time spent retrieving individual objects. By increasing the number of concurrent connections, Internet Explorer 8 allows sites to amortize that cost and churn through the list of pending objects more quickly, leading to an increase in user-perceived download time. Internet Explorer 8 consequently includes logic that detects whether the connection is narrowband or broadband and increases the number of connections per host to six if it‟s a high speed connection. Web authors may want to optimize delivery of content based on the number of connections available to their site. Therefore, Internet Explorer 8 also includes a scriptable property that exposes the connection limit per host in Internet Explorer 8.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8058079" width="1" height="1"&gt;</description></item><item><title>HttpWatch - My favorite web performance tool</title><link>http://blogs.msdn.com/joshzana/archive/2008/01/02/httpwatch-my-favorite-web-performance-tool.aspx</link><pubDate>Wed, 02 Jan 2008 20:57:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6957340</guid><dc:creator>joshzana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/joshzana/comments/6957340.aspx</comments><wfw:commentRss>http://blogs.msdn.com/joshzana/commentrss.aspx?PostID=6957340</wfw:commentRss><description>&lt;p&gt;My team has been using &lt;a href="http://www.httpwatch.com/"&gt;HttpWatch&lt;/a&gt; for a few months now to analyze the client side performance of &lt;a href="http://skydrive.live.com/"&gt;SkyDrive&lt;/a&gt;.&amp;#160; Previously, I had relied on some internal tools we use that are based on NetMon, as well as Fiddler and Firebug with the YSlow plugin.&amp;#160; While these tools were pretty good, here's why I think HttpWatch beats them all:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Great UI.&amp;#160; I haven't used any other tools that combine a detailed grid view with a timeline like this. In one glance, you can see where your time is spent, down to the individual http transfer &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/HttpWatchBestToolIveusedforWebPerformanc_ACB1/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="131" alt="image" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/HttpWatchBestToolIveusedforWebPerformanc_ACB1/image_thumb.png" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Supports tracing SSL page loads - about 2/3 of our pages on SkyDrive are secure https, and many tools aren't smart enough to decode the encrypted information.&amp;#160; HttpWatch works just as well with https as it does with http &lt;/li&gt;    &lt;li&gt;Automation support - our testers have integrated HttpWatch with our automation framework, so we automatically get full page load traces for any failures. &lt;/li&gt;    &lt;li&gt;Shows details for each transfer.&amp;#160; Breaks down each file transferred into DNS lookup, Connect, Send, Wait, and Receive times, and also lets you look at all the raw HTTP headers cookies, etc. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/HttpWatchBestToolIveusedforWebPerformanc_ACB1/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="77" alt="image" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/HttpWatchBestToolIveusedforWebPerformanc_ACB1/image_thumb_2.png" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/HttpWatchBestToolIveusedforWebPerformanc_ACB1/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="75" alt="image" src="http://blogs.msdn.com/blogfiles/joshzana/WindowsLiveWriter/HttpWatchBestToolIveusedforWebPerformanc_ACB1/image_thumb_1.png" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Great external app for opening a bunch of saved traces and doing comparisons. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In all, I love the little app, and have only a few feature requests&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Firefox support.&amp;#160; I use Firefox as my main browser, and it would be nice to have the same load time measurements from two different browsers &lt;/li&gt;    &lt;li&gt;A little more documentation on how all the magic actually works.&amp;#160; Is HttpWatch secretly setting up an HTTP proxy like Fiddler, which might change page load behavior?&amp;#160; Is it using a filter hooked in to IE's pipeline?&amp;#160; What do all the &amp;quot;blocked&amp;quot; regions in the timeline mean?&amp;#160; Is it looking at the Document Complete IE event to tell where to break up the different page loads?&amp;#160; I haven't been able to find any of this out with some basic searching online. &lt;/li&gt;    &lt;li&gt;WAN simulation - we use an internal tool to slow down our insanely fast gigE network to realistic broadband speeds for testing in order to get realistic end-user numbers.&amp;#160; This would be a great addition to HTTPWatch. &lt;/li&gt;    &lt;li&gt;YSlow-style grading.&amp;#160; I like how YSlow has an algorithm to rate your site.&amp;#160; Even though no algorithm will totally capture all elements of how fast a page is, it is nice to be able to roll up the performance of a site into one number that is independent of number of seconds taken. &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6957340" width="1" height="1"&gt;</description></item></channel></rss>