<?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>Daniel Skinner: News and Articles on Web Development &#187; javascript</title>
	<atom:link href="http://www.daniel-skinner.co.uk/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.daniel-skinner.co.uk</link>
	<description>Daniel Skinner&#039;s Blog: Web Development news and articles</description>
	<lastBuildDate>Wed, 18 Mar 2009 15:11:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MooTools and Swiff: Slideshow / Thumbnail Gallery</title>
		<link>http://www.daniel-skinner.co.uk/mootools-and-swiff-slideshow-thumbnail-gallery/17/05/2008</link>
		<comments>http://www.daniel-skinner.co.uk/mootools-and-swiff-slideshow-thumbnail-gallery/17/05/2008#comments</comments>
		<pubDate>Sat, 17 May 2008 20:05:23 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[slideshow]]></category>
		<category><![CDATA[swf]]></category>
		<category><![CDATA[swiff]]></category>

		<guid isPermaLink="false">http://www.daniel-skinner.co.uk/mootools-and-swiff-slideshow-thumbnail-gallery/17/05/2008</guid>
		<description><![CDATA[I have recently launched a website for the Bramham Lodge Residential Development in Bramham Village.
The site features a neat Slideshow / Thumbnail Gallery implementation using MooTools and Flash (utilising the Swiff utility of MooTools 1.2).
A demo can be seen on the Bramham Lodge Apartment page.
The SlideShow makes use of Flash to create easily customisable image [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently launched a website for the <a href="http://www.wbaileybramham.co.uk" title="Bramham Lodge Luxury Gated Housing">Bramham Lodge Residential Development</a> in <a href="http://www.wbaileybramham.co.uk/bramham-village/" title="Bramham Village, West Yorkshire">Bramham Village</a>.</p>
<p>The site features a neat Slideshow / Thumbnail Gallery implementation using MooTools and Flash (utilising the Swiff utility of MooTools 1.2).</p>
<p>A demo can be seen on the <a href="http://www.wbaileybramham.co.uk/bramham-lodge-plots/plot1/" title="Bramham Lodge Historical Listed Building Renovation">Bramham Lodge Apartment page</a>.</p>
<p>The SlideShow makes use of Flash to create easily customisable image transition effects that are not possible with JavaScript alone. A collection of MooTools classes are employed to mange the Swiff interface and control the slideshow.</p>
<p><strong>Key Features</strong></p>
<ul>
<li>Images are not hard-coded into flash: no need to recompile the SWF when  adding/removing or re-ordering the gallery as all data is presented in the <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> markup.</li>
<li>Extensible and customisable: The slideshow class makes use of MooTools Events so that add-on classes can be created for bolt-on features whilst being kept separate from the core functionality.</li>
<li>Accessible: No content is hard-coded into flash, search engines are able to index all the information.</li>
</ul>
<p>The modular nature of the code and the ability to change the implementation using bolt-on functionality has allowed me to re-use the same set of classes on an upcoming project in a completely different fashion, making use of the great features of Flash without sacrificing indexable content and accessibility.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/mootools-and-swiff-slideshow-thumbnail-gallery/17/05/2008/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Link Targets in XHTML</title>
		<link>http://www.daniel-skinner.co.uk/link-targets-in-xhtml/15/03/2008</link>
		<comments>http://www.daniel-skinner.co.uk/link-targets-in-xhtml/15/03/2008#comments</comments>
		<pubDate>Sat, 15 Mar 2008 13:33:56 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Guides]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.daniel-skinner.co.uk/link-targets-in-xhtml/15/03/2008</guid>
		<description><![CDATA[I always prefer to build websites in valid XHTML as it allows for a stricter, more maintainable envorinment to build websites than traditional HTML. However, there are a few features of HTML I like to make use of.
For example, making links open in new windows using the target attribute is unsupported by XHTML.

There are two [...]]]></description>
			<content:encoded><![CDATA[<p>I always prefer to build websites in <strong>valid <acronym title="eXtensible HyperText Markup Language">XHTML</acronym></strong> as it allows for a stricter, more maintainable envorinment to build websites than traditional <acronym title="HyperText Markup Language">HTML</acronym>. However, there are a few features of HTML I like to make use of.</p>
<p>For example, making links open in new windows using the <code>target</code> attribute is unsupported by XHTML.</p>
<p><span id="more-14"></span></p>
<p>There are two solutions I know of to get around this:</p>
<h4>1. JavaScript</h4>
<p>The DOM specification allows the use of the <code>target</code> attrbriute. So, mark each link you want to open in a new window using <code>rel="external"</code>. When the page loads use JavaScript to find all these links and add a <code>target="_blank"</code> to each using DOM.</p>
<p>In <strong>MooTools</strong> the code would look like:</p>
<pre type="javascript">
window.addEvent('domready', function() {
    // rel="external" links open in new window
    $$('a[href][rel="external"]').each(function(anchor) {
        anchor.setProperty('target', '_blank');
    });
});</pre>
<p>For a raw JavaScript solution and more information on this approach see this <a href="http://www.sitepoint.com/article/standards-compliant-world" title="Sitepoint Article: New Windows for links in XHTML" rel="nofollow external">Sitepoint article</a>.</p>
<h4>2. Extending XHTML</h4>
<p>Simply extend XHTML to support the <code>target</code> attribute and continue using <code>target="_blank"</code> whilst still producing perfectly valid XHTML!</p>
<p>Essentially you extend the default XHTML <acronym title="Document Type Definition">DTD</acronym> to enable the XHTML Target Module (which is not enabled by default) and then modify the page DOCTYPE definition to point to the extended <acronym title="Document Type Definition">DTD</acronym>.</p>
<p>The full details and how to implement it can be found here at <a href="http://www.texastar.com/tips/2004/target_blank.shtml" title="TexaStar: XHTML Modularization" rel="nofollow external">TexaStar</a>.</p>
<p>Currently I am using the JavaScript workaround. However, modifying the XHTML definition to make it work for me is a very elegant solution that I would look to implement in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/link-targets-in-xhtml/15/03/2008/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chaining with MooTools 1.2 &#8211; Tutorial</title>
		<link>http://www.daniel-skinner.co.uk/chaining-with-mootools-12-tutorial/31/01/2008</link>
		<comments>http://www.daniel-skinner.co.uk/chaining-with-mootools-12-tutorial/31/01/2008#comments</comments>
		<pubDate>Thu, 31 Jan 2008 22:30:11 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Guides]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[chain]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.daniel-skinner.co.uk/chaining-with-mootools-12-tutorial/31/01/2008</guid>
		<description><![CDATA[A short tutorial on how to use Chaining in MooTools.]]></description>
			<content:encoded><![CDATA[<p>This guide will show how powerful the <strong>MooTools Chain class</strong> is. In MooTools chaining facilitates the execution of a stack of functions sequentially and is extremely powerful. I have only tested this in <strong>MooTools v1.2 beta 2</strong>.</p>
<p>I will be posting more of these short guides on using MooTools in the upcoming weeks. Each will focus on a small problem and solve it with MooTools with the aim of being a useful way to learn the framework.</p>
<p><span id="more-15"></span></p>
<h3>Chaining you say!</h3>
<p><strong>Chaining</strong> is very powerful and whilst it is similar to <code>Effect.Queue</code> in Script.aculo.us, it can do much more! The aim of this brief tutorial is to show you how to use <strong>MooTools Chaining</strong> in the context of queueing effects coupled with other arbitrary actions. However, you will see that you can easily apply Chaining to do much more than that.</p>
<p>From the MooTools 1.2 Docs:</p>
<blockquote><p>A Utility Class which executes functions one after another, with each function firing after completion of the previous. Its methods can be implemented with <code><a href="http://docs12b.mootools.net/Class/Class/#Class:implement" title="MooTools Documentation: Class:implement" rel="external nofollow">Class:implement</a></code> into any <code><a href="http://docs12b.mootools.net/Class/Class" title="MooTools Documentation: Class" rel="external nofollow">Class</a></code>, and it is currently implemented in <code>Fx</code> and <code>Request</code>. In <code>Fx</code>, for example, it is used to create custom, complex animations.</p></blockquote>
<p><code>Chain</code> can be used as a stand-alone class but becomes much more powerful if you implement it into classes of your own.</p>
<p>In this tutorial I will be creating a class which implements <code>Chain</code>. The <code>Chain</code> class belongs to the <code>Class.Extras</code> component so you will need to make sure that you select <code>Class.Extras</code> and all its dependencies when downloading MooTools.</p>
<h3>Implementing Chain</h3>
<p>First of all we need to implement the methods and properties of the <code>Chain</code> class into our own class:</p>
<pre lang="javascript">var ChainExample = new Class({

  Implements: [Chain]

});</pre>
<p>Our class now has the following methods available to it:</p>
<ul>
<li><strong><code>Chain::chain</code></strong> &#8211; Pass any number of functions to add them to the bottom of the call stack.</li>
<li><strong><code>Chain::callChain</code></strong> &#8211; Pops a function off the top of the call stack and executes it.</li>
<li><strong><code>Chain::clearChain</code></strong> &#8211; Removes all functions from the call stack without executing any.</li>
</ul>
<h3>Using Chain to Execute Actions in Order</h3>
<p>Now we have implemented <code>Chain</code> into our <code>ChainExample</code> class we are ready to make use of the functionality it provides.</p>
<p>The <code>ChainExample</code> class will add events to three button elements. When a button element is clicked a corresponding panel will appear. Before this happens all other panels will be faded out. Chaining is used to make sure that these events happen in the order we want.</p>
<p>The full code for <code>ChainExample</code> is:</p>
<pre lang="javascript">
/**

 * Add events to buttons. Clicking a button will hide all panels before showing the panel corresponding to that button

 */

var ChainExample = new Class({

    Implements: [Chain],

    /**

     * Define the element ID of the button and the element ID of the corresponding panel

     */

    actions: new Hash({

        'button-one': 'panel-one',

        'button-two': 'panel-two',

        'button-three': 'panel-three'

    }),

    /**

     * An Array to store an effect instance for each panel

     */

    effects: [],

    initialize: function()

    {

        /**

         * Add an onclick event to each button. Clicking a button calls the showPanel method

         */

        this.actions.getKeys().each(function(buttonId) {

            $(buttonId).addEvent('click', this.showPanel.bindWithEvent(this));

        },this);

        /**

         * Create an Fx object for each panel

         */

         this.actions.getValues().each(function(panelId) {

            this.effects[panelId] = new Fx.Tween($(panelId), 'opacity', { duration: 'short', onComplete: function() { this.callChain();}.bind(this)});

         }, this);         /**

          * Initialize by hiding all panels, note the call to callChain to cause stuff to happen

          */

        this.hideAll();

        this.callChain();

    },

    /**

     * Add the a actions required to hide all panels to the Chain call stack

     */

    hideAll: function()

    {

        /**

         * loop each panel and Chain: 1. fade the panel, 2. set the display property to "none" after the effect has finished.

         *

         * Note that this function does not actually cause anything to happen, it simply adds actions to the Chain

         */

        this.actions.getValues().each(function(panelId) {

            this.chain(

                function() { this.effects[panelId].start(0); },

                function() { $(panelId).setStyles({'display': 'none'}); this.callChain(); }

            );

        },this);

    },

    /**

     * Handle a button click by fading and hiding all open panels and then appearing the corresponding panel

     */

    showPanel: function(event)

    {

        this.hideAll();

        var panel = this.actions.get(event.target.get('id'));

        this.chain(

            function() { $(panel).setStyles({'display': 'block', 'opacity': '0'}); this.callChain(); },

            function() { this.effects[panel].start(1); }

        );

        this.callChain(); //this call starts the chain. Since each function in the call also makes a call to callChain the entire stack will be executed

    }

});

window.addEvent('domready',

    function()

    {

        var myChain = new ChainExample();

    }

);</pre>
<p>I will only go through the code relevant to chaining in detail. Lets have a look at each important part:</p>
<h4><code>ChainExample::initialize</code></h4>
<p>In the constructor we bind behaviours to the buttons and create <code>Fx</code> objects for the panels. Notice the custom <code>onComplete</code> callback provided for each <code>Fx</code> instance. This tells the internal chain stack to pop the next function and run it right after the effect has finished. We are now able to execute any function as soon as the effect completes.</p>
<h4><code>ChainExample::hideAll</code></h4>
<p>Look at this method carefully. A call to <code>ChainExample::hideAll()</code> does not actually hide the panels. The method adds to the chain stack a set of functions that will fade and hide each panel in order. To get the panels to actually hide we must execute the chain stack using <code>this.callChain()</code>.</p>
<p>Notice how the second function passed to <code>this.chain</code> invokes <code>this.callChain()</code>. The function is telling the chain stack to continue onto the next function by itself.</p>
<p>Another important thing to note is that there is no need to bind the function passed to <code>this.chain</code> as this is dealt with internally.</p>
<h4><code>ChainExample::showPanel</code></h4>
<p>This is the event handling function that will show a panel.</p>
<p>First off a call to <code>ChainExample::hideAll()</code> is made. Remember that this method doesn&#8217;t cause anything to happen immediately. At this point we have added all the steps needed to hide all the panels to the chain stack. We then proceed to add steps which will show the correct panel.</p>
<p>Once the entire chain stack is set up <code>this.callChain()</code> is executed and the entire stack will be called because each step makes its own call to <code>this.callChain()</code> once it has finished.</p>
<p>That&#8217;s the basics of <code>Chain</code>. We have created a class which allows us to combine any number of effects and arbitrary functions and ensure that the are executed in the order we want. Hence the basic idea of <code>Chain</code> is to create a stack of functions and execute them in the order you please whenever you please.</p>
<h3>Downloadable Demo</h3>
<p>I have put together a quick demo so that you can see the code in action. Download the demo <a href="http://www.destiny-denied.co.uk/files/moo-chain.zip">here</a>.</p>
<h3>Further Considerations</h3>
<p>In my example, every function in the chain stack makes a call to <code>this.callChain()</code> once is has completed.  This means that as soon as the first function is executed (by manually invoking <code>this.callChain()</code>) the entire stack will run from start to finish automatically. <code>Chain</code> can be used in a different fashion where <code>Chain::callChain()</code> is always invoked externally. As a crude modification to my example, every click on a button could invoke <code>this.callChain()</code>. Thus each button click takes one further step to completion of the actions.</p>
<p>If you need to add timings and delays consider using <code><a href="http://docs12b.mootools.net/Native/Function#Function:delay" title="MooTools Documentation: Function:Delay" rel="external nofollow">Function:delay</a></code> to delay the invocation of <code>Chain::callChain()</code>.</p>
<p>It is also possible to use multiple chains in the same class for even more complex behaviour. This would involve using separate instances of the Chain class directly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/chaining-with-mootools-12-tutorial/31/01/2008/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Lightview by Nick Stakenburg</title>
		<link>http://www.daniel-skinner.co.uk/lightview-by-nick-stakenburg/12/01/2008</link>
		<comments>http://www.daniel-skinner.co.uk/lightview-by-nick-stakenburg/12/01/2008#comments</comments>
		<pubDate>Sat, 12 Jan 2008 14:41:59 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lightbox]]></category>
		<category><![CDATA[lightview]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[protoype]]></category>
		<category><![CDATA[scriptaculous]]></category>
		<category><![CDATA[slimbox]]></category>

		<guid isPermaLink="false">http://www.daniel-skinner.co.uk/lightview-by-nick-stakenburg/12/01/2008</guid>
		<description><![CDATA[Nick has just released Lightview (another neat project) to the public. Lightview allows you to augment your images. It provides an excellent way of creating a slideshow or simply showing a large version of a thumbnail without resorting to popups. Effects are used to create very appealing slideshows and image galleries.
From the Lightview project site:

Clean: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.nickstakenburg.com/" title="Nick Stakenburg" rel="external">Nick</a> has just released Lightview (another neat project) to the public. <a href="http://www.nickstakenburg.com/projects/lightview/" title="Lightview by Nick Stakenburg" rel="external">Lightview</a> allows you to augment your images. It provides an excellent way of creating a slideshow or simply showing a large version of a thumbnail without resorting to popups. Effects are used to create very appealing slideshows and image galleries.</p>
<p>From the Lightview project site:</p>
<ul>
<li><span>Clean</span>: Designed to compliment your images.</li>
<li><span>Fast</span>: Images and their neighbours are preloaded.</li>
<li><span>Easy to customize</span>: You don&#8217;t even have to know CSS.</li>
<li><span>Rounded</span>: Adjustable rounded corners, without PNGs.</li>
<li><span>Smart resizing</span>: Images will always fit on your screen.</li>
<li><span>Slideshow</span>: One button slideshow.</li>
<li><span>Effects</span>: Using Scriptaculous.</li>
<li><span>Works on all modern browsers</span></li>
</ul>
<p>Lightview is similar to <a href="http://www.huddletogether.com/projects/lightbox2/" title="Lightbox 2" rel="external">Lightbox 2</a> and both are built with Prototype and Scriptaculous. However, there are a few differences I noticed:</p>
<ul>
<li>The morphing effect that Lightview uses is a refreshing change (probably because I have seen the Lightbox effects too many times!).</li>
<li>Lightview allows you to customise many of the visual aspects of the viewer programatically. For example, the background colour and corner radius.</li>
<li>Lightview supports a customisable slideshow option which Lightbox lacks.</li>
<li>Lightview uses the caption attribute of the <code>&lt;a&gt;</code> tag to give images a caption. This attribute is not valid XHTML and thus its usage will produce invalid markup.  I would suggest using a convention similar to that used by MooTools Tips: <code>title="image title :: caption"</code></li>
<li>Lightbox has been around for a while and is well tested and proven.</li>
</ul>
<p>Personally I like the look of Lightview but I wouldn&#8217;t use it because I don&#8217;t like invalid markup!</p>
<p>If you are interested in something similar for the MooTools framework, try <a href="http://www.digitalia.be/software/slimbox" title="Slimbox: Lightbox for MooTools" rel="external">Slimbox</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/lightview-by-nick-stakenburg/12/01/2008/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Trying out MooTools 1.2 Beta 1</title>
		<link>http://www.daniel-skinner.co.uk/trying-out-mootools-12-beta-1/02/12/2007</link>
		<comments>http://www.daniel-skinner.co.uk/trying-out-mootools-12-beta-1/02/12/2007#comments</comments>
		<pubDate>Sun, 02 Dec 2007 21:45:26 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://www.daniel-skinner.co.uk/trying-out-mootools-12-beta-1/02/12/2007</guid>
		<description><![CDATA[Whilst I commonly use Prototype and Script.aculo.us as my preferred JavaScript libraries, I recently decided to try out MooTools as an alternative.]]></description>
			<content:encoded><![CDATA[<p>Whilst I commonly use <a href="http://www.prototypejs.org/" title="Prototype Javascript Library" rel="external">Prototype</a> and <a href="http://script.aculo.us/" title="Script.aculo.us Effects for Prototype" rel="external">Script.aculo.us</a> as my preferred JavaScript libraries, I recently decided to try out MooTools as an alternative.</p>
<p><q>MooTools is a <em>compact</em>, <em>modular</em>, <em>Object-Oriented</em> JavaScript framework designed for the intermediate to advanced JavaScript developer. It allows you to write <em>powerful</em>, <em>flexible</em>, and <em>cross-browser</em> code with its elegant, well documented, and <em>coherent API</em></q> (<a href="http://mootools.net" title="Mootools - The Compact Javascript Framework" rel="external">mootools.net</a>).</p>
<p>I downloaded MooTools version 1.2 beta 1, which is feature complete but not fully tested. If you are interested in what&#8217;s new in 1.2, see the <a href="http://blog.mootools.net/2007/11/14/mootools-1-2-beta-1" title="Mootools 1.2 Beta 1" rel="external">MooTools blog: 1.2 beta 1</a>.</p>
<p>My first impressions of MooTools were good and whilst I haven&#8217;t mastered the &#8216;Moo way of doing things,&#8217; I got to grips with it quickly.</p>
<h3>Comparison with Prototype</h3>
<p>This is not an exhaustive comparison, it&#8217;s just my first impressions.</p>
<ul>
<li>In MooTools effects are a Core component. With Prototype you need an additional effects library (e.g Script.aculo.us).</li>
<li>When downloading MooTools you are able to select only the components you need and you are given the option of compressing the library.</li>
<li>I prefer Prototype&#8217;s documentation style. Initially I found MooTools hard to learn because the API documentation does not give sufficient examples of good practice etc&#8230;</li>
<li>I&#8217;m a fan of <a href="http://dean.edwards.name/weblog/2006/03/base/" title="Dean Edwards: Base.js" rel="external">Dean Edward&#8217;s Base</a> and MooTools has a really nice implementation of it.</li>
<li>MooTools acknowledges Prototype as an awesome library and a lot of code is based on Prototype.</li>
<li>Currently there is no central repository for MooTools extensions that I know of.</li>
</ul>
<p>Prototype 1.6.0 weighs in at 121KB. Similarly, MooTools 1.2b1 (all components, uncompressed, no documentation) is 120KB. However, there is no need for an additional effects library and you can cut down the size of the MooTools library by removing unwanted components.</p>
<p>As I learn more of MooTools I will post more advice and tips on using MooTools from a Prototype background.</p>
<h3>Resources</h3>
<ul>
<li><a href="http://mootools.net" title="MooTools" rel="external">MooTools.net</a></li>
<li><a href="http://blog.mootools.net/2007/11/14/mootools-1-2-beta-1" title="MooTools v1.2 beta 1" rel="external">What&#8217;s new in MooTools 1.2</a></li>
<li><a href="http://docs12b.mootools.net/" title="MooTools 1.2 Documentation (BETA)" rel="external">Mootools 1.2 Documentation</a></li>
<li><a href="http://greghoustondesign.com/demos/mocha/" title="MooTools Mocha UI" rel="external">MooTools Mocha UI</a> (MooTools/Canvas UI class)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/trying-out-mootools-12-beta-1/02/12/2007/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving Site Performance</title>
		<link>http://www.daniel-skinner.co.uk/improving-site-performance/11/09/2007</link>
		<comments>http://www.daniel-skinner.co.uk/improving-site-performance/11/09/2007#comments</comments>
		<pubDate>Tue, 11 Sep 2007 17:26:40 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performane]]></category>
		<category><![CDATA[YSlow]]></category>

		<guid isPermaLink="false">http://destiny.xeaura-host.co.uk/blog/improving-site-performance /03 /11/2007</guid>
		<description><![CDATA[This article focuses on a very handy, cool, simple PHP script that can drastically improve the performance of your site without much effort at all!]]></description>
			<content:encoded><![CDATA[<p>In the previous article regarding <a href="http://www.daniel-skinner.co.uk/development-tools/17/08/2007" title="News Article: Web Development Tools">web development tools</a> I briefly mentioned the <a rel="external" href="http://developer.yahoo.com/yslow/" title="YSlow performance analysis">YSlow</a> tool for <a rel="external" href="http://www.getfirebug.com/" title="FireBug Development platform for FireFox">FireBug</a>. YSlow analyses the performance of web pages in terms of their size and overall load time. When you run YSlow on your page you get an overall grade from A to F which is dependent upon how the page performs. The performance is measured by 13 factors, which are individually graded.</p>
<h3>Performance Optimisation</h3>
<p>Whilst the 13 factors are well explained, there is no real information on how to improve the page. All you know is how well your site performs in that area aswell as getting a good description of why it is important. The lack of solutions and methods of improvement turns out to be a good thing since it drives further research into how to improve page performance.</p>
<p>This article focuses on a very handy, cool, simple PHP script that can drastically improve the performance of your site without much effort at all!</p>
<h3>Combine</h3>
<p>The script is called <a rel="external" href="http://rakaz.nl/extra/code/combine" title="Combine Performance Optimisation Script">Combine</a> and is written by <a rel="external" href="http://rakaz.nl/" title="Niels Leenheer's blog">Niels Leenheer</a></p>
<p>Basically, the script has two main aims: reducing the number of HTTP requests made per page, and reducing the size of JavaCcript and CSS files to improve page load times. The script is highly effective and is easily integrated into any existing site. The performance improvement is pretty impressive, it improved my YSlow grade drastically.</p>
<p>Combine does a number of things and is very well focused in its purpose. Here is a quick overview:</p>
<ul>
<li>Allows you to make requests for several CSS and JavaScript files with far fewer HTTP requests.</li>
<li>Combines and compresses individual CSS/JavaScript files into one compact file.</li>
<li>Utilises advanced caching and header techniques to cover every aspect when it comes to improving page loading times.</li>
<li>Works in a way that is non-invasive &#8211; you won&#8217;t need to do anything drastic to incorporate it into your existing system.</li>
</ul>
<p>The integration of Combine into a new or existing site is easy and you will be reaping the rewards in terms of performance improvements in no time.</p>
<h3>Example:</h3>
<p><em>without Combine the includes for my <a href="http://www.destiny-denied.co.uk/gallery/" title="Daniel Skinner's Image Gallery">gallery page</a> would look something like:</em></p>
<pre>
&lt;!-- include external CSS files --&gt;
&lt;link rel="stylesheet" type="text/css" href="/styles/layout.css" /&gt;
&lt;link rel="stylesheet" type="text/css" href="/styles/styles.css" /&gt;
&lt;link rel="stylesheet" type="text/css" href="/styles/navigation.css" /&gt;
&lt;link rel="stylesheet" type="text/css" href="/styles/banners.css" /&gt;
&lt;link rel="stylesheet" type="text/css" href="/styles/features.css" /&gt;   

&lt;link rel="stylesheet" type="text/css" href="/styles/print.css"  /&gt;
&lt;link rel="stylesheet" type="text/css" href="/styles/geshi.css" /&gt;
&lt;!-- include JavaScript required for gallery --&gt;
&lt;script type="text/javascript" src="/script/lib/effects.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="/script/lib/builder.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="/script/imgRoll/roller.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="/script/imgView/viewer.js"&gt;&lt;/script&gt;</pre>
<p><em>With Combine this becomes:</em></p>
<pre>
&lt;!-- include external CSS files--&gt;
&lt;link rel="stylesheet" type="text/css" href="/styles/layout.css,styles.css,navigation.css,banners.css,
                       features.css,print.css,geshi.css" /&gt;
&lt;!-- include JavaScript required for gallery --&gt;
&lt;script type="text/javascript"
src="/script/lib/effects.js,lib/builder.js,imgRoll/roller.js,imgView/viewer.js"&gt;&lt;/script&gt;</pre>
<p>As you can see in the Combine version, the files you wish to include are just separated by commas. This reduces the amount of markup, the number of HTTP requests made and the size of the HTTP requests (since Combine compresses files using GZip). Combine will cache the combined files so that server side processing time is also reduced on subsequent requests. Combine allows you to keep your files well structured without having to worry about making too many HTTP requests!</p>
<h3>Conclusion</h3>
<p>Overall, Combine provides a huge performance improvement for most pages whilst being easy to integrate into existing systems. The purpose of Combine is well defined and it doesn&#8217;t try to do more than is needed.</p>
<p>For detailed information see the <a rel="external" href="http://rakaz.nl/extra/code/combine" title="Combine Usage">Combine page</a> on <a rel="external" href="http://rakaz.nl/" title="Niels Leenheer's blog">Rakaz</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/improving-site-performance/11/09/2007/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Development Tools</title>
		<link>http://www.daniel-skinner.co.uk/development-tools/17/08/2007</link>
		<comments>http://www.daniel-skinner.co.uk/development-tools/17/08/2007#comments</comments>
		<pubDate>Fri, 17 Aug 2007 17:18:16 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[YSlow]]></category>

		<guid isPermaLink="false">http://destiny.xeaura-host.co.uk/blog/5 /03 /11/2007</guid>
		<description><![CDATA[This is the first in a series of posts...]]></description>
			<content:encoded><![CDATA[<p>This is the first in a series of posts in which I will discuss the tools, techniques, and methods I have discovered and used whilst creating Destiny Denied. Here I am going to focus on the excellent selection of tools and utilities that are available for <a href="http://www.mozilla.com/firefox/" rel="external">Mozilla Firefox</a>.</p>
<p>As an AJAX application developer many of the tools are focused on debugging Javascript and analysing HTTP requests and responses. I try to make developing sites as easy as possible. Many of the tools discussed also make designing sites easier. There is no mention of PHP tools and utilities here as I think that deserves a separate post.</p>
<h4>Web Developer Toolkit</h4>
<p>This Firefox extension contains a vast array of tools and links to other tools to make general web development easier.</p>
<p>Some of the highlights of this extension (and by that I mean the features I use the most) are:</p>
<ul>
<li>Quick disable Javascript &#8211; You should always check how a page looks and works without Javascript. This is great for usability testing andallows you to see the page how a search engine would see it.</li>
<li>Outline Elements &#8211; Lets you visualise how your site is arrranged in terms of the layout of block elements.</li>
<li>Resize Browser Window &#8211; Lets you see how a page will look in different screen resolutions with ease.</li>
<li>Validation Tools &#8211; Quick links to w3&#8217;s HTML, CSS and link validation tools</li>
<li>View generated source. See the XHTML source as it looks after Javascript has manipulated the DOM!</li>
</ul>
<p>There are so many other features in this extension, some of them I didn&#8217;t even know about until now. This is a must for any serious developer.</p>
<p>Go to the <a href="http://chrispederick.com/work/web-developer/" rel="external">Web Developer Toolkit</a> site.</p>
<h4>DOM Inspector</h4>
<p>This Firefox extension allows you to view the page DOM as a tree of elements. Any changes made to the DOM by Javascript are shown here. This tool is great for finding out how Javascipt is changing the page layout and debugging errors associated with it. Although it provides similar functionality to the &#8216;view generated source&#8217; function it can be much more useful for pages in which Javascript is heavily modifying the DOM.</p>
<p>Go to the <a href="http://addons.mozilla.org/en-US/firefox/addon/1806" rel="external">DOM inspector extension</a> site.</p>
<h4>Live HTTP Headers</h4>
<p>I cant live without this! This extension allows you to check the HTTP headers sent and recieved as you request pages. This is useful in so many areas.</p>
<p>In particular I find it useful when doing url rewriting, checking that expiriy headers and eTags are working. This extension is a must when developing AJAX applications since it acts as a layer inbetween the client and server, allowing you to see the requests that Javascript is making and the responses that the server is sending. This is the perfect debugging tool for AJAX development.</p>
<p>Go to the <a href="http://addons.mozilla.org/en-US/firefox/addon/3829" rel="external">Live HTTP Headers</a> site.</p>
<h4>Colorzilla</h4>
<p>This little extension is a colour picker and allows you to quickly and easily get the HTML HEX code of different elements on any site. This is a great tool for designing, particularly when creating a new page element in the style of the original site.</p>
<p>Go to the <a href="http://addons.mozilla.org/en-US/firefox/addon/271" rel="external">Colorzilla</a> site.</p>
<h4>Firebug</h4>
<p>The best Javascript debugger around. However, Firebug is much more than that. Even though Firebug is a Firebox extension itself, you can get extensions for Firebug!</p>
<p>Apart from the Javascript debugger, some other cool features available are:</p>
<ul>
<li>Live HTML and CSS editing. Fancy seeing how a page would look with a different background color? Simply edit the CSS in Firebug and see foryourself.</li>
<li>Net performance &#8211; See how many HTTP requests are being made for the page, how long each resource takes to download, resouce size, amount ofresources in cache and much more. Perfect when optimising your site.</li>
<li>Javascript Profiler. Allows you to improve the speed of your code by giving you a full report on what functions are called and how long theytake to execute.</li>
</ul>
<p>Go to the <a href="http://addons.mozilla.org/en-US/firefox/addon/1843" rel="external">Firebug</a> site.</p>
<h4>YSlow</h4>
<p>YSlow is an extension for Firebug developed by Yahoo. It creates a performance report of your page, gives the page a grade and suggests how you might improve load times and reduce the number of requests and the size of the page.</p>
<p>Whilst not being very clear on the best way to improve your page, it acts as a good guide for further research. Using YSlow I have improved the load times of my pages greatly and discovered some very cool techniques in the process. Future news posts will discuss these techniques in detail.</p>
<p>Get a performance report for your site now with <a href="http://developer.yahoo.com/yslow/" rel="external">YSlow</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/development-tools/17/08/2007/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Key points when considering SEO in an AJAX application</title>
		<link>http://www.daniel-skinner.co.uk/key-points-when-considering-seo-in-an-ajax-application/04/08/2007</link>
		<comments>http://www.daniel-skinner.co.uk/key-points-when-considering-seo-in-an-ajax-application/04/08/2007#comments</comments>
		<pubDate>Sat, 04 Aug 2007 16:58:26 +0000</pubDate>
		<dc:creator>Daniel Skinner</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://destiny.xeaura-host.co.uk/blog/key-points-when-considering-seo-in-an-ajax-application /03 /11/2007</guid>
		<description><![CDATA[A collection of notes based on the SEO implications of AJAX applications.]]></description>
			<content:encoded><![CDATA[<ul>
<li>Minimise the payload &#8211; put all javascript in external files, consider using a lightweight javascript loader which loades the meatier js files in only if javascript is enabled. Google does not seem to like reams of uncomprehensible code.</li>
<li>Always have a non-javascript fallback to all pages &#8211; this includes forms, dialogs and most importantly pages.</li>
<li>Endevour as much as possible to separate style from layout, code from content, logic from interface&#8230; pretty much everything from everything if time and resources permit.</li>
<li>Try to consider all the possible ways in which a user can interact with your AJAX application &#8211; as AJAX applications tend to be more like desktop applications than traditional web applications. The MVC and HMVC patterns adapt well to AJAX applications.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.daniel-skinner.co.uk/key-points-when-considering-seo-in-an-ajax-application/04/08/2007/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
