<?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>More Than Scratch The Surface</title>
	
	<link>http://www.scratch99.com</link>
	<description>A Journey In Web Development</description>
	<lastBuildDate>Mon, 30 Aug 2010 23:52:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MoreThanScratchTheSurface" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="morethanscratchthesurface" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">MoreThanScratchTheSurface</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>WordPress Caching Plugins For Shared Hosting: W3 Total Cache vs WP Super Cache vs Hyper Cache</title>
		<link>http://www.scratch99.com/2010/08/wordpress-caching-plugins-for-shared-hosting/</link>
		<comments>http://www.scratch99.com/2010/08/wordpress-caching-plugins-for-shared-hosting/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 12:56:53 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[caching plugins]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[Wordpress Plugins]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=287</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2010/08/wordpress-caching-plugins-for-shared-hosting/.I recently was faced with a decision: which WordPress caching plugin to use on my shared hosting account. The choice was between WP Super Cache, W3 Total Cache and Hyper Cache. This article documents my admittedly limited testing of these plugins and the decision I [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2010/08/wordpress-caching-plugins-for-shared-hosting/">http://www.scratch99.com/2010/08/wordpress-caching-plugins-for-shared-hosting/</a>.<br /><p>I recently was faced with a decision: <strong>which WordPress caching plugin to use on my shared hosting account</strong>. The choice was between WP Super Cache, W3 Total Cache and Hyper Cache. This article documents my admittedly limited testing of these plugins and the decision I made as a result.</p>
<h2>The Disclaimer</h2>
<p>I&#8217;m very aware (and you should be to) that:</p>
<ul>
<li>I&#8217;m not an expert on caching </li>
<li>My method of testing is far from scientific </li>
<li>The website used in my test isn&#8217;t well optimised in it&#8217;s own right. </li>
<li>Results could be very different for other websites </li>
<li>Results could be very different if I spent the time to tweak the settings of each plugin </li>
<li>Future versions of the caching plugins may improve their performance. Please note their version number below and do your own testing if there are newer versions.</li>
</ul>
<p>Nonetheless, I present this in case it&#8217;s useful for someone. At the minimum, I hope it will encourage people to do their own testing in their environment rather than just believe everything they read.</p>
<h2>The Requirements</h2>
<p>It was important to me to use a WordPress caching solution that worked well with my server environment: A <strong>shared hosting server</strong> with <a href="http://www.hostgator.com/" target="_blank">Hostgator</a>.</p>
<p>Unfortunately, I&#8217;m not on a dedicated server at this point, so benefits such as a <a href="http://markjaquith.wordpress.com/2010/08/06/apc-object-cache-backend-for-wordpress/" target="_blank">persistent object cache</a> are not available to me. If I was on a dedicated server, the results of my testing may have been very different &#8211; but I&#8217;m not and I need a solution that fits my current circumstances.</p>
<p>It&#8217;s also worth pointing out that I&#8217;m <strong>not</strong> trying to protect the server from the Digg effect or from high traffic per se. My sites don&#8217;t draw that much traffic. I&#8217;m just after a caching solution that will speed up the delivery of my web pages.</p>
<h2>The Candidates</h2>
<p>There are many WordPress caching plugins available, but I can&#8217;t test them all. I settled on these three plugins for the following reasons:</p>
<h3>WP Super Cache (0.9.9.3)</h3>
<p><a href="http://wordpress.org/extend/plugins/wp-super-cache/" target="_blank">WP Super Cache</a> is the current market leader, with 12,182 downloads over the last week (at the time of writing). It&#8217;s been the standard for several years now, has been widely written about and has a very good reputation. I&#8217;ve personally been using WP Super Cache for a year or so now and it&#8217;s served me well, so it was a no brainer to consider continuing with this plugin.</p>
<p>WP Super Cache is written by <a href="http://ocaoimh.ie/" target="_blank">Donncha O Caoimh</a>, an Automattic employee and a core contributor to the WordPress project. Not only is he someone who clearly knows WordPress inside out, he&#8217;s also someone I respect. </p>
<h3>W3 Total Cache (0.9.1.1)</h3>
<p><a href="http://wordpress.org/extend/plugins/w3-total-cache/" target="_blank">W3 Total Cache</a> is a contender for the crown. Not a week goes by without me hearing someone influential extolling the virtues of this plugin. It&#8217;s worth noting that it has probably the most comprehensive list of features of any WordPress caching plugin. With 7,242 downloads over the last week, its still behind WP Super Cache in terms of usage, but it&#8217;s on the rise and clearly a worthy candidate.</p>
<p>W3 TC is written by <a href="http://www.w3-edge.com/" target="_blank">Frederick Townes</a>, the CTO at the high traffic Mashable website which runs on WordPress. Frederick clearly knows a lot about optimising WordPress for high traffic sites. I&#8217;ve also been impressed with the job he&#8217;s done as co-host of the <a href="http://wp-community.org/" target="_blank">WordPress Community Podcast</a> with <a href="http://yoast.com/" target="_blank">Joost de Valk</a>. </p>
<h3>Hyper Cache (2.7.3)</h3>
<p><a href="http://wordpress.org/extend/plugins/hyper-cache/" target="_blank">Hyper Cache</a> is a relatively new plugin, with a smaller market share (2,517 downloads over the last week). It&#8217;s not as well known as either of the other two plugins and neither is it&#8217;s author, <a href="http://www.satollo.net/" target="_blank">Stefano Lissa</a>. All I know about Stefano is from his About page: he&#8217;s a full time developer and analyst.</p>
<p>Hyper Cache was first recommended to me by RT Cunningham from <a href="http://www.untwistedvortex.com/" target="_blank">Living in the Philippines</a>. RT&#8217;s never steered me wrong, so it would have been worth considering simply from that. The fact that it was written specifically for use on shared hosting was also appealing, as was it&#8217;s number one position in a <a href="http://www.tutorial9.net/web-tutorials/wordpress-caching-whats-the-best-caching-plugin/" target="_blank">recent benchmarking test</a>.</p>
<div class="csstextbox1">Note, RT has just pointed out to me that he now recommends the Quick Cache plugin as the <a href="http://www.untwistedvortex.com/2010/04/24/ultimate-cache-solution-wordpress/" target="_blank">ultimate caching solution for WordPress</a>. I guess I&#8217;ll have to try that out too &#8211; although the testing for this post has been done and the decision made for the moment.</div>
<p>In fact, rather than just considering Hyper Cache as a candidate, I&#8217;d decided to just give it a try (without testing the others). However, a Twitter conversation led to me comparing the plugins. A rather lengthy back story section outlines how this came about. You can <a href="#testing_methodology">skip it</a> if you&#8217;re just interested in the test.</p>
<h2>The Back Story</h2>
<p>Having decided to try Hyper Cache, I tweeted the following:</p>
<blockquote>
<p>Trying out Hyper Cache instead of WP Super Cache. I was happy enough with WP Super Cache, but heard a lot of good things about Hyper Cache. (<a href="http://twitter.com/StephenCronin/statuses/20621674457" target="_blank">source</a>)</p>
</blockquote>
<p><a href="http://www.strictlyonlinebiz.com/blog/" target="_blank">sonlinebiz</a> replied with:</p>
<blockquote>
<p>@StephenCronin Tried them both but they don&#8217;t compare to W3 Total Cache 0.9. Simply amazing and FAST http://strictlyonlinebiz.com/2h (<a href="http://twitter.com/sonlinebiz/statuses/20622128127" target="_blank">source</a>)</p>
</blockquote>
<p>The short link in his tweet goes to his excellent post on <a href="http://www.strictlyonlinebiz.com/blog/speed-up-wordpress-with-w3-total-cache/1231/" target="_blank">speeding up your blog with W3 Total Cache</a>. In response to him I sent a couple of tweets:</p>
<blockquote>
<p>@sonlinebiz W3 I&#8217;ve heard that Total Cache is great on dedicated hosting &#8211; but I&#8217;m on shared hosting, which Hyper Cache is geared towards. (<a href="http://twitter.com/StephenCronin/statuses/20623003614" target="_blank">source</a>)</p>
</blockquote>
<p>and</p>
<blockquote>
<p>@sonlinebiz I based my decision to try Hyper Cache on this article, which shows Hypercache beating all comers: <a href="http://bit.ly/b8v2AB">http://bit.ly/b8v2AB</a>&#160; (<a href="http://twitter.com/StephenCronin/statuses/20623060201" target="_blank">source</a>)</p>
</blockquote>
<p>That bit.ly link goes to the benchmarking test I mentioned earlier. </p>
<p><a href="http://planetozh.com/blog/" target="_blank">Ozh</a> had also <a href="http://twitter.com/ozh/statuses/20621813128" target="_blank">replied</a> and Donncha, the creator of WP Super Cache picked up on the conversation and chipped in (to Ozh, not me) with:</p>
<blockquote>
<p>@ozh the benchmark results for supercache in that post look dodgy to me. Configured correctly, it&#8217;s Apache mod_rewrite serving cache files.. (<a href="http://twitter.com/donncha/status/20623886124" target="_blank">source</a>)</p>
</blockquote>
<p>I wouldn&#8217;t mind knowing more of Donncha&#8217;s views on this, because measuring the effectiveness of caching plugins is something I struggled with &#8211; but more on that below. I replied with a couple of tweets to Donncha (not worth including here) explaining that I had no particular problem with Super Cache.</p>
<p>Then Ferederick, the maker of W3 Total Cache replied with:</p>
<blockquote>
<p>@StephenCronin on the contrary, W3TC has options/benefits for all hosting scenarios (<a href="http://twitter.com/w3edge/statuses/20627427397" target="_blank">source</a>)</p>
</blockquote>
<p>It was great to get a response from Frederick, someone I really respect. Of course, I know W3 Total Cache is going to have benefits even in shared hosting situation &#8211; it&#8217;s just that I&#8217;d heard that its real power was on dedicated servers. I don&#8217;t know how accurate that is, but I responded with:</p>
<blockquote>
<p>@w3edge Hi Frederick, I know it has benefits in all scenarios, I&#8217;ve just heard that you need the persistent object cache to really benefit (<a href="http://twitter.com/StephenCronin/statuses/20628266727" target="_blank">source</a>)</p>
</blockquote>
<p>And I thought I better point out that I do realise that if W3 Total Cache can&#8217;t take advantage of a persistent object cache, then none of the other caching plugins can either (rather obviously), which also limits their effectiveness:</p>
<blockquote>
<p>@w3edge I understand that that&#8217;s the same for all caching plugins.. (<a href="http://twitter.com/StephenCronin/statuses/20628298682" target="_blank">source</a>)</p>
</blockquote>
<p>Frederick came back with several tweets:</p>
<blockquote>
<p>@StephenCronin it doesn&#8217;t really matter what you heard. <img src='http://www.scratch99.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  every theme/plugin/server combination varies. (<a href="http://twitter.com/w3edge/statuses/20628320728" target="_blank">source</a>)</p>
</blockquote>
<blockquote>
<p>@StephenCronin i wouldn&#8217;t have wasted a year working on the plugin if it wasn&#8217;t going to help everyone. (<a href="http://twitter.com/w3edge/statuses/20628354032" target="_blank">source</a>)</p>
</blockquote>
<blockquote>
<p>@StephenCronin no it&#8217;s not, there are more than 70 plugins out there, but there is no other single plugin that has a suite of tools. (<a href="http://twitter.com/w3edge/statuses/20628521394" target="_blank">source</a>)</p>
</blockquote>
<p>This is great: getting direct feedback from the maker of a very popular plugin. However, I already knew that W3 Total Cache is a very good product but I wasn&#8217;t going to change my mind, so I tweeted as much:</p>
<blockquote>
<p>@w3edge No need to sell me &#8211; though I am going to try Hyper Cache dammit <img src='http://www.scratch99.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8211; I know W3 TC is great. Love the podcast by the way. (<a href="http://twitter.com/StephenCronin/statuses/20629422253" target="_blank">source</a>)</p>
</blockquote>
<p>Frederick came back with a final tweet:</p>
<blockquote>
<p>@StephenCronin don&#8217;t care if you use it or not. just the facts. (<a href="http://twitter.com/w3edge/statuses/20629488016" target="_blank">source</a> [now deleted])</p>
</blockquote>
<p>This tweet has since been deleted. I only have a record of it because of a vanity feed in Google Reader (lesson: you can never really delete a tweet). </p>
<p>No matter: I have no problem with the tweet or the fact it&#8217;s deleted, but I&#8217;ve included it here because it&#8217;s important in what happened next, as was my final tweet on the topic (which was trying to lighten the mood just in case people had taken things the wrong way):</p>
<blockquote>
<p>So I think I need to put WP Super Cache on one of my blogs, W3 Total Cache on another and Hyper Cache on the last one. <img src='http://www.scratch99.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  #wp #caching (<a href="http://twitter.com/StephenCronin/statuses/20629498353" target="_blank">source</a>)</p>
</blockquote>
<p>Upon reflecting on some key points of the conversation, I actually did change my mind. As Frederick had said: </p>
<blockquote>
<p>it doesn&#8217;t really matter what you heard. <img src='http://www.scratch99.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  every theme/plugin/server combination varies</p>
</blockquote>
<p>That&#8217;s very true. I was basing my plans on what I&#8217;d read when there was indeed likely to be significant variations depending on the environment. The &quot;just the facts&quot; part of his last tweet also got me thinking: <strong>what were the facts</strong> in this case? </p>
<p>I decided I should follow my last tweet and run all three of the candidates to compare them (although on as test rather than on separate sites).</p>
<h2 id="testing_methodology">The Testing Methodology</h2>
<p>But first, how can we test the effectiveness of these caching plugins?</p>
<p>I often measure performance using the <a href="http://wordpress.org/extend/plugins/debug-queries/" target="_blank">Debug Queries</a> plugin, but that&#8217;s not going to run with a caching plugin installed (well it runs the first time and then it&#8217;s results are cached along with the rest of the page).</p>
<p>The <a href="http://www.tutorial9.net/web-tutorials/wordpress-caching-whats-the-best-caching-plugin/" target="_blank">benchmarking test</a> mentioned above used Apache Bench, but that wasn&#8217;t appropriate for my test. I want to measure the speed of individual page loads, but Apache Bench is more about the effect of lots of traffic on server loads (to my admittedly limited understanding).</p>
<p>My thoughts therefore turned to the <a href="https://addons.mozilla.org/en-US/firefox/addon/1743/" target="_blank">Lori (Life of Request info)</a> Firefox extension, a very handy tool that measures how long a page takes to load, including:</p>
<ul>
<li>Time to first byte (TTFB) received from the server </li>
<li>The overall time to load the page </li>
<li>The size of the page </li>
<li>The number of requests </li>
</ul>
<p>The fastest <strong>overall time to load</strong> is the end result I&#8217;m after, but it&#8217;s not an effective measurement of a caching plugin because it includes the time to load images and remote scripts and widgets etc, which are outside the plugin&#8217;s control. </p>
<p>I *think* <strong>Time to first byte</strong> is the best indicator of the effectiveness of a caching plugin. If the server is busy running PHP and talking to MySQL, then TTFB will be high. If a page is cached, then it should be served up almost immediately. Of course there may be other things happening on the server which could impact on the results.</p>
<p>I figured that given the lack of an iron clad testing methodology, I&#8217;d do the following:</p>
<ul>
<li>Run the test without a caching plugin to establish a baseline to compare against. </li>
<li>Test each plugin twice, once with basic settings, once with more advanced settings (such as compression turned on). </li>
<li>Within each test, measure results against both the home page and an individual blog post. </li>
<li>Within each test, measure results both with images and scripts cached and with the browser cache clear. </li>
<li>For each individual page load, measure both TTFB and the overall time to load. </li>
<li>Run each page load 10 times and ignore the 2 fastest and 2 slowest results to limit anomalies. </li>
<li>Monitor the server CPU usage via CPanel to ensure the server is bogged down doing something else. </li>
</ul>
<p>I&#8217;m sure this isn&#8217;t the most scientific way to measure a caching plugin, but it&#8217;s the best I could come up with and it should at least give an indication of which plugin a particular website loads fastest with. </p>
<h2>The Site Being Tested</h2>
<p>I decided to use my <a href="http://www.jobsinchina.com/" target="_blank">Jobs in China</a> website for the test. For the single post test, I used the <a href="http://www.jobsinchina.com/blog/china-is-still-the-best-place-to-find-a-job/" target="_blank">China Is Still The Best Place To Find A Job</a> post.</p>
<div class="csstextbox1">Note: This site is not well optimised in it&#8217;s own right. I have plans to give it an overhaul at some point (minifying and combining scripts, setting up a subdomain as a CDN, etc), but haven&#8217;t had time. I was planning to use the caching plugin to cover up the cracks until I had time to do it. Ironically, I could have optimised the site with time I&#8217;ve spent writing this post!</div>
<p>The fact that the site isn&#8217;t well optimised probably makes it a good test site, as there will be many blogs out there in a similar situation: not particularly well optimised, on shared hosting, etc. </p>
<h2>The Results</h2>
<p>There are too many test results to present each page load in this post. I&#8217;ve therefore included just the averages for each test run. The full results are available on <a href="https://spreadsheets.google.com/ccc?key=0AtFTnQd4xikcdHBXanVjX3BmeFJ4NXM2Xzl3TjBFRXc&#038;hl=en_GB">Google Docs</a>.</p>
<p>To fit the summary results in, I&#8217;ve separated the results into two tables: one for Time To First Byte (TTFB) and one for the page being fully loaded. First, here are the average times for the first byte to be returned by the server:</p>
<table class="sjc" summary="Table outlining the TTFB test results comparing the WP Super Cache, W3 Total Cache and Hyper Cache WordPress plugins">
<thead>
<tr>
<th>Caching Plugin</th>
<th>Home<br />
        <br />TTFB </p>
<p>(Clear)</th>
<th>Home<br />
        <br />TTFB </p>
<p>(Active)</th>
<th>Post<br />
        <br />TTFB </p>
<p>(Clear)</th>
<th>Post<br />
        <br />TTFB </p>
<p>(Active)</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>No Caching Plugin</td>
<td>1.27</td>
<td>1.20</td>
<td>1.56</td>
<td>1.58</td>
</tr>
<tr>
<td>WP Super Cache</td>
<td>0.82</td>
<td>0.84</td>
<td>1.06</td>
<td>1.01</td>
</tr>
<tr class="odd">
<td>WP Super Cache (with Compression)</td>
<td>0.81</td>
<td>0.83</td>
<td>0.95</td>
<td>1.01</td>
</tr>
<tr>
<td>W3 Total Cache (page caching only)</td>
<td>1.51</td>
<td>1.36</td>
<td>1.70</td>
<td>1.70</td>
</tr>
<tr class="odd">
<td>W3 Total Cache (everything except CDN)</td>
<td>0.72</td>
<td>0.49</td>
<td>0.93</td>
<td>0.46</td>
</tr>
<tr>
<td>Hyper Cache (Compression off, min disk on)</td>
<td>0.85</td>
<td>0.60</td>
<td>0.99</td>
<td>0.58</td>
</tr>
<tr class="odd">
<td>Hyper Cache (Compression on, min disk off)</td>
<td>0.81</td>
<td>0.59</td>
<td>0.87</td>
<td>0.58</td>
</tr>
</tbody>
</table>
<p>Next, here are the average times for the entire page to be loaded:</p>
<table class="sjc" summary="Table outlining the full page load test results comparing the WP Super Cache, W3 Total Cache and Hyper Cache WordPress plugins">
<thead>
<tr>
<th>Caching Plugin</th>
<th>Home<br />
        <br />Loaded </p>
<p>(Clear)</th>
<th>Home<br />
        <br />Loaded </p>
<p>(Active)</th>
<th>Post<br />
        <br />Loaded </p>
<p>(Clear)</th>
<th>Post<br />
        <br />Loaded </p>
<p>(Active)</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>No Caching Plugin</td>
<td>7.04</td>
<td>5.18</td>
<td>7.88</td>
<td>5.94</td>
</tr>
<tr>
<td>WP Super Cache</td>
<td>7.17</td>
<td>5.37</td>
<td>7.36</td>
<td>4.96</td>
</tr>
<tr class="odd">
<td>WP Super Cache (with Compression)</td>
<td>6.90</td>
<td>3.92</td>
<td>6.37</td>
<td>4.84</td>
</tr>
<tr>
<td>W3 Total Cache (page caching only)</td>
<td>7.60</td>
<td>5.96</td>
<td>8.05</td>
<td>5.68</td>
</tr>
<tr class="odd">
<td>W3 Total Cache (everything except CDN)</td>
<td>6.83</td>
<td>4.54</td>
<td>7.13</td>
<td>4.41</td>
</tr>
<tr>
<td>Hyper Cache (Compression off, min disk on)</td>
<td>6.71</td>
<td>3.99</td>
<td>6.63</td>
<td>3.85</td>
</tr>
<tr class="odd">
<td>Hyper Cache (Compression on, min disk off)</td>
<td>6.24</td>
<td>3.04</td>
<td>6.96</td>
<td>4.05</td>
</tr>
</tbody>
</table>
<h2>Analysis</h2>
<p>There are a couple of very obvious trends across the board that we should get out of the way first:</p>
<ul>
<li>The post takes longer to load than the home page. </li>
<li>Turning on compression and other advanced options (where available) improved performance across the board. </li>
</ul>
<p>Those out of the way, here are just a few useful patterns I can see:</p>
<ul>
<li><strong>W3 Total Cache actually slowed things down when it only had page caching turned on</strong>, although it was one of the better performers when the more advanced options were turned on. </li>
<li><strong>W3 Total Cache (with advanced options)</strong> had the fasted TTFB, which implies that it <strong>is the best at serving pages up efficiently</strong> and minimising server resources. </li>
<li><strong>Hyper Cache (with advanced options) resulted in pages being full loaded in the quickest time</strong>, even though it wasn&#8217;t quite as efficient at at the server end as W3TC. I&#8217;m not sure why &#8211; perhaps it makes better use of browser caching? However it managed it, Hyper Cache was the fasted across the board for full page loads. </li>
<li>WP Super Cache was just a little way behind the other two plugins across the board. </li>
<li>WP Super Cache (with compression turned off) significantly improved TTFB, but had mixed results with the full page load: The home page was slower than not having a caching plugin, although the single post was faster. </li>
</ul>
<p>As I said above, I&#8217;m no caching expert. If anyone reading this can see any other patterns in the results, please let me know in the comments.</p>
<h2>The Winner</h2>
<p>It depends on what you want! </p>
<p>If you&#8217;re after <strong>the best optimisation on the server side</strong> (ie less time to server up pages, so that it can deal with more requests), then based on the test results, <strong>W3 Total Cache</strong> is the best choice for you.</p>
<p>If you&#8217;re after <strong>the fastest loading pages on the client side</strong> (ie pages load faster for the user), then <strong>Hyper Cache</strong> is a better alternative. </p>
<h2>Conclusion</h2>
<p>The test wasn&#8217;t particularly scientific, but it was good enough for me to work out which caching plugin was the right one for me. For the Jobs in China site, I ended up using Hyper Cache. </p>
<div class="csstextbox1">I&#8217;m running W3 Total Cache on this site, because of a recent attack by a bot resulted in HostGator disabling this site. As part of their steps to reactivate the site, they requested I install W3 Total Cache. Because the results are so close and because I wanted the site back asap, I just installed it as requested. So now I just need to add WP Super Cache on a third site&#8230;</div>
<p>The biggest take away may be that, as Frederick pointed out, every theme/plugin/server combination varies &#8211; so what works best for my particular circumstances may not be best for yours. It&#8217;s not hard to run a quick test to compare. <strong>Do your own testing before making a choice.</strong></p>
<p><em>Have an opinion on this test or the plugins mentioned? Please leave a comment below!</em></p>
<script type="text/javascript">Nifty("div.csstextbox1","bgcolor-#FFFFFF");</script><img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/YnF1mCO47dw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2010/08/wordpress-caching-plugins-for-shared-hosting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Practical Theme Support For WordPress 3.0 Menus</title>
		<link>http://www.scratch99.com/2010/06/practical-theme-support-for-wordpress-3-0-menus/</link>
		<comments>http://www.scratch99.com/2010/06/practical-theme-support-for-wordpress-3-0-menus/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 06:50:51 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[menus]]></category>
		<category><![CDATA[theme development]]></category>
		<category><![CDATA[WordPress 3.0]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=277</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2010/06/practical-theme-support-for-wordpress-3-0-menus/.I&#8217;ve read quite a few articles on theme support for the new Menu functionality introduced in WordPress 3.0. However, these have all been theoretical rather than practical. I wanted a real life, working example, including support for users on older versions of WordPress. In the [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2010/06/practical-theme-support-for-wordpress-3-0-menus/">http://www.scratch99.com/2010/06/practical-theme-support-for-wordpress-3-0-menus/</a>.<br /><p>I&#8217;ve read quite a few articles on theme support for the new Menu functionality introduced in WordPress 3.0. However, <strong>these have all been theoretical rather than practical</strong>. I wanted a real life, working example, including support for users on older versions of WordPress. In the end, I wrote it myself.</p>
<div class="csstextbox1"><strong>WordPress Theme developers, listen up! When updating your themes to work with the new menu functionality, you need to make sure that it still works with older versions of WordPress.</strong></div>
</p>
<h2>Scope</h2>
<p>I&#8217;m not going to delve into all the different options you can use when adding support for menus. There are enough articles out there that cover this in depth: I highly recommend you read Justin Tadlock&#8217;s excellent <a href="http://justintadlock.com/archives/2010/06/01/goodbye-headaches-hello-menus">Goodbye, headaches. Hello, menus!</a>. </p>
<p>Instead, I&#8217;m going to focus on the things missing from most articles, such as adding support for users on older versions and including support for static pages in the fallback menu. <strong>If you write themes that are used by other people, you need to include these</strong>.</p>
<h2>Functions.php</h2>
<p>First, this is the code to add to the functions.php file. I&#8217;ll explain it below.</p>
<pre class="brush: php;">
// add menu support and fallback menu if menu doesn't exist
add_action('init', 'sjc_register_menu');
function sjc_register_menu() {
	if (function_exists('register_nav_menu')) {
		register_nav_menu('sjc-main-menu', __('Main Menu'));
	}
}
function sjc_default_menu() {
	echo '&lt;ul&gt;';
	if ('page' != get_option('show_on_front')) {
		echo '&lt;li&gt;&lt;a href=&quot;'. get_option('home') . '/&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;';
	}
	wp_list_pages('title_li=');
	echo '&lt;/ul&gt;';
}
</pre>
<h3>Check If register_nav_menu Exists Before Calling It</h3>
<p>On line 2, we add an action to call a function (from line 3 to 7). The purpose of this function is to register the menu via the <strong>register_nav_menu</strong> function. </p>
<p>Most tutorials out there focus on how to use register_nav_menu (line 5). Fair enough, it&#8217;s new and we&#8217;re all interested in how to use it. However, I want you to notice line 4: </p>
<p class="codebox"><code>if (function_exists(&#039;register_nav_menu&#039;))<br />
</code></p>
<p>Surprisingly, most tutorials leave this out. No problem if your theme will only ever run on WordPress 3.0. However, if you have users on an older version of WordPress, <strong>your theme will crash and burn if you leave this out</strong>. Visitors will be greeted with the following error:</p>
<p class="codebox"><code>Fatal error: Call to undefined function register_nav_menu() &#46;..</code></p>
<p>Not cool.</p>
<h3>The Fall Back Menu Catering For Static Pages</h3>
<p>Lines 8 to 15 contain a function that provides a fall back menu that is used if the user has not added a menu via the new interface. The code for the fall back menu is pretty standard stuff. I&#8217;m sure someone will point out that I could use <a href="http://codex.wordpress.org/Function_Reference/wp_nav_menu">wp_nav_menu</a>, but we&#8217;ll call the fall back menu directly for older versions of WordPress (see below) and wp_nav_menu only exists in 3.0 and above.</p>
<p>It&#8217;s worth noting the IF statement on line 10, wrapping the Home link. This says to only create the Home link IF the site is NOT using a static home page. If it is, then the Home link will not be created. Why? Without this, <strong>the Home page option will appear twice</strong> in the menu (if users have a static home page). </p>
<p>There are <a href="http://www.wplover.com/1210/bulletproof-wordpress-pages-based-navigation">other ways of dealing with this</a>, but my way seems simplest to me.</p>
<div class="csstextbox1">Note: To get the static home page to appear first, the user can adjust the Page Order of the static page in the Edit screen. The easiest way to ensure that it appears before other pages, apart from editing the Page Order of all the other pages, is to simply set it to -1.</div>
<h2>Header.php</h2>
<p>Moving on to header.php, we add the following code where we want the menu to appear:</p>
<pre class="brush: php;">
&lt;div id=&quot;nav&quot;&gt;
	&lt;?php
	if (function_exists('wp_nav_menu')) {
		wp_nav_menu(array('theme_location' =&gt; 'sjc-main-menu', 'fallback_cb' =&gt; 'sjc_default_menu'));
	}
	else {
		sjc_default_menu();
	}
	?&gt;
&lt;/div&gt;
</pre>
<h3>Call The Fallback Menu Function Directly For Pre WordPress 3.0</h3>
<p>The menu is called via the wp_nav_menu function (see line 4 above). This function is what the other articles all focus on. Once again, fair enough, this is a new function that can give us access to the cool new menus. But note the IF statement in line 3:</p>
<p class="codebox"><code>if (function_exists(&#039;wp_nav_menu&#039;))</code></p>
<p>Leave this out and anyone using your theme on versions of WordPress older than 3.0 is going to be <strong>serving the following up to their visitors</strong>:</p>
<p class="codebox"><code>Fatal error: Call to undefined function wp_nav_menu()</code></p>
<p>Checking that the wp_nav_menu exists is obviously essential, unless you are certain that your theme will only ever run on WordPress 3.0 or above. </p>
<p>But what do we do if wp_nav_menu doesn&#8217;t exist (ie the user is on an older version of WordPress)? Should we serve up the original code that we originally used to create the menu pre WordPress 3.0? </p>
<p>Well, we&#8217;ve already moved our old code into the fall back menu function. There&#8217;s nothing to stop us from calling the fall back menu function directly  (line 7) assuming it doesn&#8217;t use wp_nav_menu. Simple! And good reuse of code.</p>
<div class="csstextbox1">As you can see the menu is wrapped in a div element with an id of &#8220;nav&#8221;. This is entirely optional, depending on how you choose to implement your CSS. An unordered list will be created by the PHP code. You may want to add a class directly to the ul element, instead of including the div. You can do this using the menu_class parameter in line 4 above.</div>
<h2>Final Thoughts</h2>
<p>WordPress Theme developers, what have you done to ensure menu support for your users on older versions of WordPress? Is your approach different from mine? Can you see a better way of doing this? </p>
<p>I&#8217;d love to hear from you in the comments.</p>
<script type="text/javascript">Nifty("div.csstextbox1","bgcolor-#FFFFFF");</script><img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/ARQDqh29u-Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2010/06/practical-theme-support-for-wordpress-3-0-menus/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>New Script: markItUp! For Greasemonkey</title>
		<link>http://www.scratch99.com/2010/02/new-script-markitup-for-greasemonkey/</link>
		<comments>http://www.scratch99.com/2010/02/new-script-markitup-for-greasemonkey/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 14:51:25 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[My WordPress Plugins]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=253</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2010/02/new-script-markitup-for-greasemonkey/.The other day a great comment was left on this site. When I went to answer, I realized that I wanted to be able to select part of what the commentator said and automatically turn it into a quote in my comment. Copy and paste [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2010/02/new-script-markitup-for-greasemonkey/">http://www.scratch99.com/2010/02/new-script-markitup-for-greasemonkey/</a>.<br /><p>The other day a great comment was left on this site. When I went to answer, I realized that I wanted to be able to select part of what the commentator said and automatically turn it into a quote in my comment. </p>
<p>Copy and paste are too mundane for me, so I wrote a Greasemonkey script that adds the <a target="_blank" href="http://markitup.jaysalvat.com/">markItUp! Editor</a> to any textarea on a page. I then extended markItUp! by adding a &#8216;quote&#8217; button that wraps the currently selected text (from anywhere on the page) in blockquote tags.</p>
<h2>Why A Greasemonkey Script?</h2>
<p>I&#8217;m pretty sure that there&#8217;s a <strong>WordPress plugin</strong> somewhere that allows you to automatically add quotes to comment replies. As the comment I wanted to quote was on my site, which is powered by WordPress, I could have used this. </p>
<p>However, I realized that I wanted this functionality to be available on <strong>any site</strong> I was leaving a comment on, not just my own. I know there is a Firefox add-on that adds a HTML editor, but I wasn&#8217;t that impressed when I tried it and I don&#8217;t think it &#8216;quotes&#8217; the selected text from anywhere on the page.</p>
<p>In that context, <strong>a Greasemonkey script</strong> seemed to be the answer. I just needed to find an editor to embed. </p>
<h2>Enter markItUp!</h2>
<p>I looked at quite a few editors, but markItUp! stood out for me because:</p>
<ul>
<li>It provides the main HTML markup options I need: strong, em, lists, links, images (although it doesn&#8217;t include blockquotes, by default). </li>
<li>It&#8217;s easily extensible, allowing me to add the blockquote functionality. </li>
<li>It&#8217;s based on jQuery, which is my preferred JavaScript framework. </li>
<li>It&#8217;s open source (Dual licensed under the MIT and GPL licenses), allowing me to embed it in a Greasemonkey script. </li>
</ul>
<div class="csstextbox1">MarkItUp is NOT a WYSIWYG (What You See Is What You Get) Editor. It just helps add markup, in this case HTML, to a textarea. If you make the word Greasemonkey bold, you will see &lt;strong&gt;Greasemonkey&lt;/strong&gt; rather than <strong>Greasemonkey </strong>- although there is a preview function which renders the markup allowing you to see what it will look like.</div>
<h2>Turning markItUp! On</h2>
<p>The script runs on all pages you visit, but it doesn&#8217;t turn markItUp! on automatically. Instead it creates a &quot;<strong>Toggle markItUp!</strong>&quot; link immediately before any textarea, as follows:</p>
<p><img src="http://www.scratch99.com/wp-content/uploads/2010/02/markitup-before.png" alt="Image of comment area before markItUp! is turned on" width="500" height="120" /></p>
<p>Once you click this, markItUp! is turned on for that textarea and you&#8217;ll see the markItUp! editor:</p>
<p><img src="http://www.scratch99.com/wp-content/uploads/2010/02/markitup-after.png" alt="Image of comment area after markItUp! is turned on" width="500" height="160" /></p>
<p>markItUp! can be turned on for multiple textareas at the same time, but each one needs to be turned on individually.</p>
<h2>Functions Included</h2>
<p>This implementation of markItUp! includes the following functions:</p>
<ul>
<li>Bold: wrap the selected text in &lt;strong&gt; tags</li>
<li>Italic: wrap the selected text in &lt;em&gt; tags</li>
<li>Strike through: wrap the selected text in &lt;del&gt; tags</li>
<li>Paragraph: wrap the selected text in &lt;p&gt; tags</li>
<li>Blockquote: wrap the selected text (from anywhere on the page) in &lt;blockquote&gt; tags</li>
<li>Unordered lists: wrap the selected text in &lt;ul&gt; tags</li>
<li>Ordered lists: wrap the selected text in &lt;ol&gt; tags</li>
<li>List element: wrap the selected text in &lt;li&gt; tags</li>
<li>Picture: insert an image</li>
<li>Link: insert a link</li>
<li>Clean: remove HTML tags from the selected text</li>
<li>Preview: show a preview of how the markup will be rendered</li>
</ul>
<h2>Example</h2>
<p>As an example, to make something bold, first select the text you want to make bold:</p>
<p><img src="http://www.scratch99.com/wp-content/uploads/2010/02/markitup-bold-before.png" alt="Image of markItUp! before the selected text is made bold" width="500" height="160" /></p>
<p>Then click the B icon and the selected text will be wrapped it in &lt;strong&gt; tags:</p>
<p><img src="http://www.scratch99.com/wp-content/uploads/2010/02/markitup-bold-after.png" alt="Image of markItUp! after the selected text is made bold" width="500" height="160" /></p>
<p>To see how this will be rendered, click the Preview icon (the green check mark):</p>
<p><img src="http://www.scratch99.com/wp-content/uploads/2010/02/markitup-preview.png" alt="Preview of how the markup created by markItUp! will be rendered" width="500" height="102" /></p>
<h2>Technical Notes</h2>
<p>For those that are interested, here are some technical notes related to creating the script.</p>
<p>The following scripts are embedded in the Greasemonkey script:</p>
<ul>
<li><a href="http://jquery.com/" target="_blank">jQuery</a> by John Resig </li>
<li><a href="http://markitup.jaysalvat.com/" target="_blank">markItUp!</a> by Jay Salvat</li>
<li><a href="http://dev.iceburg.net/jquery/jqModal/" target="_blank">jqModal</a> by Brice Burgess</li>
</ul>
<div class="csstextbox1">I&#8217;m a great believer of embedding scripts in a Greasemonkey script &#8211; these scripts then live in the browser and don&#8217;t have to be downloaded on page load. I plan to write more about this approach at some point. Ozh <a href="http://twitter.com/ozh/statuses/7637262168" target="_blank">questioned this approach</a> (fair enough given how simple the script in question was), but <a href="http://boagworld.com/bites/remy-sharp" target="_blank">according to Remy Sharp</a> there have been discussions about whether browsers should be preloading jQuery into the browser, which shows I&#8217;m not alone in my thinking.</div>
<p>I used the Greasemonkey function <a target="_blank" href="http://wiki.greasespot.net/GM_addStyle">GM_addStyle()</a> to add the CSS for both markItUp! and jqModal. For markItUp!, I went a step further and used Daily Coding&#8217;s <a href="http://www.dailycoding.com/Utils/Converter/ImageToBase64.aspx" target="_blank">Online Image to Base64 Converter</a> to convert the images for icons etc into base64 encoded images. This allowed the CSS and images to be embedded in the script itself, rather than living in external files that have to be stored somewhere (they can&#8217;t live in Greasemonkey). </p>
<p>I wrote a Quote function that grabs the currently selected text (from anywhere on the page), wraps it in blockquote tags and inserts it at the current cursor location in the textarea. If there&#8217;s nothing selected on the page, it grabs whatever is selected in the textarea itself and wraps that in blockquote tags.</p>
<p>The default Preview function in markItUp! wouldn&#8217;t work as it relies on using an IFrame to load an external file which it then manipulates. Once again, the external file can&#8217;t be stored within a Greasemonkey script. I therefore wrote my own Preview function, <strong>which uses <a href="http://dev.iceburg.net/jquery/jqModal/" target="_blank">jqModal</a> to display the text in a modal dialog</strong>. The styles in the Preview probably won&#8217;t be exactly the same as the final comment, but it allows you to check if links, lists, etc are correct.</p>
<h2>Where Do I Get It?</h2>
<p>I&#8217;ll be creating a home page on this site for the markItUp! For Greasemonkey script, but it&#8217;s also <a target="_blank" href="http://userscripts.org/scripts/show/69807">available on userscripts.org</a>.</p>
<script type="text/javascript">Nifty("div.csstextbox1","bgcolor-#FFFFFF");</script><img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/1AzEIxOAJRM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2010/02/new-script-markitup-for-greasemonkey/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Solution To The Lack Of WordPress Beta Testing</title>
		<link>http://www.scratch99.com/2010/02/the-solution-to-the-lack-of-wordpress-beta-testing/</link>
		<comments>http://www.scratch99.com/2010/02/the-solution-to-the-lack-of-wordpress-beta-testing/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 03:23:24 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=250</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2010/02/the-solution-to-the-lack-of-wordpress-beta-testing/.While catching up on some old podcasts, specifically Episode 82 of WordPress Weekly, I came across a discussion about WordPress beta testing. The discussion centers around the problem of bugs not being caught during beta testing because there just aren&#8217;t enough beta testers. To me, [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2010/02/the-solution-to-the-lack-of-wordpress-beta-testing/">http://www.scratch99.com/2010/02/the-solution-to-the-lack-of-wordpress-beta-testing/</a>.<br /><p>While catching up on some old podcasts, specifically <a href="http://www.wptavern.com/wpweekly-episode-82-%E2%80%93-the-tinfoil-hat-brigade" target="_blank">Episode 82 of WordPress Weekly</a>, I came across a discussion about <a href="http://www.wordpress.org/" target="_blank">WordPress</a> beta testing. The discussion centers around the problem of <strong>bugs not being caught</strong> during beta testing because there just <strong>aren&#8217;t enough beta testers</strong>.</p>
<p>To me, the solution seems straightforward &#8211; but that may be because I worked in the software industry for 10 years and have experience in <strong>software release management</strong>, so I&#8217;ll take the long path and set the scene properly. </p>
<p>That makes it a long post, but stick with it &#8211; you need to read it all to fully understand my reasoning. First we need to consider the following question:</p>
<h2>Should You Upgrade WordPress Immediately After A Release?</h2>
<p>Short answer: Sometimes, but <strong>not always</strong>.</p>
<p>Over the last couple of years, there have been repeated calls for WordPress users to update their blogs immediately after a new version has been released. At times, the call to upgrade has almost become a frenzy. </p>
<p>I&#8217;ve taken this with a grain of salt and held to my belief that upgrading immediately isn&#8217;t always the correct choice. <strong>Sure, upgrade immediately if the release fixes a critical security issue</strong> &#8211; but most of the time it&#8217;s better to wait and see whether:</p>
<ul>
<li>there are any major bugs in the new version </li>
<li>your theme works with the new version </li>
<li>all of the plugins you&#8217;re using work with the new version </li>
</ul>
<p>I&#8217;ve developed this &#8216;hold back&#8217; approach while working in the software industry over the last 15 years or so &#8211; I&#8217;d contend that it&#8217;s &#8216;best practice&#8217;. <strong>Upgrading</strong> to a new version <strong>without testing</strong> the new version in your environment (including server, theme and plugins) <strong>is the sign of immature processes</strong>.</p>
<p>Some may argue that this approach is overkill for a simple blog, but there are many sites out there running WordPress that are a little more complicated. </p>
<p>Even simple blogs are often not that simple, especially as so many are now monetized. Ask yourself, will I lose money if WordPress doesn&#8217;t work after an upgrade? If the answer is yes, you should probably be testing new versions before upgrading.</p>
<div class="csstextbox1">Note: I&#8217;m a relatively sophisticated WordPress user and can judge the need to upgrade pretty well from the release notes. <strong>If the release notes don&#8217;t make much sense to you, it&#8217;s better to err on the side of caution and upgrade</strong>.</div>
<p>You&#8217;re probably asking how does this relate to beta testing? Well, in a couple of ways:</p>
<h3>1. Bugs In New Releases Mean Less People Will Upgrade</h3>
<p>Let&#8217;s leave aside the fact that I don&#8217;t personally subscribe to the &#8216;upgrade immediately&#8217; advice and assume that it&#8217;s a good thing (which it would be in the ideal world). </p>
<p>Bugs in new releases undermine this advice. After the recent <a href="http://wordpress.org/support/topic/343080" target="_blank">problem with scheduled posts</a>, introduced in the WordPress 2.9 release, there have been people questioning whether upgrading immediately was a good thing.</p>
<p>If beta testing was improved and caught more of these problems, then there&#8217;d be less of the &#8216;hold back&#8217; people out there and more people would follow the advice, in theory making WordPress more secure. There&#8217;d be:</p>
<ul>
<li>less people (such as <a href="http://scobleizer.com/2009/09/05/i-dont-feel-safe-with-wordpress-hackers-broke-in-and-took-things/" target="_blank">Robert Scoble</a>) complaining about WordPress security.</li>
<li>less need for Matt to <a href="http://wordpress.org/development/2009/09/keep-wordpress-secure/" target="_blank">write public responses</a> outlining why people should upgrade.</li>
<li>less complaints about bugs and the loss of functionality.</li>
</ul>
<p>There&#8217;ll always be bugs in software and there&#8217;ll always be people who complain &#8211; but more comprehensive beta testing would lead to less bugs, leading to less unhappy users, leading to more sites being updated immediately, leading to less hacking, leading to even less unhappy users.</p>
<p><strong>Better beta testing begets better security</strong>.</p>
<h3>2. Balance Between Upgrade Speed Vs Security</h3>
<p>Alternatively, if we don&#8217;t leave aside my beliefs, if we can moderate the <strong>unthinking update immediately</strong> advice, then we&#8217;re provided with a tremendous opportunity:</p>
<p>On a case by case basis, we can decide if an upgrade is in the &#8220;update immediately&#8221; category or in the &#8220;can wait for critical bugs to be fixed&#8221; category.</p>
<p>My solution, way down the bottom of this post, is going to propose delays to upgrades that are not for critical security issues, so that user experience less critical bugs. But more on that later.</p>
<h2>The Problem: A Lack Of Beta Testers</h2>
<p>The problem, which has been mentioned in various places including the podcast, is that although WordPress has a beta testing phase, <strong>there aren&#8217;t enough end users testing it</strong> to catch all the critical bugs. The software appears to runs fine during beta testing, but bugs rise to the surface when the release is rolled out to everyone. </p>
<p>First, some facts:</p>
<ul>
<li>Software is always going to have bugs </li>
<li>Beta testing will never find all the bugs </li>
</ul>
<p>There will always be some bugs that are only triggered when the software is run in an obscure environment or is used in a way that&#8217;s slightly different from how most people use it.</p>
<p>So it&#8217;s not about eliminating bugs, just about reducing the number of critical bugs that get through beta testing. The only way to do this is to get more people, using the software in different ways, on different server environments, to test the software.</p>
<p><strong>How do we get more people to test the software</strong>? The answer&#8217;s coming soon (honest).</p>
<h2>Software Release Management Anecdotes </h2>
<p>First, let me say that I worked in the software industry (for a <a href="http://www.softlinkint.com/" target="_blank">library management system</a> vendor) for 10 years. For quite a bit of that time, I was the person who authorised the release of software to clients and/or agents. </p>
<p>I could bore you with <strong>software release management</strong> anecdotes going back to 1994. Luckily for you, I came to my senses and edited them out! I&#8217;ll just say that making sure that major releases were properly tested and free of bugs was extremely important for the following reasons:</p>
<ul>
<li><strong>Loss of reputation, harming future sales</strong>: Upset users are significant in the relatively small library software marketplace. </li>
<li><strong>Direct financial loss</strong>: yes, it cost a significant amount of money to burn 5000 CDs back in 1994 (and then post them out). </li>
<li><strong>Lots of additional work</strong>: printing letters, packaging CDs and supporting users who were upgrading, etc. </li>
</ul>
<p>Obviously, WordPress operates in a very different environment from library software industry of old and many of these points are less of an issue: </p>
<p>If WordPress lose one user, or even ten thousand users, because of loss of reputation, <strong>they don&#8217;t actually lose any money in sales</strong> (actually there is no they!). If they have to release an upgrade, there are no costs for CDs and postage, people just download it. There&#8217;s no surge in the amount of support they need to provide, as support is crowd sourced.</p>
<p>Does that mean WordPress can afford to ignore this issue? </p>
<p>I say No &#8211; they should care about their reputation (and their users), even if there isn&#8217;t the same financial emphasis that there is in the closed source software industry. In fact, they should look to the closed source software industry and learn from it. <strong>Solutions to this very problem have been worked on and refined for decades</strong>. </p>
<p>In my particular case, we had several major incidents that led to us refining our <strong>testing and release processes</strong>. We ended up moving to a process that involved three phases of testing &#8211; I&#8217;ll outline these and relate them to WordPress in the next section. </p>
<h2>The Three Phases Of Testing</h2>
<h3>1. Developer Testing</h3>
<p>I&#8217;m sure this is done comprehensively by the WordPress developers. Ultimately, we employed a couple of full time testers, which Automattic could possibly consider funding. They may already have some testers (besides the Chief BBQ Taste Tester), although it&#8217;s not obvious from <a href="http://automattic.com/about/" target="_blank">their About page</a>. </p>
<div class="csstextbox1">I&#8217;m not going to explain the relationship between the WordPress project and Automattic here. This post is long enough. Let&#8217;s just say that the WordPress project itself doesn&#8217;t have any money (as I understand it). Automattic does have money and they have a record of employing people to work on the project.</div>
<p>But the problem isn&#8217;t here and full time testers would only have limited impact, so let&#8217;s keep moving.</p>
<h3>2. Beta Testing</h3>
<p>This is being done, but the problem is that <strong>not enough end users are involved</strong>. WordPress could look at ways to entice more users to join the beta testing program, but many of the methods that the closed source software industry use, such as offering discounts to beta testers, won&#8217;t work in the open source world.</p>
<p>One idea could be to build in a &quot;do you want to upgrade to the beta version (for the greater good)&quot; message into the automatic update function. When a beta version is released, everyone gets this message. </p>
<p>It would have to be very clear that it was a beta version and that there may be some problems and it would need Yes, No and Never Ask Me Again options, but it could work. Not many would choose to upgrade, but <strong>1% of 3 million is 30,000</strong>, which is a lot more than the number of current beta testers.</p>
<p>Once again, though, I don&#8217;t think the answer is here. It would be a significant improvement, but could cause <strong>a lot of negative publicity</strong>: there&#8217;d be too many people who&#8217;d choose it accidentally, then blame WordPress for upgrading them to beta software.</p>
<h3>3. Live User Testing / Staged Release</h3>
<p>So <strong>we come to the solution at last</strong> (I told you we would) and it&#8217;s not in the beta testing phase. </p>
<p>Instead, <strong>the answer lies in a staged roll-out to users</strong>: limiting new releases to a relatively small number of people until it&#8217;s proven that there are no major problems. </p>
<p>If any major problems are found, a decision can be made on whether they are serious enough to fix immediately, <strong>before making the software available to the rest of the users</strong>. Even if it&#8217;s decided not to fix the problems, users can be made aware of issues that may affect them before they upgrade. Even that small improvement would make a real difference to users.</p>
<div class="csstextbox1">WordPress.com is sometimes used for live user testing &#8211; and this is great for testing the pure functionality of new features &#8211; but it doesn&#8217;t test the software on the myriad of different server environments or with all the themes, plugins and advanced customisations that are out there. You need to test with live (self hosted) users.</div>
<p>The staged release approach been used for decades. I was using it 15 years ago. Google uses it today: they roll-out new features in Google Analytics or Google Adsense slowly. </p>
<h2>How Would A Staged Release Work?</h2>
<p>A staged roll-out of WordPress would work something like this:</p>
<ol>
<li>Once the beta testing phase is complete, the automatic upgrade notice would be sent out to say 100,000 people. </li>
<li>There would then be a period of say one week, where the feedback would be monitored and any critical bugs identified and investigated. </li>
<li>At the end of the period:
<ul>
<li>if no critical bugs have been identified, then the automatic upgrade would appear to everyone else. </li>
<li>If critical issues have been identified, a decision would be made on whether to proceed with the release or delay it until the problem is fixed. </li>
</ul>
</li>
</ol>
<p><strong>It goes without saying that urgent security releases would bypass this</strong>. </p>
<p>Now I&#8217;m not talking about physically denying the software to anyone, just manipulating who gets it through the automatic upgrade process. Anyone would still be able to visit wordpress.org and download the lastest version.</p>
<h2>How Would A Staged Release Be Achieved Technically?</h2>
<p>I&#8217;m not the best person to answer that, but I&#8217;d imagine it wouldn&#8217;t be too hard to do. It would require the automatic upgrade function to be modified: instead of WordPress installations asking &quot;is there a new version&quot;, they&#8217;d ask &quot;is there a new version and can I have it&quot;. </p>
<p>On the server side, it would check the download count and, when it reached the threshold, start saying no. You could make it complicated (checking whether it&#8217;s been downloaded from this IP address before), but it would be best to keep it simple.</p>
<p>There exists the potential that some users may be unhappy about either getting the new version before it&#8217;s been through live testing, or having to wait until after. The key here is that users are not getting the beta version, they&#8217;re getting the real version that&#8217;s been through beta testing, just as they would now. It&#8217;s just that it&#8217;s being rolled out slowly to further protect users. </p>
<p><strong>This would need to be well communicated</strong>. </p>
<p>Of course, <strong>it could be made it opt-in</strong>. The first 100,000 users could be shown the message: &quot;WordPress 3.1 is available! Update or Wait&quot;. If they choose Wait, it won&#8217;t ask them again until the live release testing is complete. The rest of the users would be shown: &quot;WordPress 3.1 is available, but we recommend you wait for moment. Wait or Upgrade anyway&quot;.</p>
<h2>Final Thoughts</h2>
<p>So the solution to the beta testing problem isn&#8217;t actually within the actual beta testing phase. It&#8217;s just to roll out the upgrades slowly, giving time for critical bugs to be caught before they affect too many people. <strong>This would protect the majority of users from any serious bugs</strong>.</p>
<p>Personally, I have doubts that this would ever be adopted: I think it would be seen as too complicated. But really, it wouldn&#8217;t be that hard to do and would make life better for the vast majority.</p>
<p><strong>What do you think</strong>? Am I crazy? Do you disagree with me? Do closed source practices have no place in the open source world? Do you have a better idea? Let me know!</p>
<script type="text/javascript">Nifty("div.csstextbox1","bgcolor-#FFFFFF");</script><img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/T_iDns1wmQo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2010/02/the-solution-to-the-lack-of-wordpress-beta-testing/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Advanced WordPress Admin Tip: Posts By Category</title>
		<link>http://www.scratch99.com/2010/01/advanced-wordpress-admin-tip-posts-by-category/</link>
		<comments>http://www.scratch99.com/2010/01/advanced-wordpress-admin-tip-posts-by-category/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 13:51:06 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=240</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2010/01/advanced-wordpress-admin-tip-posts-by-category/.Go to Posts -&#62; Edit in the WordPress Admin area and you&#8217;ll see a list of all the posts you have. There is a dropdown list called View all categories, which allows you to select a single category to view posts from. But&#8230; What if [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2010/01/advanced-wordpress-admin-tip-posts-by-category/">http://www.scratch99.com/2010/01/advanced-wordpress-admin-tip-posts-by-category/</a>.<br /><p>Go to Posts -&gt; Edit in the WordPress Admin area and you&#8217;ll see a list of all the posts you have. There is a dropdown list called View all categories, which allows you to select a single category to view posts from. But&#8230;</p>
<p>What if you want to <strong>view posts from more than one category</strong>, or better yet, want to <strong>exclude posts from certain categories</strong>? Can&#8217;t do it right? Well not through the WordPress interface, but you can do it through URL parameters.</p>
<h2>Finding Out Your Category Numbers</h2>
<p>To make this work, you&#8217;ll need to know the category numbers for your categories. You can find these through either of the following two methods:</p>
<ol>
<li>Go to Posts -&gt; Category screen and hold your mouse over the category in question. In your browser&#8217;s status bar you will see a URL which ends in ID=xx (xx is the number of the category). </li>
</ol>
<p>OR</p>
<ol start="2">
<li>While still in Posts -&gt; Edit, select the category you want in the dropdown list and click Filter. You&#8217;ll be taken to a page showing only posts from that category. In the browser&#8217;s address bar you&#8217;ll see that the URL contains cat=xx (xx is the number of the category). </li>
</ol>
<p>The first method is quicker if you want to look up multiple category numbers (you may want to write them down). The second method is better if you&#8217;re just after one or two category numbers &#8211; you&#8217;ll need to do this step anyway.</p>
<h2>First Step</h2>
<p>By default, the Posts -&gt; Edit screen has a URL that ends in wp-admin/edit.php with no parameters, eg:</p>
<p class="codebox">http://www.scratch99.com/wp-admin/edit.php</p>
<p>Rather than typing all the parameters, it makes sense to start with a URL that includes them. </p>
<p>If you haven&#8217;t already, select one of the categories you want to include / exclude in the dropdown list and click Filter. You&#8217;ll be taken to a page showing only posts from that category, but you will now have a URL that looks like this:</p>
<p class="codebox">http://www.scratch99.com/wp-admin/edit.php?s&amp;mode=list&amp;action=-1&amp;m=0&amp;cat=92&amp;action2=-1</p>
<p>We&#8217;re going to be changing the cat=xx part of the URL.</p>
<div class="csstextbox1">Note: Don&#8217;t bother trying to use the URLs in this post. My <a href="http://www.scratch99.com/2008/10/password-protecting-the-wp-admin-folder/">wp-admin section is password protected</a>, so all you&#8217;ll get is the password prompt.</div>
<h2>Displaying Posts From More Than One Category</h2>
<p>Perhaps I want to display posts from more than one category &#8211; in my case, I may want to see all the posts from my WordPress and Web Development categories, but not from the rest of my categories (too much noise).</p>
<p>Easy. Simply edit the URL and change the cat=xx to cat=xx,xx (where xx is the category numbers that you want). In my case, I change the URL to the following (note the cat=4,65):</p>
<p class="codebox">http://www.scratch99.com/wp-admin/edit.php?s&amp;mode=list&amp;action=-1&amp;m=0&amp;cat=4,65&amp;action2=-1</p>
<p>Want posts from three categories? That&#8217;s right: </p>
<p class="codebox">cat=xx,xx,xx</p>
<p>You&#8217;ve got it now!</p>
<h2>Excluding Posts From Certain Categories</h2>
<p>It&#8217;s also possible to exclude posts from certain categories from appearing in the Posts -> Edit screen.</p>
<p>Why would I want to exclude posts from certain categories? Actually, that&#8217;s how I started looking into this issue. I haven&#8217;t been posting much recently and, as a result, my weekly automatic lifestream digest posts pretty much filled up the screen: </p>
<p><img src="http://www.scratch99.com/wp-content/uploads/2010/01/edit-posts-1.png" alt="too many noisy entries in Edit Posts list" width="500" height="627" /></p>
<p>I was having trouble seeing my real posts! </p>
<p>Thankfully it&#8217;s easy to <strong>exclude the category that these posts are in</strong>. Simply edit the URL and change the cat=xx to cat=-xx (where xx is the category number you want). In my case, I change the URL to the following (note the minus sign, eg: cat=-92):</p>
<p class="codebox">http://www.scratch99.com/wp-admin/edit.php?s&amp;mode=list&amp;action=-1&amp;m=0&amp;cat=-92&amp;action2=-1</p>
<p>The result:</p>
<p><img src="http://www.scratch99.com/wp-content/uploads/2010/01/edit-posts-2.png" alt="A much better list with unnecessary posts removed" width="500" height="155" /></p>
<p>Want to exclude posts from more than one category? That&#8217;s right: </p>
<p class="codebox">cat=-xx,-xx,-xx</p>
<div class="csstextbox1">Note: I follow the rule of having one category per post. I&#8217;m not quite sure what will happen if your posts have more than one category. Will they show up if you exclude one of the categories that they&#8217;re in? Probably, because they are also in a category you are including, but I don&#8217;t know for sure.</div>
<h2>Final Thoughts</h2>
<p>That&#8217;s all &#8211; it&#8217;s a fairly long post for a fairly simple tip. It&#8217;s probably not something that will be needed often, but in some circumstances it&#8217;s very useful to have <strong>greater control over which posts appear on the Edit Posts screen</strong>.</p>
<script type="text/javascript">Nifty("div.csstextbox1","bgcolor-#FFFFFF");</script><img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/dPvaCxeT0WI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2010/01/advanced-wordpress-admin-tip-posts-by-category/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>2009 On More Than Scratch The Surface</title>
		<link>http://www.scratch99.com/2010/01/2009-on-more-than-scratch-the-surface/</link>
		<comments>http://www.scratch99.com/2010/01/2009-on-more-than-scratch-the-surface/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 06:54:37 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[make money online]]></category>
		<category><![CDATA[traffic]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=239</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2010/01/2009-on-more-than-scratch-the-surface/.Happy New Year to all! A year ago, after looking at my Google Analytics stats for the year, I wrote a post reviewing 2008. I figure I may as well do it again for 2009 and also take the opportunity to explain the direction of [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2010/01/2009-on-more-than-scratch-the-surface/">http://www.scratch99.com/2010/01/2009-on-more-than-scratch-the-surface/</a>.<br /><p>Happy New Year to all! A year ago, after looking at my Google Analytics stats for the year, I wrote a <a href="http://www.scratch99.com/2009/01/2008-on-more-than-scratch-the-surface/">post reviewing 2008</a>. I figure I may as well do it again for 2009 and also take the opportunity to explain the direction of this site.</p>
<h2>The Top Ten Visited Posts In 2009</h2>
<p>According to Google Analytics, the top ten visited posts in 2009 (with the home page and plugin pages stripped out) were:</p>
<ol>
<li><a href="http://www.scratch99.com/2008/03/creating-javascript-array-dynamically-from-php-array/">Creating A JavaScript Array Dynamically Via PHP</a> (2008)</li>
<li><a href="http://www.scratch99.com/2009/01/blogger-how-to-add-adsense-inside-single-posts-only/">Blogger – How To Add Adsense Inside Single Posts Only</a> (2009)</li>
<li><a href="http://www.scratch99.com/2008/09/avoid-smart-pricing-show-adsense-only-to-search-engine-visitors/">How To Display Ads Only To Search Visitors</a> (2008)</li>
<li><a href="http://www.scratch99.com/2009/02/poll-wordpress-theme-frameworks/">Poll – Which WordPress Theme Framework To Use?</a> (2009)</li>
<li><a href="http://www.scratch99.com/2007/06/wordpress-simple-css-text-boxes-in-posts/">WordPress – Simple CSS Text Boxes In Posts</a> (2007)</li>
<li><a href="http://www.scratch99.com/2007/08/wordpress-most-viewed-sidebar-widget/">WordPress – Most Viewed – Sidebar Widget</a> (2007)</li>
<li><a href="http://www.scratch99.com/2007/06/wordpress-rounded-text-boxes-in-posts/">WordPress – Rounded Text Boxes in Posts</a> (2007) </li>
<li><a href="http://www.scratch99.com/2009/03/custom-page-template-external-css-file/">Custom Page Templates – Calling An External CSS File</a> (2009)</li>
<li><a href="http://www.scratch99.com/2008/09/setting-cookies-in-wordpress-trap-for-beginners/">Setting Cookies In WordPress – Trap For Beginners</a> (2008)</li>
<li><a href="http://www.scratch99.com/2008/01/avoid-adsense-smart-pricing-on-blogs/">How To Avoid Adsense Smart Pricing On Blogs</a> (2008)</li>
</ol>
<p>While I feel some of those posts deserve to be there, there are some that I don&#8217;t feel are particularly deserving. </p>
<p>Also, as you can see, there&#8217;s only 3 posts written in 2009 in that list. The others were written in 2008 (4 posts) or 2007 (3 posts). I guess that&#8217;s not too surprising as a lot of my traffic comes from search engines and old posts are just as likely to rank well as new ones. </p>
<p>It also doesn&#8217;t help that I only wrote 20 posts in 2009 (not counting automatic lifestream posts), but more on that later.</p>
<h2>My Top 5 Posts From 2009</h2>
<p>Last year, I included a list of the 10 posts that <strong>I thought were my best</strong> in 2008. If I were to do this again for 2009, I&#8217;d only go with 5 articles that I was particularly happy with. There are others which are okay, but don&#8217;t particularly stand out for me. </p>
<p>So, here are my top 5 posts written in 2009:</p>
<ol>
<li><a href="http://www.scratch99.com/2009/06/subscribe-to-comments-protected-wp-admin-folder/">Subscribe To Comments &#038; Protected Wp-admin Folder</a></li>
<li><a href="http://www.scratch99.com/2009/02/xammplite-virtual-directory-and-wordpress-permalinks/"></a><a href="http://www.scratch99.com/2009/01/blogger-how-to-add-adsense-inside-single-posts-only/">Blogger – How To Add Adsense Inside Single Posts Only</a></li>
<li><a href="http://www.scratch99.com/2009/01/make-money-online-smart-pricing-on-blogger/">Show Adsense To Search Visitors Only – On Blogger</a></li>
<li><a href="http://www.scratch99.com/2009/02/xammplite-virtual-directory-and-wordpress-permalinks/">XAMMPLite Virtual Directory And WordPress Permalinks</a></li>
<li><a href="http://www.scratch99.com/2009/10/sharepoint-as-a-cms-microsoft-tech-ed-australia-2009/">Sharepoint As A CMS – Microsoft Tech.Ed Australia 2009</a></li>
</ol>
<h2>Other Interesting Stats From Google Analytics</h2>
<p>Google Analytics also provided some interesting statistics for 2009 on this site.</p>
<h3>Traffic</h3>
<p>The site had significantly more traffic in 2009 than in did in 2008. There were <strong>75,343 Visits</strong> and <strong>113,016 Pageviews</strong> in 2009, up from 46,488 Visits and 74,916 Pageviews in 2008.</p>
<p>That said, the first half of 2009 was the best: traffic tailed off slightly in the second half of 2009 (since I <a href="http://www.scratch99.com/2009/05/bye-bye-dofollow/">disabled my DoFollow plugin</a>).</p>
<p>It will be interesting to see what will happen in 2010. Unlike last year, I&#8217;m not particularly concerned about whether traffic will increase in 2010. </p>
<p>I now consider this site as an area for me to write about my <a href="http://www.scratch99.com/wordpress-plugins-by-stephen-cronin/">WordPress plugins</a> and my <a href="http://userscripts.org/users/37070">Greasemonkey scripts</a> &#8211; I no longer have any grand ambitions about creating a thriving blog.</p>
<h3>Browser Breakdown</h3>
<p>The vast majority of visitors were using Firefox. That isn’t surprising given the nature of this blog, as it appeals to web developers and bloggers, groups given to using FireFox. The full breakdown is as follows:</p>
<ol>
<li>Firefox – 67.62%</li>
<li>Internet Explorer – 17.65%</li>
<li>Chrome – 6.24%</li>
<li>Safari – 4.75%</li>
<li>Opera – 2.30%</li>
</ol>
<p>Of the Internet Explorer users, 20.66% were using IE6 (about 3.6% of all visitors). Too many! The numbers are roughly the same as last year, but with a slight drop for IE and a 5% increase for Chrome.</p>
<h3>Operating systems</h3>
<p>The major operating systems used by visitors was virtually the same as last year, being dominated by Windows. The full breakdown is as follows:</p>
<ol>
<li>Windows – 82.92% </li>
<li>Macintosh – 12.28% </li>
<li>Linux – 4.25%</li>
</ol>
<h3>Top 10 Screen Resolutions</h3>
<p>The screen resolution of visitors is always important to web developers. I’ve included the top 10 resolutions below.</p>
<ol>
<li>1024×768 – 21.23% </li>
<li>1280×800 – 19.57% </li>
<li>1280×1024 – 15.07% </li>
<li>1440×900 – 11.88% </li>
<li>1680×1050 – 11.06% </li>
<li>1920×1200 – 5.21% </li>
<li>1152×864 – 2.36% </li>
<li>800×600 – 1.76% </li>
<li>1366×768 – 1.50%</li>
<li>1280×768 – 1.46%</li>
</ol>
<p>Interesting things to note are:</p>
<ul>
<li>800×600 has actually moved up one place, despite me proclaiming last year that it had almost dropped off the list at last. It&#8217;s hanging in there grimly.</li>
<li>1024×768 is still the most popular, but it&#8217;s 5% lead in to 2009 has been reduced to just 2% in 2009. Will it hang on in 2010?</li>
</ul>
<h3>Top 10 Countries</h3>
<ol>
<li>US (by far)</li>
<li>India</li>
<li>UK (London was the top city)</li>
<li>Canada</li>
<li>Australia</li>
<li>Philippines (Hi RT)</li>
<li>Germany</li>
<li>Indonesia</li>
<li>France</li>
<li>Netherlands</li>
</ol>
<p>Not much change here.</p>
<h2>Report Card For 2009</h2>
<p>I didn&#8217;t meet many of my goals for 2009, as I changed my objectives during the course of the year. Here&#8217;s a brief rundown on how I did for each of my 2009 goals.</p>
<h3>Post More Often</h3>
<p>I published 52 posts in 2007, followed by 41 posts in 2008. One of my 2009 goals was to post more often.  I failed big time, only publishing 20 posts in 2009. As I said last year:</p>
<blockquote>
<p>It’s not for lack of ideas – I have <b>lots</b> of half written posts that I just need some time to finish off. I tend to spend more time working on my projects than writing about what I’m learning.</p>
</blockquote>
<p>That&#8217;s still true, but I&#8217;m more comfortable with it now. I&#8217;ll probably post more this year, but won&#8217;t sweat it if I don&#8217;t.</p>
<h3>Post On Topic</h3>
<p>Last year I wrote:</p>
<blockquote>
<p>It’s noticeable in my top 10 posts above that many are my Make Money Online posts. I’d like to keep posting on that topic as I learn more about it, but I want to post more often on my Web Development efforts (and WordPress of course).</p>
</blockquote>
<p>I didn&#8217;t post often in 2009, but I was probably more aligned with my core topics than in 2008.</p>
<h3>Update My Current WordPress Plugins</h3>
<p>I had planned to overhaul my <a href="http://www.scratch99.com/wordpress-plugins-by-stephen-cronin/">my existing WordPress plugins</a> and move them into the official WordPress plugin directory. Didn&#8217;t happen. The new ones are going into the official directory, but the old ones haven&#8217;t been touched. Still on my list for 2010.</p>
<h3>Release Some New WordPress Plugins</h3>
<p>Last year I wrote:</p>
<blockquote>
<p>I started off by writing that I’d like to release another 4 WordPress plugins this year (I already have 4 half finished plugins that I want to finish off). However, thinking of my workload, I changed it first to 3 plugins, then to 2 plugins! So we’ll have to see how many I can actually get out.</p>
</blockquote>
<p>Spot on! I released 2 new plugins in 2009. I&#8217;m sure more will follow in 2010.</p>
<h3>Release A WordPress Theme </h3>
<p>I had been thinking that I&#8217;d release a WordPress theme in 2009. Didn&#8217;t happen. This is now far down on my priority list. I may release one in future if I create my own theme framework for my sites, but it&#8217;s not likely anytime soon.</p>
<h3>Release Some Greasemonkey Scripts</h3>
<p>I released a couple of Greasemonkey scripts in 2009 and plan to release more in future. Greasemonkey rocks! I write little scripts for it all the time, although I haven&#8217;t released many of them (yet).</p>
<h2>Changing Goals For 2010</h2>
<p>I don&#8217;t really have many goals for this site in 2010. As I mentioned above, I&#8217;d like to update my old WordPress plugins and move them into the official directory, release some new WordPress plugins and release some new Greasemonkey scripts, but that&#8217;s about it. </p>
<p>I have other projects, which I won&#8217;t mention here, that are more of a focus for me in 2010. This is just going to become the &#8216;portal&#8217; to the software I release, with the occasional post thrown in.</p>
<h2>Final Thoughts</h2>
<p>Well that’s a quick look at the year that was and the year that will be here at More Than Scratch The Surface. I hope all your endeavours for 2010 are successful! If you have any big plans for your blog, feel free to share in the comments.</p>
<img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/im1nmYrShJ8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2010/01/2009-on-more-than-scratch-the-surface/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Sharepoint As A CMS – Microsoft Tech.Ed Australia 2009</title>
		<link>http://www.scratch99.com/2009/10/sharepoint-as-a-cms-microsoft-tech-ed-australia-2009/</link>
		<comments>http://www.scratch99.com/2009/10/sharepoint-as-a-cms-microsoft-tech-ed-australia-2009/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 12:12:21 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=217</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2009/10/sharepoint-as-a-cms-microsoft-tech-ed-australia-2009/.It&#8217;s been over a month since I published my notes on the Thursday session of Microsoft Tech.Ed Australia 2009. In that post, I promised to write up the SharePoint discussion session separately. Finally, here it is. Session Details Session: BOF007 SharePoint, .Net and SQL blended [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2009/10/sharepoint-as-a-cms-microsoft-tech-ed-australia-2009/">http://www.scratch99.com/2009/10/sharepoint-as-a-cms-microsoft-tech-ed-australia-2009/</a>.<br /><p>It&#8217;s been over a month since I published my notes on the <a href="http://www.scratch99.com/2009/09/microsoft-tech-ed-australia-2009-thursday/">Thursday session of Microsoft Tech.Ed Australia 2009</a>. In that post, I promised to write up the SharePoint discussion session separately. Finally, here it is.</p>
<h2>Session Details</h2>
<p><strong>Session</strong>: BOF007 SharePoint, .Net and SQL blended applications<br/><strong>Presenter</strong>: <a href="http://laneyvb.blogspot.com/" target="_blank">Elaine van Bergen</a><br /><strong>When</strong>: Thu 9/10 | 12:45-13:45 | Meeting Room 5</p>
<h2>Official Description</h2>
<p>Join Elaine van Bergen in this discussion as to why SharePoint is a powerful platform which is increasingly used to build applications. This session will include discussion on methods for addressing the many challenges faced in scenarios such as:</p>
<ul>
<li>A complete custom user interface build on top of SharePoint, such as a public facing internet site </li>
<li>SharePoint application with complex relational components provided by SQL Server integration </li>
<li>An ASP.Net application running beside SharePoint using components such as search </li>
<li>A generic application that is written in a way to be able to switch in and out SharePoint.</li>
</ul>
<p>The knowledge discussed will be based on recently completed SharePoint projects and will include debate on pros and cons of various approaches, approaches for .net developers moving to SharePoint, ways to avoid or workaround common problem including when to just use a pure custom build instead of SharePoint.</p>
<h2>My Comments</h2>
<p>This session was the highlight of the day for me. It was held in one of the meeting rooms and had about 70 or 80 people, with 4 or 5 facilitators leading the discussion and running around to get people&#8217;s input. </p>
<p>The lead &#8216;presenter&#8217; was <a href="http://laneyvb.blogspot.com/" target="_blank">Elaine van Bergen</a>, State Manager of .Net at OBS. The other facilitators were all <strong>leading .NET / Sharepoint consultants</strong> from around the country. There was discussion around Documents Records Management and various other disciplines, but I&#8217;m only going to focus on <strong>using Sharepoint as a Web Content Management System</strong>. </p>
<p>The thing that shone through for me was a consistent message that: </p>
<ol>
<li>Sharepoint won&#8217;t do everything you want out of the box</li>
<li>It can be made to do anything but you&#8217;ll have to customise it</li>
<li>Sharepoint development is complicated </li>
</ol>
<p>I&#8217;ve heard a lot of anti Sharepoint rhetoric in web development circles, but this is far more valuable for me. </p>
<p>This isn&#8217;t coming from people with an anti Sharepoint agenda. This is from the people on the ground who make their living by implementing Sharepoint. These people are some of the top Sharepoint professionals out there, those that Microsoft selected to run a session at Microsoft&#8217;s biggest annual developer event. </p>
<p>Now, they&#8217;re not criticising Sharepoint. They&#8217;re just giving us a <strong>realistic view of implementing Sharepoint</strong>. </p>
<p>Why is this so important? Because I&#8217;ve heard the Microsoft sales pitch for Sharepoint and they are super smooth. There is no hint of weakness, no acknowledgement that implementing Sharepoint may involve a lot of effort or that it may be complicated. </p>
<p>Personally, I think that&#8217;s why Sharepoint has a bad name in some circles: <strong>Microsoft don&#8217;t give clients a realistic view of what they&#8217;re getting into</strong>. </p>
<p>Onto some of the quotes (well paraphrases actually, I can&#8217;t type that fast!): </p>
<p>One of the facilitators was actually anti Sharepoint which surprised me given the setting. I didn&#8217;t catch his name, but he said that for public websites, <strong>Sharepoint is the very last resort</strong>, because of the problems he&#8217;s seen in implementing it. He said his preference was to build the site in ASP .NET. He seemed to be talking about a site with minimal content pages and a lot of products in a database. </p>
<p>I personally think that while creating that site with ASP might be feasible, it&#8217;s not practical for a site with a large number of content pages of varying types. A Content Management System would be essential in that scenario. </p>
<p>Anyway, he moved on to talk about forms. For one client he had to use InfoPath for forms because the client&#8217;s forms were too complex for Sharepoint. They used Sharepoint to store the forms, but they kept the application layer separate, because the <strong>analysis logic and Silverlight were too hard to build into Sharepoint</strong>. </p>
<p>One of the audience members backed him up and said they use ASP .NET for forms because it&#8217;s too hard to make forms look the way the user wants in Sharepoint. However Elaine responded to both by saying that Sharepoint was good, as long as you employ staff to fix the UI layer. </p>
<p>The anti-Sharepoint facilitator went on to say that the decision to use Sharepoint should be made by technical people deciding it&#8217;s the best solution for the problem, but that it seemed to him that the decision is often made by business people. <strong>They decide to buy Sharepoint</strong> without having properly considered how it will used, <strong>then they look at what they can use it for</strong>, which is the wrong way around. </p>
<p>An audience member related their experience with the Starlight Foundation: they consolidated 70 different sites across various open source systems onto a&#160; common platform of Sharepoint. For one of those sites, they had to create a .NET website because Sharepoint &quot;couldn&#8217;t deal with it&quot;. For the other 69 sites, Sharepoint was fine. That seems like good odds to me. </p>
<p>Elaine said that <strong>Sharepoint won&#8217;t cater for all your needs out of the box</strong>. You need to do some analysis and you&#8217;ll probably have to write some customisations yourself. She also said that it&#8217;s very difficult to do unit testing. </p>
<p>Another audience member said that he has to do development on the server &#8211; he can&#8217;t do it on his workstation because his computer isn&#8217;t powerful enough to run Sharepoint. </p>
<p>Someone else said there were issues between the Silverlight and Sharepoint web parts. Elaine said that while she can&#8217;t comment on that problem specifically, there are <strong>a lot of Silverlight related improvements in Sharepoint 2010</strong>, which is coming soon. </p>
<p>Another person said that they didn&#8217;t have any problems with implementing Sharepoint, but that was because he&#8217;d created a custom library to tweak the default web parts. </p>
<p>Elaine said &quot;<em>Sharepoint is its own enemy, you can throw all sorts of things in and it won&#8217;t all work together. Have a look at DevWiki. Sharepoint development is complicated &#8211; there&#8217;s a lot to know if you want to build a simple to use and scalable site.</em>&quot; </p>
<p>That&#8217;s the end of the &#8216;quotes&#8217;. If they sound negative, I need to point out that <strong>the discussion wasn&#8217;t negative</strong> &#8211; it was well grounded and based on a realistic viewpoint. The facilitators openly discussed the issues involved with implementing Sharepoint, warts and all. They were positive in places, but acknowledged the problems in other places. </p>
<p>For me, it was a real eye opener, and <strong>extremely valuable</strong> in understanding just what we&#8217;d be getting into if we went down the path of using Sharepoint as a CMS. It could do what we need it to do, but <strong>not out of the box</strong> and <strong>a reasonable amount of work would be required</strong> to get it set up correctly.</p>
<img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/1uBoGYvNwvQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2009/10/sharepoint-as-a-cms-microsoft-tech-ed-australia-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Web Host With Great Customer Service</title>
		<link>http://www.scratch99.com/2009/09/a-web-host-with-great-customer-service/</link>
		<comments>http://www.scratch99.com/2009/09/a-web-host-with-great-customer-service/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 07:27:54 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[Websites]]></category>
		<category><![CDATA[customer service]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=212</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2009/09/a-web-host-with-great-customer-service/.There are a bucketload of blog posts out there about web hosting. The vast majority of these are either praising their current hosts (along with a nice little affiliate link for you to click) or berating them for poor service. Today, I&#8217;m going to do [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2009/09/a-web-host-with-great-customer-service/">http://www.scratch99.com/2009/09/a-web-host-with-great-customer-service/</a>.<br /><p>There are a bucketload of blog posts out there about <strong>web hosting</strong>. The vast majority of these are either praising their current hosts (along with a nice little affiliate link for you to click) or berating them for poor service. </p>
<p>Today, I&#8217;m going to do something different: I&#8217;m going to <strong>praise a web host that I no longer use</strong> and for which <strong>I don&#8217;t have an affiliate link</strong>.</p>
<p>Why would I take the time to do this? I truly believe that the company in question, <a href="http://www.kwikhosting.com/" target="_blank">kwikhosting</a>, <strong>offers exceptional customer service</strong>.</p>
<p>First some background: I first used <strong>kwikhosting</strong> back in 2006 to host a single short term website (related to the 2006 FIFA World Cup in Germany). I can&#8217;t tell you exactly what the uptime was like. I didn&#8217;t notice it, which means it must have been pretty good. The site was fast, despite the server being on the other side of the world from me (it was in Houston, I was in China).</p>
<p>There were a couple of issues in the initial setup of the site (my fault), but they were <strong>resolved like lightening</strong>. Answers came back within minutes (at best) or a couple of hours (at worst).</p>
<p><strong>So why did I leave kwikhosting?</strong> Well, I&#8217;m ambitious and I had my eyes on creating several different sites. Kwikhosting didn&#8217;t offer unlimited domains. <a href="http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=sjcronin99">Hostgator</a> did (yes that is an affiliate link).</p>
<p>I swapped and, as they say, the rest was history.</p>
<p>I&#8217;m very happy with HostGator. I&#8217;ve been with them for several years and have had very few problems. On the couple of occasions when I have needed to contact Hostgator support, the issue has been resolved pretty quickly. But as great as they are, the service can&#8217;t compare with <strong>kwikhosting</strong>.</p>
<p>I guess the analogy is that HostGator is like the large national chain of supermarkets that&#8217;s <strong>cheaper and has more products</strong>, but which has large impersonal service points, while kiwkhosting is like the corner store that&#8217;s slightly more expensive and doesn&#8217;t have the range, but the guy behind the counter <strong>knows all the customers and treats them like old friends</strong>.</p>
<p><strong>Would I move back to kwikhosting?</strong> No, I need the extras offered by HostGator.</p>
<p><strong>Would I recommend kwikhosting?</strong> Definitely, especially to people who only have a single site. </p>
<p><strong>Why am I writing about this now?</strong> I recently moved to consolidate my domain names onto one domain reseller. I had a domain name being looked after by <strong>kwikhosting</strong> and wanted to transfer it away from them. </p>
<p>Halfway through the process, I realised that it would take up to 5 days to transfer the domain &#8211; which put the transfer day as the same day the domain expired. I was worried there&#8217;d be complications as a result. </p>
<p>I contacted <strong>kwikhosting</strong> for assistance in fast tracking the transfer. Even though I was transferring away from them, the service was just like it was back when I was a new customer. They were very fast to respond, they found out what I needed to know and they fast tracked things for me. </p>
<p>They even offered to renew the domain at the price of the new domain registrar (lower than their normal fee). Pure class.</p>
<p>Anyway, this post is just a shout out to <strong>kwikhosting</strong>, a web host with great customer service. Thanks guys!</p>
<img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/fOw7FUb_wF0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2009/09/a-web-host-with-great-customer-service/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Microsoft Tech.Ed Australia 2009 (Thursday)</title>
		<link>http://www.scratch99.com/2009/09/microsoft-tech-ed-australia-2009-thursday/</link>
		<comments>http://www.scratch99.com/2009/09/microsoft-tech-ed-australia-2009-thursday/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 03:05:16 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[teched]]></category>
		<category><![CDATA[web applications]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=209</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2009/09/microsoft-tech-ed-australia-2009-thursday/.I was fortunate to attend Microsoft Tech.Ed Australia 2009 last week. I made copious notes during the day, so I thought I&#8217;d share them. Note: These are my general observations only: I won&#8217;t comment on anything that specifically relates to my work. The opinions and [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2009/09/microsoft-tech-ed-australia-2009-thursday/">http://www.scratch99.com/2009/09/microsoft-tech-ed-australia-2009-thursday/</a>.<br /><p>I was fortunate to attend <strong>Microsoft Tech.Ed Australia 2009</strong> last week. I made copious notes during the day, so I thought I&#8217;d share them.</p>
<div class="csstextbox1">Note: These are my general observations only: I won&#8217;t comment on anything that specifically relates to my work. The opinions and views expressed here are my own and in no way represent those of my employer.</div>
<h2>Tech.Ed At Last</h2>
<p>This was my first time at Microsoft Tech.Ed. I almost went to Tech.Ed 2000 in Cairns: I was working for an <strong>integrated library system software house</strong> that was a Microsoft Certified Solutions Provider and Tech.Ed was the highlight of the year. Everyone wanted to go, including me, but in the end I missed out. </p>
<p>Fast forward to Tech.Ed 2009 on the Gold Coast: I&#8217;ve long moved on from the MCSP company I used to work for. I&#8217;m now a web developer and when the opportunity to attend TechEd arose, I was a little skeptical of the benifits: </p>
<p>Sure, Tech.Ed had a web track, but <strong>it&#8217;s based heavily around .NET development</strong>, which my team doesn&#8217;t do much of- we focus mostly on the client side (HTML, CSS, JavaScript), usability and accessibility, etc. We have a strong emphasis on being standards compliant and lets face it, Microsoft haven&#8217;t got the best reputation when it comes to standards. To top it off, although we don&#8217;t use it at work, <strong>I consider myself a PHP developer</strong>. </p>
<p>So, when I wanted to go to Tech.Ed, I didn&#8217;t get the chance and when I got the chance, I didn&#8217;t want to go! <img src='http://www.scratch99.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Given the choice, I would have rather gone to a conference relating to Search Engine Optimisation, Usability, Accessibility, etc. However, there was a position available and we identified a genuine business need for me to go, so along I went. As it turned out, <strong>I did get some real value from it</strong>.</p>
<h2>Arriving At Tech.Ed</h2>
<p>Tech.Ed 2009 was held at the <strong>Gold Coast Convention and Exhibition Centre</strong> at Broadbeach, just across the road from Jupiter&#8217;s Casino. </p>
<p>I drove down from Brisbane in the morning, arriving a little after 9am. I parked at the Casino and walked across. The Exhibition Centre was bustling with people as I collected my ticket and the HP Mini that every attendee is given, then headed off to find the session I&#8217;d earmarked for 9:45am. </p>
<p>One of the things I noticed was that about 99% of the people in centre were male! There were more women in the web sessions (perhaps 10%), but the low number of women was was really noticeable, especially in out in the corridors. </p>
<h2>The HP Mini</h2>
<p>Whilst waiting for my first session to begin, I fired up the HP Mini and had a go with it. I have to say I was very impressed with it. It was running <strong>Windows 7 Ultimate</strong>, which seems nice (better than Vista) at first glance. It carries an Intel Atom N270 1.6GHz processor, 2 GB RAM and a 149GB HDD. </p>
<p>I have an Acer Aspire 1 netbook that I use each day on the train and I have to say that that the HP Mini tops it. Although the maximum resolution is similar (1024 x 600 for the Acer, 1024 x 576 for the HP), the HP Mini&#8217;s 10 inch screen was bigger than my Acer&#8217;s 9 inch screen. The overall physical size of the HP Mini wasn&#8217;t noticeably larger, although the keyboard did seem bigger and more comfortable to use. Battery life and overall quality both seemed better . </p>
<p>Logistics wise, there were plenty of recharging points around the exhibition centre where you could recharge your HP Mini. These were mostly full, most of the time, but there were always some spaces available. </p>
<p>The wireless network connection was decent throughout the day, although it did drop out once for about 10 minutes and there were some slow moments (mostly during lunch time). </p>
<p>Having <strong>the HP Mini was very useful</strong>, as it allowed me to make notes on the fly. When I&#8217;m back at work, it&#8217;ll be much easier to action these notes. If I&#8217;d used pen and paper, the notes would probably sit on my desk for a month before I typed everything up. Now it&#8217;s mostly done, I just need to tidy them up a little. </p>
<p>It also made me think about <strong>live blogging</strong>. I&#8217;ve read posts by live bloggers such as <a href="http://outspokenmedia.com/about/lisa-barone/" target="_blank">Lisa Barone</a> and have been impressed by what they&#8217;ve been able to do. Now, all of a sudden, I was sitting in a conference with a laptop and an internet connection. It wouldn&#8217;t have been a big step to turn my note taking into live blogging &#8211; but in the end, I was on my employer&#8217;s time and they need me to spend that little bit extra time concentrating on how we could apply what I learnt, rather than trying to capture everything and blog about it. </p>
<h2>Lunch And Goodies</h2>
<p>You can&#8217;t talk about a conference without talking about:</p>
<ol>
<li>the food </li>
<li>the giveaways </li>
</ol>
<p>On the food and beverage side of things, free coffee was in plentiful supply &#8211; both from &#8216;make your own&#8217; service points and from proper coffee stands (but there were big queues at time). </p>
<p>Lunch was great, although they did run out of food as I got to the head of the queue and we had to wait 5 minutes till they got some more food out. The food itself was great for a conference and there was everything you&#8217;d expect. </p>
<p>The items put out for afternoon tea were interesting. They looked more like a kids party than a conference: bright coloured jellies, sherbet cones, chocolates coated in hundreds and thousands. Geek food perhaps? An interesting choice anyway. There was free ice cream somewhere, but I missed it. </p>
<p>As for giveaways, they were in very short supply, especially compared to the library software shows I&#8217;ve been to in the past. There was virtually nothing, even in the Expo room. Of course, <strong>all attendees were given a HP Mini</strong>, so I can&#8217;t complain about the lack of pens, hats and other such things! </p>
<h2>Sessions</h2>
<p>It&#8217;s time I started talking about the sessions! I attended 5 sessions in all and I&#8217;ve outlined my thoughts (and the official description from the Tech Ed website) below. </p>
<h3>WEB304 Building Silverlight applications for Microsoft Dynamics CRM</h3>
<p><strong>Presenter</strong>: <a href="http://twitter.com/sundium" target="_blank">Jian Sun</a> </p>
<p><strong>When</strong>: Thu 9/10 | 9:45-11:00 | Meeting Room 8</p>
<p><strong>Official Description</strong>: </p>
<p>We start with demonstrating some real world examples of Silverlight applications built on Microsoft Dynamics xRM implementations. We then will look at how Microsoft Silverlight can be used to deliver richer experiences within Dynamics CRM applications. We&#8217;ll explain the fundamentals of XAML and Silverlight before discussing hosting and connectivity approaches to integrate Silverlight applications into both the Out of Box CRM UI as well as Customer Self Service we portals. This session will provide a practical how-2 demonstration of a Silverlight based Dashboard for Dynamics CRM</p>
<p><strong>My Comments</strong>: </p>
<p>The Citrix session next door was was packed, with several hundred people fighting to get in the doors. In contrast, there was no trouble getting into Building Silverlight applications for Microsoft Dynamics CRM and there was total of only about 50 people in the session. </p>
<p>The presenter, Sun Jian, was quite likeable. He started off by saying that we needed some knowledge on</p>
<ol>
<li>Microsoft CRM </li>
<li>Silverlight </li>
<li>C#. </li>
</ol>
<p>Three strikes for me before he even got on to the topic! </p>
<p>The topic was of very little use to me, either personally or professionally. This was the only web session on at the time and there was nothing else on of interest to me, so there I was. </p>
<p>We got to see a Silverlight application being developed. He used <strong>Visual Studio</strong> to create the app, along with <strong>Expression Blend</strong> to style the user interface. It made me wonder whether Silverlight applications can be developed with alternative (ie non Microsoft) software. </p>
<p>I&#8217;ll have to look into it as I don&#8217;t have either &#8211; not that I&#8217;m expecting to develop any Silverlight apps in the near future. Actually, I&#8217;m still wondering <strong>why anyone would choose Silverlight over Flash</strong>, which would be present on a much greater number of computers. If anyone has views on this, please let me know via the comments below. </p>
<p>One useful tidbit I did pick up was that Silverlight doesn&#8217;t need the full .NET framework to run. That makes sense if they&#8217;re trying to compete with Flash &#8211; they&#8217;d need to keep the size of the player as low as possible. </p>
<p>Sun Jian embedded the Silverlight app in an iFrame within Microsoft CRM, passing parameters to Silverlight via the code calling the iFrame (I think). Quite interesting. </p>
<p>He did have a problem with the Silverlight app working, which turned out to be a spelling mistake. Haven&#8217;t we all been there! Anyway, Sun recovered well using humour to turn the problem to his advantage.</p>
<h3>WEB305 Modular User Interfaces: Easier than Ever</h3>
<p><strong>Presenter</strong>: Omar Besiso </p>
<p><strong>When</strong>: Thu 9/10 | 11:30-12:45 | Arena 1B</p>
<p><strong>Official Description</strong>: </p>
<p>WPF &amp; Silverlight, the new cool neighbours you always wanted to have. Yet you&#8217;re still scared to introduce yourself. Well in this session Omar Besiso will not only introduce to the beautiful world of simple WPF, but will also show you using the WPF composite framework &amp; the Model-View-ViewModel pattern how you can build highly scalable user interfaces with very appealing user experiences. After the session you will think twice before using any other technology for your windows or web apps. </p>
<p><strong>My Comments</strong>: </p>
<p>Once again, this session didn&#8217;t promise much of interest me: I don&#8217;t develop Silverlight applications and I don&#8217;t use WPF. In fact, I&#8217;ve never even heard of WPF, which as it turns out, stands for <a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation" target="_blank">Windows Presentation Foundation</a>.</p>
<p>Although in the Web stream, this session only had a tenuous connection to web development. Web applications development perhaps (quote description: &quot;for your windows or web apps&quot;), but not straight up web development. </p>
<p>The session was held in a much larger room, with tiers of chairs flowing from the upper level of the building, down to the stage on the ground level. There were a couple hundred people. It was quite dark (ie too dark) compared to the first room. </p>
<p>Omar started off saying he was going to <strong>build an RSS reader</strong> using WPF. That peaked my interest as I&#8217;ve written various PHP scripts that work with RSS feeds. However, it didn&#8217;t turn out as interesting as it sounded and I consulted my schedule. </p>
<p>There was a &quot;discussion&quot; over lunch that I wanted to attend. As the Modular User Interfaces session didn&#8217;t really have anything applicable to me, I left early (after 40 minutes) and headed off to try to get an early lunch.</p>
<h3>BOF007 SharePoint, .Net and SQL blended applications</h3>
<p><strong>Presenter</strong>: <a href="http://laneyvb.blogspot.com/" target="_blank">Elaine van Bergen</a> </p>
<p><strong>When</strong>: Thu 9/10 | 12:45-13:45 | Meeting Room 5</p>
<p><strong>Official Description</strong>: </p>
<p>Join Elaine van Bergen in this discussion as to why SharePoint is a powerful platform which is increasingly used to build applications. This session will include discussion on methods for addressing the many challenges faced in scenarios such as: </p>
<ul>
<li>A complete custom user interface build on top of SharePoint, such as a public facing internet site</li>
<li>SharePoint application with complex relational components provided by SQL Server integration</li>
<li>An ASP.Net application running beside SharePoint using components such as search</li>
<li>A generic application that is written in a way to be able to switch in and out SharePoint</li>
</ul>
<p>The knowledge discussed will be based on recently completed SharePoint projects and will include debate on pros and cons of various approaches, approaches for .net developers moving to SharePoint, ways to avoid or workaround common problem including when to just use a pure custom build instead of SharePoint.</p>
<p><strong>My Comments</strong>: </p>
<p>This session was the highlight of the day for me and I have extensive notes on it &#8211; so many that I&#8217;ve decided to put them into a separate Sharepoint post (coming soon). </p>
<h2>WEB208 Your Windows Live Messenger Web Toolkit </h2>
<p><strong>Presenter</strong>: Vaughan Knight </p>
<p><strong>When</strong>: Thu 9/10 | 13:45-15:00 | Meeting Room 9 </p>
<p><strong>Official Description</strong>: </p>
<p>Hook your website instantly into a social graph of over 400 million users with Windows Live Messenger Web Toolkit. In this session Vaughan Knight will discuss how to get started with the Live Messenger UI controls, and then dive in deep with the Windows Live Messenger API. Come away from this session knowing how to connect sites and build applications that to reach out into the Live Messenger social network. Learn how to use the Live Messenger API to allow your site and users to interact with the social graph, send messages, integrate and build applications with Silverlight, and create site features that are social graph aware. </p>
<p><strong>My Comments</strong>: </p>
<p>There were only 5 people at this session (20% female which must be a record for the day). The session was showing <strong>how to integrate the Live Messenger Web Toolkit into your website</strong>, adding social media abilities to your site. </p>
<p>The most obvious feature seems to be ability to add chat to your website, allow users to give you instant feedback via an Instant Messenger embedded in your site. There are quite a few other solutions for live chat, but if you&#8217;re a fan of the Microsoft Instant Messenger client, this may be the solution for you. </p>
<p>The web toolkit also includes other features that utilise the network of Live Messenger users. For example a Live Messenger bar can be added to the bottom of your web pages and visitors who are logged into Live Messenger have access to additional functionality. </p>
<p>Apparently it is easy to set up out of the box, but you can also create your own interface using either: </p>
<ul>
<li>HTML UI controls (XHTML), along with server side components for .NET, PHP etc. </li>
<li>Live Messenger UI controls (Flash, Silverlight, Java applet), along with the same server side components. </li>
</ul>
<p>This session was sort of interesting, but didn&#8217;t really catch me, for several reasons: </p>
<ul>
<li>To be honest, I was still writing up my notes on the Sharepoint session, which has far more importance for me. </li>
<li>The web toolkit is probably not appropriate for my organisation&#8217;s websites (at least for the moment). </li>
<li>I&#8217;m not likely to use it on any of my personal sites, and following on: </li>
<li>Lets face it, Microsoft just aren&#8217;t cool when it comes to Social Media. Integrate Twitter? COOL!! Integrate Live Messenger? zzzz&#8230; </li>
</ul>
<p>Still an interesting attempt by Microsoft to get more involved in social media. </p>
<h3>WEB306 Building Fast, Standards Compliant ASP.NET sites</h3>
<p><strong>Presenters</strong>: <a href="http://twitter.com/DamianEdwards" target="_blank">Damian Edwards</a>, <a href="http://twitter.com/tathamoddie" target="_blank">Tatham Oddie</a> </p>
<p><strong>When</strong>: Thu 9/10 | 15:30-16:45 | Arena 2 </p>
<p><strong>Official Description</strong>: </p>
<p>In this demo-packed session, Damian Edwards (MVP) and Tatham Oddie (MVP) will share their experiences from building Australia&#8217;s largest e-commerce site with ASP.NET Web Forms. They&#8217;ll show you how to be a good web citizen by covering standards compliance (properly!), cross browser and accessibility considerations, non-JavaScript support, coding techniques like the Model-View-Presenter pattern to improve maintainability and testing, as well as both client and server side performance. Along the way, there&#8217;ll be plenty of discussion of the differences between Web Forms and ASP.NET MVC in each area, as well as an early peek at some of the new features coming in ASP.NET 4 and VS 2010. </p>
<p><strong>My Comments</strong>: </p>
<p>This was a great session, looking at <strong>how to run and optimise a high traffic website</strong>, based on the presenters&#8217; experience with <a href="http://www.graysonline.com/" target="_blank">graysonline.com</a>. </p>
<p>It was the only session, in the whole day, that had a lot of value for non ASP .NET web developers, covering issues such as doctypes, CSS, accessibility, jQuery, Firefox extensions, improving performance, etc. </p>
<p>For me, the session fell neatly into two halves: </p>
<ul>
<li>The first half which, although interesting, wasn&#8217;t anything I hadn&#8217;t heard of before (via my RSS reader); and </li>
<li>The second half which truly pushed the boundaries of my knowledge. </li>
</ul>
<p>I&#8217;ll briefly list some of the things they covered: </p>
<p>They focused on markup. They are proponents of using XHTML 1.1 Strict, which I found interesting. I&#8217;m still using XHTML 1.0 Transitional for most things. I find Strict too &#8230; strict. So I respect them for making the effort to use Strict. They did mention that moving forward they are going to try to use HTML5 more, now that the <a href="http://www.h-online.com/open/XHTML-2-to-be-discontinued--/news/113686" target="_blank">XHTML project has officially been discontinued</a>. </p>
<p>They used <a href="http://cssfriendly.codeplex.com/" target="_blank">CSS friendly code adaptors</a>, to change what the server delivers at run time. This one is an ASP .NET only one, although there are probably similar utilities out there for other languages. </p>
<p><strong>Visual Studio 2010 was their IDE of choice</strong>. I have to say that the code completion / sanitization functionality looks pretty good, up there with anything I&#8217;ve seen. Of course I won&#8217;t be using it any time soon, what with the price and so many good cheap alternatives out there. </p>
<p><strong>Accessibility!</strong> The Sydney Olympic case was raised (it&#8217;s the poster child for accessibility related legal cases). They said to make sure that the site complies with <strong>WAI, WCAG, WAI-ARIA, WebAIM</strong> and <strong>WAVE</strong>. This is important not just for people, but also for search engines such as Google and Bing (they&#8217;re the ones they named). </p>
<p>Regarding optimisation, they used Firefox, &quot;as all web developers should&quot;, along with Firebug and Y-Slow to measure performance. Their main tip was to reduce http requests, through the use of <strong>CSS sprites, combining JavaScript files, combining CSS files</strong> etc. Their combined JavaScript file was 250KB and the HTML was 120KB, before being compressed using GZip. </p>
<p>For ASP .NET developers out there, you can&#8217;t use the built in automatic method to add scripts, as it will include the files individually. You need to combine the files manually, then call the combined file. They also said to <strong>set Load scripts before UI to false</strong>, so the JavaScript loads lower down the page. </p>
<p>They used <a href="http://www.fiddler2.com/fiddler2/" target="_blank">Fiddler</a> to slow the download speed to emulate dial up. They added version numbers to the CSS and JavaScript file URLs, so that new files can be forced to be used (ie instead of the old ones in the cache). </p>
<p>They talked about <strong>using different subdomains to serve up images</strong> etc, to get around the limitation on concurrent downloads from the same server. They mentioned that Bing maps use 4 subdomains for tiles, so more can be served up at the same time. However, if you&#8217;re doing this, you can&#8217;t use etag for caching because it doesn&#8217;t handle multiple servers for delivery. </p>
<p>High traffic websites should have a <strong>full time front end web engineer</strong> for UX (User Experience) and Accessibility. </p>
<p>A very clever tip for scaling: When server load is light, they use heavy GZip compression. As server load increases, the amount of compression decreases, meaning less work for the server (for each page served up), but larger files for the end user. Clever. </p>
<h2>Final Thoughts</h2>
<p>Well that wraps it up. I had a good time and learnt a fair bit at Tech.Ed 2009. It still would be my conference of choice, but I&#8217;m glad I went.</p>
<script type="text/javascript">Nifty("div.csstextbox1","bgcolor-#FFFFFF");</script><img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/eElHiqhS7Y4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2009/09/microsoft-tech-ed-australia-2009-thursday/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Greasemonkey Script To Number Google SERPs</title>
		<link>http://www.scratch99.com/2009/09/new-greasemonkey-script-to-number-google-serps/</link>
		<comments>http://www.scratch99.com/2009/09/new-greasemonkey-script-to-number-google-serps/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 03:15:04 +0000</pubDate>
		<dc:creator>Stephen Cronin</dc:creator>
				<category><![CDATA[Web Related]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[SERPs]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.scratch99.com/?p=207</guid>
		<description><![CDATA[Copyright © 2010 Stephen Cronin. Visit the original article at http://www.scratch99.com/2009/09/new-greasemonkey-script-to-number-google-serps/.I&#8217;d like to announce the release of my second Greasemonkey script: Google Numbered Search Results; which numbers the SERP entries delivered by the Google search engine. Other Scripts To Number Google Search Results If you&#8217;re someone who&#8217;s likely to use this (ie an SEO practitioner [...]]]></description>
			<content:encoded><![CDATA[Copyright © 2010 <a href="http://www.scratch99.com">Stephen Cronin</a>. Visit the original article at <a href="http://www.scratch99.com/2009/09/new-greasemonkey-script-to-number-google-serps/">http://www.scratch99.com/2009/09/new-greasemonkey-script-to-number-google-serps/</a>.<br /><p>I&#8217;d like to announce the release of my second <a href="https://addons.mozilla.org/firefox/addon/748" target="_blank">Greasemonkey</a> script: <a href="http://www.scratch99.com/greasemonkey-script-google-numbered-search-results/">Google Numbered Search Results</a>; which numbers the <abbr title="Search Engine Results Pages">SERP</abbr> entries delivered by the <a href="http://www.google.com/" target="_blank">Google search engine</a>. </p>
<h2>Other Scripts To Number Google Search Results</h2>
<p>If you&#8217;re someone who&#8217;s likely to use this (ie an SEO practitioner or website administrator checking their rankings), you&#8217;re probably saying &quot;Wait! Aren&#8217;t there already Greasemonkey scripts for this?&quot; </p>
<p>Yes there are.</p>
<p>For years, I&#8217;ve relied on the <a href="http://www.addedbytes.com/tools/numbered-google-results-user-script/" target="_blank">Numbered Google Results</a> script, but it seems it&#8217;s not being updated. When Google introduced the <strong>SearchWiki</strong> functionality, it stopped working, prompting me to write a <a href="http://www.scratch99.com/2008/11/searchwiki-breaks-numbered-google-results-easy-fix/">simple hack to fix the problem</a>. I left a comment on the script&#8217;s home page, but the fix wasn&#8217;t added to the script. I&#8217;m not complaining, because I didn&#8217;t email the author (Dave Child) directly &#8211; I had my fix and, as a user, I was happy. </p>
<p>Now, Google has introduced <strong>AJAX powered search results, which has broken Numbered Google Results</strong> again (along with many other Greasemonkey scripts). AJAX powered search results have been being phased in for a while now, but recently it&#8217;s become a lot more common. </p>
<p>There&#8217;s also another script, <a target="_blank" href="http://userscripts.org/scripts/show/35428">Google Search Results &#8211; Numbered</a>, but it starts at 1 on every page. For example, items on the first page of results will be numbered 1 to 10 and items on the second page will also be numbered 1 to 10 (instead of 11 to 20). I didn&#8217;t even bother seeing if it worked with the AJAX powered search. </p>
<h2>What This Script Offers</h2>
<p>Instead, I wrote my own script, which <strong>works with the AJAX powered search results, SearchWiki and can number entries appropriately</strong> for pages other than the first one.</p>
<p>I didn&#8217;t mean to write my own. I started off <strong>hacking Numbered Google Results</strong>, but I ran into a serious problem I couldn&#8217;t resolve, so I started again from scratch. As it happens, I encountered the same problem and my eventual solution could have worked with Numbered Google Results. </p>
<div class="csstextbox1">I&#8217;ve got no problem if the author of Numbered Google Results wants to fix his script and keep his place as the number script for numbering the Google SERPs. Open source is great!</div>
<p>My eventual solution will also <strong>help many other Greasemonkey scripts for Google Search</strong>, so I&#8217;ll write up what I did in case it&#8217;s useful for others &#8211; although I should point out I didn&#8217;t actually make it work with the AJAX powered search results, I just worked out how to bypass them and force the use of the traditional search.</p>
<p>This may not work forever, as Google may eventually turn off the traditional search, but such is the life of a Greasemonkey script: <strong>when the site changes, the script breaks</strong>. </p>
<h2>Acknowledgements</h2>
<p>As with my first Greasemonkey script, <a href="http://www.scratch99.com/greasemonkey-script-bing-numbered-search-results/">Bing Numbered Search Results</a>, I&#8217;ve embedded <a href="http://jquery.com/" target="_blank">jQuery</a>. Thanks to John Resig and his team! </p>
<p>I started by hacking the <a href="http://www.addedbytes.com/tools/numbered-google-results-user-script/" target="_blank">Numbered Google Results</a> script, which obviously helped me write my own. Thanks to Dave Child for a great plugin to start with.</p>
<h2>Where Can I Get It</h2>
<p>You can find out more about it at the <a href="http://www.scratch99.com/greasemonkey-script-google-numbered-search-results/">Google Numbered Search Results</a> home page or you can skip straight to <a href="http://userscripts.org/scripts/show/57306" target="_blank">Userscripts.org</a> if you want to download it.</p>
<script type="text/javascript">Nifty("div.csstextbox1","bgcolor-#FFFFFF");</script><img src="http://feeds.feedburner.com/~r/MoreThanScratchTheSurface/~4/6uiIYcTxcLY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.scratch99.com/2009/09/new-greasemonkey-script-to-number-google-serps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk (enhanced)
Database Caching 2/36 queries in 0.011 seconds using disk
Object Caching 1095/1168 objects using disk

Served from: www.scratch99.com @ 2010-08-31 01:42:47 -->
