<?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>Dan Cryer - Leeds Web Developer &#187; Web Development</title>
	<atom:link href="http://www.dancryer.com/tag/development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dancryer.com</link>
	<description>Dan Cryer - Leeds Web Developer</description>
	<lastBuildDate>Mon, 02 Aug 2010 10:09:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>My New Job at Media Wow</title>
		<link>http://www.dancryer.com/2010/04/my-new-job-at-media-wow</link>
		<comments>http://www.dancryer.com/2010/04/my-new-job-at-media-wow#comments</comments>
		<pubDate>Thu, 08 Apr 2010 17:00:16 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Other Things]]></category>
		<category><![CDATA[media wow]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=512</guid>
		<description><![CDATA[I posted last week about my last day at Stickyeyes, and as of today, I&#8217;ve been at Media Wow for a whole week. I&#8217;m not sure quite where the week has gone, it has absolutely flown. It could be due to the fact that I&#8217;m already knee deep in a couple of projects with a [...]]]></description>
			<content:encoded><![CDATA[<p>I posted last week about my last day at Stickyeyes, and as of today, I&#8217;ve been at <a rel="nofollow" href="http://www.mediawow.co.uk/">Media Wow</a> for a whole week. I&#8217;m not sure quite where the week has gone, it has absolutely flown. It could be due to the fact that I&#8217;m already knee deep in a couple of projects with a few more on the not-too-distant horizon.</p>
<p><a href="http://www.dancryer.com/wp/wp-content/uploads/2010/04/photo-1.jpg"><img class="size-medium wp-image-513 alignright" title="Media Wow Office" src="http://www.dancryer.com/wp/wp-content/uploads/2010/04/photo-1-300x225.jpg" alt="Media Wow Office" width="300" height="225" /></a><a href="http://www.dancryer.com/wp/wp-content/uploads/2010/04/photo.jpg"><img class="size-medium wp-image-514 alignright" title="My Desk at Media Wow" src="http://www.dancryer.com/wp/wp-content/uploads/2010/04/photo-300x225.jpg" alt="My Desk at Media Wow" width="300" height="225" /></a>The move over has been incredibly positive so far. I feel better about the company, the work is interesting and the people are great. I had my first client meeting this week and it went exceptionally well, we&#8217;re now starting to build their new web site, which I hope is going to be a vast improvement on their current one.</p>
<p>I&#8217;ve also been getting some things set up here for us as a company, including our new hosting environment, rebuilding the company site in WordPress, and a few other bits and bobs. The office itself and the area it&#8217;s in is pretty cool too, I&#8217;ve included a couple of pictures &#8211; one of the office building and one of my desk.</p>
<p>It&#8217;s an exciting time and I think I&#8217;m going to be busy for quite some time, but I&#8217;m feeling good about it and looking forward to the challenge.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2010/04/my-new-job-at-media-wow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finally time to drop Internet Explorer 6?</title>
		<link>http://www.dancryer.com/2010/02/time-to-drop-internet-explorer-6</link>
		<comments>http://www.dancryer.com/2010/02/time-to-drop-internet-explorer-6#comments</comments>
		<pubDate>Tue, 02 Feb 2010 11:58:24 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=440</guid>
		<description><![CDATA[A lot of web designers and developers have hated Internet Explorer 6 for years, it holds back progress on the web and is the bane of many people&#8217;s lives, so naturally we all get excited every time there&#8217;s some big news about it being phased out. Unfortunately, however, until now there&#8217;s never really been a [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of web designers and developers have hated Internet Explorer 6 for years, it holds back progress on the web and is the bane of many people&#8217;s lives, so naturally we all get excited every time there&#8217;s some big news about it being phased out. Unfortunately, however, until now there&#8217;s never really been a definitive moment to call time on the browser. A significant portion of the world&#8217;s big corporations still enforce usage of Internet Explorer 6, as their old systems require features only it can provide, and even the news about Google account hacking being caused by flaws in IE6 were not enough to change that.</p>
<p>However, Google has now announced that it will be <a rel="nofollow" href="http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html">dropping support for Internet Explorer 6</a>, starting with Google Apps as early as March 1st. Google Mail and their other properties will also phase out support shortly afterwards. This strikes me as the moment that Google has decided that IE6 market share is no longer big enough to allow it to hold back progress any longer. This announcement is big enough that it&#8217;s <a rel="nofollow" href="http://news.bbc.co.uk/1/hi/technology/8492862.stm">one of the top three stories</a> on the BBC News homepage.</p>
<p>So one question comes up. Does this mean that we, as regular every day web developers, can finally drop support for Internet Explorer 6 in our own work? My site doesn&#8217;t work in the browser currently, but purely due to laziness on my part, can I now say that actually, it never will? It feels like it could be that moment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2010/02/time-to-drop-internet-explorer-6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chrome Extension: Ten Blue Links</title>
		<link>http://www.dancryer.com/2009/12/chrome-extension-ten-blue-links</link>
		<comments>http://www.dancryer.com/2009/12/chrome-extension-ten-blue-links#comments</comments>
		<pubDate>Fri, 18 Dec 2009 16:10:17 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[bing]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=331</guid>
		<description><![CDATA[Over the past few years, search engines have been adding more and more content to every search result page. From local listings and maps, to images and tweets. A lot of people find that search results are now too cluttered and it&#8217;s difficult to actually see the listings themselves. I&#8217;ve developed a Google Chrome extension [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few years, search engines have been adding more and more content to every search result page. From local listings and maps, to images and tweets. A lot of people find that search results are now too cluttered and it&#8217;s difficult to actually see the listings themselves.</p>
<p>I&#8217;ve developed a Google Chrome extension that strips out everything in the results area apart from the &#8220;ten blue links&#8221;, your search results. This includes Images, Maps, Video, Twitter, Site Links and Ads. You can <a rel="nofollow" href="https://chrome.google.com/extensions/detail/fdbliigignocmngieodebepjmeclgcbh">download the extension</a> from the Google Chrome Extensions site.</p>
<p>If you&#8217;ve got any feedback, please let me know in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/12/chrome-extension-ten-blue-links/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Page Profiler: Update</title>
		<link>http://www.dancryer.com/2009/12/page-profiler-update</link>
		<comments>http://www.dancryer.com/2009/12/page-profiler-update#comments</comments>
		<pubDate>Wed, 09 Dec 2009 23:01:22 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[Search Engine Optimisation]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=323</guid>
		<description><![CDATA[I&#8217;ve just finished an update to the Site Profiler tool I wrote a couple of months ago. I&#8217;ve made some pretty big changes, and I think it&#8217;s a lot more useful now. I&#8217;m not sure if anyone actually uses it, but here&#8217;s what&#8217;s changed: Renamed to Page Profiler &#8211; makes more sense, as it only [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just finished an update to the <a href="/2009/10/site-profiler-domain-link-information">Site Profiler tool I wrote a couple of months ago</a>. I&#8217;ve made some pretty big changes, and I think it&#8217;s a lot more useful now. I&#8217;m not sure if anyone actually uses it, but here&#8217;s what&#8217;s changed:</p>
<ul>
<li>Renamed to <a href="/page-profiler/">Page Profiler</a> &#8211; makes more sense, as it only checks individual pages</li>
<li>Speed improved, also no longer an AJAX loaded page (result pages can also be linked to)</li>
<li>Presentation improved</li>
<li>Added data size (Plus GZIP compression checking and GZIP data size)</li>
<li>Added HTTP response header</li>
<li>Added title and meta description</li>
<li>Added internal link reporting</li>
<li>Added number of redirects encountered when loading URL</li>
<li>Added request time</li>
<li>Improved whois checking</li>
<li>Added warnings for key <a rel="nofollow" href="http://www.seomoz.org/blog/the-web-developers-seo-cheat-sheet">SEOMoz Web Developer SEO Cheat Sheet Recommendations</a>.</li>
</ul>
<p>The user agent you may see in your access logs for this tool is now:<br />
<code>Mozilla/5.0 (compatible; PageProfiler/2.0; +http://www.dancryer.com/page-profiler)</code></p>
<p>If you&#8217;re using the tool, or have any suggestions for improvements, please let me know in the comments below!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/12/page-profiler-update/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freelance IP.Board (IPB) modification developers</title>
		<link>http://www.dancryer.com/2009/12/freelance-ip-board-ipb-modification-developers</link>
		<comments>http://www.dancryer.com/2009/12/freelance-ip-board-ipb-modification-developers#comments</comments>
		<pubDate>Thu, 03 Dec 2009 22:06:49 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[ip.board]]></category>
		<category><![CDATA[ipb]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=297</guid>
		<description><![CDATA[I&#8217;m currently looking for one or more IP.Board modification developers, or PHP developers with knowledge of IP.Board, to take on a number of freelance projects for me. These are for client web sites who have asked me for modifications to be built, you&#8217;ll be given the opportunity to price the individual projects yourself. I&#8217;ll deal [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently looking for one or more <a rel="nofollow" href="http://www.invisionpower.com/#a_aid=4b025b1b2f796">IP.Board</a> modification developers, or PHP developers with knowledge of IP.Board, to take on a number of freelance projects for me. These are for client web sites who have asked me for modifications to be built, you&#8217;ll be given the opportunity to price the individual projects yourself. I&#8217;ll deal with the client for you, provide feedback, quality check the work and pay you via PayPal on project completion.</p>
<p>I&#8217;m offering out these projects as I do not have the time to complete them myself at the moment. They are projects of vastly varying types, scale and complexity.</p>
<p>If you are interested in taking on some of this work, please email me at <a href="mailto:dan.cryer@veris.co.uk">dan.cryer@veris.co.uk</a>. If you know anyone else who may be interested, please encourage them to read this post and email me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/12/freelance-ip-board-ipb-modification-developers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I don&#8217;t get Google Wave</title>
		<link>http://www.dancryer.com/2009/10/i-dont-get-google-wave</link>
		<comments>http://www.dancryer.com/2009/10/i-dont-get-google-wave#comments</comments>
		<pubDate>Fri, 16 Oct 2009 17:52:54 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Other Things]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[wave]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=248</guid>
		<description><![CDATA[Thought I&#8217;d quickly stick something up before I went away, in hope that I&#8217;ll get some responses whilst I&#8217;m away over the weekend. I&#8217;ve been using Google Wave for a while now, as I was in the first round of invites, and the developer preview before that&#8230; but I say using in the loosest sense [...]]]></description>
			<content:encoded><![CDATA[<p>Thought I&#8217;d quickly stick something up before I went away, in hope that I&#8217;ll get some responses whilst I&#8217;m away over the weekend.</p>
<p>I&#8217;ve been using Google Wave for a while now, as I was in the first round of invites, and the developer preview before that&#8230; but I say using in the loosest sense of the word, as I can&#8217;t actually find a use for it. It may be simply because barely anyone is on it yet, but nothing has struck me as a clear purpose.</p>
<p>That&#8217;s not to say I don&#8217;t like it, it&#8217;s a great application and it&#8217;s technologically outstanding. Features like drag and drop photo uploading and live typing are incredibly impressive, but I feel like I&#8217;m missing the point. I feel like I&#8217;m not using it properly, or that I&#8217;m expecting the wrong things from it.</p>
<p>What is Google Wave, and why should I be using it? I&#8217;d love to know what you all think!</p>
<p><em>P.s. Thank you to everyone who downloaded the Twitter extension yesterday, including the Googlers&#8230; I assume some of the Chrome team. <img src='http://www.dancryer.com/wp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/10/i-dont-get-google-wave/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome Twitter Extension: TweetPage</title>
		<link>http://www.dancryer.com/2009/10/google-chrome-twitter-extension-tweetpage</link>
		<comments>http://www.dancryer.com/2009/10/google-chrome-twitter-extension-tweetpage#comments</comments>
		<pubDate>Thu, 15 Oct 2009 19:05:36 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=246</guid>
		<description><![CDATA[I&#8217;ve just written another Google Chrome extension, this time a little more complex. It&#8217;s a Twitter &#8216;Tweet This Page&#8217; extension, much like the many available bookmarklets, except this one allows you to tweet directly from within the extension, without leaving the site you&#8217;re on to go to twitter.com. You&#8217;ll need to log into Twitter the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just written another Google Chrome extension, this time a little more complex. It&#8217;s a Twitter &#8216;Tweet This Page&#8217; extension, much like the many available bookmarklets, except this one allows you to tweet directly from within the extension, without leaving the site you&#8217;re on to go to twitter.com. You&#8217;ll need to log into Twitter the first time you use it, but after that, simply click the button, alter the tweet as you desire, and submit.</p>
<p>You can <a href="/files/extensions/tweetpage/tweetpage.crx">download the extension here</a>, automatic updates are enabled, so you should get new versions as and when I put them up. Please be aware that this extension is quite rough around the edges, (and quite spectacularly ugly,) so please let me know if you manage to break it!</p>
<p>If you choose to use the extension, please let me know, either by commenting below&#8230; or by tweeting this page!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/10/google-chrome-twitter-extension-tweetpage/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Chrome NoFollow extension updated</title>
		<link>http://www.dancryer.com/2009/10/chrome-nofollow-extension-updated</link>
		<comments>http://www.dancryer.com/2009/10/chrome-nofollow-extension-updated#comments</comments>
		<pubDate>Thu, 15 Oct 2009 10:14:44 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Search Engine Optimisation]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=243</guid>
		<description><![CDATA[As a quick follow up to my nofollow marker post, I&#8217;ve put up a new version of the extension. It does exactly the same job as the old one, except without the need for any JavaScript. The new extension simply uses the following CSS: a[rel~=nofollow] { background-color: #FCC !important; border: 1px dashed #F55 !important; color: #600 [...]]]></description>
			<content:encoded><![CDATA[<p>As a quick follow up to my <a title="Google Chrome Extension: NoFollow Marker" href="http://www.dancryer.com/2009/09/google-chrome-extension-nofollow-marker">nofollow marker</a> post, I&#8217;ve put up a new version of the extension. It does exactly the same job as the old one, except without the need for any JavaScript. The new extension simply uses the following CSS:</p>
<p><code>a[rel~=nofollow]<br />
{<br />
background-color: #FCC !important;<br />
border: 1px dashed #F55 !important;<br />
color: #600 !important;<br />
}</code></p>
<p>I should really have thought of that in the first place! Want the extension? <a href="/files/extensions/nofollow/nofollow.crx">Download it here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/10/chrome-nofollow-extension-updated/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New W3C site live at w3.org</title>
		<link>http://www.dancryer.com/2009/10/new-w3c-site-live-at-w3-org</link>
		<comments>http://www.dancryer.com/2009/10/new-w3c-site-live-at-w3-org#comments</comments>
		<pubDate>Wed, 14 Oct 2009 00:21:24 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[w3c]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=241</guid>
		<description><![CDATA[The W3C have just launched their new web site at w3.org. It looks pretty sweet, and adds a bit of style to what was previously a dreary resource. They&#8217;ve also gathered up related standards into sections, which makes them a little easier to find. Great work, I say. Being an epic nerd, the first thing [...]]]></description>
			<content:encoded><![CDATA[<p>The W3C have just launched their new web site at <a rel="nofollow" href="http://www.w3.org/">w3.org</a>. It looks pretty sweet, and adds a bit of style to what was previously a dreary resource. They&#8217;ve also gathered up related standards into sections, which makes them a little easier to find. Great work, I say.</p>
<p>Being an epic nerd, the first thing I checked was whether or not it validates. Of course, <a rel="nofollow" href="http://validator.w3.org/check?uri=http%3A%2F%2Fwww.w3.org%2F&amp;charset=%28detect+automatically%29&amp;doctype=Inline&amp;group=0">it does</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/10/new-w3c-site-live-at-w3-org/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site Profiler &#8211; Domain and Link Information Tool</title>
		<link>http://www.dancryer.com/2009/10/site-profiler-domain-link-information</link>
		<comments>http://www.dancryer.com/2009/10/site-profiler-domain-link-information#comments</comments>
		<pubDate>Fri, 09 Oct 2009 23:26:51 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[Search Engine Optimisation]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=221</guid>
		<description><![CDATA[I spent a couple of hours tonight putting together a simple web site profiling tool. It allows you to see some useful information about a page, including it&#8217;s server IP address and location, the domain name contact, and some of the outgoing links from that site. It&#8217;s worth noting that the tool crawls roughly five [...]]]></description>
			<content:encoded><![CDATA[<p>I spent a couple of hours tonight putting together a simple <a href="/site-profiler/">web site profiling tool</a>. It allows you to see some useful information about a page, including it&#8217;s server IP address and location, the domain name contact, and some of the outgoing links from that site. </p>
<p>It&#8217;s worth noting that the tool crawls roughly five pages on the target site each time it is run, so you may notice the following user agent in server logs:</p>
<p><code>Mozilla/5.0 (compatible; SiteProfiler/1.0; +http://www.dancryer.com/site-profiler)</code></p>
<p>I thought I&#8217;d make it available on this site, so others can use it. If you like it, or you&#8217;ve got any feedback, please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/10/site-profiler-domain-link-information/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP/MySQL Scaling Followup</title>
		<link>http://www.dancryer.com/2009/09/php-mysql-scaling-followup</link>
		<comments>http://www.dancryer.com/2009/09/php-mysql-scaling-followup#comments</comments>
		<pubDate>Mon, 14 Sep 2009 20:16:48 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Other Things]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>
		<category><![CDATA[scaling]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=141</guid>
		<description><![CDATA[I posted last week about our work on scaling our crawler application and it&#8217;s corresponding MySQL database, but left it with very little conclusion, apart from that Memcached is good. I wanted to follow up with some of the changes we made on Thursday and Friday. Having run the code with the changes we made [...]]]></description>
			<content:encoded><![CDATA[<p>I posted last week about our work on <a href="http://www.dancryer.com/2009/09/when-scaling-for-speed-slows-you-down">scaling our crawler application</a> and it&#8217;s corresponding MySQL database, but left it with very little conclusion, apart from that <a href="http://www.dancryer.com/2009/09/memcached">Memcached is good</a>. I wanted to follow up with some of the changes we made on Thursday and Friday.</p>
<p>Having run the code with the changes we made previously for a day or so, in order to give it a fair trial, it was obvious it wasn&#8217;t going to work. We were still doing an average of 5,000 pages an hour, way below the original code and even further below the targets we&#8217;d set ourselves.</p>
<p>The first change we made was to move the queue table back to InnoDB from MEMORY. The memory engine wasn&#8217;t providing the benefits we&#8217;d hoped, and it was using far more RAM than it was worth. It was also locking, a lot. I have to admit, it was probably unwise to assume that we could expect memory tables to perform any better, when working with over a gigabyte of data. Next, we turned our attention to what had become an obvious bottleneck: statement based binary logging. We&#8217;d made this choice early on, based on reasons unbeknownst to me. After much research and a little panic, we flipped the switch and turned our crawlers back on, seeing an immediate and significant performance improvement.</p>
<p>We&#8217;d finally done it, we were now running an average of 25,000 pages an hour, peaking at 45,000. We&#8217;re still working on it, of course, as we&#8217;d like to hit 100,000 pages an hour, but we&#8217;re very happy to have finally gotten past the bottlenecks.</p>
<p>As an additional interesting tidbit, I re-ran the graphs for our Memcache utilisation. This time over the period 12:00pm Thursday to 12:00pm Monday. As you can see, the hits to misses ratio is starting to level out over time, averaging around 70% hits, 30% misses. Here&#8217;s the charts:</p>
<p><img class="alignnone size-full wp-image-146" title="Memcache usage in real numbers under load" src="http://www.dancryer.com/wp/wp-content/uploads/2009/09/memcacheusagereal.png" alt="Memcache usage in real numbers under load" width="386" height="233" /></p>
<p><img class="alignnone size-full wp-image-144" title="Memcached usage under load" src="http://www.dancryer.com/wp/wp-content/uploads/2009/09/memcachedusage.png" alt="Memcached usage under load" width="386" height="233" /></p>
<p>As usual, please let me know if you&#8217;ve got any questions or comments, I (and I&#8217;m sure the others on my team) would be happy to help if I can.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/09/php-mysql-scaling-followup/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Replication Issues</title>
		<link>http://www.dancryer.com/2009/09/mysql-replication-issues</link>
		<comments>http://www.dancryer.com/2009/09/mysql-replication-issues#comments</comments>
		<pubDate>Mon, 14 Sep 2009 19:46:04 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=139</guid>
		<description><![CDATA[In our ongoing, joyous adventures with scaling MySQL, we hit another stumbling block this morning. We arrived to find out that one of our two MySQL slaves had stopped replicating at 6AM on Saturday morning. This meant that our reporting systems were all running on two day old data, even though we&#8217;d been diligently collecting [...]]]></description>
			<content:encoded><![CDATA[<div>In our ongoing, joyous adventures with scaling MySQL, we hit another stumbling block this morning. We arrived to find out that one of our two MySQL slaves had stopped replicating at 6AM on Saturday morning. This meant that our reporting systems were all running on two day old data, even though we&#8217;d been diligently collecting and storing data all weekend.</div>
<div>Our setup is reasonably standard:</div>
<ul>
<li>One master &#8211; All writes go to this server.</li>
<li>Two slaves:
<ul>
<li>Slave One runs in our office, is a somewhat less powerful machine than the master, but usually keeps up. This slave&#8217;s job is to do a daily backup, as such, it can be up to six hours behind, as the backup takes that long.</li>
<li>Slave Two runs in the same rack as the master at our data centre, this box is of equal spec to the master and is usually 0-2 seconds behind. This slave&#8217;s job is to serve our reporting systems.</li>
</ul>
</li>
<li>Row-based replication.</li>
</ul>
<p>When we arrived, we were hit with Slave Two throwing errors such as: &#8220;Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event&#8217;s master log&#8221;. Slave One was, and has remained, fine. Remo, Ben, and I spent quite some time Googling for a solution, but that turned up absolutely nothing. There were a few suggestions, such as setting &#8220;slave_exec_mode&#8221; to &#8220;IDEMPOTENT&#8221;. This is merely silent error suppression for such errors, and seems to be suggested for environments using master to master replication and/or cluster-based replication.  We were very uncomfortable with using this, as it meant that our slaves could slowly slip completely out of sync on all tables, and we&#8217;d never know about it.</p>
<p>Luckily for us, the affected table is one that we never need to read from on the slaves. It&#8217;s a queue table, which we update on the master, and then need to immediately read those rows from, so we do that on the master too. Our solution became clear later in the afternoon. As MySQL allows you to use different storage engines on your slaves to the master, we went the dirty route. The queue tables on the slaves are now powered by the <a rel="nofollow" href="http://dev.mysql.com/doc/refman/5.1/en/blackhole-storage-engine.html">BlackHole storage engine</a>.</p>
<p>Getting the slave back up and running was a whole task in itself, however, as thousands upon thousands of queries had failed in the time this problem had been occuring. The commonly accepted solution is to do the following:</p>
<blockquote><p>STOP SLAVE;</p>
<p>SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;</p>
<p>START SLAVE;</p>
<p>SHOW SLAVE STATUS\G;</p></blockquote>
<p>However, manually running this thousands of times was going to become tedius, so one of the team wrote a script to do it for us. It&#8217;ll automatically check that it&#8217;s only bypassing errors on a specific table (look out for &#8220;database.table&#8221; in the script), and bypass them all. It&#8217;s not perfect, but it seems to work pretty well. Here&#8217;s the code: <a rel="nofollow" href="http://pastie.org/private/mcxnw1oienrlfswciix4w">http://pastie.org/private/mcxnw1oienrlfswciix4w</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/09/mysql-replication-issues/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>UK hotel affiliate sites&#8230; what to do?</title>
		<link>http://www.dancryer.com/2009/09/uk-hotel-affiliate-sites-what-to-do</link>
		<comments>http://www.dancryer.com/2009/09/uk-hotel-affiliate-sites-what-to-do#comments</comments>
		<pubDate>Sun, 13 Sep 2009 16:39:44 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[affiliates]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[hotels]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=136</guid>
		<description><![CDATA[On a similar note to my previous post, I&#8217;m also stuck for what to do with some semi-established sites I own: http://www.hotelsin-york.co.uk/ http://www.hotelsin-durham.co.uk/ http://www.hotelsin-edinburgh.co.uk/ http://www.hotelsin-glasgow.co.uk/ http://www.cheaphotels-blackpool.co.uk/ http://www.cheaphotels-liverpool.co.uk/ http://www.cheaphotels-bristol.co.uk/ As you&#8217;ll be able to see if you look at them, they&#8217;re all running on the same, custom written, platform. They&#8217;re self-managing affiliate sites for Laterooms. None [...]]]></description>
			<content:encoded><![CDATA[<p>On a similar note to <a href="http://www.dancryer.com/2009/09/leeds-web-development-domains">my previous post</a>, I&#8217;m also stuck for what to do with some semi-established sites I own:</p>
<ul>
<li>http://www.hotelsin-york.co.uk/</li>
<li>http://www.hotelsin-durham.co.uk/</li>
<li>http://www.hotelsin-edinburgh.co.uk/</li>
<li>http://www.hotelsin-glasgow.co.uk/</li>
<li>http://www.cheaphotels-blackpool.co.uk/</li>
<li>http://www.cheaphotels-liverpool.co.uk/</li>
<li>http://www.cheaphotels-bristol.co.uk/</li>
</ul>
<p>As you&#8217;ll be able to see if you look at them, they&#8217;re all running on the same, custom written, platform. They&#8217;re self-managing affiliate sites for Laterooms. None rank particularly well for any terms, and don&#8217;t come close to ranking for any competitive terms, and thus traffic is quite low. They also lack any real links from outside.</p>
<p>For a while, I had some Google Local listings up for each of them, and during that time, the sites were converting well on the traffic they got. Unfortunately, I had to take those listings down. Now I&#8217;m unsure what to do with them. I don&#8217;t really have the time nor the funds to do link building on them myself, but don&#8217;t particularly want them to stagnate.</p>
<p>Any suggestions anyone can give would be much appreciated! As before, either leave me a comment, or drop me an email to dan@dancryer.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/09/uk-hotel-affiliate-sites-what-to-do/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leeds web development domains&#8230; What to do?</title>
		<link>http://www.dancryer.com/2009/09/leeds-web-development-domains</link>
		<comments>http://www.dancryer.com/2009/09/leeds-web-development-domains#comments</comments>
		<pubDate>Sun, 13 Sep 2009 16:30:35 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[leeds]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=133</guid>
		<description><![CDATA[I recently picked up a few domains on a whim, and then all too quickly realised I have no idea what I want to do with them. The domains are: leedswebdeveloper.co.uk (and .com) leedswebservices.com webdesignerleeds.co.uk (and .com) Obviously, these are pretty niche, but if anyone has any suggestions, let me know. Either leave me a [...]]]></description>
			<content:encoded><![CDATA[<p>I recently picked up a few domains on a whim, and then all too quickly realised I have no idea what I want to do with them. The domains are:</p>
<ul>
<li><a href="http://www.leedswebdeveloper.co.uk/">leedswebdeveloper.co.uk</a> (and .com)</li>
<li><a href="http://www.leedswebservices.com/">leedswebservices.com</a></li>
<li><a href="http://www.webdesignerleeds.co.uk/">webdesignerleeds.co.uk</a> (and .com)</li>
</ul>
<p>Obviously, these are pretty niche, but if anyone has any suggestions, let me know. Either leave me a comment here, or email to dan@dancryer.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/09/leeds-web-development-domains/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mmm Memcached</title>
		<link>http://www.dancryer.com/2009/09/memcached</link>
		<comments>http://www.dancryer.com/2009/09/memcached#comments</comments>
		<pubDate>Thu, 10 Sep 2009 14:36:53 +0000</pubDate>
		<dc:creator>Dan Cryer</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>

		<guid isPermaLink="false">http://www.dancryer.com/?p=125</guid>
		<description><![CDATA[If you read my previous post about our scaling issues, you&#8217;ll know that I was planning on trying out a number of other ideas to see if we could improve the performance of our system. Well, one of the things I tried was to test out Memcached. I set up a six node VPS (2.4 [...]]]></description>
			<content:encoded><![CDATA[<p>If you read my previous post about our <a href="http://www.dancryer.com/2009/09/when-scaling-for-speed-slows-you-down">scaling issues</a>, you&#8217;ll know that I was planning on trying out a number of other ideas to see if we could improve the performance of our system. Well, one of the things I tried was to test out <a rel="nofollow" href="http://www.danga.com/memcached/">Memcached</a>. I set up a <a rel="nofollow" href="http://manage.aff.biz/z/146/CD2815/">six node VPS</a> (2.4 ghz, 1.5gb ram, 1500gb bandwidth) and installed Memcached on it. Setting it up was pretty spectacularly simple, &#8220;apt-get install memcached&#8221;, followed by changing two variables in its config file.</p>
<p>I modified our applications to start checking Memcached first, using the PECL &#8216;Memcache&#8217; extension, and if no results were found, access the database, get the data and put it into Memcached. Below are a couple of graphs of the first hour of our rollout:</p>
<p><img class="alignnone size-full wp-image-128" title="Actual numbers of get requests, hits and misses over the hour." src="http://www.dancryer.com/wp/wp-content/uploads/2009/09/getshitsmisses.png" alt="Actual numbers of get requests, hits and misses over the hour." width="386" height="233" /></p>
<p><img class="alignnone size-full wp-image-129" title="Percentage of cache hits vs. misses over the hour." src="http://www.dancryer.com/wp/wp-content/uploads/2009/09/hitsvsmisses.png" alt="Percentage of cache hits vs. misses over the hour." width="386" height="233" /></p>
<p>As you can see, the number of requests started out pretty low, as the number of application instances ramped up&#8230; This caused a massive spike in misses whilst the cache warmed up. However, as soon as the number of requests started to rise, the balance shifted, and since the rollout, the ratio has remained a fairly stable 60/40 split in favour of hits.</p>
<p>As you may also be able to tell from the graphs, this means that of the 2.5 million hits an hour, we&#8217;re managing to catch 1.5 million before they ever make it to the database. This is a huge saving for us, and we&#8217;re now looking at where else we can roll this out with similar effect.</p>
<p>On the note of our scaling issues, I&#8217;ll be writing up some more of what we&#8217;ve done with the databases later. We&#8217;re at a point now where the improvements are actually starting to make a difference!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancryer.com/2009/09/memcached/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
