<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Al Priest's Blog</title>
	
	<link>http://www.socialanimal.com</link>
	<description>www.socialanimal.com</description>
	<lastBuildDate>Fri, 11 May 2012 14:10:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/alpriest" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="alpriest" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Visual Studio ‘Attach to w3wp process’ macro</title>
		<link>http://www.socialanimal.com/archives/2012/04/27/visual-studio-attach-to-w3wp-process-macro/</link>
		<comments>http://www.socialanimal.com/archives/2012/04/27/visual-studio-attach-to-w3wp-process-macro/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 09:37:55 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Code Sample]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=296</guid>
		<description><![CDATA[In Visual Studio, choose Tools &#124; Macro, Macros IDE, create a new module and drop this in. I bind it to Ctrl-Alt-1 for quick access.

    Sub AttachToW3WP()
        Dim attached As Boolean = False
        Dim proc As EnvDTE.Process

  [...]]]></description>
			<content:encoded><![CDATA[<p>In Visual Studio, choose Tools | Macro, Macros IDE, create a new module and drop this in. I bind it to Ctrl-Alt-1 for quick access.</p>
<pre class="brush: plain; title: ; notranslate">
    Sub AttachToW3WP()
        Dim attached As Boolean = False
        Dim proc As EnvDTE.Process

        For Each proc In DTE.Debugger.LocalProcesses
            If (Right(proc.Name, 8 ) = &quot;w3wp.exe&quot;) Then
                proc.Attach()
                attached = True
            End If
        Next

        If attached = False Then
            MsgBox(&quot;w3wp.exe is not running&quot;)
        End If

    End Sub
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2012/04/27/visual-studio-attach-to-w3wp-process-macro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting the AppFabric Cache MaxBufferSize</title>
		<link>http://www.socialanimal.com/archives/2012/03/15/setting-the-appfabric-cache-maxbuffersize/</link>
		<comments>http://www.socialanimal.com/archives/2012/03/15/setting-the-appfabric-cache-maxbuffersize/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 12:27:31 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=284</guid>
		<description><![CDATA[AppFabric Cache has a max buffer size of 8MB. If you&#8217;re using the SQL Provider, you need to export and re-import the Xml configuration file to modify this. Here&#8217;s a powershell script to do it for you, building on the blog post from Javi.
Save this to UpdateAppFabricCacheBufferSize.ps1

Param([int]$maxBufferSize)

Import-Module DistributedCacheAdministration, DistributedCacheConfiguration

Function UpdateBufferSizeInConfig ([string]$configFilename, [int]$maxBufferSize)
{
	$xml = New-Object XML
	$xml.Load($configFilename)
	$transportProperties [...]]]></description>
			<content:encoded><![CDATA[<p>AppFabric Cache has a max buffer size of 8MB. If you&#8217;re using the SQL Provider, you need to export and re-import the Xml configuration file to modify this. Here&#8217;s a powershell script to do it for you, building on the <a href="http://javiercrespoalvez.com/2011/06/appfabric-cache-setting-maxbuffersize.html">blog post from Javi</a>.</p>
<p>Save this to UpdateAppFabricCacheBufferSize.ps1</p>
<pre class="brush: powershell; title: ; notranslate">
Param([int]$maxBufferSize)

Import-Module DistributedCacheAdministration, DistributedCacheConfiguration

Function UpdateBufferSizeInConfig ([string]$configFilename, [int]$maxBufferSize)
{
	$xml = New-Object XML
	$xml.Load($configFilename)
	$transportProperties = $xml.configuration.dataCache.advancedProperties.transportProperties
	if ($transportProperties -eq $NULL) {
	  $transportProperties = $xml.CreateElement(&quot;transportProperties&quot;)
	}
	$transportProperties.SetAttribute(&quot;maxBufferSize&quot;, &quot;$maxBufferSize&quot;)
	$xml.configuration.dataCache.advancedProperties.appendChild($transportProperties)
	$xml.Save($configFilename)
}

$tempConfigLocation = &quot;c:\config.xml&quot;

Use-CacheCluster
Export-CacheClusterConfig -File $tempConfigLocation

UpdateBufferSizeInConfig $tempConfigLocation $maxBufferSize

Stop-CacheCluster
Import-CacheClusterConfig -File $tempConfigLocation -Force
Start-CacheCluster
</pre>
<p>To change your buffer size to 15MB:</p>
<pre class="brush: powershell; title: ; notranslate">
powershell ./UpdateAppFabricCacheBufferSize.ps1 15000000
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2012/03/15/setting-the-appfabric-cache-maxbuffersize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips for using Disqus comments</title>
		<link>http://www.socialanimal.com/archives/2012/01/03/tips-for-using-disqus-comments/</link>
		<comments>http://www.socialanimal.com/archives/2012/01/03/tips-for-using-disqus-comments/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 17:37:28 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=276</guid>
		<description><![CDATA[Two tips I gave recently to a colleague just setting out with Disqus.
Q. How do I make Disqus comments visible to Google?
A. Use the Javascript code snippet Disqus provide as this fetches the comments asynchronously. On your server implement a background task to fetch and cache recent comments from Disqus using the Disqus API (you [...]]]></description>
			<content:encoded><![CDATA[<p>Two tips I gave recently to a colleague just setting out with Disqus.</p>
<p>Q. How do I make Disqus comments visible to Google?<br />
A. Use the Javascript code snippet Disqus provide as this fetches the comments asynchronously. On your server implement a background task to fetch and cache recent comments from Disqus using the Disqus API (you could fetch them during page render, but your page load speed will be directly coupled to the response time from Disqus). When the page is rendered embed the cached comments between &lt;noscript&gt; tags. This allows you to use HTML page caching services like Akamai/Varnish whilst still having moderately fresh comments in the page for Google (and non-JS users). Best to only include a few comments to keep page size down and then provide pagination links for the search engines. (This was inspired by <a href="http://www.seroundtable.com/disqus-seo-14093.html">http://www.seroundtable.com/disqus-seo-14093.html</a>).</p>
<p>If you are using an <a href="http://en.wikipedia.org/wiki/Edge_Side_Includes">ESI</a> caching solution you might be tempted to implement an ESI include to fetch the comments as they are dynamic content. I&#8217;d recommend not doing this as you&#8217;ll be fetching the comments (from your cache, or Disqus) on every page load which is very unnecessary just for the occasional visit by Google.</p>
<p>Q. What should I use for the disqus_identifier?<br />
A. I recommend using an internal identifier for the piece of content to which the comment is attached prefixed with an environment indicator, e.g. disqus_identifier = &#8216;live_ 21EC2020-3AEA-1069-A2DD-08002B30309D&#8217;. I&#8217;d strongly suggest that you <strong>do not leave it blank and do not use the page URL</strong>. If you leave it blank Disqus will automatically use the URL which may not be permanent, thus when the article title changes (which is regularly included in a URL), the comments will be lost. Prefixing the environment to the identifier mitigates any clash with comments made in your testing environment when you move your CMS data around.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2012/01/03/tips-for-using-disqus-comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FTP format for accessing through a proxy</title>
		<link>http://www.socialanimal.com/archives/2011/10/28/ftp-format-for-accessing-through-a-proxy/</link>
		<comments>http://www.socialanimal.com/archives/2011/10/28/ftp-format-for-accessing-through-a-proxy/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 12:14:49 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=274</guid>
		<description><![CDATA[I need this with alarming frequency, so here it is. Accessing a remote FTP site through a proxy.
ftp://remoteuser%40remotehost:remotepassword@proxyhost/folder
]]></description>
			<content:encoded><![CDATA[<p>I need this with alarming frequency, so here it is. Accessing a remote FTP site through a proxy.</p>
<p>ftp://remoteuser%40remotehost:remotepassword@proxyhost/folder</p>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2011/10/28/ftp-format-for-accessing-through-a-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preserve Javascript console log between page loads on Chrome</title>
		<link>http://www.socialanimal.com/archives/2011/09/22/preserve-javascript-console-log-between-page-loads-on-chrome/</link>
		<comments>http://www.socialanimal.com/archives/2011/09/22/preserve-javascript-console-log-between-page-loads-on-chrome/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 09:30:29 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=269</guid>
		<description><![CDATA[
Open Google Chrome developer tools.
Click the cog in the bottom right of the window

Choose &#8220;Preserve log upon navigation&#8221;


This was tested with Google Chrome 14.0.835.163 m on Windows.
]]></description>
			<content:encoded><![CDATA[<ol>
<li>Open Google Chrome developer tools.
<li>Click the cog in the bottom right of the window<br />
<a href="http://www.socialanimal.com/wp-content/uploads/2011/09/google-chrome-cog.png"><img src="http://www.socialanimal.com/wp-content/uploads/2011/09/google-chrome-cog.png" alt="" title="google-chrome-cog" width="209" height="117" class="alignnone size-full wp-image-270" /></a></p>
<li>Choose &#8220;Preserve log upon navigation&#8221;<br />
<a href="http://www.socialanimal.com/wp-content/uploads/2011/09/google-chrome-settings.png"><img src="http://www.socialanimal.com/wp-content/uploads/2011/09/google-chrome-settings.png" alt="" title="google-chrome-settings" width="490" height="513" class="alignnone size-full wp-image-271" /></a>
</ol>
<p>This was tested with Google Chrome 14.0.835.163 m on Windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2011/09/22/preserve-javascript-console-log-between-page-loads-on-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fiddler tips for HTTP Debugging</title>
		<link>http://www.socialanimal.com/archives/2011/08/23/fiddler-tips-for-http-debugging/</link>
		<comments>http://www.socialanimal.com/archives/2011/08/23/fiddler-tips-for-http-debugging/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 22:35:12 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Code Sample]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=257</guid>
		<description><![CDATA[Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect all HTTP(S) traffic, set breakpoints, and &#8220;fiddle&#8221; with incoming or outgoing data.
Download Fiddler from http://www.fiddler2.com/, it&#8217;s freeware! It runs on Windows, but can debug traffic originating in any operating system (by making that [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect all HTTP(S) traffic, set breakpoints, and &#8220;fiddle&#8221; with incoming or outgoing data.</p></blockquote>
<p>Download Fiddler from <a href="http://www.fiddler2.com/">http://www.fiddler2.com/</a>, it&#8217;s freeware! It runs on Windows, but can debug traffic originating in any operating system (by making that OS point to Fiddler on Windows as a proxy). Before reading this you should read <a href="http://msdn.microsoft.com/en-us/library/bb250446(v=VS.85).aspx">these</a> <a href="http://msdn.microsoft.com/en-us/library/bb250442(VS.85).aspx">articles</a> which provide an overview of Fiddler.</p>
<h2>Stubbing network responses</h2>
<p>During development with a third party it&#8217;s often handy to insulate yourself from any downtime/network problems that might affect your testing. Quite often this involves writing a piece of code to simulate network responses and pointing your app to that. Instead of doing this, turn to Fiddler.</p>
<h4>Record and replay</h4>
<p>Configure your application to use Fiddler as a proxy (<a href="http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx">see this for .NET apps, use localhost:8888</a>), then hit your third party endpoint with your application. Fiddler will capture the traffic in the session list. Now, click on the Auto Responder tab and enable Automatic Responses. Drag each row from the session list into the Auto Responder list. Now re-run your app, and instead of connecting to the remote machine, Fiddler will auto-respond for you. (If you are using SSL, read <a href="http://www.fiddler2.com/fiddler/help/httpsdecryption.asp">how to decrypt SSL traffic</a> and also in .NET you&#8217;ll need to suppress the invalid man-in-the-middle cert that Fiddler uses by returning true in the <a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx"> ServerCertificateValidationCallback</a></p>
<h4>From an interface spec</h4>
<p>If you have an interface spec but no endpoint to hit, create a file matching the content you expect to be returned, define a match for the URI, and use your sample file as the response content. See <a href="http://www.fiddler2.com/fiddler2/help/AutoResponder.asp">AutoResponder reference</a> for more information.</p>
<p>You can use regex pattern matching for the URI, and you can either respond with a local file, or captured session. With a regex to match the entire host you can make all calls to your network resource respond with a HTTP 403 Denied and ensure your app behaves as expected.</p>
<h2>Custom rules to show Akamai cached pages</h2>
<p>I&#8217;ve used Akamai edge caching on a number of sites over the past few years to improve site performance, and it&#8217;s always useful to see which pages are being served from cache, and which aren&#8217;t. The easiest way I&#8217;ve found to do this is to add a custom rule to Fiddler to highlight requests for me. From Fiddler, choose Rules, Customize Rules. In the Javascript that opens, enter the following code:</p>
<p>With the other field definitions&#8230;</p>
<pre class="brush: plain; title: ; notranslate">
	public static RulesOption(&quot;Highlight Akamai cache Hits&quot;)
	var m_HighlightAkamaiHits: boolean = false;
</pre>
<p>In the &#8220;OnBeforeRequest&#8221; method&#8230;</p>
<pre class="brush: plain; title: ; notranslate">
	if (m_HighlightAkamaiHits) {
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-get-cache-key&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-cache-on&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-cache-remote-on&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-get-true-cache-key&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-check-cacheable&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-get-extracted-values&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-get-nonces&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-get-ssl-client-session-id&quot;);
		oSession.oRequest.headers.Add(&quot;Pragma&quot;, &quot;akamai-x-serial-no&quot;);
	}
</pre>
<p>In the &#8220;OnBeforeResponse&#8221; method&#8230;</p>
<pre class="brush: plain; title: ; notranslate">
	if (m_HighlightAkamaiHits) {
		if (oSession.oResponse.headers.ExistsAndContains(&quot;X-Cache&quot;,&quot;TCP_MEM_HIT&quot;)) {
			oSession[&quot;ui-customcolumn&quot;] = &quot;HIT&quot;;
		} else if (oSession.oResponse.headers.ExistsAndContains(&quot;X-Cache&quot;,&quot;TCP_IMS_HIT&quot;)) {
			oSession[&quot;ui-customcolumn&quot;] = &quot;HIT&quot;;
		}
	}
</pre>
<p>Now close the Javascript file, and go back to Fiddler. If you made any mistakes in the Javascript, Fiddler will tell you immediately. From the Rules menu you now have a new option &#8211; &#8220;Highlight Akamai cache Hits&#8221;. Enable this, and visit http://www.facebook.com/ in your browser. In Fiddler, you should see the word &#8220;HIT&#8221; for several of the requests in the &#8220;custom&#8221; column. You can rearrange the column order to move the custom column if you like.</p>
<h2>Add request time</h2>
<p>This is a simple new rule but surprisingly handy.</p>
<p>With the other field definitions&#8230;</p>
<pre class="brush: plain; title: ; notranslate">
	public static RulesOption(&quot;Show response time&quot;)
	var m_ShowResponseTime: boolean = false;
</pre>
<p>Add to either &#8220;OnBeforeRequest&#8221; or &#8220;OnBeforeResponse&#8221; method&#8230;</p>
<pre class="brush: plain; title: ; notranslate">
	if (m_ShowResponseTime) {
		oSession[&quot;ui-customcolumn&quot;] = DateTime.Now.ToString();
	}
</pre>
<p><strong>Remember when using these rules that when you save the Javascript file, the Rules menu will be reset so any previously enabled rules will need re-enabling.</strong></p>
<p>Fiddler also has a nice set of C# APIs which allow you to embed the fiddler engine directly into your test suite, which makes for a really nice set of integration tests (using the AutoResponder) with only a few lines of code. I&#8217;ll go into this in a future post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2011/08/23/fiddler-tips-for-http-debugging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Be careful making Instant, “Instant”</title>
		<link>http://www.socialanimal.com/archives/2011/01/14/be-careful-making-instant-instant/</link>
		<comments>http://www.socialanimal.com/archives/2011/01/14/be-careful-making-instant-instant/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 10:12:44 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=242</guid>
		<description><![CDATA[UPDATED: 7/Feb/2011 with comments from Simon Smith.
I&#8217;ve seen a few examples of people trying to mimic the Google Instant search with their own solution. Most of these have just made them &#8220;instant&#8221; searches by changing
$(&#34;#searchButton&#34;).click(function(){
  ...perform actual search...
});
to
$(&#34;#searchButton&#34;).keyup(function(){
  ...perform actual search...
});
My gripe is that Instant doesn&#8217;t need to be, and in fact shouldn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>UPDATED: 7/Feb/2011 with comments from Simon Smith.</p>
<p>I&#8217;ve seen a few examples of people trying to mimic the Google Instant search with their own solution. Most of these have just made them &#8220;instant&#8221; searches by changing</p>
<pre class="brush: jscript; title: ; notranslate">$(&quot;#searchButton&quot;).click(function(){
  ...perform actual search...
});</pre>
<p>to</p>
<pre class="brush: jscript; title: ; notranslate">$(&quot;#searchButton&quot;).keyup(function(){
  ...perform actual search...
});</pre>
<p>My gripe is that Instant doesn&#8217;t need to be, and in fact shouldn&#8217;t always be, Instant. There are 3 reasons for this</p>
<p>1) A lot of users type looking at their keyboard so Instant just needs to mean &#8220;ready when a user looks up from their keyboard to see the result&#8221;<br />
2) Browser and network performance can be significantly harmed if you&#8217;re issuing complex javascript/ajax/network requests on every single keypress.</p>
<p>The solution? Well, my solution is very simple.</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).onready(function(){
   var _timerId = 0;

   $(&quot;searchButton&quot;).keyup(function(){
      window.clearTimeout(_timerId);
      _timerId = window.setTimeout(function() {
         ...perform actual search...
      }, 170);
   }).keydown(function(){
      window.clearTimeout(_timerId);
   });
});
</pre>
<p>In this example I set a timer which fires 170ms after the LAST keypress. It&#8217;s pretty imperceivable that there&#8217;s a delay at all, but it dramatically improves CPU/bandwidth performance of these &#8220;Instant&#8221; searches, and it still appears to be pretty Instant.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2011/01/14/be-careful-making-instant-instant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Akamai COMBINED log format for Analog</title>
		<link>http://www.socialanimal.com/archives/2010/12/20/akamai-combined-log-format-for-analog/</link>
		<comments>http://www.socialanimal.com/archives/2010/12/20/akamai-combined-log-format-for-analog/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 13:01:29 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=238</guid>
		<description><![CDATA[Just been parsing logfiles from our site generated by Akamai with analog. We use COMBINED log format on the Akamai help page, but the default COMBINED log format from analog wasn&#8217;t able to parse. Based on info from the analog log format help page the following worked.
LOGFORMAT (%s - - [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" [...]]]></description>
			<content:encoded><![CDATA[<p>Just been parsing logfiles from our site generated by <a href="http://www.akamai.com">Akamai</a> with <a href="http://www.analog.cx/">analog</a>. We use COMBINED log format on the Akamai help page, but the default COMBINED log format from analog wasn&#8217;t able to parse. Based on info from the <a href="http://www.analog.cx/docs/logfmt.html">analog log format help page</a> the following worked.</p>
<p><code>LOGFORMAT (%s - - [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" %c %b "%j" "%B" "%j")</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2010/12/20/akamai-combined-log-format-for-analog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do we need a break from the old routine?</title>
		<link>http://www.socialanimal.com/archives/2010/07/23/do-we-need-a-break-from-the-old-routine/</link>
		<comments>http://www.socialanimal.com/archives/2010/07/23/do-we-need-a-break-from-the-old-routine/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 15:56:50 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=217</guid>
		<description><![CDATA[Recently I was asked to investigate a site which wasn&#8217;t performing as well as expected. The initial reaction was to look at the code &#8211; perhaps our NHibernate mappings were eagerly fetching too much data, perhaps we&#8217;re not caching enough, etc.
Then I stopped and remembered the database. I found that the table structure and indexes [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I was asked to investigate a site which wasn&#8217;t performing as well as expected. The initial reaction was to look at the code &#8211; perhaps our NHibernate mappings were eagerly fetching too much data, perhaps we&#8217;re not caching enough, etc.</p>
<p>Then I stopped and remembered the database. I found that the table structure and indexes were sub-optimal and after a quick restructure the performance was boosted 400%. This got me wondering why my initial reaction was to dive into the code rather than consider any other options.</p>
<p>One of the Agile principles is Inspect and Adapt. To provide a regular team cadence this usually takes the form of a retrospective every couple of weeks. These sessions discuss the actions which came out from the previous retrospective and the previous couple of weeks work. The team establishes a few important areas of concern and these are discussed in more detail to establish a course of resolution.</p>
<p>Extending this line of thought I ended up wondering why do we do what we do each day? Is it the path of least resistance? Force of habit? Loyalty?</p>
<p>What might a Life Retrospective uncover?</p>
<ul>
<li>Would we discover a new route to work which we&#8217;d previously discounted for being too long? A new carriage on the train which doesn&#8217;t get as busy?</li>
<li>A new variety of pasta sauce even tastier than our regular? A supermarket own brand for half the price but the same taste?</li>
<li>Might we find that every day we live with the coffee table getting in the way when we walk into the lounge, but we never try a new layout?</li>
<li>How much extra happiness could we gleen from running life retrospectives? Who would run it? How frequently would be useful?</li>
</ul>
<p>Lots of questions and not many answers I&#8217;m afraid. Maybe I need a retrospective of this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2010/07/23/do-we-need-a-break-from-the-old-routine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formatting a filesize as GB, MB, KB</title>
		<link>http://www.socialanimal.com/archives/2010/06/02/formatting-a-filesize-as-gb-mb-kb/</link>
		<comments>http://www.socialanimal.com/archives/2010/06/02/formatting-a-filesize-as-gb-mb-kb/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 09:01:15 +0000</pubDate>
		<dc:creator>alpriest</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socialanimal.com/?p=222</guid>
		<description><![CDATA[public static class FileSizeExtensions
	{
		[DllImport(&#34;Shlwapi.dll&#34;, CharSet = CharSet.Auto)]
		public static extern long StrFormatByteSize(long fileSize,
		                                            [...]]]></description>
			<content:encoded><![CDATA[<pre class="brush: csharp; title: ; notranslate">public static class FileSizeExtensions
	{
		[DllImport(&quot;Shlwapi.dll&quot;, CharSet = CharSet.Auto)]
		public static extern long StrFormatByteSize(long fileSize,
		                                            [MarshalAs(UnmanagedType.LPTStr)] StringBuilder buffer, int bufferSize);

		public static string DisplayAsByteSize(this long filesize)
		{
			StringBuilder sbBuffer = new StringBuilder(20);
			StrFormatByteSize(filesize, sbBuffer, 20);
			return sbBuffer.ToString();
		}
	}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.socialanimal.com/archives/2010/06/02/formatting-a-filesize-as-gb-mb-kb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

