<?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>Interaction Designer Craig Dennis</title>
	<atom:link href="http://craigmdennis.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://craigmdennis.com</link>
	<description>The portfolio &#38; blog for Craig Dennis, an Interaction Designer based in South East England</description>
	<lastBuildDate>Thu, 23 Feb 2012 14:05:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=284</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Why we need input independent metaphors</title>
		<link>http://craigmdennis.com/why-we-need-input-independent-metaphors/</link>
		<comments>http://craigmdennis.com/why-we-need-input-independent-metaphors/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 14:05:50 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Interaction Design]]></category>
		<category><![CDATA[Click]]></category>
		<category><![CDATA[Interactions]]></category>
		<category><![CDATA[Metaphors]]></category>
		<category><![CDATA[Tap]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2721</guid>
		<description><![CDATA[The convolution of actions on the web — with the advent and prevalence of touch screens — means we are going to lose what a &#8216;click&#8217; or a &#8216;tap&#8217; is when relating to our input method. Take a text link for example. Since the dawn of the internet whenever we have the need to inform a user of the... <a class="more" href="http://craigmdennis.com/why-we-need-input-independent-metaphors/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>The convolution of actions on the web — with the advent and prevalence of touch screens — means we are going to lose what a <em>&#8216;click&#8217;</em> or a <em>&#8216;tap&#8217;</em> is when relating to our input method.</p>
<div class="columns">
<p>Take a text link for example. Since the dawn of the internet whenever we have the need to inform a user of the action they need to take it has been<em> &#8216;click x&#8217;</em>. Either as microcopy to explain or as part of the link itself. This improved slightly by trying to remove <em>&#8216;click here&#8217;</em> from the link text and make it more implied such as <em>&#8216;find out more&#8217;</em> rather than <em>&#8216;click here to find out more&#8217;</em>.</p>
<p>Now that we have touch enabled devices (and soon to be gesture based &#8211; Kinect, Playstation Move, Wii) for use with navigating interfaces, <em>&#8216;click the link&#8217;</em> no longer makes sense to inform a call to action. If you&#8217;re only dealing with touch enabled devices — like iPad &amp; iPhone — it makes sense to refer to the user action as <em>&#8216;tap&#8217;</em> but if the interface spans multiple device input methods; how should you deal with that?</p>
</div>
<h3>What happens with responsive design across multiple platforms &amp; inputs?</h3>
<p>It&#8217;s clear we need to define a new metaphor for user action. No longer can it be just <em>&#8216;click&#8217;</em> or <em>&#8216;tap&#8217;.</em> We need to actually take a look at the physical context in which we would invoke said action. One solution would be to use feature detection such as <a href="http://www.modernizr.com/" target="_blank">Modernizr</a> to determine if a particular input method is available and perform some trickery to display the correct terminology, but this seems like an antiquated approach treating the symptoms and not the cause.</p>
<h2>Use more generic but contextually aware terms.</h2>
<p>The only solution that makes sense, going forward, is to use more generic terms for user actions. We need to start relating these actions to the context in which they are to be applied. Using physical metaphors in the digital space to reinforce a user action. This may even result in is not having to even worry about explaining what a call to action does. For example; people innately know how a light-switch works. So let&#8217;s use this existing schema!</p>
<p>This means using <em>&#8216;push&#8217;</em> for buttons not <em>&#8216;tap&#8217;</em> or <em>&#8216;click&#8217;. </em>It means using &#8217;flip or toggle&#8217; for switches or toggles and not &#8216;tap&#8217; or &#8216;click&#8217; etc. Actions such as drag still hold true as they are already based on physical contexts that we can easily understand. As such, they can be transferred to any context.</p>
<h2>So what?</h2>
<p>I guess all we need to be aware of is how we are describing the usage of a call to action element to users. If it toggles between two states; then imply that in the design. I&#8217;m not saying that user&#8217;s are idiots; if something says click and they are on a touch device, the concept is familiar so they can translate that quickly. All I&#8217;m saying is that they shouldn&#8217;t have to, regardless of how well they can. All that matter is that you m<strong>ake sure users will understand what they have to do no matter what input device they  are using</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/why-we-need-input-independent-metaphors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pickr &#8211; A web based app to randomly pick things</title>
		<link>http://craigmdennis.com/pickr-a-web-based-app-to-randomly-pick-things/</link>
		<comments>http://craigmdennis.com/pickr-a-web-based-app-to-randomly-pick-things/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 22:59:11 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Web App]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2415</guid>
		<description><![CDATA[A few weeks ago I decided to try and make a web app for iPhone. The idea was simple; to create an app to randomly pick items from a list. I will admit my reason for choosing this is not arbitrary, rather, born out of frustration of using the Tea Round app for drinking games.... <a class="more" href="http://craigmdennis.com/pickr-a-web-based-app-to-randomly-pick-things/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I decided to try and make a web app for iPhone. The idea was simple; to create an app to randomly pick items from a list. I will admit my reason for choosing this is not arbitrary, rather, born out of frustration of using the Tea Round app for drinking games.</p>
<p>Tea round is far too constrained in terms of the inputs (no spaces are allowed) and adding new names / clearing names takes far too long. Not to mention that if you run two &#8216;spins&#8217; one after another, everyone is still included in the &#8216;spin&#8217;. Mine would be different. So I started to build a skeleton app using javascript and I had it working in an hour or two.</p>
<h3 class="divider">The styling replicates the look and feel of a native iOS app and can also run perfectly well on desktop or tablets.</h3>
<p><img class="size-full wp-image-2600 alignleft" title="pickr" src="http://uploads.craigmdennis.com/2012/02/pickr.png" alt="" width="357" height="540" />The end result is an app that looks like a native app; is cached on your device so you don&#8217;t need an internet connection &#8211; like a native app; and has the same interactions &amp; speed that you would expect from a native app.</p>
<h2>So how long before the native app is dead?</h2>
<p>Well the only thing stopping it is access to functions within the device itself. Things like the camera (although there are workarounds &#8211; see PicUp) or GPS, gyroscope / accelerometer. All you need is a secure API to access that information with the user&#8217;s consent (imagine a popup screen similar to the ones you get with Facebook authorisation for apps) and you can say bye bye to a lot of native apps. So how long until this happens? Well, probably a long time.</p>
<p>The app business is worth £billions now so allowing anyone to create their own and <em>not</em> have it pass through an app store (so the creator gets all the money) is unlikely. Also you will lose the curation of apps  so there won&#8217;t be any guidelines to adhere to in order to be published. So you could get any old Tom, Dick or Harry publishing a crappy app&#8230; like the internet then.</p>
<p>Really though, everything is eventually going to be web based. So it&#8217;s just a matter of time.</p>
<h2>Check it out</h2>
<p>Have a look at the app on your phone or tablet (or even in your browser) and use it.</p>
<p><a class="call-to-action" href="http://craigmdennis.com/apps/pickr" target="_blank">Try Pickr for free</a></p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/pickr-a-web-based-app-to-randomly-pick-things/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How I made a jQuery plugin to use CSS3 animations</title>
		<link>http://craigmdennis.com/jquery-plugin-to-use-css3-animations/</link>
		<comments>http://craigmdennis.com/jquery-plugin-to-use-css3-animations/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 20:38:23 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animate.css]]></category>
		<category><![CDATA[animations]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery animateCSS]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2532</guid>
		<description><![CDATA[A while back, I stumbled across a very nice set of CSS3 animations by Dan Eden which are plug and play. All you do is add a class (ideally with javascript) to the element you want to animate and it&#8230; well&#8230; animates. This is great! Dan recommends that you use $('.bouncy').addClass('bounceInDown'); to add the class with... <a class="more" href="http://craigmdennis.com/jquery-plugin-to-use-css3-animations/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>A while back, I stumbled across a <a title="animate.css" href="http://daneden.me/animate/" target="_blank">very nice set of CSS3 animations </a>by Dan Eden which are plug and play. All you do is add a class (ideally with javascript) to the element you want to animate and it&#8230; well&#8230; animates.</p>
<p>This is great! Dan recommends that you use <code>$('.bouncy').addClass('bounceInDown');</code> to add the class with jQuery and this is the simplest method to get you started. In fact this is the method I used when I started my site redesign.</p>
<p>I quickly ran into issues though. Now, it wasn&#8217;t anything that animate.css does or doesn&#8217;t do. More the fact that there was no way to replace jQuery animations with the CSS3 fancy-pants ones.</p>
<h2>&#8220;What did you do?&#8221; I hear you ask.</h2>
<p>Well, I&#8217;ll tell you.<a href="https://gist.github.com/1438197/3629f4f16dd37b629606daafaa8bf8da2ac46130" target="_blank"> I wrote a little function</a> that handled adding the classes to any element dynamically. This gave me a little improvement in terms of ease of use and speed. There was still something missing though. I only realised when I had 3 animations that needed to run one after each other, that there was no way to determine when a CSS3 animation had completed so I could run another one. In the interim I set a delay parameter so I could say &#8216;do this, wait 3 seconds then do this&#8217;.</p>
<p>This &#8216;callback&#8217; functionality does exist and CSS3 animations do indeed trigger an event when they finish, you just need to set a javascript event listener to detect that so you can apply some actions. After a little Googling I added this to my function. This now worked in a very similar way to jQuery&#8217;s own animate function so it was very familiar.</p>
<h2>Then came the plugin</h2>
<p>A few weeks later, Dan (<a title="Follow Dan Eden on Twitter" href="http://twitter.com/_dte" target="_blank">@_dte</a>) mentioned me in a tweet saying that my site was using his animate.css and looked good. I thanked him and showed him my jQuery function that helped. <a title="View the Tweet on Twitter" href="https://twitter.com/#!/_dte/status/144043920148545536" target="_blank">He seemed suitably impressed</a> and asked if he could use it. It was already a public gist on github so I said no problem. That evening I decided it would be even better if it was an actual plugin that could be used in an even similar way to jQuery&#8217;s native functions. And so <a title="Get jQuery animateCSS on GitHub" href="https://github.com/craigmdennis/animateCSS" target="_blank">jQuery animateCSS</a> was born.</p>
<p>To use it is pretty easy.</p>
<h3>Basic</h3>
<pre>$('#your-id').animateCSS('fadeIn');</pre>
<h3>With callback</h3>
<pre>$('#your-id').animateCSS('fadeIn', function(){
    alert('Boom! Animation Complete');
});</pre>
<h3>With delay (in ms)</h3>
<pre>$('#your-id').animateCSS('fadeIn', 500);</pre>
<h3>With delay AND callback</h3>
<pre>$('#your-id').animateCSS('fadeIn', 1000, function(){
    alert('Boom! Animation Complete');
});</pre>
<p>If you want to hide an element when the page loads and then apply an effect, it might look something like this:</p>
<pre>&lt;style&gt;
    .js #your-id {
        visibility:hidden;
    }
&lt;/style&gt;

$(window).load( function(){
    $('#your-id').animateCSS('fadeIn', 1000, function(){
        alert('Boom! Animation Complete');
    });
});</pre>
<p>Remember to use a .js (or .no-js depending on how you role) so that the element still displays for non javascript users (and Google previews).</p>
<p>Again, the plugin is available here: <a href="https://github.com/craigmdennis/animateCSS/">https://github.com/craigmdennis/animateCSS/</a></p>
<p>That&#8217;s it guys. Have fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/jquery-plugin-to-use-css3-animations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HoverIntent jQuery plugin initiated by a click event</title>
		<link>http://craigmdennis.com/hoverintent-jquery-plugin-initiated-by-a-click-event/</link>
		<comments>http://craigmdennis.com/hoverintent-jquery-plugin-initiated-by-a-click-event/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 22:28:49 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HoverIntent]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2298</guid>
		<description><![CDATA[Let me start by saying that I am not a developer, I am a designer who dabbles in jQuery and as such my code will probably not be the cleanest or most efficient but it gets the job done. I will also assume you have some basic knowledge of jQuery. View the demo Recently I... <a class="more" href="http://craigmdennis.com/hoverintent-jquery-plugin-initiated-by-a-click-event/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://craigmdennis.com/demos/hover-intent"><img class="alignnone size-full wp-image-2320" title="hoverIntent" src="http://uploads.craigmdennis.com/2010/11/hoverIntent.jpg" alt="" width="414" height="150" /></a></p>
<p>Let me start by saying that I am not a developer, I am a designer who dabbles in jQuery and as such my code will probably not be the cleanest or most efficient but it gets the job done.</p>
<p>I will also assume you have some basic knowledge of jQuery.</p>
<p><a class="call-to-action" href="http://craigmdennis.com/demos/hover-intent/" target="_blank">View the demo</a></p>
<p>Recently I had to create a sophisticated jQuery interface initiated by clicking an icon and showing a div then fading it away upon leaving the div. The problem was the shape meant that when a user moved the cursor from the icon to the div they briefly left the confines of the div and as such the div would fade out. This was a problem and the solution seemed to be the <a href="http://cherne.net/brian/resources/jquery.hoverIntent.html" target="_blank">Hover Intent plugin</a> which allows the mouse cursor to leave the div and re-enter it within a certain number of ms (milliseconds) and not fade out the div (or whatever action you have written).</p>
<p>This is great right? Well yeah, but this only works when you hover over an element to begin with. What happens when you want to initiate the initial action on a click instead of on hover? This was my problem.</p>
<h3>My solution:</h3>
<p>So lets set up Hover Intent set up to work on hover with a mega-menu. Below is just the jQuery, you can see the html and CSS <a href="http://craigmdennis.com/demos/hover-intent/" target="_blank">in the demo</a> if you want to or <a href="http://craigmdennis.com/downloads/hover-intent.zip">download the source files here</a>.</p>
<pre>$(document).ready(function(){
$('body').removeClass('no-js'); // Removes the class 'no-js' from the body to let us know javascript is enabled
function slideTheMenuDown() { // This function is called by hover intent 'over:'
$(this).find('.subnav').slideDown('fast'); // Slide the menu down
}

function slideTheMenuUp() { // This function is called by hover intent 'out:'
$(this).find('.subnav').slideUp('fast'); // Slide up the sub menu
}

$('ul.topnav li').hoverIntent({
sensitivity: 7, // number = sensitivity threshold (must be 1 or higher)
interval: 100,   // number = milliseconds of polling interval (we want this to be initiated on click rather than hover)
over: slideTheMenuDown,  // function = onMouseOver callback (required)
timeout: 500,   // number = milliseconds delay before onMouseOut function call
out: slideTheMenuUp    // function = onMouseOut callback (required)
})
});</pre>
<p>Now that we have Hover Intent working on hover all we need to do is wrap the function slideTheMenuDown in a click event. When Hover Intent reacts to a hover event, there is no action until the associated click event has triggered (basically until you click nothing happens). The result is no animation until you are hovering over the desired element and are also clicking it. Sweet right?</p>
<p>This is what it looks like</p>
<pre>function slideTheMenuDown() {
    $(this).click(function() { // We wrap the action in a click event
        $(this).find('.subnav').slideDown('fast') // Slide the menu down on click
    });
});</pre>
<p>That&#8217;s it, you&#8217;re done.</p>
<p>I have added a few embellishments such as adding an active class to the parent li so when you hover onto the submenu, the hover state sticks on the top level menu item.</p>
<p><a href="http://www.premiumpixels.com/clean-simple-navigation-menu-psd/">Get the menu style as a psd from Premium Pixels</a></p>
<p><a class="call-to-action" href="http://craigmdennis.com/demos/hover-intent/" target="_blank">View the demo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/hoverintent-jquery-plugin-initiated-by-a-click-event/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shoutbox</title>
		<link>http://craigmdennis.com/shoutbox/</link>
		<comments>http://craigmdennis.com/shoutbox/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 22:14:13 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Uni work]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Interactive]]></category>
		<category><![CDATA[MaxMSP]]></category>
		<category><![CDATA[Sound]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2279</guid>
		<description><![CDATA[The objective was to create an interactive environment with the premise of a 21st century ‘village fete’. Looking into what makes a fete and how this can be recreated with new interactions. The traditional village fete was analysed to see what underlying principles to find out of what one consisted. What did people remember from them? Why... <a class="more" href="http://craigmdennis.com/shoutbox/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>The objective was to create an interactive environment with the premise of a 21st century ‘village fete’. Looking into what makes a fete and how this can be recreated with new interactions. The traditional village fete was analysed to see what underlying principles to find out of what one consisted.</p>
<p><img class="alignleft" title="2008-06-11" src="http://uploads.craigmdennis.com/2010/04/2008-06-11-419x337.jpg" alt="" width="420" height="337" /></p>
<p>What did people remember from them? Why did they go to them? Research shows that people enjoy village fetes because of the sense of community, fun and prizes.</p>
<p>Designed to give the user a feeling of fun and community, Shoutbox creates ‘bubbles’ in a variety of shapes and colours based on sound input. Any sound can be used such as a single voice, many voices or instruments. The louder the input; the larger the bubble and the longer the length of the sound; the faster the bubble moves across the screen. In addition, whenever there is a collision between the bubbles, the sound used to create the bubble is played back. Sound attracts people, drawing them together and developing an ad-hoc community wherever it is deployed.</p>
<p><a class="youtube call-to-action" title="Shoutbox demonstration" href="http://www.youtube.com/v/zSHtgOgnI6Y">Watch a video of Shoutbox »</a></p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/shoutbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QR Stamps: RSA Competition</title>
		<link>http://craigmdennis.com/qr-stamps-rsa-competition/</link>
		<comments>http://craigmdennis.com/qr-stamps-rsa-competition/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 01:47:04 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Uni work]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Ravensbourne]]></category>
		<category><![CDATA[RSA]]></category>
		<category><![CDATA[Stamps]]></category>
		<category><![CDATA[Thermochromic Ink]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2162</guid>
		<description><![CDATA[The aim was to create a stamp that promotes renewable energies. While traditionally a graphic design brief I tried to make the process of informing people more tangible. The stamps use thermochromic ink which, when heated, turns transparent. Two different colours are layered to create a nice effect. Body heat is enough to activate the... <a class="more" href="http://craigmdennis.com/qr-stamps-rsa-competition/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2190 alignnone" title="qr" src="http://uploads.craigmdennis.com/2010/07/qr.jpg" alt="" width="414" height="552" /></p>
<p>The aim was to create a stamp that promotes renewable energies. While traditionally a graphic design brief I tried to make the process of informing people more tangible.</p>
<p>The stamps use thermochromic ink which, when heated, turns transparent. Two different colours are layered to create a nice effect. Body heat is enough to activate the process. When the ink is activated it turns transparent and reveals a QR tag underneath. The QR tag is then captured by a mobile device and automatically directs it to a mobile site. The site contains contextual information related to the specific stamp as part of a photo sharing social network</p>
<p>The inherent social aspect allows for real discussions about problems and solutions. With the rise in connected devices and the increase in mobile cameras, the concept relies on existing technologies. QR tag readers are available on any mobile device and can be downloaded for free. Many mobile devices are being sold with readers already installed and if this continues then the uptake of QR tag usage would naturally increase.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/qr-stamps-rsa-competition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dissertation: Privacy vs Security</title>
		<link>http://craigmdennis.com/dissertation-privacy-vs-security/</link>
		<comments>http://craigmdennis.com/dissertation-privacy-vs-security/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 00:44:06 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Dissertation]]></category>
		<category><![CDATA[Freedom]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2151</guid>
		<description><![CDATA[My dissertation is about internet security and internet privacy issues. The fact that they are both such large parts of everyone’s online experience and yet they seem to constantly battle against each other for supremacy. Can there be harmony or is there an inherent paradox between them meaning they can never function in equilibrium? As part of the dissertation... <a class="more" href="http://craigmdennis.com/dissertation-privacy-vs-security/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img title="Dissertation" src="http://uploads.craigmdennis.com/2010/04/1188852_55513970-Large-420x280.jpg" alt="" width="420" height="280" /></p>
<p>My dissertation is about internet security and internet privacy issues. The fact that they are both such large parts of everyone’s online experience and yet they seem to constantly battle against each other for supremacy. Can there be harmony or is there an inherent paradox between them meaning they can never function in equilibrium?</p>
<p>As part of the dissertation process interviews were conducted, one of which with the global IT manager of Premier Oil, to establish what issues are involved in business as well as consumer experiences and what guidelines they have to adhere to. More importantly if any of them are working or not.</p>
<p><a class="call-to-action" href="http://uploads.craigmdennis.com/2010/04/2008-12-01_Dissertation.pdf">Read my dissertation here ›</a></p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/dissertation-privacy-vs-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a CSS drop-down menu with persistent active state</title>
		<link>http://craigmdennis.com/pure-css-drop-down-menu-with-persistent-active-state/</link>
		<comments>http://craigmdennis.com/pure-css-drop-down-menu-with-persistent-active-state/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 22:17:15 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Active Hover]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[Inline]]></category>
		<category><![CDATA[List]]></category>
		<category><![CDATA[Menu]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2083</guid>
		<description><![CDATA[Yesterday at work I stumbled upon an idea that I haven&#8217;t seen before when dealing with pure CSS drop-down menus. The general premise is to use an unordered list within an unordered list activated on hover of the parent li. This is pretty standard (but won&#8217;t work in IE6 due to hovers only being available... <a class="more" href="http://craigmdennis.com/pure-css-drop-down-menu-with-persistent-active-state/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://craigmdennis.com/pure-css-drop-down-menu-with-persistent-active-state/untitled-1-4/" rel="attachment wp-att-2360"><img class="alignnone size-medium wp-image-2360" title="Untitled-1" src="http://uploads.craigmdennis.com/2010/07/Untitled-11-414x212.jpg" alt="" width="414" height="212" /></a></p>
<p>Yesterday at work I stumbled upon an idea that I haven&#8217;t seen before when dealing with pure CSS drop-down menus. The general premise is to use an unordered list within an unordered list activated on hover of the parent li. This is pretty standard (but won&#8217;t work in IE6 due to hovers only being available on anchor tags) and was no problem to implement:</p>
<p><a class="call-to-action" href="http://jsfiddle.net/craigmdennis/pQHs8/" target="_blank">View the demo ›</a></p>
<h3>The HTML</h3>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">&lt;ul id="menu"&gt;
  &lt;li&gt;&lt;a href="#item1"&gt;Menu Item 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#item2"&gt;Menu Item 2&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="#sub1"&gt;Sub Menu Item 1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#sub2"&gt;Sub Menu Item 2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#sub3"&gt;Sub Menu Item 3&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;li&gt;&lt;a href="#item2"&gt;Menu Item 3&lt;/a&gt;
&lt;/ul&gt;</pre>
<h3>The CSS</h3>
<pre>ul#menu {list-style:none;}
ul#menu li {display:inline; float:left; width:200px;}
ul#menu li a {background:#CCCCCC; display:block; padding:5px 10px; text-align:center; text-decoration:none;}
ul#menu li a:hover {background:#333333;}
ul#menu li ul {display:none; position:relative;}
ul#menu li:hover ul {display:block;}
ul#menu li ul li a {background:#333333;}
ul#menu li ul li.overlay {position:absolute; top:-26px; left:0;}</pre>
<h2>The problem?</h2>
<p>The problem you will notice is that as soon as you start to hover over the sub menu items, the main menu item returns to it&#8217;s native, non-hover state. This is a problem as this affects the aesthetic quality of the menu and goes against the expected action.</p>
<h2>The solution</h2>
<p>The idea I had to solve this problem was to add anextra list element at the top of the sub menu unordered list and absolutely position it over the item on the main menu when the cursor hovers over the sub menu. Again this action is only supported by IE7 and above.</p>
<ol>
<li>The list item will have a class &#8216;overlay&#8217; applied to it so as it can be uniquely identified.</li>
<li>The list item will have the same text and same link destination as the main menu item.</li>
<li>position:relative; needs to be added to the sub menu unordered list in order to add position:absolute; to the class &#8216;overlay&#8217;</li>
<li>The position of the class &#8216;overlay&#8217; needs to be the negative value of the sub menu list items. So if your list items are 20px in height, the class &#8216;overlay&#8217; needs to have top:-20px; applied to it.</li>
<li>For some reason float:left; needs to be applied to the sub menu unordered list for the effect to work properly in IE7.</li>
</ol>
<p>Have a look at the code below and check out the <a href="http://jsfiddle.net/craigmdennis/pQHs8/" target="_blank">demo</a></p>
<h3>The HTML</h3>
<pre>&lt;ul id="menu"&gt;
  &lt;li&gt;&lt;a href="#item1"&gt;Menu Item 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#item2"&gt;Menu Item 2&lt;/a&gt;
    &lt;ul&gt;
      &lt;li class="overlay"&gt;&lt;a href="#item2"&gt;Menu Item 2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#sub1"&gt;Sub Menu Item 1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#sub2"&gt;Sub Menu Item 2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#sub3"&gt;Sub Menu Item 3&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href="#item3"&gt;Menu Item 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
<h3>The CSS</h3>
<p>&nbsp;</p>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">ul#menu {list-style:none;}
ul#menu li {display:inline; float:left; width:200px;}
ul#menu li a {background:#CCCCCC; display:block; padding:5px 10px; text-align:center; text-decoration:none;}
ul#menu li a:hover {background:#333333;}
ul#menu li ul {display:none; position:relative; float:left;}
ul#menu li:hover ul {display:block;}
ul#menu li ul li a {background:#333333;}
ul#menu li ul li.overlay {position:absolute; top:-26px; left:0;}</pre>
<p>This is the basic principle. View the demo to see it with some styling.</p>
<p><a class="call-to-action" href="http://jsfiddle.net/craigmdennis/pQHs8/" target="_blank">View the demo ›</a></p>
<p class="clear">Please feel free to comment with any improvements or criticisms.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/pure-css-drop-down-menu-with-persistent-active-state/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Get The Most Out Of Your Media Center</title>
		<link>http://craigmdennis.com/get-the-most-out-of-your-windows-7-media-center/</link>
		<comments>http://craigmdennis.com/get-the-most-out-of-your-windows-7-media-center/#comments</comments>
		<pubDate>Thu, 13 May 2010 21:04:23 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[7MC]]></category>
		<category><![CDATA[Codecs]]></category>
		<category><![CDATA[Extender]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[HDCP]]></category>
		<category><![CDATA[Media Center]]></category>
		<category><![CDATA[MKV]]></category>
		<category><![CDATA[nVidia]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Remote]]></category>
		<category><![CDATA[S/PDIF]]></category>
		<category><![CDATA[Shark007]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Xbox 360]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=1675</guid>
		<description><![CDATA[I have just bought a new Media Center PC to connect to my TV and amp. It has been a major headache trying to set it up the way I want so I though (after finally getting it to work) that I would impart some advice. My Setup TV &#8211; LG 42LH7000 Surround System &#8211;... <a class="more" href="http://craigmdennis.com/get-the-most-out-of-your-windows-7-media-center/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>I have just bought a new Media Center PC to connect to my TV and amp. It has been a major headache trying to set it up the way I want so I though (after finally getting it to work) that I would impart some advice.</p>
<h2>My Setup</h2>
<ul>
<li>TV &#8211; LG 42LH7000</li>
<li>Surround System &#8211; Logitech Z5500</li>
<li>PC &#8211; Windows 7 Media Center PC</li>
</ul>
<h2>A few common problems and solutions</h2>
<p><strong>Problem</strong>: Loss of signal when changing inputs on the TV or when PC goes to sleep.<br />
<strong></strong></p>
<p>First thing first &#8211; With everything off, connect the Media Center to the TV with an HDMI lead. This is important because Windows 7 has old drivers for the nVidia GeForce 8200 and has problems with HDCP so your TV needs to be on and set to the correct HDMI input <span style="text-decoration: underline;"><strong>before</strong></span> you turn your PC on. This is known as the &#8216;HDCP handshake issue&#8217; and is quite common. It results in a loss of signal when changing TV inputs or when the PC goes to sleep.</p>
<p>If, like me, you have an nVidia card then fear not as they have fixed this problem with a driver update. Go to <a href="http://www.nvidia.com/Download/index5.aspx?lang=en-us" target="_blank">nvidia.com</a> and select &#8216;Automatically find drivers for my NVIDIA products&#8217; and download the latest version. Mine was 130MB. Install this and reboot.</p>
<p>Unfortunately if you are using an ATI card there is no driver fix. The only thing you can do is download an application that disables and re-enables the HDMI connection fooling the device to re-initiate the handshake. This can be mapped to a keyboard shortcut.</p>
<p><strong>Problem</strong>: No sound through S/PDIF</p>
<p>There are many reasons for this to happen. If you are using the Asus V3M28 motherboard then you have to switch the default audio output to be S/PDIF.</p>
<p>Remember to look in the sound setting to make sure that &#8216;allow programs to take control of this device&#8217; is checked.</p>
<p>If you use VLC and can&#8217;t get S/PDIF to work or it&#8217;s stuttering, in the options set the sound output to Wave32.</p>
<p>There is also a problem with the S/PDIF VIA audio when the computer goes into sleep mode as when it resumes, the connections seems to be &#8216;dead&#8217;. A work around for this is to write a small bat file and have it run on resume which disables and enables the sound device. I think this may have been fixed in a recent Windows Update.</p>
<h2>Getting the best experience</h2>
<h3>Media Broswer</h3>
<p>To make the best of your Windows Media Center experience, download <a href="http://www.mediabrowser.tv/" target="_blank">Media Browser</a>. It&#8217;s a plugin for Media Center that provides you with cover art for Films and TV series, meta data for all the IMDB ratings and synopsis as well as having it&#8217;s own plugins such as themes and more information about the actual files themselves (such as 1080p or 720p or DTS audio or AC-3). It uses <a href="http://thetvdb.com/" target="_blank">http://thetvdb.com/</a> and <a href="http://www.themoviedb.org/" target="_blank">http://www.themoviedb.org/</a> to get all the information. It also provides user generated backdrops that fill the screen with scenes from whatever is selected.</p>
<p>You can also add multiple locations for media. For example I have films stored on my local machine and on an external hard drive. Add both locations and they show up under one category listing that I can name. So I have HD, DVD &amp; TV. One of the plugins allows you to add film trailers to the menu.</p>
<p><img class="alignnone size-medium wp-image-2119" title="media-center" src="http://uploads.craigmdennis.com/2010/05/media-center-420x262.jpg" alt="" width="420" height="262" /></p>
<h3>Shark007 Codec Pack</h3>
<p>Couple this with the Windows 7 <a href="http://shark007.net/" target="_blank">Shark007 codec pack</a>, you can watch any format of video on your Media Center. This is pretty straight forward to install as it uninstalls any other codec pack you might have on your system. Check the ;use Shark&#8217;s recommended settings&#8217; to get the best setup.</p>
<p><em>NOTE: If you are using S/PDIF then in the audio tab you will need to check &#8216;Use pass-through (Dolby Digital)&#8217; in the section titled &#8216;FFDShow S/PDIF pass-through&#8217;.</em></p>
<p><em><img class="alignnone size-medium wp-image-2062" title="Digital Pass-Through" src="http://uploads.craigmdennis.com/2010/05/audio-420x276.png" alt="" width="420" height="276" /></em></p>
<p>Once you have installed the codec pack and set it up, you can use Media Browser on your Media Center Extender device to stream all your content to it &#8211; <strong>this includes .mkv files</strong>. The way you do this is by opening the Media Browser configuration utility, clicking &#8216;advanced&#8217; and selecting the tab mentioning extenders. Now all you have to do is add &#8216;.mkv&#8217; to the list on the left as well as &#8216;.avi&#8217; and any other format you want to play on your extender or just untick &#8216;use Transcode 360&#8242;.</p>
<p><img title="Extender Settings" src="http://uploads.craigmdennis.com/2010/05/extender-420x347.png" alt="" width="420" height="347" /></p>
<p><em>NOTE: Because the Media Center had the codec to play it, you can even stream HD content to your Xbox 360!</em></p>
<h3>Media Center Studio</h3>
<p>Now you have Media Browser set up, you don&#8217;t really need the video section of the Media Center menu. It&#8217;s kinda annoying having something that you no longer need there and so <a href="http://www.adventmediacenter.com/" target="_blank">Media Center Studio</a> comes to the rescue. This provides a WYSIWYG interface for manipulating the Media Center menu to your heart&#8217;s content. I went minimal and just have tasks, TV, Music &amp; Media Browser.</p>
<p><a href="http://uploads.craigmdennis.com/2010/05/browser.png"><img class="alignnone size-medium wp-image-2060" title="Media Center Studio" src="http://uploads.craigmdennis.com/2010/05/browser-420x294.png" alt="" width="420" height="294" /></a></p>
<h3>The remote</h3>
<p>Most people tend to forget about this part of the setup which is strange as it possibly the most important. It is your point of contact with the system so you want it to feel as natural as possible and to be effortless. I recommend one of the <a href="http://www.logitech.com/en-us/remotes/universal_remotes/" target="_blank">Logitech Harmony remotes</a> &#8211; they are learning universal remotes and much more. You can program button configurations so you use the up, down, left &amp; right buttons for the Media Center but still use the volume up &amp; down for the TV without having to select various inputs. It also has macros so with the press of one button you can turn all of your devices on and set them to the correct inputs! Excellent! I have the Harmony 550.</p>
<p><img class="alignnone size-full wp-image-2059" title="Logitech Harmony 550" src="http://uploads.craigmdennis.com/2010/05/logitech_harmony500__52648_zoom-e1273784177689.jpg" alt="" width="420" height="420" /></p>
<h2>Other useful things</h2>
<p>There are many more things that can be customised in Media Center and a great resource for find them out is <a href="http://www.hack7mc.com/">http://www.hack7mc.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/get-the-most-out-of-your-windows-7-media-center/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Graceful Degradation vs Progressive Enhancement</title>
		<link>http://craigmdennis.com/graceful-degradation-vs-progressive-enhancement/</link>
		<comments>http://craigmdennis.com/graceful-degradation-vs-progressive-enhancement/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 21:11:37 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Browser Compatability]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Graceful Degredation]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Progressive Enhancement]]></category>

		<guid isPermaLink="false">http://craigmdennis.com/?p=2039</guid>
		<description><![CDATA[For years web designers have had to deal with compatibility issues across multiple browsers and for just as many years have had to accept content being displayed in slightly different ways. This is unlikely to change soon but the differences are becoming fewer and fewer. To make the most of this you need to choose... <a class="more" href="http://craigmdennis.com/graceful-degradation-vs-progressive-enhancement/">Read more &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>For years web designers have had to deal with compatibility issues across multiple browsers and for just as many years have had to accept content being displayed in slightly different ways.</p>
<p>This is unlikely to change soon but the differences are becoming fewer and fewer. To make the most of this you need to choose a browser in which to make your design / functionality work the way you want it to and then compromise fix it in Internet Explorer other browsers.</p>
<p><img class="size-medium wp-image-2041 alignleft" title="Safari Browser" src="http://uploads.craigmdennis.com/2010/04/531173_57280561-Large-420x315.jpg" alt="" width="420" height="315" /></p>
<h3>Let there be light!</h3>
<p>The main thing to realise is that all browsers are not created equal. Older browsers lack support for new technologies (CSS3 / HTML5) and render pages in sometimes odd ways. They also tend to be less forgiving with various structural models and dynamic scripting languages like JavaScript. Something often forgotten is that some users may decide to turn off features in browsers or may be impaired in a manner which affects their browsing habits.</p>
<p>Examples include:</p>
<ul>
<li>disabling JavaScript</li>
<li>disabling images</li>
<li>not using a mouse</li>
<li>using a screen reader</li>
<li>using a text-to-speech device</li>
</ul>
<p>Now while it is near impossible to include in a design every aspect that could affect the way someone experiences a website, there are things that can be done to improve the experience where possible.</p>
<h2>Graceful degradation</h2>
<blockquote><p><em>“Graceful degradation means that your Web site continues to operate even when viewed with less-than-optimal software in which advanced effects don’t work.”</em></p>
<p>– <a href="http://www.digital-web.com/articles/fluid_thinking/">Fluid Thinking</a>, by Peter-Paul Koch</p></blockquote>
<p>Graceful degradation is finally being addressed as the wrong way to approach the problem – design utilising the most advanced features of a browser and where a browser is not capable of implementing those features, a compromise needs to be made. The testing of older browsers is often done towards the end of the development cycle. More often than not this results in a less pleasing site for those using older browsers. This mainly affects IE6 which is still widely adopted throughout the corporate world. Using this approach focuses on using the latest technologies and not considering the experience for people with older browsers, disabilities or with certain functionalities disabled.</p>
<p>So how do you add bells and whistles to a site while maintaining  focus on usability and experience? The answer is in the design process. By first focusing on what ‘everyone’ will see and use, you can address the broadest issues. Bear in mind that a good experience with a site does NOT mean pretty pictures (although they can help) and a person can have a good experience on a simple site, for no other reason than being able to do what they want to do with ease and no interference.</p>
<h2>Progressive enhancement</h2>
<p>Leading on from core usability is the inclusionof  features to improve the experience for those people who are able to experience them – this is known as ‘layering’, starting with semantic  (X)HTML, wrapped in some CSS and finally some JavaScript on top.</p>
<blockquote><p><em>“Progressive enhancement uses web technologies in a layered fashion that allows everyone to access the basic content and functionality of a web page, using any browser or Internet connection, while also providing those with better bandwidth or more advanced browser software an enhanced version of the page.”</em></p>
<p>– <a href="http://en.wikipedia.org/wiki/Progressive_enhancement">Wikipedia</a></p></blockquote>
<p>There is a far more tasty explaination using an M&amp;M that defines the same point:</p>
<blockquote><p><em>“Start with your content peanut, marked up in rich, semantic (X)HTML. Coat that content with a layer of rich, creamy CSS. Finally, add JavaScript as the hard candy shell to make a wonderfully tasty treat (and keep it from melting in your hands).”</em></p>
<p>– <a href="http://www.alistapart.com/articles/understandingprogressiveenhancement/">Aaron Gustafson</a></p></blockquote>
<h3>Good for SEO too?</h3>
<p>When you write rich, semantic (X)HTML you are making life easier for search engines to index your site. It is written in a predictable, organised fashion and as such means the search-bots are more likely to pick up on any extra information as well as index it in the way it is intended. If you think about a search-bot ‘seeing’ in a similar way to a screen-reader, they generally only read text and links and with progressive enhancement you have given them both the best opportunity to get the most out of your site.</p>
<h3>In practice…</h3>
<p>It’s difficult to keep this in mind when you want to use newer technologies to make your life easier. CSS3’s rounded corner declaration or shadow facility would be great, but what happens when you meet a browser that doesn’t support it? As long as the contrast of text to background is suitable and the corners are not an integral part of the design then they will just have square boxes and normal text – something that doesn’t affect their experience too much and won’t affect the usability in any way.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigmdennis.com/graceful-degradation-vs-progressive-enhancement/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

