<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GetSnappy.com</title>
	<atom:link href="http://www.getsnappy.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.getsnappy.com/blog</link>
	<description>The Fastest Site on The Block Blog</description>
	<lastBuildDate>Thu, 13 Jan 2011 00:29:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Preloading JavaScript, CSS, Images, and other Content</title>
		<link>http://www.getsnappy.com/blog/web-optimization-page-load-time/preloading-javascript-css-images-and-other-content/</link>
		<comments>http://www.getsnappy.com/blog/web-optimization-page-load-time/preloading-javascript-css-images-and-other-content/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 08:14:42 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Website Optimization]]></category>

		<guid isPermaLink="false">http://www.getsnappy.com/blog/?p=72</guid>
		<description><![CDATA[Preloading images is a web optimization technique that has been around for years. Predominately this has been used to load images that aren&#8217;t visible when a web page is initially loaded, but become visible after some sort of visitor interaction, such as hovering over a menu. Preloading the right content under the right circumstances, can&#8230;]]></description>
				<content:encoded><![CDATA[<p>Preloading images is a web optimization technique that has been around for years.  Predominately this has been used to load images that aren&#8217;t visible when a web page is initially loaded, but become visible after some sort of visitor interaction, such as hovering over a menu.</p>
<p>Preloading the right content under the right circumstances, can have a positive impact on your web sites user experience.  In this article I&#8217;ll provide examples where preloading content will have tangible benefits, and link you to resources that make preloading simple.</p>
<h3>Example Usage #1: Predicting Visitor Navigation</h3>
<p>When it is possible to &#8220;predict&#8221;, the next web page a visitor will most likely navigate to next, you can asynchronously load and cache that page and it&#8217;s images behind the scenes.  When the visitor follows a link to this page, there is zero wait time.  On the <a href="http://www.nytimes.com/">NYTimes Home Page</a> there are thumbnails and excerpts for it&#8217;s most current articles.  It places these articles strategically based on their importance.  They could also preload these articles in order based on there respective importance.  This was when users wants to &#8220;read more&#8221; than the excerpt, the full article is already loaded and cached, and there is absolutely no waiting.</p>
<h3>Example Usage #2: Preloading Secure Content</h3>
<p>
Let&#8217;s analyze a web visit to <a href="http://www.hotels.com">Hotels.com</a>.  A potential customer is interested in taking a vacation to Hawaii.  They search </a href="http://www.hotels.com/">Hoteles.com</a>, filtering through pages of hotels,  reading reviews, until they finally find the hotel that is in the right place, is the right price, and has availability.  They click the checkout button which now takes that visitor to a secure checkout page.  This is a very expensive and slow process because of:
</p>
<ul>
<li>Overhead from the initial SSL handshake</li>
<li>All Images, JavaScript and CSS must be re-fetched from a secure location</li>
<li>All content is delivered encrypted adding additional bandwidth overhead</li>
</ul>
<p>
What do you think this visitor is thinking about while they are waiting for the web page to load?  If they are anything like me, they might think &#8220;Can I get a better deal&#8221;, and then jump back to Google and see if their intuition was right.  Worse yet, if this was about to be an impulse buy, they might just close their browser and go to bed.  The bottom line is if <a href="http://www.hotels.com">Hotels.com</a> preloaded all their secure content, they would increase their conversion rate.
</p>
<h3>JavaScript Library</h3>
<p>Coming Very Soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getsnappy.com/blog/web-optimization-page-load-time/preloading-javascript-css-images-and-other-content/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snap-O-Meter &#8211; Web Performance Monitoring and Reporting released to the world</title>
		<link>http://www.getsnappy.com/blog/web-optimization-page-load-time/snap-o-meter-web-performance-monitoring-and-reporting-released-to-the-world/</link>
		<comments>http://www.getsnappy.com/blog/web-optimization-page-load-time/snap-o-meter-web-performance-monitoring-and-reporting-released-to-the-world/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 04:16:30 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Website Optimization]]></category>

		<guid isPermaLink="false">http://www.getsnappy.com/blog/?p=78</guid>
		<description><![CDATA[Starting January 1 2011, I&#8217;m releasing Snap-O-Meter under a free SaaS license. It is a great resource initially developed for use in a corporate environment back in 2009. This SaaS reporting solution is designed for everyone from small business to large corporations, providing tons insight into the web applications performance. A must for anyone caring&#8230;]]></description>
				<content:encoded><![CDATA[<p>Starting January 1 2011, I&#8217;m releasing Snap-O-Meter under a free SaaS license.  It is a great resource initially developed for use in a corporate environment back in 2009.  This SaaS reporting solution is designed for everyone from small business to large corporations, providing tons insight into the web applications performance.  A must for anyone caring about the speed of their web site.  I hope you all find it as useful as I do, and eagerly await comments and criticism alike.  Enjoy!  </p>
<p><a href="http://www.getsnappy.com/sign-up.html">Snap-O-Meter Home</a></p>
<h3>Key Features</h3>
<ul>
<li>Install <strong>SaaS</strong> solution in less than 15 minutes </li>
<li>Monitor your visitors from their perspective, providing unmatched performance accuracy </li>
<li>Monitor your entire website, ensuring optimum performance of geographic regions, web pages, and servers </li>
<li>Break any report into 25% sections based on speed to visualize your visitors&#8217; speed diversity. </li>
<li>Create custom visitor segments and run a/b tests with Ad-hoc reports </li>
<li>Use out-of-the-box reports to seperate performance geographic regions, web pages, and servers<br />
Snap-o-Meter is completely free&#8230; no strings attached</li>
</ul>
<h3>Main Benefits</h3>
<ul>
<li><strong>Web Optimization Without the Guess Work</strong> &#8211; Run A/B tests when performing web page or server tuning to ensure the success of your optimizations</li>
<li><strong>Detect Web Server Issues</strong> &#8211; Detect &#8220;bad&#8221; Web Servers, that negatively impact your business</li>
<li><strong>Global Delivery Analysis</strong> &#8211; Analyze global delivery statistics taken from your actual traffic. Measure your CDN&#8217;s performance</li>
<li><strong>Monitor Every Web Page </strong>- Monitor the creation and delivery of every page on your website</li>
</ul>
<h3>WordPress Plugin</h3>
<p>I&#8217;ve developed a <a href="http://www.getsnappy.com/blog/snap-o-meter-wordpress-plug-in/">WordPress Plugin</a>, that makes using Snap-O-Meter with your WordPress site simple.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getsnappy.com/blog/web-optimization-page-load-time/snap-o-meter-web-performance-monitoring-and-reporting-released-to-the-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Let Ads, Widgets, and other External JavaScript Slow You Down</title>
		<link>http://www.getsnappy.com/blog/web-optimization-page-load-time/dont-let-ads-widgets-and-other-external-javascript-slow-you-down/</link>
		<comments>http://www.getsnappy.com/blog/web-optimization-page-load-time/dont-let-ads-widgets-and-other-external-javascript-slow-you-down/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 18:47:45 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Website Optimization]]></category>

		<guid isPermaLink="false">http://www.getsnappy.com/blog/?p=19</guid>
		<description><![CDATA[Ever heard the expression fight fire with fire.  Well, for this web optimization technique, we will be fighting JavaScript with JavaScript.  This technique we call postload swapping allows you to load these JavaScript files inside a hidden DIV at the very bottom of your web page, then use JavaScript to swap out the the contents created by document.write calls inside the hidden DIV with contents of a placeholder element where the JavaScript was originally located.]]></description>
				<content:encoded><![CDATA[<h4>Why are JavaScript calls a problem</h4>
<p>As the web evolves and more and more sites move towards being &#8220;web 2.0&#8243; applications, JavaScript is used more and in greater volume.  This is a major problem because most browsers including IE and Firefox block loading and rendering elements below script tags, until the script has been downloaded and executed.  <a href="http://www.stevesounders.com/">Steve Sounders</a> wrote a <a href="http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/">killer blog about preventing blocking of JavaScript calls</a>, but he didn&#8217;t address the situation where scripts call document.write() to inject HTML immediately below the script tag.  This <a href="http://www.getsnappy.com/blog/javascript-test/">test page</a> shows that using the Script DOM Element technique causes document.write calls from within the external script to output html at undesirable places.  This blog introduces a new technique called &#8220;postload dummy replacement&#8221;, that specifically addresses loading scripts that rely on document.write().</p>
<h4>Who uses External JavaScript</h4>
<p>You can pick up external JavaScript from many different sources.  It is commonly used by ad agencies, widgets, and third party embeddable objects.  For instance, a VeriSign logo that let&#8217;s people know your site is secure and a Skype button I recently picked up to allow visitors to see when I&#8217;m online and skype me, both use externally loaded JavaScript that rely on document.write().  Ad Agencies can even nest external JavaScript within external JavaScript leaving you at the mercy of multiple third party providers.</p>
</p>
<h4>Fighting JavaScript with JavaScript</h4>
<p>Ever heard the expression fight fire with fire.  Well, for this web optimization technique, we will be fighting JavaScript with JavaScript.  This technique I call &#8220;postload dummy replacement&#8221; allows you to load these JavaScript files inside a hidden DIV at the very bottom of your web page, then use JavaScript to swap out the the contents created by document.write calls inside the hidden DIV with contents of a placeholder element where the JavaScript was originally located.</p>
<h4>GetSnappy.com Ad Delay</h4>
<p>Ad Delay, is a JavaScript module I&#8217;ve written that implements &#8220;postload dummy replacement&#8221;.  I&#8217;ll introduce you to Ad Delay, by walking through an example.  I&#8217;ll use the Skype button mentioned above in my example.  We&#8217;ll start by creating a placeholder DIV and set it&#8217;s id to &#8220;skypePlaceholder&#8221;. </p>
<pre><tt><b><font color="#0000FF">&lt;div&gt;&lt;div</font></b> <font color="#009900">id</font><font color="#990000">=</font><font color="#FF0000">"skypeUsPlaceholder"</font><b><font color="#0000FF">&gt;&lt;/div&gt;&lt;/div&gt;</font></b>
</tt></pre>
<p>While &#8220;skypeUsPlaceholder&#8221; is empty, you are free to implement placeholders however you please, and there contents will be replaced by the call to adDelay.swapOut() mentioned in the last step.  You might want to set a height and width for the placeholder, to prevent the page from &#8220;jumping&#8221; when the swapOut occurs, and you could even include an Ajax loading icon, such as the ones available from <a href="http://www.ajaxload.info/">http://www.ajaxload.info/</a>.</p>
<p>Now let&#8217;s jump down to the bottom of our web page, immediately before the closing &lt;/body&gt; tag.  Here we will include the JavaScript tag within a &#8220;hidden&#8221; dummy DIV.  We will assign this DIV the id &#8220;skypeDummy&#8221;.  When the script executes document.write() calls fill the &#8220;hidden&#8221; DIV with the intended content.</p>
<pre><tt><b><font color="#0000FF">&lt;div</font></b> <font color="#009900">id</font><font color="#990000">=</font><font color="#FF0000">"skypeUsDummy"</font> <font color="#009900">style</font><font color="#990000">=</font><font color="#FF0000">"display: none;"</font><b><font color="#0000FF">&gt;</font></b>
  <i><font color="#9A1900">&lt;!--</font></i>
<i><font color="#9A1900">  Externally loaded JavaScript code</font></i>
<i><font color="#9A1900">  --&gt;</font></i>
  <b><font color="#0000FF">&lt;script</font></b> <font color="#009900">type</font><font color="#990000">=</font><font color="#FF0000">"text/javascript"</font>
          <font color="#009900">src</font><font color="#990000">=</font><font color="#FF0000">"http://download.skype.com/share/skypebuttons/js/skypeCheck.js"</font><b><font color="#0000FF">&gt;</font></b>
  <b><font color="#0000FF">&lt;/script&gt;</font></b>
  <b><font color="#0000FF">&lt;a</font></b> <font color="#009900">href</font><font color="#990000">=</font><font color="#FF0000">"skype:GetSnappy.com?chat"</font><b><font color="#0000FF">&gt;</font></b>
  <b><font color="#0000FF">&lt;img</font></b> <font color="#009900">src</font><font color="#990000">=</font><font color="#FF0000">"http://download.skype.com/share/skypebuttons/buttons/chat_green_white_164x52.png"</font>
       <font color="#009900">style</font><font color="#990000">=</font><font color="#FF0000">"border: none;"</font> <font color="#009900">width</font><font color="#990000">=</font><font color="#FF0000">"164"</font> <font color="#009900">height</font><font color="#990000">=</font><font color="#FF0000">"52"</font> <font color="#009900">alt</font><font color="#990000">=</font><font color="#FF0000">"Chat with me"</font> <b><font color="#0000FF">/&gt;</font></b>
  <b><font color="#0000FF">&lt;/a&gt;</font></b>
<b><font color="#0000FF">&lt;/div&gt;</font></b>
</tt></pre>
<p>Next we&#8217;ll unveil the source for Ad Delay which should be included at the very bottom of your web page.  Ad Delay is a tiny JavaScript module containing one function, adDelay.swapOut.</p>
<pre><tt><i><font color="#9A1900">/*</font></i>
<i><font color="#9A1900"> * Name: Ad Delay v0.1 </font></i>
<i><font color="#9A1900"> * License:  GNUv2 (www.gnu.org/licenses/gpl-2.0.txt)</font></i>
<i><font color="#9A1900"> * Auther: Brian Gardner </font></i><u><font color="#0000FF">&lt;getsnappy@ymail.com&gt;</font></u>
<i><font color="#9A1900"> * Usage:</font></i>
<i><font color="#9A1900"> *</font></i>
<i><font color="#9A1900"> * adDelay.swapOut(arg1, arg2)</font></i>
<i><font color="#9A1900"> *     arg1 - the id of the placeholder div (in our example, skypePlaceholder)</font></i>
<i><font color="#9A1900"> *     arg2 - the id of the dummy div (in our example, skypeDummy) </font></i>
<i><font color="#9A1900"> *</font></i>
<i><font color="#9A1900"> */</font></i>
<b><font color="#0000FF">var</font></b> adDelay <font color="#990000">=</font> <font color="#FF0000">{</font>
  swapOut<font color="#990000">:</font> <b><font color="#0000FF">function</font></b><font color="#990000">(</font>placeholderId<font color="#990000">,</font>dummyId<font color="#990000">)</font> <font color="#FF0000">{</font>
    <b><font color="#0000FF">var</font></b> dummy <font color="#990000">=</font> document<font color="#990000">.</font><b><font color="#000000">getElementById</font></b><font color="#990000">(</font>dummyId<font color="#990000">);</font>
    <b><font color="#0000FF">var</font></b> placeholder <font color="#990000">=</font> document<font color="#990000">.</font><b><font color="#000000">getElementById</font></b><font color="#990000">(</font>placeholderId<font color="#990000">);</font>
    <b><font color="#0000FF">if</font></b> <font color="#990000">(!</font>dummy<font color="#990000">)</font> <font color="#FF0000">{</font>
      <b><font color="#000000">alert</font></b><font color="#990000">(</font><font color="#FF0000">"element with id "</font> <font color="#990000">+</font> dummyId <font color="#990000">+</font> <font color="#FF0000">" does not exist"</font><font color="#990000">);</font>
    <font color="#FF0000">}</font>
    <b><font color="#0000FF">if</font></b> <font color="#990000">(!</font>placeholder<font color="#990000">)</font> <font color="#FF0000">{</font>
      <b><font color="#000000">alert</font></b><font color="#990000">(</font><font color="#FF0000">"element with id "</font> <font color="#990000">+</font> placeholderId <font color="#990000">+</font> <font color="#FF0000">" does not exist"</font><font color="#990000">);</font>
    <font color="#FF0000">}</font>

    <i><font color="#9A1900">/* loop through dummy nodes removing any JS nodes, preventing double execution */</font></i>
    <b><font color="#0000FF">for</font></b> <font color="#990000">(</font>index <font color="#990000">=</font> dummy<font color="#990000">.</font>childNodes<font color="#990000">.</font>length <font color="#990000">-</font> <font color="#993399">1</font><font color="#990000">;</font> index <font color="#990000">&gt;=</font> <font color="#993399">0</font><font color="#990000">;</font> index<font color="#990000">--)</font>
    <font color="#FF0000">{</font>
      <b><font color="#0000FF">var</font></b> element <font color="#990000">=</font> dummy<font color="#990000">.</font>childNodes<font color="#990000">[</font>index<font color="#990000">];</font>
      <b><font color="#0000FF">if</font></b> <font color="#990000">((</font>element<font color="#990000">.</font>nodeName <font color="#990000">==</font> <font color="#FF0000">'SCRIPT'</font><font color="#990000">)</font> <font color="#990000">||</font> <font color="#990000">(</font>element<font color="#990000">.</font>nodeName <font color="#990000">==</font> <font color="#FF0000">'NOSCRIPT'</font><font color="#990000">))</font>
              dummy<font color="#990000">.</font><b><font color="#000000">removeChild</font></b><font color="#990000">(</font>element<font color="#990000">);</font>
    <font color="#FF0000">}</font>

    dummy<font color="#990000">.</font>parentNode<font color="#990000">.</font><b><font color="#000000">removeChild</font></b><font color="#990000">(</font>dummy<font color="#990000">);</font>
    placeholder<font color="#990000">.</font>parentNode<font color="#990000">.</font><b><font color="#000000">replaceChild</font></b><font color="#990000">(</font>dummy<font color="#990000">,</font> placeholder<font color="#990000">);</font>
    dummy<font color="#990000">.</font>style<font color="#990000">.</font>display <font color="#990000">=</font> <font color="#FF0000">'block'</font><font color="#990000">;</font>
  <font color="#FF0000">}</font>
<font color="#FF0000">}</font><font color="#990000">;</font>
</tt></pre>
<p></tt>
<p>
After we've included the source to Ad Delay, we call adDelay.swapOut to perform the swapOut.  Your page now loads faster thanks to Ad Delay : = ).
</p>
<pre><tt><b><font color="#0000FF">&lt;script</font></b> <font color="#009900">type</font><font color="#990000">=</font><font color="#FF0000">"text/javascript"</font><b><font color="#0000FF">&gt;</font></b>
adDelay<font color="#990000">.</font><b><font color="#000000">swapOut</font></b><font color="#990000">(</font><font color="#FF0000">'skypeUsPlaceholder'</font><font color="#990000">,</font><font color="#FF0000">'skypeUsDummy'</font><font color="#990000">);</font>
<b><font color="#0000FF">&lt;/script&gt;</font></b>
</tt></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.getsnappy.com/blog/web-optimization-page-load-time/dont-let-ads-widgets-and-other-external-javascript-slow-you-down/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Sharing files with other users in Mac OS X 10.4+</title>
		<link>http://www.getsnappy.com/blog/web-optimization-page-load-time/sharing-files-with-other-users-in-mac-os-x-10-4/</link>
		<comments>http://www.getsnappy.com/blog/web-optimization-page-load-time/sharing-files-with-other-users-in-mac-os-x-10-4/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 05:59:00 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Website Optimization]]></category>

		<guid isPermaLink="false">http://blogb.getsnappy.com/?p=5</guid>
		<description><![CDATA[I&#8217;ve been wanting to share files between me and my wife&#8217;s account on the Mac, but have not been able to do so. I&#8217;ve finally found the answer using ACL&#8217;s. It&#8217;s very easy to do, just follow these steps for every account you want to make accessible by others. Open up a Terminal (Finder -&#62;&#8230;]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been wanting to share files between me and my wife&#8217;s account on the Mac, but have not been able to do so.  I&#8217;ve finally found the answer using ACL&#8217;s.  It&#8217;s very easy to do, just follow these steps for every account you want to make accessible by others.</p>
<ol>
<li> Open up a Terminal (Finder -&gt; Applications -&gt; Utilities -&gt; Terminal)</li>
<li>Execute the following command from the prompt, notice that the leading # is not part of the command, and that  &lt;username&gt; tag should be replaced by the &#8220;short name&#8221; of the users whose files you want to share.
<pre><tt>find /Users/&lt;username&gt;/ -exec sudo chmod +a# 0 'staff allow add_file,add_subdirectory,list,search,readattr,delete,delete_child, writeattr,writeextattr,file_inherit,directory_inherit' '{}' ';'
</pre>
<p></tt></li>
<li>All accounts on the machine should belong to the staff group and have full access to this users files.</li>
</ol>
<p>You can modify the command to fit your needs, for example lets say you only want to share Pictures change "/Users/&lt;username&gt;/" to "/Users/&lt;username&gt;/Pictures/"</p>
<p>If you only want admins to be able to have permissions change <code>+a# 0 'staff allow</code> to <code>+a# 0 'admin allow</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getsnappy.com/blog/web-optimization-page-load-time/sharing-files-with-other-users-in-mac-os-x-10-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
