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

<channel>
	<title>Ben Everard, Web Developer</title>
	<atom:link href="http://beneverard.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://beneverard.co.uk</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 07:01:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Understanding event delegation</title>
		<link>http://beneverard.co.uk/blog/understanding-event-delegation/</link>
		<comments>http://beneverard.co.uk/blog/understanding-event-delegation/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 12:30:35 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[delegation]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[off]]></category>
		<category><![CDATA[on]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=615</guid>
		<description><![CDATA[For the past few years I&#8217;ve been rocking jQuery&#8230; well, doing okay at it. Ever since jQuery 1.7 came out we&#8217;ve been able to play with the new .on() method, however it was only recently when I realised why I &#8230; <a href="http://beneverard.co.uk/blog/understanding-event-delegation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For the past few years I&#8217;ve been rocking jQuery&#8230; well, doing okay at it. Ever since jQuery 1.7 came out we&#8217;ve been able to play with the new <code>.on()</code> method, however it was only recently when I realised why I should be using <code>.on()</code> instead of <code>.live()</code>, and indeed any other event methods.</p>
<p>Event delegation is the topic of today&#8217;s post as it was the primary reason for me not understanding <code>.on()</code>, and I&#8217;m writing about it because it took someone to tell me about it for it to sink in&#8230; so keep reading and I may be able to do the same for you.</p>
<p><span id="more-615"></span></p>
<h2>Our example code</h2>
<p>So for the purpose of this post, let&#8217;s assume we have a table, and in that table we have 500 rows, we&#8217;ll only show a few but imagine there are many more there.</p>
<pre>&lt;table&gt;
    &lt;tr&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;/tr&gt;
    ... many more rows
&lt;/table&gt;</pre>
<p>For our example event we&#8217;ll fire an alert box when a row is clicked, nice and simple.</p>
<h2>Event bubbling</h2>
<p>One thing you need to understand about events in jQuery is event bubbling, it&#8217;s quite simple really, when an event fires on an element, it also fires on each of its parents up the DOM to the document*. This means when we click on one of our table rows the table also receives a click event, and so does each parent until we hit the document level.</p>
<p>* Some events don&#8217;t do this, such as submit</p>
<h2>Non-delegation event binding</h2>
<p>So if you&#8217;re like me and haven&#8217;t used event delegation yet you might use a very simple selector to base your event on, we want to target the click event on all rows right? Easy!</p>
<pre>$('table tr').click(function() {
    alert("A normal click event");
});</pre>
<p>So that was pretty easy, and it does exactly what we want it to do, but what are we actually telling jQuery to do? We&#8217;re asking it to bind an event to every matching element based on our selector, this event is being bound to 500 individual elements!</p>
<p>It goes without saying that this is an inefficient method of binding an event, but how can we improve it?</p>
<h2>Event delegation</h2>
<p>Right, so how can event delegation improve our standard selector? Remember what we discussed previously about events bubbling up the DOM, every table row click also fires a table click? Well we can take advantage of event bubbling by applying our click event to the parent table, and check if the clicked item was the table row. In other words we&#8217;ll be delegating the click event to the table.</p>
<p>We&#8217;re doing a bit more work in our event, but we now only have one bound event. Actually, as developers we&#8217;re not doing any extra work&#8230; jQuery gives us the tools to delegate easily, take a look at this:</p>
<pre>$('table').on('click', 'tr', function() {
    alert("We're delegating baby");
});</pre>
<p>So lets explain exactly what we&#8217;ve done, our selector targets the table and the first parameter of the on method is the event type, click in this instance. The second parameter is where our delegation is set, we pass through the context of tr, this tells jQuery that we&#8217;re delegating the click event from the table row to the parent table.</p>
<p>This method improves performance as the number of events bound is significantly reduced (from 500 to one), but we also take advantage of another side effect, being able to fire events against dynamically inserted content. So if you dynamically add another 500 rows to the table our last event will still fire on all of them, with no extra work. Whereas the <code>.click()</code> event would not, as the new rows would not have an event bound directly to them.</p>
<h2>Alternative to .live()</h2>
<p>At uzERP I migrated our JavaScript framework from Prototype to jQuery about two years ago, and ever since we&#8217;ve been using the <code>.live()</code> event method for practically everything, as lots of our content is dynamically inserted from AJAX requests.</p>
<p>The <code>.live()</code> method employs event delegation to allow you to bind events to an element, even if it doesn&#8217;t exist at runtime or is replaced thereafter. The issue is <code>.live()</code> bubbles the event right up to the document level, and then checks where it came from to determine which event(s) to fire, that&#8217;s a lot of bubbling.</p>
<p>The .live() method was deprecated in jQuery 1.7, and only remains for legacy reasons. Thus take a moment to improve your code and go and remove <code>.live()</code> for <code>.on()</code>, I know I will be.</p>
<p>Happy delegating!</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/understanding-event-delegation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Siege! Benchmarking your web applications</title>
		<link>http://beneverard.co.uk/blog/siege-benchmarking-your-web-applications/</link>
		<comments>http://beneverard.co.uk/blog/siege-benchmarking-your-web-applications/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 20:42:55 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[Benchmarking]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[siege]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=565</guid>
		<description><![CDATA[Performance is absolutely everything&#8230; well, perhaps not everything, but it&#8217;s bloody important! It&#8217;s useless trying to improve the performance of your web app if you&#8217;ve no way of measuring your success. With this in mind you might want to add &#8230; <a href="http://beneverard.co.uk/blog/siege-benchmarking-your-web-applications/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Performance is absolutely everything&#8230; well, perhaps not everything, but it&#8217;s bloody important! It&#8217;s useless trying to improve the performance of your web app if you&#8217;ve no way of measuring your success.</p>
<p>With this in mind you might want to add <a href="http://www.joedog.org/index/siege-home">Siege</a> to your tool belt. Siege is a regression and benchmarking tool that allows you to throw a load of concurrent requests at your app within a specific time frame. Keep reading for an introduction to Siege.</p>
<p><span id="more-565"></span></p>
<p>I&#8217;m going to be running Siege on my Debian 6 server, this process should be the same for Ubuntu, although you might have to do a bit more work to get going on other linux flavours.</p>
<p>So, lets install Siege:</p>
<pre>sudo apt-get install siege</pre>
<p>That was easy, <code>apt-get</code> will resolve dependencies for you so if everything&#8217;s gone well you should be able to get stuck right in, lets say we&#8217;ve got a WordPress instance under localhost that we want to test, simply run this command:</p>
<pre>siege -c 5 -b -t30s 'http://localhost'</pre>
<p>Here&#8217;s a quick explanation of the options we&#8217;ve used above:</p>
<ul>
<li><code>-c 5</code> &#8211; run with five concurrent requests</li>
<li><code>-b</code> &#8211; benchmark mode</li>
<li><code>-t30s</code> &#8211; time, run for 30 seconds</li>
<li><code>http://localhost</code> &#8211; the target of the benchmark</li>
</ul>
<p>When Siege has completed benchmarking your app we get this back:</p>
<pre>Lifting the server siege...      done.
Transactions:		          <strong>21 hits</strong>
Availability:		      100.00 %
Elapsed time:		       29.35 secs
Data transferred:	        0.55 MB
Response time:		        <strong>5.75 secs</strong>
Transaction rate:	        0.72 trans/sec
Throughput:		        0.02 MB/sec
Concurrency:		        4.12
Successful transactions:          21
Failed transactions:	           0
Longest transaction:	        8.16
Shortest transaction:	        4.73</pre>
<p>We could analyse each of the bits of data above, and which piece of data you analyse and compare is really specific to what you&#8217;re trying to find out from your benchmarking. For the work I do I&#8217;m really interested in reducing the response time, of which will impact on how many transactions will complete in our 30 seconds of benchmarking.</p>
<p>Of course like any experiment you&#8217;ll need a set of figures to act as your control, run Siege before making changes to your app and then again after each revision, being able to compare before and after will give you a handle on whether your changes are improving performance.</p>
<p>There are plenty of options for using Siege, an explanation of which can be found on the <a href="http://www.joedog.org/index/siege-manual">Siege manual page</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/siege-benchmarking-your-web-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jqPagination, a jQuery Pagination Plugin (Obviously)</title>
		<link>http://beneverard.co.uk/blog/jqpagination-a-jquery-pagination-plugin-obviously/</link>
		<comments>http://beneverard.co.uk/blog/jqpagination-a-jquery-pagination-plugin-obviously/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 12:16:42 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[jQuery Plugins]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=512</guid>
		<description><![CDATA[jqPagination is a jQuery plugin that provides a newer method of pagination for your web site or application. Instead of displaying a list of page numbers like traditional pagination methods jqPagination uses an interactive &#8216;Page 1 of 5&#8242; input that, &#8230; <a href="http://beneverard.co.uk/blog/jqpagination-a-jquery-pagination-plugin-obviously/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>jqPagination is a jQuery plugin that provides a newer method of pagination for your web site or application. Instead of displaying a list of page numbers like traditional pagination methods jqPagination uses an interactive &#8216;Page 1 of 5&#8242; input that, when selected, allows the user to enter their desired page number.</p>
<p>The plugin will ensure that only valid pages can be selected, a valid request will result in the paged callback. First, previous, next and last buttons work out of the box, but are optional.</p>
<p style="margin: 30px 0;"><a class="super yellow button demo" href="http://beneverard.github.com/jqPagination/" target="_blank">Demo</a><a class="super yellow button download" href="https://github.com/beneverard/jqPagination/zipball/master">Download</a></p>
<p style="margin: 30px 0;"><span class="Apple-style-span" style="color: #000000; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 12px; line-height: 18px;"><img class="size-full wp-image-520 alignnone" title="jqpaginaton" src="http://cdn.beneverard.co.uk/wp-content/uploads/2011/09/jqpaginaton.jpg" alt="" width="580" height="350" /></span></p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/jqpagination-a-jquery-pagination-plugin-obviously/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress: Loading jQuery correctly, version 2</title>
		<link>http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly-version-2/</link>
		<comments>http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly-version-2/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 11:46:56 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=539</guid>
		<description><![CDATA[A few months ago I posted a bit of code to properly load jQuery within WordPress, the original issue (which existed on 50% of WordPress sites I looked at that day) was jQuery being loaded twice. This issue would cause &#8230; <a href="http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly-version-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A few months ago I posted a bit of code to <a href="http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly/">properly load jQuery within WordPress</a>, the original issue (which existed on 50% of WordPress sites I looked at that day) was jQuery being loaded twice. This issue would cause extra weight to download for the user, but most of the solutions would remove jQuery from WordPress&#8217; resource queue without putting something back to satisfy other scripts that depend on jQuery.</p>
<p>Since my first version I&#8217;ve further improved the jQuery / WordPress fix, ironing out a few issues I found making this a simper and less restrictive fix, in this post I address these issues and demonstrate an improved method of loading jQuery into your WordPress theme.</p>
<p><span id="more-539"></span></p>
<h2>Issues with the previous version</h2>
<ul>
<li>Generating protocol relative URLs in PHP is a bit of a pain</li>
<li>Difficult to provide fallback jQuery file</li>
<li>Too much emphasise on functions file instead of theme file</li>
</ul>
<h2>How do we solve these issues?</h2>
<p>Easy, go back to loading jQuery in your themes header.php file, load it how you used to in the good old days&#8230; just like the example given in the HTML5 boilerplate:</p>
<div class="hero"></p>
<pre class="brush: xml">&lt;!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline --&gt;
&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"&gt;&lt;/script&gt;
&lt;script&gt;window.jQuery || document.write('&lt;script src="js/libs/jquery-1.6.4.min.js"&gt;&lt;\/script&gt;')&lt;/script&gt;</pre>
<p></div>
<p>We still need to register jQuery with WordPress, so my first thought was to load an empty &#8216;dummy&#8217; js file, however WordPress doesn&#8217;t actually need to load a file to register jQuery as an available dependancy. With that in mind look here&#8217;s the improved fix:</p>
<div class="hero"></p>
<pre class="brush: php">function load_jquery() {

    // only use this method is we're not in wp-admin
    if (!is_admin())
    {

        // deregister the original version of jQuery
        wp_deregister_script('jquery');

        // register it again, this time with no file path
        wp_register_script('jquery', '', FALSE, '1.6.4');

        // add it back into the queue
        wp_enqueue_script('jquery');

    }

}

add_action('template_redirect', 'load_jquery');</pre>
<p></div>
<p>Notice we&#8217;ve deregistered the original version, registered a new version (which just so happens to have no file associated with it), then placed it back in the queue. Now any other JavaScript files that depend on jQuery will load, as WordPress recognises the dependancy (jQuery) has been set. I also figured we&#8217;d need to keep the version number in there just in case another script references a specific version dependency.</p>
<p>A good example of a WordPress plugin that has JavaScript files that depend on jQuery is <a href="http://wordpress.org/extend/plugins/contact-form-7/">Contact Form 7</a>, of which loses it&#8217;s ability to submit using AJAX is jQuery isn&#8217;t in WordPress&#8217; resources queue.</p>
<p>With this new fix you can load jQuery however you like in your theme, thus kicking the arse of all of the issues I raised at the start of the post! The improvement from the original version seems pretty good although I haven&#8217;t been running for that long.</p>
<p>As always comments are welcome, especially if you spot an issue or think this can be further improved.</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly-version-2/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>The State of Software, Price and Choice</title>
		<link>http://beneverard.co.uk/blog/the-state-of-software-price-and-choice/</link>
		<comments>http://beneverard.co.uk/blog/the-state-of-software-price-and-choice/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 12:35:20 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[7]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=481</guid>
		<description><![CDATA[So yesterday saw the release of Apple&#8217;s latest iteration of their OS X family, Lion. Aside from the fact that this release is download only from the Mac App store, one of the major selling points is it&#8217;s low price, &#8230; <a href="http://beneverard.co.uk/blog/the-state-of-software-price-and-choice/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So yesterday saw the release of Apple&#8217;s latest iteration of their OS X family, <a href="http://www.apple.com/macosx/">Lion</a>. Aside from the fact that this release is download only from the Mac App store, one of the major selling points is it&#8217;s low price, just £20.99 in the UK. Also, following on from all of Apple&#8217;s recent operating systems there is only one domestic version to choose from.</p>
<p>Before the release of Microsoft&#8217;s last operating system, Windows 7, I had hoped that they might have simplified their line up and reduced prices in order to make stepping on board the Windows train slightly easier. But does price and choice really affect the sale of software?</p>
<p><span id="more-481"></span></p>
<h2>Choice</h2>
<p>Just like <a href="http://en.wikipedia.org/wiki/Windows_XP_editions">XP</a> and <a href="http://en.wikipedia.org/wiki/Windows_Vista_editions">Vista</a>, <a href="http://en.wikipedia.org/wiki/Windows_7_editions">Windows 7</a> was release with three different versions (in Europe), six if you include upgrade versions too, these are:</p>
<ul>
<li>Home Premium</li>
<li>Professional</li>
<li>Ultimate</li>
</ul>
<p>When it comes to choice we all know that for most domestic customers Professional and Ultimate are beyond their requirements, but do the customers know that? There&#8217;s an <a href="http://www.thesitewizard.com/webdesign/usability-paralysis-of-choice.shtml">interesting study into how customers react to choice</a>, specifically a wide range of choices, in which the following was proven:</p>
<blockquote><p>When customers were presented with a huge selection of brands of a certain item, fewer customers bought the item than when fewer brands were displayed. The wide selection led to a paralysis of choice &#8211; the customers could not decide which brand to choose. As a result, they went away without choosing any.</p></blockquote>
<p>Now three versions of Windows 7 isn&#8217;t exactly massive choice, but when you consider there are also three upgrade versions this presents are rather interesting set of choices to the user, now it&#8217;s fair to say a technically minded customer wouldn&#8217;t have a problem selecting the version they want, but what about the average user?</p>
<h2>Price</h2>
<p>Before the launch of Windows 7, <a href="http://www.zdnet.co.uk/news/desktop-os/2009/06/25/microsoft-sets-uk-prices-for-windows-7-39667236/">Microsoft announced the UK pricing</a> as follows, upgrade prices in brackets:</p>
<ul>
<li>Home Premium: £149.99 (£79.99)</li>
<li>Professional: £219.99 (£189.99)</li>
<li>Ultimate: £229.99 (£199.99)</li>
</ul>
<p>Their cheapest offering was £150 for a full version, whether this is considered cheap or not is subjective, as is value for money. However in recent times we&#8217;ve seen a rise in low cost software and it&#8217;s been proven lowering the cost of software can increase sales, thus increasing revenue vs normal sales of a high cost unit.</p>
<p>Valve (creators of the Steam platform) ran an experiement where they asked <a href="http://www.next-gen.biz/features/valve-are-games-too-expensive">are games too expensive?</a>, they reduced the price of a game in the hope that it would lead to increased sales. Not only did sales increase but so did revenue:</p>
<blockquote><p>Discounting games does not only increase unit sales&#8211;it increases actual revenues. During the 16-day sale window over the holidays, third-parties were given a choice as to how severely they would discount their games. Those that discounted their games by 10 percent saw a 35% uptick in sales&#8211;that&#8217;s dollars, not units. A 25 percent discount meant a 245 percent increase in sales. Dropping the price by 50 percent meant a sales increase of 320 percent. And a 75 percent decrease in the price point generated a 1,470 percent increase in sales.</p></blockquote>
<p>Low cost software isn&#8217;t restricted to the gaming community either, look at applications in both the Mac App Store and the iOS App Store, <a href="http://techcrunch.com/2011/05/18/angry-birds-tops-200-million-downloads-more-than-double-its-crazy-forecast-tctv/">millions of people</a> were happy to chance a dollar (less than a pound) on the <a href="http://itunes.apple.com/us/app/angry-birds/id343200656?mt=8">Angry Birds</a> game and that&#8217;s claimed to be <a href="http://www.industrygamers.com/news/angry-birds-one-of-the-most-profitable-games-in-history/">one of the most profitable games in history</a>.</p>
<p>Could this work for operating systems too? Mac OS X Lion is available for only £20.99 in the UK, less than most of the software that needs it to run! Not too scientifically Lion hit the top paid app spot on the Mac App Store pretty quickly.</p>
<p><em>Disclaimer: I know Lion is only available to Snow Leopard users at present, and a <a href="http://www.wired.co.uk/news/archive/2011-07/20/os-x-lion-usb-sticks">USB option will be available in August</a> to others at a cost £55, granted twice as expensive as the download only version.</em></p>
<h2>My Thoughts&#8230;</h2>
<p>Considering (as of this post) that in the last year Windows has lost over 3% of it&#8217;s market share compared to a 0.3% increase against Mac and a 2.5% increase for iOS platforms, I think Microsoft will have to do something to slow down / reverse it&#8217;s market share decline, would changing it&#8217;s strategy with regards to choice and price work? I think it would, I cannot help but think a simple proposition wouldn&#8217;t give them a strong product to pitch to customers.</p>
<p>We&#8217;ll just have to for the <a href="http://en.wikipedia.org/wiki/Windows_8">Windows 8</a> release in 2012 to see exactly what approach Microsoft will take.</p>
<p>&nbsp;</p>
<p>What are your thoughts on the matter, is reducing price and choice a good thing? Who are the winners and losers of this type of strategy? I&#8217;d love to hear your opinions in the comments below.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/the-state-of-software-price-and-choice/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress: Loading jQuery correctly</title>
		<link>http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly/</link>
		<comments>http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 22:10:14 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=416</guid>
		<description><![CDATA[Reducing the weight of a website&#8217;s resources has become an obsession for some of us, the practise of decreasing the time it takes for a website to load not only keeps our users happy but is known to be a &#8230; <a href="http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Reducing the weight of a website&#8217;s resources has become an obsession for some of us, the practise of decreasing the time it takes for a website to load not only keeps our users happy but is known to be a <a href="http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html">factor in a site&#8217;s Google ranking</a> and <a href="http://www.peer1.com/hosting/how-slow-websites-impact-visitors-and-sales.php">improve conversion rates</a>.</p>
<p>Only a short while ago I noticed a problem in the way I was handling jQuery in WordPress. To start with I noticed jQuery was being loaded twice, and then after attempting to fix the problem some of my WordPress plugins lost their JavaScript functionality, this blog post will show you how to properly load jQuery so you can delivery a faster site and maintain WordPress script dependancies.</p>
<p><span id="more-416"></span></p>
<p><a href="http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly-version-2/"><strong>Note</strong> &#8211; A new version of this fix is now available.</a></p>
<h2>The problem</h2>
<p>So you&#8217;re creating a WordPress theme and want to use the latest version of jQuery, you might be inclined to put the following code in your template:</p>
<div class="hero"></p>
<pre class="brush: xml">&lt;!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline --&gt;
&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;script&gt;window.jQuery || document.write('&lt;script src="js/libs/jquery-1.6.1.min.js"&gt;&lt;\/script&gt;')&lt;/script&gt;</pre>
<p></div>
<p><em><p class="aside">The code above has been lifted from the <a href="http://html5boilerplate.com/">HTML5 Boilerplate</a>, a popular default HTML5 template</p></em></p>
<p>This is good, we&#8217;ve got a protocol relative version of jQuery from Google&#8217;s CDN and a fallback just in case. But look what happens, jQuery is loaded twice?</p>
<p><a href="http://cdn.beneverard.co.uk/wp-content/uploads/2011/05/duplicate_jquery-3.png"><img class="size-full wp-image-424 alignnone" title="Duplicate jQuery" src="http://cdn.beneverard.co.uk/wp-content/uploads/2011/05/duplicate_jquery-3.png" alt="" width="580" height="294" /></a></p>
<p>The first instance is in fact WordPress loading a local version of jQuery, output by the <code>wp_head()</code> function of which you&#8217;ll find in your <code>header.php</code> file.</p>
<h2>The incorrect fix</h2>
<p>There are couple of examples out there (<a href="http://stackoverflow.com/questions/1157531/how-can-i-remove-jquery-from-the-frontside-of-my-wordpress">here&#8217;s one</a>) that suggest the following method of preventing WordPress loading the local version of jQuery.</p>
<div class="hero"></p>
<pre class="brush: php">wp_deregister_script('jquery');</pre>
<p></div>
<p>This will remove jQuery from WordPress&#8217; list of scripts and is great for stopping the local version being loaded, but it can also cause some of our WordPress plugins to lose their JavaScript functionality, Contact Form 7 is a good example of a plugin that loses it&#8217;s JavaScript, it won&#8217;t be able to submit a form using AJAX.</p>
<p>The reason some plugins might not work correctly using this method is because when you register a JavaScript file within WordPress you can specify dependancies that said file relies on, if that dependancy doesn&#8217;t exist (has been <em><strong>deregistered</strong></em>, for example) the dependant JavaScript file won&#8217;t be included. Look back at the last code example&#8230; see where I&#8217;m going with this?</p>
<h2>The correct fix</h2>
<p>Right, to <em>correctly</em> use a different jQuery source we need to remove the local version and introduce our new version to WordPress. We quite like the idea of using the protocol savvy, minified, Googlefied version, here&#8217;s the code, pop this in your <code>functions.php</code> file:</p>
<div class="hero"></p>
<pre class="brush: php">function load_jquery() {

    // only use this method is we're not in wp-admin
    if (!is_admin()) {

        // deregister the original version of jQuery
        wp_deregister_script('jquery');

        // discover the correct protocol to use
        $protocol='http:';
        if($_SERVER['HTTPS']=='on') {
            $protocol='https:';
        }

        // register the Google CDN version
        wp_register_script('jquery', $protocol.'//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js', false, '1.5.2');

        // add it back into the queue
        wp_enqueue_script('jquery');

    }

}

add_action('template_redirect', 'load_jquery');</pre>
<p></div>
<p>As well as the original deregister, we&#8217;re also discovering the correct protocol to use, then re-queuing jQuery so our script dependancies are satisfied. Now we should be using a decent source for our jQuery, only loading it once and our WordPress plugins can properly use jQuery again.</p>
<p><strong>Note: </strong>We have to detect the protocol server side, if the script path starts with <code>//ajax.googleapis.com</code> WordPress will assume it&#8217;s path is part of your domain, like this http://mydomain.com/ajax.googleapis.com.</p>
<p>&nbsp;</p>
<p>Hopefully you&#8217;ll find this solution useful, in a very un-scientific test earlier I found about half of WordPress driven blogs from people I follow on <a href="http://twitter.com/ilmv">Twitter</a> suffered from this issue of loading two versions of jQuery, hopefully with this example we&#8217;ll be able to reduce the size of our site and maintain jQuery within WordPress.</p>
<p>As always if you spot a mistake or think something could be don better, don&#8217;t hesitate to leave a comment below.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/wordpress-loading-jquery-correctly/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Age verification, one easy step to piss off your customers*</title>
		<link>http://beneverard.co.uk/blog/age-verification-one-easy-step-to-piss-off-your-customers/</link>
		<comments>http://beneverard.co.uk/blog/age-verification-one-easy-step-to-piss-off-your-customers/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 19:51:43 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=364</guid>
		<description><![CDATA[Oh brother, I fear the next few blogs posts of mine might just start with a rant&#8230; this one&#8217;s no exception. You may or may not be aware of a feature o2 have recently implemented on their mobile internet of &#8230; <a href="http://beneverard.co.uk/blog/age-verification-one-easy-step-to-piss-off-your-customers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Oh brother, I fear the next few blogs posts of mine might just start with a rant&#8230; this one&#8217;s no exception.</p>
<p>You may or may not be aware of a feature o2 have recently implemented on their mobile internet of which verifies a users age before they&#8217;re allowed on a website that might not be suitable for under 18s. This age verification check seems to have annoyed many of the people I follow on the internet (<a href="http://paulclarke.com/honestlyreal/2011/03/dear-o2/">one such example</a>), but it didn&#8217;t bother me, as I had moved from o2 to GiffGaff a few months ago this wouldn&#8217;t effect me&#8230; or so I though.</p>
<p><span id="more-364"></span></p>
<p>I already knew GiffGaff were part of the o2 network, however had assumed that the age verification &#8220;feature&#8221; wouldn&#8217;t be passed down to the separate company. But much to my disappointment it had, and what&#8217;s more is that it looks like no one had been informed of this change.</p>
<p>I checked for myself and hit <a href="http://www.carling.com">carling.com</a> and <a href="http://www.pkr.com">pkr.com</a>**, companies that you&#8217;d perhaps see on a television advertising major sporting events or entertainment programs, yet have been blocked by o2. I guess I don&#8217;t have an issue with blocking websites to protect children from inappropriate content, but the way o2 have handled the situation has disollusioned me (and others) somewhat.</p>
<p>To verify my age I must either own a credit card or go into an o2 store with some photo ID. The following paragraph has been ripped from the <a href="http://blog.o2.co.uk/home/2011/03/mobile-phones-and-age-verification-your-questions-answered.html">o2 age verification faq</a>:</p>
<blockquote><p><strong>Q: Why do customers need a credit card to age verify with O2?</strong><br />
A: You don’t have to. You can also take photo ID (passport, driving license) into an O2 retail store, where they can be age verified by our store staff. But credit card is the most convenient method for most customers. Because you have to be over 18 to have a credit card, it’s fool proof in that respect. [...]</p></blockquote>
<p>The problem is I don&#8217;t own a credit card, equally getting the hundreds of thousands of o2 customers without a credit card to go into a store to verify their age seems backwards. So until then I&#8217;m going to have restricted access to the internet I pay for.</p>
<p>This ass covering tactic may keep the lawyers happy, but I cannot help but think this should have been an opt-in process, should it not be up to the parent to say whether or not their child should be allowed a mobile phone, and if so have a age restriction in place? And for those who say that children can purchase phones for themselves, should devices with access to inappropriate content be sold to under 18s?</p>
<p>I suppose there are so many angles to this story, but like in most cases it&#8217;s not the age verification I have an issue with, just how poorly o2 have handles the situation.</p>
<p style="font-size: 12px;">* And I mean really piss them off<br />
** Beware, these websites link to nasty things&#8230; don&#8217;t open them from within 50 feet of someone under 18&#8230; or who hasn&#8217;t had their age verified by o2</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/age-verification-one-easy-step-to-piss-off-your-customers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Adventures in Web Design 2011</title>
		<link>http://beneverard.co.uk/blog/new-adventures-in-web-design-2011/</link>
		<comments>http://beneverard.co.uk/blog/new-adventures-in-web-design-2011/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 21:07:35 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[naconf]]></category>
		<category><![CDATA[new adventures]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=308</guid>
		<description><![CDATA[So I&#8217;ve just got back from the very first New Adventures in Web Design conference, and boy was it one to remember. I&#8217;m not a conference virgin so I had a good catalog of expectations, most of which were surpassed. Getting &#8230; <a href="http://beneverard.co.uk/blog/new-adventures-in-web-design-2011/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve just got back from the very first <a href="http://newadventuresconf.com/">New Adventures in Web Design</a> conference, and boy was it one to remember. I&#8217;m not a conference virgin so I had a good catalog of expectations, most of which were surpassed.</p>
<p><span id="more-308"></span></p>
<p><span style="font-size: 13px; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"><img class="alignnone size-full wp-image-315" title="New Adventures in Web Design 2010" src="http://cdn.beneverard.co.uk/wp-content/uploads/2011/01/654_edited.jpg" alt="" width="580" height="385" /></span></p>
<h2>Getting There</h2>
<p>I went to Nottingham with <a href="http://twitter.com/ShaneGriffiths">three</a> <a href="http://twitter.com/JamieKnight">local</a> <a href="http://twitter.com/TobyHowarth">lads</a>, road tripping it up in a rental car was not only cheaper than a train but a darn sight easier too. Getting into the city was extremely easy, parking was even easier and a short walk up the road and we were successfully checked into the hotel.</p>
<p>In fact everything we needed was within spitting distance from the hotel, that being the main venue, various pubs / clubs, after party venues etc. So for those thinking of going next year (Simon has suggested a sequel is on the cards) then don&#8217;t be put off by the logistics of getting to / being in the city centre.</p>
<h2>The Venue</h2>
<p>New Adventures was held at the <a href="http://www.alberthallnottingham.co.uk/">Albert Hall in Nottingham</a>, a fantastic venue with some fantastically painful seats! 650 people eventually got through the door after a slight delay with registration, not that most minded, this delay was handled extremely well, in fact the organisers were extremely informative both before and during the conference, something that I really appreciated.</p>
<p>Simon made the decision not to have venue WiFi, this kept the cost down and in general kept most of the attendees listening instead of coding or emailing, however this <a href="http://twitter.com/#!/ilmv/status/28124593701003264">didn&#8217;t stop some people</a>.</p>
<h2>Speakers</h2>
<p>I was impressed with some of the presentations, specifically those by <a href="http://twitter.com/jontangerine">Jon Tan</a> and <a href="http://twitter.com/brendandawes">Brendan Dawes</a>, the use of emotion and humour respectively certainly made me sit up and pay attention  (despite the painful seats!). Brendan&#8217;s talk was the last of the day, and his use of humour was very much appreciated, it certainly drove his point home.</p>
<p>I felt other talks such as those by <a href="http://twitter.com/danrubin">Dan Rubin</a>, <a href="http://twitter.com/sazzy">Sarah Parmenter</a>, <a href="http://twitter.com/elliotjaystocks">Elliot Jay Stocks</a> and <a href="http://twitter.com/vpieters">Veerle Pieters</a> were also very good, especially <a href="http://lanyrd.com/2011/new-adventures-in-web-design/scbbk/">Elliot&#8217;s</a> of which I had been thinking in depth not so long ago (I knew I should have blogged about it!).</p>
<p>The talks were all informative and inspirational, some more than others but I feel it would be harsh to bad mouth specific speakers who don&#8217;t appeal to me directly, that&#8217;s more of a personal thing.</p>
<h2>Meeting New (And Old) Faces</h2>
<p>Many of the people I follow on Twitter made it to the conference and pre/post parties, and I was fortunate to catch up with most of them, but perhaps disappointed I hadn&#8217;t spoken to more. That said I met many more new people and had many great discussions about the days adventures as well as other geeky topics.</p>
<p>I figure it would be a good thing to give a quick shout out to those who I spoke to, so here goes:</p>
<p><a href="http://twitter.com/alunr">Alun Rowe</a>, <a href="http://twitter.com/hicksdesign">John Hicks</a>, <a href="http://twitter.com/spotsoft">Andrew Horth</a>, <a href="http://twitter.com/colinwatts">Colin Watts</a>, <a href="http://twitter.com/tanyanewell">Tanya Newell</a>, <a href="http://twitter.com/mckelvaney">Mike McKelvaney</a>, <a href="http://twitter.com/carronmedia">Harry</a> and <a href="http://twitter.com/sentiment_life">Louise Harris</a>, <a href="http://twitter.com/simianstudios">Kris Noble</a>, <a href="http://twitter.com/mheap">Michael Heap</a>, <a href="http://twitter.com/first_broadcast">Matt Croucher</a>, <a href="http://twitter.com/stevelacey">Steve Lacey</a>, <a href="http://twitter.com/yaykyle">Kyle Ridolfo</a>&#8230; sorry if I&#8217;ve forgotten anyone, that&#8217;ll teach you for not giving me a business card :P.</p>
<h2>Final Thoughts</h2>
<p>The first thing I guess I should mention is the incredible value for money, I paid £80 for an early bird ticket and for the quality of the speakers and their talks this left me very happy.</p>
<p>I&#8217;d like to saying a massive thank you to <a href="http://twitter.com/colly">Simon</a> on behalf of all that attended, the conference was executed extremely well, provided amazing speakers and was affordable too, what could anyone complain about.</p>
<p>For those who didn&#8217;t make it this year keep your eyes peeled for next years New Adventures conference, if it&#8217;s anything like this one the tickets will go on sale in the summer so jump on it quickly.</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/new-adventures-in-web-design-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Check if any part of a string is uppercase</title>
		<link>http://beneverard.co.uk/blog/php-check-if-any-part-of-a-string-is-uppercase/</link>
		<comments>http://beneverard.co.uk/blog/php-check-if-any-part-of-a-string-is-uppercase/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 12:59:10 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[detect]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[upper case]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=272</guid>
		<description><![CDATA[PHP has some great functions for converting whole or parts of strings to upper or lower case, but what if you want to detect if a string already contains upper case characters? I had this very problem and came up &#8230; <a href="http://beneverard.co.uk/blog/php-check-if-any-part-of-a-string-is-uppercase/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>PHP has some great functions for converting whole or parts of strings to upper or lower case, but what if you want to detect if a string already contains upper case characters?</p>
<p>I had this very problem and came up with this basic function to return a boolean value if a string contained an upper case character.</p>
<p><span id="more-272"></span></p>
<pre class="brush: php">function isPartUppercase($string) {
	if(preg_match("/[A-Z]/", $string)===0) {
		return true;
	}
	return false;
}</pre>
<p>The function uses a simple regular expression that tries to find any upper case A-Z characters, <code><a href="http://www.php.net/manual/en/function.preg-match.php">preg_match</a></code> returns the number of instances of the expression it finds in the string, but stops at 1, <code><a href="http://www.php.net/manual/en/function.preg-match-all.php">preg_match_all()</a></code> returns the count of all instances it finds.</p>
<p>For those interested, I created this function as the ERP application I work on takes titles from a permission table an automatically capitalises each word, the problem is titles such as &#8220;uzERP&#8221; shouldn&#8217;t be converted in this way, as it becomes &#8220;Uzerp&#8221; and thus doesn&#8217;t match our branding, therefore if a title already contains upper case characters it won&#8217;t be subject to capitalisation.</p>
<p><strong>Edit</strong></p>
<p>Steve correctly pointed out that this function can be simplified whilst maintaining the boolean returning value, so many thanks to him for providing the following changes:</p>
<pre class="brush: php">function isPartUppercase($string) {
    return (bool) preg_match(‘/[A-Z]/’, $string);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/php-check-if-any-part-of-a-string-is-uppercase/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SMover, a jQuery Social Media Plugin</title>
		<link>http://beneverard.co.uk/blog/smover-a-jquery-social-media-plugin/</link>
		<comments>http://beneverard.co.uk/blog/smover-a-jquery-social-media-plugin/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 23:41:16 +0000</pubDate>
		<dc:creator>Ben Everard</dc:creator>
				<category><![CDATA[jQuery Plugins]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[smover]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://beneverard.co.uk/?p=157</guid>
		<description><![CDATA[SMover (Social Media hover, pronounced smother) is a jQuery plugin that hides social media icons away, whilst allowing super smooth and easy access to them when required. It&#8217;s also really small, just 4kb compressed! SMover hides away social media (in &#8230; <a href="http://beneverard.co.uk/blog/smover-a-jquery-social-media-plugin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>SMover (<strong>S</strong>ocial <strong>M</strong>edia h<strong>over</strong>, pronounced smother) is a jQuery plugin that hides social media icons away, whilst allowing super smooth and easy access to them when required. It&#8217;s also really small, just 4kb compressed!</p>
<p>SMover hides away social media (in fact, any) icons and only displays them when the user hovers on a call to action, there are no labels with SMover, however the links title is used to signify the links purpose, check out the demo for a hands on session.<br />
<span id="more-157"></span></p>
<script type="text/javascript">$(document).ready(function(){$('.download').click(function(){Observerapp.incrementEvent("86e89ff5");});});</script><p style="margin: 30px 0;"><a class="super yellow button demo" href="http://beneverard.co.uk/demo/smover" target="_blank">Demo</a><a class="super yellow button download" href="http://beneverard.co.uk/demo/smover/smover.zip">Download</a></p>
<h2>Usage</h2>
<p>First we need to need to include the following JavaScript files, SMover depends on <a href="http://jquery.com">jQuery</a> and <a href="http://cherne.net/brian/resources/jquery.hoverIntent.html">hoverIntent</a>, both are provided.</p>
<div class="hero"></p>
<pre class="brush: xml">&lt;script type="text/javascript" src="http://example.com/js/smover/jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://example.com/js/smover/hoverintent.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://example.com/js/smover/smover.js"&gt;&lt;/script&gt;</pre>
<p></div>
<p>Now we have to specify our HTML structure, SMover is customisable so you don&#8217;t have to use the same structure as I have below.</p>
<div class="hero"></p>
<pre class="brush: xml">&lt;div id="share-page"&gt;
    &lt;span&gt;Share Page&lt;/span&gt;
    &lt;ul style="display: none;"&gt;
        &lt;li&gt;&lt;a title="Digg" href="#"&gt;&lt;img alt="Share with Digg" src="http://example.com/images/social-icons/digg.png"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a title="Facebook" href="#"&gt;&lt;img alt="Share with Facebook" src="http://example.com/images/social-icons/facebook.png"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a title="StumbleUpon" href="#"&gt;&lt;img alt="Share with StumbleUpon" src="http://example.com/images/social-icons/stumbleupon.png"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a title="Twitter" href="#"&gt;&lt;img alt="Share with Twitter" src="http://example.com/images/social-icons/twitter.png"&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;</pre>
<p></div>
<p>And now we can initiate our SMover plugin.</p>
<div class="hero"></p>
<pre class="brush: js">$(document).ready(function() {
    $('#share-page').smover();
});</pre>
<p></div>
<p>And that&#8217;s all that&#8217;s required to get your SMover plugin going, you can see how this plugin will function be visiting the demo page.</p>
<h2>Options</h2>
<div class="hero"></p>
<pre class="brush: js">$(document).ready(function() {
	$('#smover1, #smover2').smover({
		titleElement  : 'span', // title selector, must be child of smover element
		linksElement  : 'ul',   // links selector, must be child of smover element
		fillerText    : ' on ', // the string that joins the title text and link title
		mouseoutDelay : 500     // hide delay after the mouseout event
	});
});</pre>
<p></div>
<h2>Commit History, Issues and Suggestions</h2>
<p>SMover is <a href="https://github.com/beneverard/SMover">hosted on GitHub</a>, you can <a href="https://github.com/beneverard/SMover/commits/master">view the commit history</a> there as well as <a href="https://github.com/beneverard/SMover/issues">raise an issue or suggestion</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://beneverard.co.uk/blog/smover-a-jquery-social-media-plugin/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 580/712 objects using disk: basic
Content Delivery Network via cdn.beneverard.co.uk

Served from: beneverard.co.uk @ 2012-05-19 21:22:08 -->
