<?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>Paul Bennett - User Interface Developer</title>
	<atom:link href="http://pmbennett.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://pmbennett.net</link>
	<description></description>
	<lastBuildDate>Thu, 27 Oct 2011 15:10:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Backpacking Southeast Asia</title>
		<link>http://pmbennett.net/2011/10/27/backpacking-southeast-asia/</link>
		<comments>http://pmbennett.net/2011/10/27/backpacking-southeast-asia/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 15:10:11 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=410</guid>
		<description><![CDATA[My involvement: 

Designed look-and-feel and website structure
Hand-coded HTML/CSS templates
Integrated Wordpress
HTML5 &#38; CSS3 enhancements

Technologies used: HTML5, CSS, Javascript/jQuery, CMS, Wordpress, PHP
]]></description>
			<content:encoded><![CDATA[<p>My involvement: </p>
<ol>
<li>Designed look-and-feel and website structure</li>
<li>Hand-coded HTML/CSS templates</li>
<li>Integrated Wordpress</li>
<li>HTML5 &amp; CSS3 enhancements</li>
</ol>
<p><strong>Technologies used:</strong> HTML5, CSS, Javascript/jQuery, CMS, Wordpress, PHP</p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2011/10/27/backpacking-southeast-asia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NBTA Europe</title>
		<link>http://pmbennett.net/2010/08/17/nbta-europe/</link>
		<comments>http://pmbennett.net/2010/08/17/nbta-europe/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 14:38:07 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=406</guid>
		<description><![CDATA[NBTA Europe was designed and built by Bright Interactive
My involvement: 

Redesigned look-and-feel and website structure
Hand-coded HTML/CSS templates
Integrated into CMS
Added a splash of jQuery
HTML5 &#38; CSS3 enhancements

Technologies used: HTML5, CSS, Javascript/jQuery, CMS, Python (Cheetah)

]]></description>
			<content:encoded><![CDATA[<p><a href="http://nbtaeurope.org" target="_blank">NBTA Europe</a> was designed and built by <a href="http://www.brightinteractive.co.uk" target="_blank">Bright Interactive</a></p>
<p>My involvement: </p>
<ol>
<li>Redesigned look-and-feel and website structure</li>
<li>Hand-coded HTML/CSS templates</li>
<li>Integrated into CMS</li>
<li>Added a splash of jQuery</li>
<li>HTML5 &amp; CSS3 enhancements</li>
</ol>
<p><strong>Technologies used:</strong> HTML5, CSS, Javascript/jQuery, CMS, Python (Cheetah)</p>
<p><a href="http://www.bright-interactive.com" target="_blank" class="logo"><img src="http://resources.pmbennett.net/wp-content/themes/retro/img/bi_logo2.png" alt="Bright Interactive" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/08/17/nbta-europe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s all gone quiet again&#8230;</title>
		<link>http://pmbennett.net/2010/06/16/its-all-gone-quiet-again/</link>
		<comments>http://pmbennett.net/2010/06/16/its-all-gone-quiet-again/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 22:13:34 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=400</guid>
		<description><![CDATA[For the next 9 or so months, I am taking a break from work and going travelling with my girlfriend. So, just as I finally got the site somewhere near where I wanted it to be - I am abondoning it to see some of the world! For anyone interested, we will be keeping our friends and family updated as to our adventures over at<a href="http://travelblog.pmbennett.net"> travelblog.pmbennett.net</a>.]]></description>
			<content:encoded><![CDATA[For the next 9 or so months, I am taking a break from work and going travelling with my girlfriend. So, just as I finally got the site somewhere near where I wanted it to be - I am abondoning it to see some of the world! For anyone interested, we will be keeping our friends and family updated as to our adventures over at<a href="http://travelblog.pmbennett.net"> travelblog.pmbennett.net</a>.]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/06/16/its-all-gone-quiet-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Plushash39</title>
		<link>http://pmbennett.net/2010/06/02/introducing-plushash39/</link>
		<comments>http://pmbennett.net/2010/06/02/introducing-plushash39/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 13:49:14 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[entites]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=393</guid>
		<description><![CDATA[As a user interface developer, I come across those annoying question marks in Firefox fairly frequently, where someone has copied-and-pasted some text from a rich-text editor into an HTML file which contained unencoded HTML character entities. I have a fairly good memory for these things, but inevitably I have to use Google to find some that escape my memory. So I developed a simple HTML application to copy the encoded HTML character entities to my clipboard, ready to be pasted directly into my HTML.]]></description>
			<content:encoded><![CDATA[<p>The site is still in Beta, which means there are probably a few bugs loitering here and there. I have tested it in a number of browsers and it seems to work pretty well. I think the large type helps to find the exact charcter you need, and the one-click copy-and-paste saves having to highlight some tiny text (as I would have done previously). </p>
<p><a class="btn visit_link_btn" href="http://plushash39.com">HTML charcter entity copy-and-paste</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/06/02/introducing-plushash39/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Plushash39</title>
		<link>http://pmbennett.net/2010/06/02/plushash39/</link>
		<comments>http://pmbennett.net/2010/06/02/plushash39/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 13:38:48 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=387</guid>
		<description><![CDATA[My involvement: 

Designed look-and-feel
Hand-coded HTML/CSS
jQuery/AJAX and Zeroclipboard integration
Integrated CodeIgniter back-end

Technologies used: HTML, CSS, jQuery, PHP (CodeIgniter)
]]></description>
			<content:encoded><![CDATA[<p>My involvement: </p>
<ol>
<li>Designed look-and-feel</li>
<li>Hand-coded HTML/CSS</li>
<li>jQuery/AJAX and <a href="http://code.google.com/p/zeroclipboard/">Zeroclipboard</a> integration</li>
<li>Integrated <a href="http://codeigniter.com/">CodeIgniter</a> back-end</li>
</ol>
<p><strong>Technologies used:</strong> HTML, CSS, jQuery, PHP (CodeIgniter)</p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/06/02/plushash39/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3 Animated Photo Stack with jQuery</title>
		<link>http://pmbennett.net/2010/05/28/css3-animated-photo-stack-with-jquery/</link>
		<comments>http://pmbennett.net/2010/05/28/css3-animated-photo-stack-with-jquery/#comments</comments>
		<pubDate>Fri, 28 May 2010 11:51:42 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Transitions Webkit]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=377</guid>
		<description><![CDATA[CSS3 transitions and animations are rightly attracting a lot of attention. With support in most modern browsers, there is a lot of scope for creating rich user experiences using only CSS. In this post, I will walk through how to create a stack of photos using CSS keyframe animations and a dash of jQuery to achieve a pretty awesome effect.]]></description>
			<content:encoded><![CDATA[<p>So, lets dive straight in! The markup is pretty straightforward, you just need a container filled with the images for the stack of photos:</p>
<pre><code>&lt;div id="photo_stack"&gt;
	&lt;img id="photo1" src="images/photostack1.jpg" alt="Alt text goes here..." /&gt;
	&lt;img id="photo2" src="images/photostack2.jpg" alt="Alt text goes here..." /&gt;
	&lt;img id="photo3" src="images/photostack3.jpg" alt="Alt text goes here..." /&gt;
&lt;/div&gt;</code></pre>
<p>You will then need some simple CSS to style and position the images in a stack. We will be using jQuery to alter the z-index values of each image once the animation has completed, so we will start by giving each image a high z-index value. You will also need to setup the speed and easing functions for the transitions. </p>
<pre><code>#photo_stack img {
	position: absolute;
	border: 10px solid #FFF;
	box-shadow: 2px 2px 8px rgba(0,0,0,0.5);
	-moz-box-shadow: 2px 2px 8px rgba(0,0,0,0.5);
	-webkit-box-shadow: 2px 2px 8px rgba(0,0,0,0.5);
	z-index: 9999;

	/* setup transition speed and easing */
	-moz-transition: all 0.2s ease; /* Firefox */
	-webkit-transition: all 0.2s ease; /* WebKit */
	-o-transition: all 0.2s ease; /* Opera */
	transition: all 0.2s ease; /* Standard */

}
#photo_stack #photo1 {
	top: 0;
	left: 100px;
}
#photo_stack #photo2 {
	top: 12px;
	left: 55px;
}
#photo_stack #photo3 {
	top: 27px;
	left: 50px;
}</code></pre>
<p>Once this is complete you can add the CSS to create the keyframe animation, which will take the image at the top of the stack and place it at the bottom of the photo stack.</p>
<pre><code>@-webkit-keyframes shuffle {
	0% {
		margin-left: 0px;
	}
	50% {
		margin-left: 450px;
		-webkit-transform: scale(0.9);
		-moz-transform: scale(0.9);
		transform: scale(0.9);
	}
	100% {
		margin-left: 0px;
		-webkit-transform: scale(1);
		-moz-transform: scale(1);
		transform: scale(1);
	}
}
#photo_stack .animate {
	-webkit-animation-name: shuffle;
	-webkit-animation-duration: 1s;
	-webkit-animation-iteration-count: 1;
}</code></pre>
<p>What this is basically doing, is running the keyframe animation called &#8217;shuffle&#8217; once and for a duration of 1 second. The animation itself is moving the image 450px to the right of the stack, scaling down to give an impression of depth, and then moving it back to where it&#8217;s original position. Note that this will only happen when the image is assigned the &#8216;animate&#8217; class.</p>
<p>Okay, so you now have a cool animation effect, but nothing triggers it and the image does not go to the bottom of the stack: Enter jquery. What jquery will do, is trigger the animation by assigning the &#8216;animate&#8217; class to the image on the top of the stack, removing it once the animation is complete. </p>
<pre><code>$imgs = $("#photo_stack img");
$imgCount = $imgs.length;
$curr_index = 0;
$imgs.last().addClass('current'); /* Set the image at top of stack to current */

$("#photo_stack")
	.delegate('img', 'click', function() {
		$this = $(this);

		/* If the image is at the top of the stack */
		if ($this.hasClass('current')) {
			/* Work out new z-index value */
			$zi = $this.css('zIndex') - $imgCount;

			/* Trigger animation */
			$this.addClass('animate');

			/* Assign new z-index value then stop animation after complete */
			setTimeout(function() { $this.css('zIndex', $zi); }, 200);
			setTimeout(function() { $this.removeClass('animate'); }, 1000);

			/* Set next image to current */
			$this.removeClass('current');
			if ($this.index() == 0) {
				$imgs.last().addClass('current');
			} else {
				$imgs.eq($this.index()-1).addClass('current');
			}
		}
	})</code></pre>
<p>You will now have some images in a stack that you can click on and they will be animated and placed to the bottom of the stack. Now it is time to use the rotation transition to make the photo stack look a little more realistic. I used CSS classes to rotate the images somewhere between -4 and 4 degrees and used jQuery to randomly assign one of those classes to each image when the DOM has loaded. Then I just added a CSS rule to rotate the image to 0 degrees on hover. </p>
<pre><code>#photo_stack .deg1 {
	-webkit-transform: rotate(1deg);
   	-moz-transform: rotate(1deg);
   	transform: rotate(1deg);
}
#photo_stack .deg2 {
	-webkit-transform: rotate(2deg);
   	-moz-transform: rotate(2deg);
   	transform: rotate(2deg);
}
#photo_stack .deg3 {
	-webkit-transform: rotate(3deg);
   	-moz-transform: rotate(3deg);
   	transform: rotate(3deg);
}
#photo_stack .deg4 {
	-webkit-transform: rotate(4deg);
   	-moz-transform: rotate(4deg);
   	transform: rotate(4deg);
}
#photo_stack .deg1neg {
	-webkit-transform: rotate(-1deg);
   	-moz-transform: rotate(-1deg);
   	transform: rotate(-1deg);
}
#photo_stack .deg2neg {
	-webkit-transform: rotate(-2deg);
   	-moz-transform: rotate(-2deg);
   	transform: rotate(-2deg);
}
#photo_stack .deg3neg {
	-webkit-transform: rotate(-3deg);
   	-moz-transform: rotate(-3deg);
   	transform: rotate(-3deg);
}
#photo_stack .deg4neg {
	-webkit-transform: rotate(-4deg);
   	-moz-transform: rotate(-4deg);
   	transform: rotate(-4deg);
}
#photo_stack .hover {
	-webkit-transform: rotate(0deg);
   	-moz-transform: rotate(0deg);
   	transform: rotate(0deg);
	cursor: pointer;
}</code></pre>
<p>I chose to use this approach, as it means that you can have any number of images in the stack, and they will be randomly rotated. If you wanted, you could just assign a specific angle to each photo in the stack using each images ID for complete control.</p>
<p>The full code for the animated photo stack can be found on the <a href="/demos/css3-animated-photo-stack.html">demo page</a>. It works best in the latest version of Chrome or Safari. Firefox works but without the animation and I did not even bother checking Internet Explorer &#8211; it always spoils the party!</p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/05/28/css3-animated-photo-stack-with-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS display: inline-block &#8211; underused and underrated?</title>
		<link>http://pmbennett.net/2010/05/24/css-display-inline-block-underused-and-underrated/</link>
		<comments>http://pmbennett.net/2010/05/24/css-display-inline-block-underused-and-underrated/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:55:30 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[inline-block]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=366</guid>
		<description><![CDATA[<p>Before I continue, I must point out this this is neither new or revolutionary; but it amazed me that after 6 years of front-end devlopement, I had never used the CSS2 <code>display: inline-block</code> selector. It's usefulness has been pointed out <a href="http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/">many times in the past</a>, but I still thought that it would be worthwhile documenting my usage of it.</p>]]></description>
			<content:encoded><![CDATA[<p>What I basically wanted to do was to add an icon after a heading, that would always line-up next to the last word, regardless of the amount to text. For various reasons I was using a <code>span</code> element, to which I applied Mike Rundle&#8217;s Phark image replacement technique. However, in order for the <code>span</code> to obey any dimensions, it caould not be displayed <code>inline</code>. I started to think about how I would achieve this, and all my solutions were fairly longwinded for what would appear to be a pretty trivial task: that&#8217;s when I remembered the <code>inline-block</code> selector! Using this allowed me to give the <code>span</code> the desired dimensions, whilst allowing it to line-up against the text.</p>
<p>Unfortunately, this doesn&#8217;t work in IE6+7 or Firefox 2. But fear not, these can be addressed (at the expense of a stylesheet that no longer validates). Here is the code:</p>
<pre><code>h3 span {
	width: 16px;
	height: 16px;
	overflow: hidden;
	text-indent: -9999em;
	background: url(/img/secure_lock_icon.png) no-repeat 0 0;
	display: -moz-inline-stack;	/* Get FF2 to play nicely */
        display: inline-block;	/* Modern browsers get this */
	vertical-align: top;

	/* these go in your IE specific stylesheet to make it play fairly as well */
	zoom: 1;
        display: inline;
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/05/24/css-display-inline-block-underused-and-underrated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Maps and Polylines</title>
		<link>http://pmbennett.net/2010/05/09/google-maps-and-polylines/</link>
		<comments>http://pmbennett.net/2010/05/09/google-maps-and-polylines/#comments</comments>
		<pubDate>Sun, 09 May 2010 09:19:12 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Google maps]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Polylines]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=354</guid>
		<description><![CDATA[<p>I recently needed to outline a region on a map for a client, but wanted to maintain the interactivity you get with Google Maps. After a bit of Googling, I found that this could be achieved using Polylines.</p>]]></description>
			<content:encoded><![CDATA[<p>At first glance, I thought this was going to be quite a tricky task, but as it turns out, it is really quite easy. Once you have loaded the Google Maps javascript files, you just need to create a new GPolyline object, and give it the coordinates of the points on your line, along with the colour and the thinkness of the line. All you then need to do is add it as an overlay, and you are done! </p>
<pre><code>	var polyline = new GPolyline([
		new GLatLng(50.86327703482849, -0.08008003234863281),
		new GLatLng(50.85807603889224, -0.07750511169433594),
		// ... more coordinates
	], "#FF0000", 3);
	$map.addOverlay(polyline);</code></pre>
<p>To make things even easier, I found a neat little <a href="http://www.doogal.co.uk/polylines.php">Google Maps polylines code generator</a> to create the list of coordinates for me!</p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/05/09/google-maps-and-polylines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rotating Globe with jQuery</title>
		<link>http://pmbennett.net/2010/04/20/rotating-globe-with-jquery/</link>
		<comments>http://pmbennett.net/2010/04/20/rotating-globe-with-jquery/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 21:11:55 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=288</guid>
		<description><![CDATA[<p>This is basically another take on moving backgrounds using jQuery, but I was inspired to create a rotating globe by <a href="http://www.romancortes.com/blog/pure-css-coke-can/">Rom&#225;n Cort&#233;s Pure CSS Coke Can</a>. Sure, this has nothing to do with displacement, and it uses JavaScript, but it was fun none-the-less!</p>]]></description>
			<content:encoded><![CDATA[<p>As I mentioned above, this is yet another moving background example, there is nothing new here, I just thought it might be fun to try!</p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/04/20/rotating-globe-with-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guyz &#8216;n&#8217; Girlz</title>
		<link>http://pmbennett.net/2010/04/20/guyz-n-girlz/</link>
		<comments>http://pmbennett.net/2010/04/20/guyz-n-girlz/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 21:01:00 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://pmbennett.net/?p=336</guid>
		<description><![CDATA[My involvement: 

Designed look-and-feel and website structure
Hand-coded HTML/CSS
jQuery menus and testimonials
Google Maps with Polylines
Integrated Wordpress back-end

Technologies used: HTML, CSS, jQuery, PHP (Wordpress)
]]></description>
			<content:encoded><![CDATA[<p>My involvement: </p>
<ol>
<li>Designed look-and-feel and website structure</li>
<li>Hand-coded HTML/CSS</li>
<li>jQuery menus and testimonials</li>
<li>Google Maps with Polylines</li>
<li>Integrated Wordpress back-end</li>
</ol>
<p><strong>Technologies used:</strong> HTML, CSS, jQuery, PHP (Wordpress)</p>
]]></content:encoded>
			<wfw:commentRss>http://pmbennett.net/2010/04/20/guyz-n-girlz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

