<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>You Can Call Me Al</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/" />
    <link rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/co/WheO" />
	<id>tag:http:,2009:/</id>
    <link rel="service.post" type="application/atom+xml" href="http://alan.pennell-smith.co.uk/api" title="You Can Call Me Al" />
    <subtitle>It&apos;s a blog of a ColdFusion developer, gadget lover and general Adobe &amp;amp; Google Fanboy.</subtitle>
    <generator uri="http://www.mangoblog.org/">Mango 1.4</generator>
 
<entry>
    <title>3 Handy Utils For Tidy JavaScript Development</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/3-handy-utils-for-tidy-javascript-development" />
    <id>urn:uuid:D3483CBE-A23D-2CD3-99FE7DA91714AD26</id>
    
    <published>2009-04-23T02:04:11Z</published>
    <updated>2009-04-23T03:04:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="JavaScript" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;I&apos;ve been working a lot with JavaScript over the last few months. Part of that is inheriting other peoples old messy code and trying to fix and tidy it.&#xa0; Also I&apos;ve been making production code as tight as possible to keep filesize down.&#xa0; So below are three online utilities I now find essential.&lt;/p&gt;
&lt;p&gt;Stuck with an odd error or just want to double check your code? &lt;a title=&quot;JSLint - The JavaScript Validator&quot; href=&quot;http://jslint.com/&quot;&gt;JSLint&lt;/a&gt; will give your code the once over for validation.&lt;/p&gt;
&lt;p&gt;Inherited some minified or just plain unreadable code? The &lt;a title=&quot;JavaScript Beautifier&quot; href=&quot;http://jsbeautifier.org/&quot;&gt;JavaScript Beautifier&lt;/a&gt; will tidy up your code to make it nice and readable.&#xa0; It also give options as to which type of indents you want (tabs, spaces) and will also automatically detect and decode packed JS too.&lt;/p&gt;
&lt;p&gt;And when you&apos;re ready for production: &lt;a title=&quot;JS Compress&quot; href=&quot;http://jscompress.com/&quot;&gt;JSCompress&lt;/a&gt; which offers both minification and packing.&#xa0; I&apos;m use minify, as even though packing can often yield smaller files the unpacking process can have a performance hit itself.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Google AJAX APIs Loading Order</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/google-ajax-apis-loading-order" />
    <id>urn:uuid:003721D8-9553-6793-4B44F0416F6B5E49</id>
    
    <published>2009-03-13T02:03:20Z</published>
    <updated>2009-03-13T02:03:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Google" /> 
        <category term="jQuery" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;Just came across a little issue with the Google AJAX APIs (which I suspect is mentioned in the docs - but I didn&apos;t bother to look) while I was doing a little testing for a different blog post.&lt;/p&gt;
&lt;p&gt;So first you call the Google Library:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then in my next &amp;lt;script&amp;gt; block I called the load function for jQuery and carried on to start some jQuery goodness e.g.:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;&#xa0; google.load(&quot;jquery&quot;, &quot;1.3.2&quot;);&lt;br /&gt;&lt;br /&gt;&#xa0; $(document).ready(function() {&lt;br /&gt;&#xa0;&#xa0;&#xa0; //Do something fancy with jQuery&lt;br /&gt;&#xa0; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But doing this was would cause a &quot;$ is not defined&quot; error.&#xa0; Using the essential firebug extension for firefox I could see that the google.load() functions insert the requested libraries straight after the closing &amp;lt;/script&amp;gt; in which they are called.&#xa0; So jQuery was being loaded after I tired to call the .ready().&lt;/p&gt;
&lt;p&gt;Easy fix, seperate out your google.load()&apos;s to their own script block and make them the first thing loaded:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;&#xa0; google.load(&quot;jquery&quot;, &quot;1.3.2&quot;);&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;!-- requested libraries will now be inserted here --&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&#xa0; $(document).ready(function() {&lt;br /&gt;&#xa0;&#xa0;&#xa0; //Do something fancy with jQuery&lt;br /&gt;&#xa0; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/strong&gt;&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Tiny, ambiguous Spry error in IE</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/tiny-ambiguous-spry-error-in-ie" />
    <id>urn:uuid:8FF0C460-EAE6-2FB2-5FAA5C3066BF88D6</id>
    
    <published>2008-11-12T08:11:51Z</published>
    <updated>2008-11-12T09:11:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Spry" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;Just a little gotcha I came across at work yesterday, thought I&apos;d post more as a reminder for me really.&#xa0; We had a page using a Spry dataset to generate a sortable table and although it worked perfectly in Internet Explorer and Firefox, IE would show it&apos;s &quot;loaded with errors&quot; icon in the status bar.&#xa0; As usual IE was helpful with it&apos;s error message &quot;Error: Expected &apos;:&apos;&quot;.&#xa0; &lt;/p&gt;
&lt;p&gt;I assumed that might be because we weren&apos;t fully qualifying the Spry data within the Spry:Region, e.g. we were using {fieldName} instead of {dataSetName::fieldName}.&#xa0; But that wasn&apos;t it.&#xa0; &lt;/p&gt;
&lt;p&gt;To cut a long and tedious story short, it was where we were passing a Spry binded field to a function - function({fieldName}).&#xa0; As the argument was an integer I didn&apos;t think it need quotes (and as I said, it still worked in both browsers and IE was the only one to show an error) but when I added single quotes - function(&apos;{fieldName}&apos;) - IE stopped whining and all carried on working fine.&lt;/p&gt;
&lt;p&gt;Not sure if that&apos;s a known thing or if it&apos;ll help anyone, but it annoyed me for a couple of hours.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Android/T-Mobile G1: First Impressions</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/android-t-mobile-g1-first-impressions" />
    <id>urn:uuid:6E83C120-023D-2E64-4C22952496FC6868</id>
    
    <published>2008-11-05T08:11:37Z</published>
    <updated>2008-11-05T09:11:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Android" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;So I&apos;ve had my T-Mobile G1 for 3 days and I thought I&apos;d post my first impressions.&#xa0; &lt;/p&gt;
&lt;p&gt;After putting in the sim card, battery then switching on you&apos;re immediately asked for your Google account details (or create a new account).&#xa0; It takes a couple of minutes to link up to your account and sync the mail, contacts and calendar.&#xa0; I loved that part, being back to the online synchronised stuff like when I had an HTC Wizard and an Exchange account.&#xa0; But my first night playing left me thinking there&apos;s plenty of faults with it.&#xa0; It&apos;s plasticy, the camera is pretty naff (especially compared to the N95&apos;s fairly decent one), the touch screen didn&apos;t seem very sensitive, there seems too be many interface devices (touch, trackball, keyboard, buttons) and more... &lt;/p&gt;
&lt;p&gt;I was disappointed and was seriously considering sending it back.&#xa0; But these all seemed to be hardware issues, Android, the software, is actually very nice. Okay, it doesn&apos;t have the &quot;impress-your-mates-easily&quot; multi-touch but the interface is pretty solid.&#xa0; I like the notification &quot;shutter&quot; pull down, the scrolling physics when you flick lists is very &quot;iPhone&quot; and Android Market seems nice enough with some genuinely handy/clever apps. My first full day with it changed my opinion, I expect I was just getting used to it, but the touch screen felt more responsive.&#xa0; T-Mobile&apos;s 3G service around London seemed to fairly robust too, better than my experience with o2&apos;s on my N95 in recent weeks. GPS is quick to lock and accurate. Even the multiple interfaces seemed to all seem to have a definite purpose. So it&apos;s still early days but it&apos;s definitely growing on me and I&apos;m going to stick with it.&lt;/p&gt;
&lt;p&gt;I have high hopes for Android in the future, as long as T-Mobile keep abreast of updates (I&apos;m sure they will as it&apos;s in their and Google&apos;s interest to keep it progressing - and updates over-the-air is a nice touch).&#xa0; Hopefully some of the popular iPhone apps are ported over (the train times one would be a nice start!), or maybe I should just learn a bit of Java and do my own... &lt;/p&gt;
&lt;p&gt;And just to confirm Android has MMS, copy &amp;amp; paste and SMS forwarding, take that iPhone users! (I say in jest! I love the iPhone, I&apos;m not one of these fanboy facists) :)&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>A little more Flexing</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/a-little-more-flexing" />
    <id>urn:uuid:F8543C14-0195-E58C-443874B516189449</id>
    
    <published>2008-10-13T11:10:40Z</published>
    <updated>2008-10-13T11:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Flash" /> 
        <category term="Flex" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;As a little follow up to my &lt;a title=&quot;Forays Into Flex&quot; href=&quot;/post.cfm/forays-into-flex&quot;&gt;post last week&lt;/a&gt; about starting to play with the Flex, I took my last.fm user application a little further to include more of the information they expose throught the &lt;a title=&quot;Audioscrobbler&quot; href=&quot;http://www.audioscrobbler.net/data/webservices/&quot;&gt;audioscrobbler &lt;/a&gt;site.&lt;/p&gt;
&lt;p&gt;Have a play: &lt;a title=&quot;last.fm flex app v2&quot; href=&quot;/flex/lastfm/v2/&quot;&gt;last.fm flex app v2&lt;/a&gt;&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Spry Conditional Validation</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/conditional-validation-in-spry" />
    <id>urn:uuid:F5CD4A0F-FF8A-D1E6-E705B12D1BC09B43</id>
    
    <published>2008-10-13T02:10:34Z</published>
    <updated>2008-10-13T03:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Spry" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;Spry blog posts seem a little thin on the ground, so I thought I&apos;d start a series of Spry related posts covering some of the issues that we&apos;ve come across in the rebuild of the &lt;a title=&quot;HostelBookers&quot; href=&quot;http://www.hostelbookers.com&quot;&gt;HostelBookers&lt;/a&gt; site (yet to be launched).&#xa0; Spry was the &lt;acronym title=&quot;Asynchronous JavaScript And XML&quot;&gt;AJAX&lt;/acronym&gt; framework of choice for the project before I arrived at HostelBookers and as I&apos;d had a little experience with it in my last job we decided to carry on with it.&#xa0; I&apos;ve since been named &quot;SpryMan/Guy&quot;.&#xa0; Not sure whether to be proud of that or not. Spry seemed to fit nearly all of our AJAX-type needs especially in the data display/filtering/sorting capacity, but it is lacking in some other areas, so we had to draft in &lt;a title=&quot;jQuery&quot; href=&quot;http://jquery.com/&quot;&gt;jQuery &lt;/a&gt;for a nice &lt;a title=&quot;jQuery UI Datepicker&quot; href=&quot;http://docs.jquery.com/UI/Datepicker&quot;&gt;datepicker&lt;/a&gt; and other &lt;acronym title=&quot;User Interface&quot;&gt;UI&lt;/acronym&gt; bits and bobs.&#xa0; I think if I got a chance to start from scratch I&apos;d stick to one framework completely, and I think it would be jQuery (mainly for the size of the community).&lt;/p&gt;
&lt;p&gt;So my first example will be on conditional validation.&#xa0; We have a section of the site that has a little survey. The very first question decides whether you need to answer further questions or not.&#xa0; If you get the futher questions displayed those fields need to be validated, if they&apos;re not, the validation is unnecessary. This will be a generic example, not quite as large as our actual page:&lt;/p&gt;
&lt;p&gt;First you&apos;ll need to include the required Spry librarys and validation CSS in the &amp;lt;head&amp;gt; for the functionality we&apos;re going to use (if you haven&apos;t got Spry yet, it&apos;s available from &lt;a title=&quot;Spry on Adobe Labs&quot; href=&quot;http://labs.adobe.com/technologies/spry/home.html&quot;&gt;Adobe Labs&lt;/a&gt;, but the download below includes all the files used in this example). For this example we&apos;ll use: &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;/strong&gt;&lt;strong&gt;spry/&lt;/strong&gt;&lt;strong&gt;SpryValidationTextField.css&quot;&amp;gt;&lt;br /&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;/strong&gt;&lt;strong&gt;spry/&lt;/strong&gt;&lt;strong&gt;SpryValidationRadio.css&quot;&amp;gt;&lt;br /&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;&lt;br /&gt;&#xa0;&#xa0;&#xa0; &#xa0;&#xa0;&#xa0; .hide {display:none;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;spry/SpryUtils.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;&lt;/strong&gt;&lt;strong&gt;spry/&lt;/strong&gt;&lt;strong&gt;SpryDOMUtils.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;&lt;/strong&gt;&lt;strong&gt;spry/&lt;/strong&gt;&lt;strong&gt;SpryValidationTextField.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;&lt;/strong&gt;&lt;strong&gt;spry/&lt;/strong&gt;&lt;strong&gt;SpryValidationRadio.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Spry CSS covers the validation indicators by hiding the messages by default and colouring fields when they meet certain criteria.&#xa0; The &quot;.hide&quot; class is added to hide the optional questions in our form.&#xa0; Of the Spry JavaScript, the first two are helper utilities, the second two are for the form input validation. We&apos;re only going to validate text fields and radio buttons in this example, but you can add select, textarea and/or checkbox valdiation as required.&#xa0; I tend to use the minified versions of the JS files.&#xa0; Packed ones are usually smaller, but the decompression of them can add an overhead.&lt;/p&gt;
&lt;p&gt;Our XHTML form will be:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;form name=&quot;frmQuestions&quot; id=&quot;frmQuestions&quot; action=&quot;index.html&quot; method=&quot;post&quot;&amp;gt;&lt;br /&gt;&amp;lt;div id=&quot;valMoreQuestions&quot;&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;1. Would you like some more questions?&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;label for=&quot;moreQuestionsYes&quot;&amp;gt;&lt;br /&gt;&amp;lt;input type=&quot;radio&quot; name=&quot;moreQuestions&quot; id=&quot;moreQuestionsYes&quot; value=&quot;true&quot; /&amp;gt;&lt;br /&gt;Yes please.&lt;br /&gt;&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;label for=&quot;moreQuestionsNo&quot;&amp;gt;&lt;br /&gt;&amp;lt;input type=&quot;radio&quot; name=&quot;moreQuestions&quot; id=&quot;moreQuestionsNo&quot; value=&quot;false&quot; /&amp;gt;&lt;br /&gt;No thanks.&lt;br /&gt;&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;span class=&quot;radioRequiredMsg&quot;&amp;gt;Please select&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/strong&gt;&lt;strong&gt;div&lt;/strong&gt;&lt;strong&gt;&amp;gt;&lt;br /&gt;&#xa0; &lt;br /&gt;&amp;lt;&lt;/strong&gt;&lt;strong&gt;div &lt;/strong&gt;&lt;strong&gt;id=&quot;valExtraQuestion1&quot; class=&quot;hide optionalQ&quot;&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;2. Extra question one.&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;label for=&quot;extraQuestion1&quot;&amp;gt;Who is your daddy?&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;lt;input type=&quot;text&quot; name=&quot;extraQuestion1&quot; id=&quot;extraQuestion1&quot; /&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;span class=&quot;textfieldRequiredMsg&quot;&amp;gt;Please enter an answer for question 2.&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/strong&gt;&lt;strong&gt;div&lt;/strong&gt;&lt;strong&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/strong&gt;&lt;strong&gt;div &lt;/strong&gt;&lt;strong&gt;id=&quot;valExtraQuestion2&quot; class=&quot;hide optionalQ&quot;&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;3. Extra question two.&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;label for=&quot;extraQuestion2&quot;&amp;gt;And what does he do?&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;lt;input type=&quot;text&quot; name=&quot;extraQuestion2&quot; id=&quot;extraQuestion1&quot; /&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;span class=&quot;textfieldRequiredMsg&quot;&amp;gt;Please enter an answer for question 3.&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/strong&gt;&lt;strong&gt;div&lt;/strong&gt;&lt;strong&gt;&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&amp;lt;input type=&quot;submit&quot; name=&quot;submitAnswers&quot; id=&quot;submitAnswers&quot; value=&quot;Submit Answers&quot; /&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The form is pretty basic with a few things to note.&#xa0; Each question is wrapped in a &amp;lt;div&amp;gt; with an id.&#xa0; This is so Spry can reference &amp;lt;input&amp;gt; tag it contains and apply the appropriate validation. The &amp;lt;div&amp;gt; tags that wrap the optional questions are given 2 extra classes; &quot;hide&quot;, to make sure they&apos;re not visible from the offset and &quot;optionalQ&quot; so we can easily select just the optional questions later.&#xa0; Each question&apos;s &amp;lt;div&amp;gt; also includes a validation message within a nested &amp;lt;span&amp;gt; tag.&#xa0; The class name of this determines which validation error has occured and so which message to display (these can be found in the Spry Documention, or customised with your own class names when constructing the validation object).&#xa0;&#xa0;&#xa0; The &amp;lt;br /&amp;gt;&apos;s are just to make it a little tidier to view.&lt;/p&gt;
&lt;p&gt;And finally out custom &amp;lt;script&amp;gt; to make it work:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;var valMoreQuestions = new Spry.Widget.ValidationRadio(&quot;valMoreQuestions&quot;, {validateOn:[&quot;change&quot;]});&lt;br /&gt;var valExtraQuestion1;&lt;br /&gt;var valExtraQuestion2;&lt;br /&gt;&#xa0;&#xa0;&#xa0; &#xa0;&#xa0;&#xa0; &lt;br /&gt;Spry.$$(&quot;#&lt;/strong&gt;&lt;strong&gt;valMoreQuestions input&lt;/strong&gt;&lt;strong&gt;&quot;).addEventListener(&quot;click&quot;, &lt;/strong&gt;&lt;strong&gt;toggleAdditonalQuestions&lt;/strong&gt;&lt;strong&gt;, false);&lt;br /&gt;&#xa0;&#xa0;&#xa0; &#xa0;&#xa0;&#xa0; &lt;br /&gt;function toggleAdditonalQuestions(e) {&lt;br /&gt;if(e.currentTarget.value == &quot;true&quot;) {&lt;br /&gt;//loop over all elements with a class of &quot;&lt;/strong&gt;&lt;strong&gt;optionalQ&lt;/strong&gt;&lt;strong&gt;&quot; and REMOVE the class of &quot;hide&quot;&lt;br /&gt;Spry.$$(&quot;.optionalQ&quot;).forEach(function(qs){Spry.Utils.removeClassName(qs,&quot;hide&quot;);})&lt;br /&gt;//...and set up radio validation...&lt;br /&gt;valExtraQuestion1 = new Spry.Widget.ValidationTextField(&quot;valExtraQuestion1&quot;, &quot;none&quot;, {validateOn:[&quot;change&quot;]});&lt;br /&gt;valExtraQuestion2 = new Spry.Widget.ValidationTextField(&quot;valExtraQuestion2&quot;, &quot;none&quot;, {validateOn:[&quot;change&quot;]});&lt;br /&gt;} else {&lt;br /&gt;//loop over all elements with a class of &quot;&lt;/strong&gt;&lt;strong&gt;optionalQ&lt;/strong&gt;&lt;strong&gt;&quot; and ADD a class of &quot;hide&quot;&lt;br /&gt;Spry.$$(&quot;.optionalQ&quot;).forEach(function(qs){Spry.Utils.addClassName(qs,&quot;hide&quot;);})&lt;br /&gt;//destroy all the validation (if they were set up)&lt;br /&gt;if(valExtraQuestion1) {&lt;br /&gt;valExtraQuestion1.reset();&lt;br /&gt;valExtraQuestion1.destroy();&lt;br /&gt;}&lt;br /&gt;if(valExtraQuestion2) {&lt;br /&gt;valExtraQuestion2.reset();&lt;br /&gt;valExtraQuestion2.destroy();&lt;br /&gt;}&lt;br /&gt;}&#xa0;&#xa0;&#xa0; &lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So this JavaScript block is where all the magic happens.&#xa0; First we set up our variables, &quot;valMoreQuestions&quot; can be set up with Spry Radio Validation straight away as it&apos;s always displayed. The next 2 are just set up as placeholders to be filled if they need to be shown.&#xa0; &lt;/p&gt;
&lt;p&gt;Next we add event listeners to the 2 radio buttons, so both fire the function &quot;toggleAdditonalQuestions&quot; when clicked. This is where the included SpryDOMUtils comes in very useful. &quot;Spry.$$(&lt;em&gt;CSS Selector&lt;/em&gt;)&quot; allows you to select any elements from the &lt;acronym title=&quot;Document Object Model&quot;&gt;DOM&lt;/acronym&gt; from their CSS selectors, so you can be as specific or generic as you need.&#xa0; In the case of adding the event listeners to the radio buttons we&apos;ve selected &quot;#valMoreQuestions input&quot;, so all &amp;lt;input&amp;gt; tags under an element with the id of &quot;valMoreQuestions&quot;.&#xa0; This powerful little utility makes selecting and manipulating DOM objects a breeze.&#xa0; In addtion to their selection we use the .addEventListener() method to attach the listener.&lt;/p&gt;
&lt;p&gt;Now the event listeners are set up the last part is the function that called when these event are fired, &quot;toggleAdditonalQuestions&quot;.&#xa0; This function first tests to see that the value of the currentTarget of the fired event is true (the value of the radio button clicked).&#xa0; If it is, we use another DOM selector to get all the elements with a class of &quot;optionalQ&quot;.&#xa0; On this selection of objects we call the forEach() method with fires a function for each element it&apos;s found in the selection phase.&#xa0; Each object is passed to the function as an argument so we can then remove the class of &quot;hide&quot; for each one using the SpryUtils function &quot;Spry.Utils.removeClassName(qs,&quot;hide&quot;)&quot; (qs being a single element found in the DOM selector).&#xa0; This displays the 2 optional questions. We then add the validation to these options.&lt;/p&gt;
&lt;p&gt;If the &quot;No thanks&quot; radio option is clicked the reverse happens.&#xa0; The &quot;.optionalQ&quot; classed elements are selected again and have a class of hide added to them to make them disappear.&#xa0; We then check if the 2 optional validation variable are set with an if statement (we do this becuase the user may have clicked &quot;No thanks&quot; first and the following functions wouldn&apos;t be available. If the variables are defined we use the reset() and destroy() methods on the validation object to remove it.&lt;/p&gt;
&lt;p&gt;Spry automatically does the rest of the work to trigger the appropriate validation on clicking the submit button.&#xa0; We also added the additional &quot;&lt;strong&gt;validateOn:[&quot;change&quot;]&lt;/strong&gt;&quot; to all the validation so they will also validation on the change event.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;Spry Condition Validation Example files zip&quot; href=&quot;/assets/content/spry_examples/spry_conditional_validation_example.zip&quot;&gt;Download the example files&lt;/a&gt;. Also the &lt;a title=&quot;Spry API&quot; href=&quot;http://labs.adobe.com/technologies/spry/articles/data_api/index.html&quot;&gt;Spry API&lt;/a&gt; is an invaluable reference for all the methods and options.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Forays into Flex</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/forays-into-flex" />
    <id>urn:uuid:DEE67162-F6BA-78A4-65E2484D687F466F</id>
    
    <published>2008-10-09T12:10:32Z</published>
    <updated>2008-10-13T11:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Flash" /> 
        <category term="Flex" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;Finally got around to installing Flex Builder 3 to have a play.&#xa0; I&apos;ve watched a few tutorials over the last few nights and thought tonight was about time to start coding.&#xa0; Within 10 minutes I&apos;ve got a &lt;em&gt;very very&lt;/em&gt; basic application that will take your last.fm username, consume the audioscrobbler webservice feed of your top 50 albums and display them in a tile list. 10 minutes!&#xa0; Why haven&apos;t I played with this before?&lt;/p&gt;
&lt;p&gt;Anyway I&apos;ve put my little app up (it&apos;s my first go, and does very little, but I&apos;m chuffed with it).&#xa0; Flex is definitely something I want to become proficient at!&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;Last.fm Top 50 albums&quot; href=&quot;/flex/lastfm/v1/&quot;&gt;Last.fm Top 50 Albums&lt;/a&gt;&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Gmail Labs - Mail Goggles and more</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/gmail-mail-goggles" />
    <id>urn:uuid:D6BB3B16-D927-6C39-CFDB23AF8D098F8B</id>
    
    <published>2008-10-07T10:10:34Z</published>
    <updated>2008-10-07T11:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Gmail" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;A slightly quirky idea in Gmail labs, but I know it would of helped me in the past... &lt;a href=&quot;http://gmailblog.blogspot.com/2008/10/new-in-labs-stop-sending-mail-you-later.html&quot;&gt;Mail Goggles&lt;/a&gt; sets times that it will give you a maths quiz to confirm you&apos;re sure you want to send the email. E.g. late nights/weekends when you may be a little worse for wear and think it&apos;s a good idea to email the ex telling her of your undying love.&#xa0; Fairly useless, but I like the thinking behind some of these widgets.&#xa0; &lt;/p&gt;
&lt;p&gt;Another, which I&apos;ve always thought should be standard in every email client, is that if you mention &quot;attached&quot; or &quot;attachment&quot; in your email it should check that you have attached something. Very handy.&#xa0; &lt;/p&gt;
&lt;p&gt;To get to Gmail labs go to &quot;Settings&quot; then the &quot;Labs&quot; tab in your Gmail account.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>I&apos;ve gone a bit fruity...</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/i-ve-gone-a-bit-fruity" />
    <id>urn:uuid:C21E4D17-0FEE-C3D0-0B2BDD66395C00FD</id>
    
    <published>2008-10-03T10:10:40Z</published>
    <updated>2008-10-03T11:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Mango Blog" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;...Blog-wise that is.&lt;/p&gt;
&lt;p&gt;It&apos;s been a while since I posted but work&apos;s calming down a bit so I think I&apos;ll be on a bit of a blogging mission soon.&#xa0; In the meantime I&apos;ve migrated from &lt;a title=&quot;BlogCFC&quot; href=&quot;http://www.blogcfc.com/&quot;&gt;BlogCFC &lt;/a&gt;to &lt;a title=&quot;Mango Blog&quot; href=&quot;http://www.mangoblog.org/&quot;&gt;Mango Blog&lt;/a&gt;.&#xa0; &lt;/p&gt;
&lt;p&gt;I&apos;m a fan of BlogCFC, it&apos;s served me well, although after having a quick play with Mango Blog I wanted to switch.&#xa0; Coming from a design/CSS background, the chance to easily create themes for my blog was one of the deciders.&#xa0; BlogCFC has always been a bit of a mission to style and more effort maintaining that style after updates.&#xa0; I look forward to seeing what BlogCFC 6 brings in that respect.&lt;/p&gt;
&lt;p&gt;Mango installation and migration is an absolute breeze, very much a &quot;is that all I need to do?&quot; kind of procedure.&#xa0; Although, I did have a couple of teething problems while testing.&#xa0; I started with version 1.2.2, but the BlogCFC import would throw an error.&#xa0; A quick post to the &lt;a title=&quot;Mango Blog Forums&quot; href=&quot;http://www.mangoblog.org/forums/&quot;&gt;Mango Blog Forums&lt;/a&gt; and within hours (including the time zone differences) Laura had 1.2.3 on &lt;a title=&quot;Mango Blog On RIAForge&quot; href=&quot;http://mangoblog.riaforge.org/&quot;&gt;RIAForge&lt;/a&gt;.&#xa0; And the import was fixed.&#xa0; But then I noticed all the imported comments (not that I have that many) had been given a date/time of the import, not their original.&#xa0; Seems I was the first to spot it (doesn&apos;t look like &lt;a title=&quot;Mark Drew&quot; href=&quot;http://www.markdrew.co.uk/blog/&quot;&gt;Mark Drew &lt;/a&gt;did in his recently migration, oops).&#xa0; But another quick post to the forums and Laura delivers the goods again this morning with 1.2.4.&#xa0; So that was the decider and I put my blog live in Mango. And here it is :)&lt;/p&gt;
&lt;p&gt;A big thanks to &lt;a title=&quot;asfusion&quot; href=&quot;http://www.asfusion.com/&quot;&gt;Laura Arguello &lt;/a&gt;for all her fantastic work and help!&lt;/p&gt;
&lt;p&gt;Expect themes and plugins from me soon...&lt;/p&gt;
&lt;p&gt;P.S. if you&apos;re migrating from BlogCFC don&apos;t forget to recreate the rss.cfm in the root pointing to the new feed file: &amp;lt;cfinclude template=&quot;feeds/rss.cfm&quot; /&amp;gt;.&#xa0; To maintain any existing subscribers.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Looping Through Time</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/looping-through-time" />
    <id>urn:uuid:C209FCFF-DE8F-8558-99C23EF98659B1BA</id>
    
    <published>2008-04-02T03:04:00Z</published>
    <updated>2008-10-03T10:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="ColdFusion" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;I just came across some existing code in a &amp;quot;revamping&amp;quot; project I&apos;m working on that just didn&apos;t feel right. It was to produce a select dropdown of hourly time ranges in a day, in 24hr format: 00:00-00:59, 01:00-01:59, etc.&lt;/p&gt;&lt;p&gt;This was being achieived by using 2 loops. A first looping from 0-9 and building the times using 0#i#:00 - 0#i#:59.  Then another loop from 10-23 and changing it slightly to be #i#:00 - #i#:59. Clunky, eh?&lt;/p&gt;&lt;p&gt;First thing that popped into my head was that it could easily be created with 1 loop from 0-23 using numberFormat() to include the leading 0 when required. But then I seemed to remember being told ColdFusion can loop over dates/times.&lt;/p&gt;&lt;p&gt;Not ever trying this before, I decided not to jump straight on Google but to open up my trusty play.cfm to have a try at it.&lt;/p&gt;&lt;p&gt;And strangley enough, it only took 2mins and worked first time.&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;html&quot;&gt;&amp;lt;cfset fromTime = createTime(00,00,00) /&amp;gt;
&amp;lt;cfset toTime = createTime(23,59,59) /&amp;gt;
&amp;lt;cfset timeSpan = createTimeSpan(0,0,60,00) /&amp;gt;
&amp;lt;select&amp;gt;
	&amp;lt;option value=&quot;&quot;&amp;gt;- Select Time -&amp;lt;/option&amp;gt;
	&amp;lt;cfloop from=&quot;#fromTime#&quot;to=&quot;#toTime#&quot; index=&quot;i&quot; step=&quot;#timeSpan#&quot;&amp;gt;
	&amp;lt;cfoutput&amp;gt;
	&amp;lt;option value=&quot;#LStimeFormat(i)# - #LStimeFormat(dateAdd(&apos;n&apos;,59,i))#&quot;&amp;gt;#LStimeFormat(i)# - #LStimeFormat(dateAdd(&apos;n&apos;,59,i))#&amp;lt;/option&amp;gt;
	&amp;lt;/cfoutput&amp;gt;
	&amp;lt;/cfloop&amp;gt;
&amp;lt;/select&amp;gt;&lt;/pre&gt;
&lt;p&gt;Pretty self explanitory really, create 2 proper timestamps and a timespan. Loop from and to the timestamps using the timespan as the step. Then just format the index variable as required.  Job Done.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Tonights UKCFUG &amp;quot;CFEclipse Reloaded&amp;quot;</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/tonights-ukcfug-quot-cfeclipse-reloaded-quot" />
    <id>urn:uuid:C209F0D9-AB48-D89D-D0BA8454A133E27B</id>
    
    <published>2008-03-04T11:03:00Z</published>
    <updated>2008-10-03T10:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="ColdFusion" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;&lt;a href=&quot;http://www.markdrew.co.uk/&quot;&gt;Mark Drew&lt;/a&gt; gave a few of us at the UKCFUG meeting a preview of his upcoming CFUnited presentation tonight, &amp;quot;CFEclipse Reloaded&amp;quot;.&lt;/p&gt;&lt;p&gt;It revolved around the more advanced/lesser used parts of &lt;a href=&quot;http://www.cfeclipse.org/&quot;&gt;CFEclipse&lt;/a&gt;, we all know the code completion and basic shortcuts for a quick &amp;lt;cfoutput&amp;gt; or &amp;lt;cfdump&amp;gt;, etc. (well, you should do, it&apos;s surprising to hear when a CF developer doesn&apos;t use CFEclipse.  No, Homesite &lt;strong&gt;isn&apos;t&lt;/strong&gt; the best thing ever).&lt;/p&gt;&lt;p&gt;Parts such as Snippets/SnipEx, Frameworks Explorer, Dictionary editing/creation and even going beyond CFEclipse to show tools that just make a developers life easier (SVN, ANT, Etc.). Basically, all the things that just make sense. I can think of plenty of things I&apos;m going to make snippets of tomorrow and hopefully &lt;a href=&quot;http://www.inner-rhythm.co.uk.&quot;&gt;my boss&lt;/a&gt; sets us up a nice SnipEx server to utilise common Snippets within our company.&lt;/p&gt;&lt;p&gt;For anyone attending CFUnited be sure to catch Mark&apos;s session.  I&apos;m looking forward to the sequel, &amp;quot;CFEclipse Revolutions&amp;quot; :)&lt;/p&gt;&lt;p&gt;And I got an Adobe Water Bottle out of it for the gym. Bargain.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Ubuntu: First Impressions</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/ubuntu-first-impressions" />
    <id>urn:uuid:C209EC74-E250-C605-D69F4492887CBB98</id>
    
    <published>2008-03-01T12:03:00Z</published>
    <updated>2008-10-03T10:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Ubuntu" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;Unix, Linux, any sort of *nix.  I&apos;ve always thought it was for the mega geeks, the ones like in the films, so deprived of sunlight their skin is almost transparent and talk like &amp;quot;Comic Book Guy&amp;quot; from The Simpsons.&lt;/p&gt;&lt;p&gt;When my parents first got a PC in &apos;93 (a 486SX 25Mhz if you wondered) It was MS-DOS 5, and Windows 3.1.  Command lines were a pain in the ass and I was happy to see less and less of them. But the *nix&apos;s seemed to want to stay black with a flashy cursor.  Do people really want command lines, or does it just make them feel special because it does kind of make you like &amp;quot;cooler&amp;quot; in an odd nerdy type way? Anyway... enough my old *nix prejudice.  On to &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I&apos;ve heard bits and pieces about Ubuntu for a couple of years now, always coupled with the funky code names. But never really saw it in action. Then &lt;a href=&quot;http://john.beynon.org.uk/&quot;&gt;John B&lt;/a&gt; showed me it installed on an old Dell Latitude he had and I have to admit it looked pretty sweet.&lt;/p&gt;&lt;p&gt;I recently upgraded my PC and kept all the old components to use on a MAME cabinet (AMD Athon 2700+, nForce2 motherboard, 1GB RAM, old but still not too shabby). After seeing Ubuntu I thought it would be a perfect chance to try and it out and maybe use it permanently for my MAME project. So that&apos;s what I did tonight. Here&apos;s it at the login screen:&lt;/p&gt;&lt;a href=&quot;http://www.flickr.com/photos/bigaluk/2300327721/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3264/2300327721_c33ea4153c.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;At first it wouldn&apos;t even boot into the OS, it kept freezing.  That caused my first outburst &amp;quot;bloody open-source crap...&amp;quot; etc. But it wasn&apos;t Ubuntu&apos;s fault, the machine kept freezing after about a minute of being turned on, must be to do with it being naked and case-less. So I gave everything a wiggle and away it went.&lt;/p&gt;&lt;p&gt;It booted into the &amp;quot;Live&amp;quot; OS within 2 minutess, wow. From dead PC to GUI and everything in a couple of minutes. Impressive.  Selected the install option and off it went, it found the HDD connected to the SATA controller which made me very happy. I was chuffed because it&apos;s a Sil3112 SATA/RAID controller, and that isn&apos;t part of XP&apos;s initial clean install drivers. So even though I don&apos;t use a floppy drive, every time I wanted a nice clean XP install, I would have to dig out the floppy (and even harder, find a disk) load it up with the drivers and catch Windows with an F6 at the very first moment or it wouldn&apos;t find a HDD.  Effort. And Floppy was your only option (apart from slipstreaming them into the CD).&lt;/p&gt;&lt;p&gt;Anyway, the full install couldn&apos;t have been any longer than 20 minutes and it was done. Amazing. XP was a good 45mins at least.&lt;/p&gt;&lt;p&gt;One problem though, the mouse wouldn&apos;t work, but even though there was a little rant &amp;quot;poxy open-source rubbish...&amp;quot;, I think now it might be a dead rodent, I&apos;ll get a new one tomorrow. I still managed to have a play with keyboard navigation and I liked what I saw, everything seemed to have drivers for it, the screen res was already the LCD&apos;s native, I had sound, FireFox was there as was OpenOffice, all on 1 CD (not DVD) and installed in no time. Again impressive.&lt;/p&gt;&lt;p&gt;But it&apos;s not all good.  Ubuntu is marketed as linux for the masses, you don&apos;t need to be the clammy skinned nerd, but I think you at least need one as a friend. A couple of examples:&lt;/p&gt;&lt;p&gt;I want to use the S-Video out on my graphics card to run a TV (the TV that would be my MAME Cabinet display) so I downloaded ATI&apos;s linux drivers.  Could I just run them? Nope. The file extension didn&apos;t even seem recognised. Looking to the net for help was a quite baffling too. Enabling restricted drivers or something, and then more command-line stuff, with cryptic commands (At least DOS seemed kind of readable, maybe it&apos;s just what you&apos;re used to).&lt;/p&gt;&lt;p&gt;So I&apos;m undecided, I love the install doing everything, doing it well and doing it in minutes.  I like the look and feel.  The updates and upgrades seem easy to do which is nice.  But there&apos;s still that underlying command line requirement which I just don&apos;t feel like I want to learn. But it was only a couple of hours of playing, I&apos;ll give it another go tomorrow when I have a mouse and report back how i get on.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Hello World 2</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/hello-world-2" />
    <id>urn:uuid:C209E88C-0833-9BA1-9196A53CB3A237EE</id>
    
    <published>2008-02-29T10:02:00Z</published>
    <updated>2008-10-03T10:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="Work" /> 
        <category term="General" /> 
        <category term="ColdFusion" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;Bit of a late new years resolution really.  Blog More. About worthwhile stuff. But what stuff? Well a little background and introduction...&lt;/p&gt;&lt;p&gt;After a Multimedia Systems course at Uni I came out as a jack-of-all-trades, not really great at anything.  Got my first real job as an artworker for Kidz Biz (a UK toy company).  It turned into a bit of an all-rounder position, I was artworker, designer, sysadmin, video editor and towards the end, web designer. But they were hideous creations if I&apos;m honest, I&apos;m glad there&apos;s no record of them now.&lt;/p&gt;&lt;more /&gt;&lt;p&gt;I left toys and moved into houses. &lt;a href=&quot;http://www.berkeleyhomes.co.uk/&quot;&gt;Berkeley Homes&lt;/a&gt;.  I was now a &amp;quot;Web Manager&amp;quot;.  Sounds good, but it meant admin monkey.  Just updating the website through their CMS (all running on ColdFusion BTW) got very bored very quickly.  I finally got the chance to make a microsite, but again I made some terrible all-image Fireworks sliced table thingy. Nasty. I wanted to leave, but the Berkeley Group (the parent company) IT department saved me and took me onboard. Then I started to get some proper work and I steered myself into standards compliance. XHTML and CSS became my thing. Anyway, the IT team expanded and they hired an in-house ColdFusion Developer to expand the public websites and intranet.  That was &lt;a href=&quot;http://john.beynon.org.uk/&quot;&gt;John Beynon&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So there it began, work came flooding in and we needed some more CF skills on the team.  I was up for learning a server-side language so I became John&apos;s &lt;a href=&quot;http://starwars.wikia.com/wiki/Padawan/&quot;&gt;Padawan&lt;/a&gt;&lt;/p&gt;&lt;p&gt;A couple of years past we had a tight little team, I learnt the basics of CF, enough to build websites using the CMS (&lt;a href=&quot;http://www.gossinteractive.com/index.cfm?articleid=1941&quot;&gt;GOSS&apos;s iCM&lt;/a&gt;). But it was time for a change.&lt;/p&gt;&lt;p&gt;I moved on at the beginning of this year to &lt;a href=&quot;http://www.hostelbookers.com/&quot;&gt;HostelBookers.com&lt;/a&gt; where I&apos;m a (junior) ColdFusion Developer, working under Lead Developer &lt;a href=&quot;http://www.inner-rhythm.co.uk/&quot;&gt;Kev McCabe (aka Big Mad Kev)&lt;/a&gt;. I&apos;m gradually working my way around the &amp;quot;names&amp;quot; of the UK CF scene :)&lt;/p&gt;&lt;p&gt;So, now being a ColdFusion Developer by trade I thought it was time to blog properly. I still feel pretty junior but I hope some of the things I&apos;ll blog about in the future will help other newbies. (I know there&apos;s plenty of great info out there, but I thought a little more, from a fellow beginners/junior point of view, couldn&apos;t hurt). Although saying that, I have dabbled in the more advanced parts and OO bits like beans, etc. Actually, I&apos;m quite the bean maker at HostelBookers, just call me &lt;a href=&quot;http://www.heinz.co.uk/products/heinz_baked_beanz.aspx&quot;&gt;Heinz&lt;/a&gt; :)&lt;/p&gt;&lt;p&gt;But it won&apos;t be CF only.  There&apos;s lots of cool stuff to play with and blog about. Learning Flex and AIR look like fun, so I&apos;m reading &lt;a href=&quot;http://www.amazon.co.uk/Essential-ActionScript-3-0-C-Moock/dp/0596526946/&quot;&gt;Colin Moock&apos;s Essential ActionScript 3.0&lt;/a&gt; as my commuting book . I&apos;ll be blogging about that when start doing the Flash-y stuff. JavaScript-wise I used a fair bit of &lt;a href=&quot;http://labs.adobe.com/technologies/spry/home.html&quot;&gt;Spry&lt;/a&gt; and &lt;a href=&quot;http://code.google.com/apis/maps/&quot;&gt;Google Maps API&lt;/a&gt; at Berkeley and now again at HostelBookers so when I do funky stuff with them, I&apos;ll be sure to blog it. And of course my first love, CSS, the nightmare that it &lt;strike&gt;is&lt;/strike&gt; can be.&lt;/p&gt;&lt;p&gt;Also a few off-topic bits like my &lt;a href=&quot;http://www.mamedev.org/&quot;&gt;MAME&lt;/a&gt; cabinet project, which I&apos;m going to try and run on Ubuntu, more on that later.&lt;/p&gt;&lt;p&gt;So HELLO WORLD. It&apos;s about time I came out of the shadows and stopped just lurking on other CF&apos;ers blogs.&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Adobe, Flex, AIR and last.fm</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/adobe-flex-air-and-last-fm" />
    <id>urn:uuid:C209E4A4-A3EF-B5C9-43B8854820CE46E3</id>
    
    <published>2008-01-25T03:01:40Z</published>
    <updated>2008-10-03T10:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;style type=&quot;text/css&quot;&gt;
.flickr-photo { border: solid 2px #000000; }
.flickr-yourcomment { }
.flickr-frame { text-align: left; padding: 3px; }
.flickr-caption { font-size: 0.8em; margin-top: 0px; }
&lt;/style&gt;

&lt;div class=&quot;flickr-frame&quot;&gt;
	&lt;a href=&quot;http://www.flickr.com/photos/bigaluk/2216705283/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2082/2216705283_b50cdc5009.jpg&quot; class=&quot;flickr-photo&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
	&lt;span class=&quot;flickr-caption&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/bigaluk/2216705283/&quot;&gt;The Ball Pit&lt;/a&gt;, originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/bigaluk/&quot;&gt;BigAlUK&lt;/a&gt;.&lt;/span&gt;
&lt;/div&gt;
				
&lt;p class=&quot;flickr-yourcomment&quot;&gt;
	Last night was eventful. The Flex 3 and AIR pre-release tour reached London and 200+ people turned out for the presentation and free beer. Brilliant.  Flex 3 is looking like fun, something I need to start playing with.&lt;br /&gt;
&lt;br /&gt;
Then through a friend of a friend, we ended up getting a tour of last.fm HQ, including some ball pit time A night to remember.
&lt;/p&gt;
    </content>
</entry>

<entry>
    <title>Merry Christmas</title>
    <link rel="alternate" type="text/html" href="http://alan.pennell-smith.co.uk/post.cfm/merry-christmas" />
    <id>urn:uuid:C209E04F-DAAD-815A-DE52B97D0B3E5C6D</id>
    
    <published>2007-12-24T06:12:00Z</published>
    <updated>2008-10-03T10:10:00Z</updated>
    
    <summary></summary>
    <author>
        <name>Alan Pennell-Smith</name>
   </author>
    
        <category term="General" /> 
    <content type="html" xml:lang="en" xml:base="http://alan.pennell-smith.co.uk/">
        &lt;p&gt;Merry Christmas Peeps! :)&lt;/p&gt;
    </content>
</entry>

</feed>