<?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>Andy Leon</title>
	<atom:link href="http://www.acleon.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.acleon.co.uk</link>
	<description></description>
	<lastBuildDate>Fri, 20 Aug 2010 15:36:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>My Beautiful Copy of Oliver Twist</title>
		<link>http://www.acleon.co.uk/2010/08/my-beautiful-copy-of-oliver-twist/</link>
		<comments>http://www.acleon.co.uk/2010/08/my-beautiful-copy-of-oliver-twist/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 15:36:22 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=342</guid>
		<description><![CDATA[I couldn't resist buying this book, even though I already have it. Who says that eBooks are the way forward?]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.acleon.co.uk/wp-content/uploads/2010/08/oliver_twist_1.jpg"><img class="alignright size-full wp-image-344" title="Oliver Twist 1" src="http://www.acleon.co.uk/wp-content/uploads/2010/08/oliver_twist_1.jpg" alt="Oliver Twist by Charles Dickens" width="384" height="288" /></a></p>
<p>I bought a book. Nothing new there, apart from this one&#8217;s really nice. Instead of buying dog-eared paperbacks from Amazon Marketplace, I went to a bookshop.</p>
<p>I had no intention of buying a book but this one caught my eye &#8211; it&#8217;s the finest example of one of my favourites. Hard back and bound in fabric, it&#8217;s well illustrated and has even got a ribbon bookmark bound into it.</p>
<p>It&#8217;s part of a new Penguins Classics range, which I&#8217;m told is exclusive to Waterstones. There are some more of them <a href="http://www.waterstones.com/waterstonesweb/navigate.do?pPageID=1144">on this page</a>.</p>
<p><a href="http://www.acleon.co.uk/wp-content/uploads/2010/08/oliver_twist_2.jpg"><img class="alignright size-full wp-image-345" title="Oliver Twist 2" src="http://www.acleon.co.uk/wp-content/uploads/2010/08/oliver_twist_2.jpg" alt="Penguin Classics - Oliver Twist" width="640" height="480" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2010/08/my-beautiful-copy-of-oliver-twist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HDR Software Tricks in Photoshop</title>
		<link>http://www.acleon.co.uk/2010/08/hdr-software-tricks-in-photoshop/</link>
		<comments>http://www.acleon.co.uk/2010/08/hdr-software-tricks-in-photoshop/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 16:34:14 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[actions]]></category>
		<category><![CDATA[hdr]]></category>
		<category><![CDATA[photoshop]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=327</guid>
		<description><![CDATA[HDR photography can be faked in software such as Photoshop, quickly and easily, by duplicating layers and applying different blending modes.]]></description>
			<content:encoded><![CDATA[<p>High dynamic range or HDR photography can be seen almost everywhere. The basics of the technique involve taking three photos of the same subject at different light levels &#8211; then combining the highlights, shadows and mid-tones from each of the three photos into one. The resulting image has a highly detailed but artificial-looking contrast ratio.</p>
<p>The HDR effect though can be &#8220;faked&#8221; using a quick technique involving different blending modes, without the need for a camera capable of taking the necessary three shots at different light stops.</p>
<div id="attachment_328" class="wp-caption alignright" style="width: 624px"><a href="http://www.acleon.co.uk/wp-content/uploads/2010/08/iphone_original.jpg"><img class="size-full wp-image-328 " title="Original Single Image" src="http://www.acleon.co.uk/wp-content/uploads/2010/08/iphone_original.jpg" alt="Original Single Image" width="614" height="461" /></a><p class="wp-caption-text">The original image, shot using the iPhone&#39;s camera</p></div>
<p>This can work with photos taken with any camera. Our sample image has been taken using an iPhone. Even ignoring the bleaching that&#8217;s all too common with the iPhone camera, it&#8217;s still not a great image.</p>
<p>To start with, we need to boost the shadows and highlights. From the &#8220;Image&#8221; menu, select &#8220;Adjustments&#8221; then &#8220;Shadows / Highlights&#8221;. Change the shadows amount to 50%, the highlights amount to 40%, then click OK.</p>
<p>Now duplicate the layer twice. Take the lower of the duplicated layers, convert it to grayscale by selecting &#8220;Image&#8221; &#8211; &#8220;Adjustments&#8221; &#8211; &#8220;Desaturate&#8221;. Now change the blending mode to hard light. The contrast is boosted but we lose some of the images&#8217; colour.</p>
<div id="attachment_329" class="wp-caption alignleft" style="width: 624px"><a href="http://www.acleon.co.uk/wp-content/uploads/2010/08/fake_hdr.jpg"><img class="size-full wp-image-329 " title="Faked HDR Image" src="http://www.acleon.co.uk/wp-content/uploads/2010/08/fake_hdr.jpg" alt="Faked HDR Image" width="614" height="461" /></a><p class="wp-caption-text">Our faked HDR image - much more striking than the original</p></div>
<p>To restore this, select the other duplicated layer, convert it to a smart object and apply a Gaussian blur to it. The amount of blur to apply depends on the resolution of the original image, which is why we use smart filters, so that we can tweak this later. An 8 pixel blur works well for iPhone images, but any modern compact or DSLR will need more.</p>
<p>Change the blending mode of this layer to soft light. Our image now looks a lot better &#8211; the highlights and shadows have both been boosted heavily, without clipping occurring. This is a technique I use quite frequently so here&#8217;s a <a title="Download the Fake HDR Photoshop Action" href="http://www.acleon.co.uk/wp-content/uploads/2010/08/fake_hdr.atn">Fake HDR Photoshop Action</a> that can be installed and used to achieve it quickly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2010/08/hdr-software-tricks-in-photoshop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XPro Cross Processing in Photoshop</title>
		<link>http://www.acleon.co.uk/2010/08/xpro-cross-processing-in-photoshop/</link>
		<comments>http://www.acleon.co.uk/2010/08/xpro-cross-processing-in-photoshop/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 22:27:20 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[cross processing]]></category>
		<category><![CDATA[curves]]></category>
		<category><![CDATA[photoshop]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=313</guid>
		<description><![CDATA[Simulate cross processing (XPro) of film using curves and adjustments layers in Photoshop CS3, CS4 and CS5.]]></description>
			<content:encoded><![CDATA[<p>Cross processing (or XPro) is a technique from the days of traditional film cameras, where a film&#8217;s processing was done in a development chemical from a different film stock. This lead to the developed image having effects such as increased contrast and large colour shifts.</p>
<p>The technique that gained the most notoriety was processing a regular colour negative in chemicals normally used to develop slides. Using Photoshop&#8217;s curves editing, we can simulate the effects caused by this technique in digital photos, and thanks to the adjustment layers in CS3 &#8211; CS5, we can do it non-destructively.</p>
<div id="attachment_314" class="wp-caption alignright" style="width: 624px"><a href="http://www.acleon.co.uk/wp-content/uploads/2010/08/original.jpg"><img class="size-full wp-image-314 " title="Fashion 5 by Vincent Boiteau" src="http://www.acleon.co.uk/wp-content/uploads/2010/08/original.jpg" alt="Fashion 5 by Vincent Boiteau" width="614" height="925" /></a><p class="wp-caption-text">Fashion 5: Credit Vincent Boiteau (http://www.flickr.com/photos/2dogs_productions)</p></div>
<p>This type of cross processing was very common in fashion photography and our original image is in-keeping with that. Download the image <a title="Download the original image" href="http://www.acleon.co.uk/wp-content/uploads/2010/08/original.jpg">from here</a> or the high resolution one from <a title="Higher resolution version available on Flickr" href="http://www.flickr.com/photos/2dogs_productions">Vincent Boiteau&#8217;s Flickr</a> page. You&#8217;ll also need to download our <a href="http://www.acleon.co.uk/wp-content/uploads/2010/08/xpro_negative_in_slide.acv">Cross-Processing Curves Preset</a>.</p>
<p>With the image open in Photoshop, select the &#8220;Layer&#8221; menu, then &#8220;New Adjustment Layer&#8221;, then &#8220;Curves&#8230;&#8221;. A new layer will be created in the layers palette. If the &#8220;Adjustments&#8221; window is not open, use the &#8220;Window&#8221; menu to open it.</p>
<p>Click on the small dialog box in the right-hand corner and select &#8220;Load Curves Preset&#8230;&#8221;. Select the preset file that you&#8217;ve downloaded and the cross processing effect will be applied.</p>
<div id="attachment_318" class="wp-caption alignleft" style="width: 624px"><a href="http://www.acleon.co.uk/wp-content/uploads/2010/08/xpro.jpg"><img class="size-full wp-image-318 " title="Fashion Image with Cross Processing Applied" src="http://www.acleon.co.uk/wp-content/uploads/2010/08/xpro.jpg" alt="Fashion Image with Cross Processing Applied" width="614" height="925" /></a><p class="wp-caption-text">Fashion Image with Cross Processing Applied</p></div>
<p>With our curves preset loaded in, you&#8217;ll see the different curves that the Red, Green and Blue now take, away from the standard diagonal. The image will now have cross-processed film effect that is editable within the &#8220;Adjustments&#8221; window or switchable via the layers palette.</p>
<p>You&#8217;ll see there is quite a large shift from warm to cool tones &#8211; the background in particular has shifted from an earth tone to teal. The skin tone has been somewhat bleached and has taken on a yellow tint &#8211; this is combination with the higher contrast means that the coloured make-up is really picked out.</p>
<p>The overall white-point has changed, which has lead to blown highlights on the coat, which in general appears more cream than the original white. Finally, the shadows have been extended and take on a blue tinge.</p>
<p>This technique works best on portrait photography where the skin tone changes make a dramatic effect. Alternatively, landscapes featuring expanses of light colour such as clouds or white sand will work. Subtle colour highlights and large shadows will also help.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2010/08/xpro-cross-processing-in-photoshop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speed-Testing Sites with Trickle</title>
		<link>http://www.acleon.co.uk/2009/12/speed-testing-sites-with-trickle/</link>
		<comments>http://www.acleon.co.uk/2009/12/speed-testing-sites-with-trickle/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 13:09:17 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Server Admin]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[limit]]></category>
		<category><![CDATA[speed]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[trickle]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=261</guid>
		<description><![CDATA[Using the command-line tool Trickle to diagnose some pesky file upload problems and keep an eye on how your site performs when users visit it over a slow connection. ]]></description>
			<content:encoded><![CDATA[<p>Recently I had need to test how a site runs on a low-speed connection. To cut a long story short, we were handling file uploads and despite the maximum upload limit being quite high, users were not able to upload large files. We happened across a solution that it may be users on slow connections hitting a timeout instead of a size limit. To test this, we needed to slow our own connection down to simulate the problem. This is where Trickle comes in.</p>
<p>Trickle is a great little utility that can be used to launch applications and restrict the amount of bandwidth available to them. It does this by emulating the usual OS functions for network access, sitting between the app and the OS. <a href="http://monkey.org/~marius/pages/?page=trickle" target="_blank">Download Trickle from the homepage</a> and uncompress it. Build it using the standard process:</p>
<pre>./configure
make
sudo make install</pre>
<p>The trickle binary will now be available in your path and you&#8217;ll be able to launch applications from the command-line using it. Open a terminal window and try starting Firefox with the following command:</p>
<pre>trickle -d 10 firefox</pre>
<p>This will start Firefox with download speeds limited to 10kbps &#8211; around the level of dial-up connections. Navigate to a site and you&#8217;ll immediately see the difference in speed. This is great for testing how quickly your site loads on slower connections. Have a look at your site and see what can be improved &#8211; do certain images or javascript load before content or does table-rendering mean the user is left looking at a blank screen for a while?</p>
<p>This only restricts the downstream bandwidth though and we wanted to test upstream. We used the following command:</p>
<pre>trickle -u 10 firefox</pre>
<p>This restricts the upload speed to 10kbps, similar to how we did for the download speed. We could have used the -d option as well to restrict upstream and downstream, but as we only wanted to test one, we didn&#8217;t make life difficult for ourselves. This did highlight a problem in our app, which in case anyone is interested, we solved by increasing the timeout for our upload target file using the .htaccess file.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2009/12/speed-testing-sites-with-trickle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compressing PNG Images with Posterize</title>
		<link>http://www.acleon.co.uk/2009/12/compressing-png-images-with-posterize/</link>
		<comments>http://www.acleon.co.uk/2009/12/compressing-png-images-with-posterize/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 12:19:12 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[posterize]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=248</guid>
		<description><![CDATA[The PNG format has an ever-growing place in Web design, especially now that the number of IE6 users is starting to drop. All modern browser support the format and its alpha transparency, which makes it very handy for use in &#8230;]]></description>
			<content:encoded><![CDATA[<p>The PNG format has an ever-growing place in Web design, especially now that the number of IE6 users is starting to drop. All modern browser support the format and its alpha transparency, which makes it very handy for use in layouts. Drop shadows and various other semi-transparent effects can be applied using a PNG without having to worry about the background colour beneath it. No more adding the background with JPEGs or colour dithering with GIFs.</p>
<p>However, there are criticisms leveled at the format &#8211; most notably its size. Whereas PNG will probably never compete with the JPEG for photo-quality images, there are many optimization techniques that people fail to use or just take for granted because of the JPEG format. What people don&#8217;t realise is that there is a fundamental difference between the two formats &#8211; JPEG is lossy and PNG is lossless.</p>
<p>The JPEG format analyzes an image and changes the actual pixels in order to achieve its compression. This is why JPEG artifacts (blocky-ness) appears on the image. What&#8217;s more this occurs on each save, so repeatedly saving out as JPEG results in further and further loss of quality. PNGs on the other hand can be edited and saved over and over again without any reduction in quality because PNG achieves its compression using techniques similar to those found in zip files. The actual pixel values never change in a PNG image.</p>
<p>With a little understanding of how this type of compression works, we can develop some optimization techniques for PNG images. In its simplest form, compression finds sequences of a particular value and converts it to one value and a multiple (i.e. how many times that value is there). The compression works best when there are a restricted number of values in a particular file.</p>
<p>How does this relate to our images? Well, in images the &#8220;values&#8221; are colours. The less colours in a PNG image the better the compression will act. To demonstrate this, we can use the Posterize effect in Photoshop, which is designed to reduce the number of colours in an image (the name comes from print design, when posters would be reduced to as few colours as possible to save on printing costs).</p>
<p>Heres our original image, a 24-bit PNG with an 8-bit alpha transparency. Using Photoshop&#8217;s Save For Web function, the images comes out at 164KB.</p>
<p><img class="alignnone size-full wp-image-249" title="Original Dice Image" src="http://mail.acleon.co.uk/wp-content/uploads/2009/12/dice_original.png" alt="Original Dice Image" width="450" height="405" /></p>
<p>Opening this image and repeating the Save For Web process will have no effect on the image size or quality. Photoshop will simply decompress the image when you open it and then apply exactly the same compression when you save it. Instead, open it up, select the &#8220;Image&#8221; menu, then &#8220;Adjustments&#8221; and &#8220;Posterize&#8221;. Set the number of levels to 60 and click OK. We get the following image:</p>
<p><img class="alignnone size-full wp-image-250" title="Dice with a 60-Level Posterization" src="http://mail.acleon.co.uk/wp-content/uploads/2009/12/dice_60.png" alt="Dice with a 60-Level Posterization" width="450" height="405" /></p>
<p>You&#8217;d be very hard-pressed to find a difference between this and our original but this has brought the size down to 124KB (a 24% reduction). The reason the difference isn&#8217;t noticeable is that colours that were next to each other and were very similar have been combined as one colour. The eye tends not to notice this as its very biased towards picking out contrast.</p>
<p>Taking this further, we can drop it the posterization to 40 levels, and the result looks like this:</p>
<p><img class="alignnone size-full wp-image-251" title="Dice with 40-Level Threshold" src="http://mail.acleon.co.uk/wp-content/uploads/2009/12/dice_40.png" alt="Dice with 40-Level Threshold" width="450" height="405" /></p>
<p>At just 40 levels, we start to see some of the colour-grouping on the yellow die, but the rest of the image is still very comparable in quality to our original. Its now down to 112KB (almost another 10% saving). Taking it down to 20-Levels brings it down even further to 92KB but the quality really starts to go, so maybe in this case somewhere between 40 and 60 levels would be the best compromise.</p>
<p>The important thing is that the control of this is completely down to you. It can be applied whilst creating the image or at later optimization stage after saving it out for the first time. Through the use of layers or just the basic selection tool, you can apply posterization to different parts of the image. In this case, its possible to get the size of the image down even more by applying one level of posterization to the out-of-focus elements and a more drastic posterization to the red die in the foreground.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2009/12/compressing-png-images-with-posterize/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google Translations in Google Analytics</title>
		<link>http://www.acleon.co.uk/2009/12/google-translations-in-google-analytics/</link>
		<comments>http://www.acleon.co.uk/2009/12/google-translations-in-google-analytics/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 21:38:40 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Analytics & SEO]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[translation]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=230</guid>
		<description><![CDATA[Recently on one of the sites I manage, I noticed a lot of pages showing up in Google Analytics that were not a part of the site. These all began with the word &#8220;translate&#8221; and were of course regular pages &#8230;]]></description>
			<content:encoded><![CDATA[<p>Recently on one of the sites I manage, I noticed a lot of pages showing up in Google Analytics that were not a part of the site. These all began with the word &#8220;translate&#8221; and were of course regular pages viewed on the site but using Google&#8217;s Translation service.</p>
<p>The problem occurs from the way translation services work in that essentially Google&#8217;s servers are opening the page on your site, translating it and then displaying it to the visitor through a page located on Google&#8217;s server. When the Google Analytics Javascript starts up, it is quite right in thinking that you are trying to track a page on Google&#8217;s system with a complicated URI beginning with translate.</p>
<p>This was polluting my data and generally making things look untidy so I fired up my regex tester and came up with a couple of filter for cleaning up the data. It&#8217;s relatively simple to do as the full URI of the page being visited is contained within the query string of the translation page and therefore in the Request URI variable that is submitted to Google Analytics.</p>
<h2>Hostname</h2>
<p>Create a new Advanced Filter and call it &#8220;Google Translations (Hostname)&#8221;. Select Request URI from the Field A drop-down and enter the following pattern into the input box:</p>
<pre>/translate.*u=http://([^/]*)</pre>
<p>The URI will begin with &#8220;/translate&#8221; so we match this first. We then use a &#8220;.*&#8221; to disregard any text between this and the querystring variable &#8220;u&#8221; that contains the URI of the page being translated. The URL will begin with &#8220;http://&#8221; so we match this and then create a bracketed match to capture the hostname. We use the &#8220;^/&#8221; syntax so that it stops capturing the hostname when it encounters a &#8220;/&#8221;, as these can&#8217;t exist in hostnames.</p>
<p>In the Constructor, select Hostname from the drop-down box and enter $A1 in the input box. This will put our captured hostname where it belongs.</p>
<p><img class="alignnone size-full wp-image-231" title="Extracting the Hostname" src="http://mail.acleon.co.uk/wp-content/uploads/2009/12/google_translations_filter_1.png" alt="Extracting the Hostname" width="425" height="317" /></p>
<h2>Request URI</h2>
<p>We still need to capture the URI of our page, so we create another Advanced Filter called &#8220;Google Translation (Request URI)&#8221;. We then select Request URI from the Field A drop-down box and enter a similar pattern to before:</p>
<pre>/translate.*u=http://([^/]*)/?([^&amp;]*)</pre>
<p>We start by matching and capturing the same as we did before, but then we extend it a little. We need to capture everything after the hostname (i.e. everything after the first &#8220;/&#8221;). But we only the URI of the page, not the rest of the querystring, so we use the &#8220;^&amp;&#8221; pattern to stop when we hit an ampersand (i.e. the next query variable).</p>
<p>What makes it slightly more difficult is that there&#8217;s no garantee that they will be a &#8220;/&#8221; character to capture. If the visitor translates your homepage by entering http://www.yourdomain.com then there&#8217;s no backslash to capture. This is why we put the backslash outside the brackets and modify it with a ? mark, signifying that it may or may not be there.</p>
<p>In the Constructor, we select Request URI and enter &#8220;/$A2&#8243;. This way, we are always starting the Request URI with a backslash and then adding whatever else we may have captured from the query varibale. This means that page views on your homepage will be logged as a single backslash as they normally would be.</p>
<p><img class="alignnone size-full wp-image-232" title="Rewriting the Request URI" src="http://mail.acleon.co.uk/wp-content/uploads/2009/12/google_translations_filter_2.png" alt="Rewriting the Request URI" width="443" height="311" /></p>
<h2>Problem Solved</h2>
<p>So we&#8217;ve successfully rewritten both the Hostname and Request URI, eliminating any of those annoying translation URLs. It&#8217;s worth noting the order in which the filters are done. We need to do the hostname first as otherwise we would overwrite the Request URI and not be able to match the hostname from the old URI. Filter ordering problems like this are quite common, so if you&#8217;ve got other filters set up on your profile, take some time to establish what modifies what and create an order so that they don&#8217;t interfere with each other.</p>
<p>I&#8217;m currently looking into other translation services around the Web (Babelfish comes to mind) and cooking up some filters to work with these but, from my traffic at least, it seems that Google pretty much has the translation market sewn up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2009/12/google-translations-in-google-analytics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ZenCoding: Shorthand for HTML</title>
		<link>http://www.acleon.co.uk/2009/11/zencoding-shorthand-for-html/</link>
		<comments>http://www.acleon.co.uk/2009/11/zencoding-shorthand-for-html/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 20:30:08 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[zencode]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=192</guid>
		<description><![CDATA[Let&#8217;s face it, endlessly bashing out HTML is a pain. Even with the advent of automatic tag-closing in certain editors, I still spend far too much time typing tags and changing indentation so that it&#8217;s readable to me later on. &#8230;]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s face it, endlessly bashing out HTML is a pain. Even with the advent of automatic tag-closing in certain editors, I still spend far too much time typing tags and changing indentation so that it&#8217;s readable to me later on. This is why ZenCoding caught my eye. It&#8217;s shorthand for HTML, based on the CSS selector syntax.</p>
<h2>Using Selectors</h2>
<p>By using the common CSS selectors in a supporting editor, you can save yourself a lot of time. Here&#8217;s a quick list to refresh your memory:</p>
<table border="0">
<tbody>
<tr>
<td>div</td>
<td>A regular div tag</td>
</tr>
<tr>
<td>div#div1</td>
<td>Div tag with an id set to &#8220;div1&#8243;</td>
</tr>
<tr>
<td>div.class1</td>
<td>Div tag with class set to &#8220;class1&#8243;</td>
</tr>
<tr>
<td>div&gt;p</td>
<td>Div tag with a paragraph tag inside it</td>
</tr>
<tr>
<td>div+p</td>
<td>Div tag with a paragraph tag next to it</td>
</tr>
</tbody>
</table>
<p>These can of course be strung together to form complex HTML layouts using much less code. The editor will then expand it into beautifully laid out HTML. Let&#8217;s take a standard page layout:</p>
<pre>&lt;html&gt;
	&lt;head&gt;&lt;/head&gt;
	&lt;body&gt;
		&lt;div id="header"&gt;&lt;/div&gt;
		&lt;div id="content"&gt;&lt;/div&gt;
		&lt;div id="footer"&gt;&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Using the ZenCoding syntax, we can reduce that to the following snippet of code:</p>
<pre>html&gt;head+body&gt;div#header+div#content+div#footer</pre>
<p>A simple line of code in a syntax we&#8217;re all familiar with, which expands to create a whole starting page of markup.</p>
<h2>Multipliers and Iterators</h2>
<p>It doesn&#8217;t stop there though. One of the most annoying things about layouts is when you have multiple tags that are the same or similar. You&#8217;ve got the choice of typing each one out or copying and pasting, making changes as you go along. ZenCoding enhances the CSS syntax with the inclusion of a couple of special characters, * and $. Using *, followed by a number, will add that tag the same number of times. Using $ will add the index number of that tag. So, for example:</p>
<pre>ul#menu&gt;li.menuitem-$*5</pre>
<p>This will expand into an unordered list with the ID &#8220;menu&#8221;, with five list items inside it. These list items will all have the class menuitem-$, where $ is the index of that list item within the list. Here&#8217;s the markup:</p>
<pre>&lt;ul id="menu"&gt;
	&lt;li class="menuitem-1"&gt;&lt;/li&gt;
	&lt;li class="menuitem-2"&gt;&lt;/li&gt;
	&lt;li class="menuitem-3"&gt;&lt;/li&gt;
	&lt;li class="menuitem-4"&gt;&lt;/li&gt;
	&lt;li class="menuitem-5"&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
<p>ZenCoding is <a href="http://code.google.com/p/zen-coding/">open source software hosted at Google Code</a>. There&#8217;s already a large number of supported editors including Dreamweaver, Aptana, Textmate and NetBean with more being added regularly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2009/11/zencoding-shorthand-for-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building an Ajax Search Bar</title>
		<link>http://www.acleon.co.uk/2009/10/building-an-ajax-search-bar/</link>
		<comments>http://www.acleon.co.uk/2009/10/building-an-ajax-search-bar/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 20:59:52 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=182</guid>
		<description><![CDATA[Web Designer magazine have put one of the articles I wrote for them on Building an Ajax Search Bar up on their site. Originally published in Issue 159 of the magazine, this was part of a series introducing designers to &#8230;]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-183" style="margin-left: 10px; margin-right: 10px;" title="WD_159" src="http://www.acleon.co.uk/wp-content/uploads/2009/10/WD_159-232x300.jpg" alt="WD_159" width="97" height="126" />Web Designer magazine have put one of the articles I wrote for them on <a href="http://www.webdesignermag.co.uk/tutorials/build-an-ajax-search-bar/" target="_blank"><em>Building an Ajax Search Bar</em></a> up on their site. Originally published in Issue 159 of the magazine, this was part of a series introducing designers to programming in PHP and Javascript in order to turn their designs into  richer, more interactive Web apps. The whole series runs from issues 153 to 159 of the magazine, available from the <a href="http://www.imagineshop.co.uk/mag_home.php?magID=40" target="_blank">Imagine eShop</a>.</p>
<p>It&#8217;s worth noting that because of how we&#8217;d setup the PHP configuration in previous part of the series, there is no protection against SQL injection attacks in this tutorial. Out-of-the-box PHP installations back then came with the &#8220;magic_quotes_gpc&#8221; setting on, which would automatically escape incoming GET and POST variables. This is no longer the case, so you should take care to escape all input from the user.</p>
<p>In this case, you&#8217;d need to use the <a href="http://uk.php.net/manual/en/function.mysql-real-escape-string.php" target="_blank">mysql_real_escape_string()</a> function on the $SearchInput variable before running the database query in Step 12.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2009/10/building-an-ajax-search-bar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zooming Backgrounds in Internet Explorer</title>
		<link>http://www.acleon.co.uk/2009/10/zooming-backgrounds-in-internet-explorer/</link>
		<comments>http://www.acleon.co.uk/2009/10/zooming-backgrounds-in-internet-explorer/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 20:37:26 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[backgrounds]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[zooming]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=179</guid>
		<description><![CDATA[Something I was struggling with recently was a quirk in how Internet Explorer zooms in and out on content. All browsers allow you to zoom in and out of a page (usually using Cmd / Ctrl and the +/- keys). &#8230;]]></description>
			<content:encoded><![CDATA[<p>Something I was struggling with recently was a quirk in how Internet Explorer zooms in and out on content. All browsers allow you to zoom in and out of a page (usually using Cmd / Ctrl and the +/- keys). It&#8217;s rarely perfect, but some browsers are less than perfect than others.</p>
<p>Whilst all browsers these days use this feature to zoom all the elements on a page (back in the day, it just changed the text size) there is a glaring omission in Internet Explorer in that it doesn&#8217;t zoom the background image on a page. Not really a problem if you&#8217;re using a tiled / textured background, but if you&#8217;re using a full image that ties in with the rest of your layout it&#8217;s a disaster. It&#8217;s becoming more and more common to see site takeover ads that include a custom background that fits around the content of the site.</p>
<p>I&#8217;ve found a strange workaround for this that involves using CSS to assign your background image to the &lt;html&gt; tag as well as the &lt;body&gt; tag. You&#8217;ll need to keep the image on the &lt;body&gt; as otherwise Firefox and Safari will not render it all (it&#8217;s not in the standard!). It&#8217;s literally just a copy and paste from your body tag. For example:</p>
<pre>html {
    background-image: url('/images/large_background.jpg');
    background-color: #000000;
    background-position: top center;
    background-repeat: none;
}</pre>
<p>This would be a non-repeating image positioned at the top and middle of the page (suitable for use with a &#8220;margin: 0px auto&#8221; layout) with a black background colour (you&#8217;re fading the edges of your background images, right?).</p>
<p>It&#8217;s still not perfect, but it&#8217;s better than it is. Zooming in will now work perfectly across all browsers. Zooming out beyond the normal display with result in the background image being scaled with the content but will leave an echo of the background image assigned to the &lt;body&gt; tag to the right.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2009/10/zooming-backgrounds-in-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Galvanize: Google Analytics without the Javascript</title>
		<link>http://www.acleon.co.uk/2009/10/galvanize-google-analytics-without-the-javascript/</link>
		<comments>http://www.acleon.co.uk/2009/10/galvanize-google-analytics-without-the-javascript/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 13:04:14 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Analytics & SEO]]></category>
		<category><![CDATA[galvanize]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.acleon.co.uk/?p=173</guid>
		<description><![CDATA[Galvanize is a PHP class for the Google Analytics service that allows you to track page views without the need for Javascript code. Use to to track non-HTML-based content such as podcasts, RSS feeds, downloadable files or anything else that &#8230;]]></description>
			<content:encoded><![CDATA[<p>Galvanize is a PHP class for the Google Analytics service that allows you to track page views without the need for Javascript code. Use to to track non-HTML-based content such as podcasts, RSS feeds, downloadable files or anything else that doesn&#8217;t render in the browser. You can also use it as a replacement for the regular  Google Analytics scripts on your pages, and not have to rely on Javascript being executed when the page loads.</p>
<p>Usage is simple. Three lines will do it:</p>
<pre>include('Galvanize.php');
$GA = new Galvanize('UA-XXXXX-XX');
$GA-&gt;trackPageView();</pre>
<p>This will register a standard page view for any PHP file on your site. For more flexibility, you can tell it the URL and / or title of the page you want to register.</p>
<pre>$GA-&gt;trackPageView('testing.php', 'Test Title');</pre>
<p>An Alpha release was made available yesterday, which is able to confidently track page views, with event and e-commerce tracking available soon. <a href="http://sourceforge.net/projects/galvanize/files/Galvanize-0.1-Alpha/Galvanize-0.1-Alpha.zip/download" target="_blank">Download it here</a> or visit the <a href="http://sourceforge.net/projects/galvanize/" target="_blank">Sourceforge Project Page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acleon.co.uk/2009/10/galvanize-google-analytics-without-the-javascript/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>
