<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>
        BASIC blog full text feed    </title>
        <link href="blog/atom.xml" rel="self" />
    
        <link href="/"/>
    
        
    <updated>2011-11-21T11:54:24Z</updated>

    <id>/blog/atom.xml/</id>

            <entry>
            <title type="html">Visiting BBC Online at Salford</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/visiting-bbc-online-at-salford"/>
            <updated>2011-11-18T10:00:00Z</updated>
            <published>2011-11-18T10:00:00Z</published>
            <id>/blog/visiting-bbc-online-at-salford</id>
                        <category   scheme="/blog/tags"
                        term="bbc"
                        label="Bbc" />
                        <category   scheme="/blog/tags"
                        term="events"
                        label="Events" />
                        <category   scheme="/blog/tags"
                        term="bbconline"
                        label="Bbconline" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/media_city.jpg&#34; alt=&#34;Media City - Salford&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Last week I travelled with some of my &lt;a href=&#34;/blog/joining-rga.html&#34;&gt;new R/&lt;span class=&#34;caps&#34;&gt;GA&lt;/span&gt; colleagues&lt;/a&gt; to Salford near Manchester to visit the &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt;&amp;#8217;s new Media City development and talk to The Beeb about their continuing efforts to engage more openly and effectively with the online community. The &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; are keen to share their thinking and product plans for this and the event was kicked off by &lt;a href=&#34;http://www.bbc.co.uk/blogs/bbcinternet/ralph_rivera/&#34;&gt;Ralph Rivera&lt;/a&gt;, Director, Future&amp;nbsp;Media.
&lt;/p&gt;&lt;p&gt;
    Rivera began the afternoon by talking about the ambition to unify the existing silos around the &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; into a cohesive online experience. The ten core online products of Home page, Search, News, Sport, Weather, Knowledge and Learning, &lt;span class=&#34;caps&#34;&gt;TV&lt;/span&gt;, Radio, cBBC and Cbeebies are set to form the backbone of the online offering accross the various &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt;&amp;nbsp;estates.
&lt;/p&gt;
&lt;p&gt;
    The common theme throughout the day, was that of how best to deliver a simple, intuitive and accessible experience on &amp;#8220;the four&amp;nbsp;screens&amp;#8221;:
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;span class=&#34;caps&#34;&gt;TV&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Computer&lt;/li&gt;
    &lt;li&gt;Tablets&lt;/li&gt;
    &lt;li&gt;Smart&amp;nbsp;phones&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Also a hot topic was how we can leverage &lt;i&gt;the red button&lt;/i&gt; as a bridge to a more connected and engaged experience with the content that the &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; has to offer. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
    Many parts of the &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; have been steadily rolling out all manor of innovations, not only through the &lt;a href=&#34;http://www.bbc.co.uk/rd/&#34; title=&#34;BBC R &amp;amp; D&#34;&gt;R &lt;span class=&#34;amp&#34;&gt;&amp;amp;&lt;/span&gt; D team&lt;/a&gt;, but also through steady iterations and evolutions of existing products across the &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; offering.  The News offering was a good example of that, where the recently released news application for Android rapidly achieved half a million downloads and served to redress the balance of a slight perceived skew towards Apple products and&amp;nbsp;platforms.
&lt;/p&gt;
&lt;p&gt;
    It was interesting that Rivera observed that there was a gap between the official R &lt;span class=&#34;amp&#34;&gt;&amp;amp;&lt;/span&gt; D activities, and the innovation that happens within the product streams, and described that there is a push to close that gap over the next year. This effort will include bother internal and external initiatives including many events and a significant financial&amp;nbsp;investment.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
    Holly Goodier, Head of Audiences &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; Future Media then gave an excellent presentation describing the audiences and contexts that people consume &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; products. This built further on the theme of the four screens and nicely illustrated how the vast majority of the audience is capable of multi-screen consumption in some form or other. I was impressed at how considered much of this was and at how the &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; were clearly looking to fulfill that desire in their&amp;nbsp;audience.
&lt;/p&gt;
&lt;p&gt;
    A breakdown of the type of content which is popular on different screens, and so in different contexts was interesting to learn, as was the statistic that between 40-48% of TVs are now &lt;span class=&#34;caps&#34;&gt;IPTV&lt;/span&gt; capable. Personally, I have doubts about whether that is a good indicator of what capabilities that same audience has given how little of my &lt;span class=&#34;caps&#34;&gt;TV&lt;/span&gt;&amp;#8217;s capabilities I, as a techie, geeky bloke,&amp;nbsp;exploit.
&lt;/p&gt;
&lt;p&gt;
    The BBCs focus on content for children yielded some interesting conversations. Of particular interest to me was the observation that significant knowledge transfer occurs through games and rich interactions. Given that many of these games are developed in Flash, I was curious to find out how the &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt; was planning to make the most of this across the four screens when Flash is experiencing ever diminishing support on mobile platforms.  The future of &lt;span class=&#34;caps&#34;&gt;HTML5&lt;/span&gt;, and other web technologies for delivering game content seems, quite rightly, high on the radar for the producers of children&amp;#8217;s content on &lt;span class=&#34;caps&#34;&gt;BBC&lt;/span&gt;&amp;nbsp;on-line.
&lt;/p&gt;
&lt;p&gt;
    Ben Gollop, Head of F1, and Ciat O&amp;#8217;Riordan, Head of Product for Sport and 2012 gave us some interesting insights into the scale of the undertaking to keep systems running during periods of massive demand. With events such as the 2012 Olympics on the horizon, there is clearly a great many design and engineering challenges ahead to ensure that online sevices and the provision of live video content is invisibly simple and flawlessly effective for the consumers. No small tasks at these&amp;nbsp;scales.
&lt;/p&gt;
&lt;p&gt;
    Finally, Daniel Danker, General Manager, Programmes &lt;span class=&#34;amp&#34;&gt;&amp;amp;&lt;/span&gt; On Demand spoke about the drive to simplify the experience and more effectively meet the needs of the audience. Danker, quite rightly observed how far the experience needs to evolve before it can truly be successful.  I found his comments to be right on the money. Personally I&amp;#8217;ve found that my &lt;span class=&#34;caps&#34;&gt;TV&lt;/span&gt; watching methods, even in the living room, have grown to include a &amp;#8216;workflow&amp;#8217; rather than just being utterly intuitive. Certainly something that needs addressing.  The panel discussion that this lead on to with a number of different television set manufacturers was interesting, but took an alarmingly long time to include the word &amp;#8216;standardisation&amp;#8217;.  Like many others, I&amp;#8217;d prefer manufacturers to compete on things like price, size, picture quality, sound and energy consumption. Not how many apps are built in and which &amp;#8216;app store silo&amp;#8217; does the &lt;span class=&#34;caps&#34;&gt;TV&lt;/span&gt; support.  Give me a capable, but dumb display any&amp;nbsp;day.
&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/vidyo/5670030676/&#34;&gt;Ray&amp;nbsp;Morris&lt;/a&gt;
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Reflecting on Full Frontal 2011</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/reflecting-on-fullfrontal-2011"/>
            <updated>2011-11-13T10:00:00Z</updated>
            <published>2011-11-13T10:00:00Z</published>
            <id>/blog/reflecting-on-fullfrontal-2011</id>
                        <category   scheme="/blog/tags"
                        term="fullfrontalconf"
                        label="Fullfrontalconf" />
                        <category   scheme="/blog/tags"
                        term="conferences"
                        label="Conferences" />
                        <category   scheme="/blog/tags"
                        term="talks"
                        label="Talks" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/ph_excessive_enhancement.jpg&#34; alt=&#34;Excessive Enhancement&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    The third installment of Full Frontal, the JavaScript conference hosted each year in Brighton by &lt;a href=&#34;http://leftlogic.com&#34;&gt;LeftLogic&lt;/a&gt;, was a great event once again. I was lucky enough to be a speaker this year, which perhaps gave me a slightly different perspective of the day, but as an enthusiastic attendee I also found it to be an excellent&amp;nbsp;experience.
&lt;/p&gt;
&lt;p&gt;
    Something that strikes me about Full Frontal is that it has established itself in just two years to be a really valuable addition to the web development conference calendar.  Never mind the speakers who &lt;a href=&#34;http://twitter.com/rem&#34;&gt;Remy&lt;/a&gt; managed to secure (I found myself among an impressive line-up of established conference speakers and well-respected technologists - somewhat daunting for my first outing as a proper conference speaker), but also just a glance around the venue at the delegates revealed a gathering of some amazing talent. Clearly, over the last couple of years, Full Frontal has been doing something right just to attract so many big&amp;nbsp;brains. 
&lt;/p&gt;
&lt;p&gt;
    This all added to the sweat on my brow, and the shortness of my fingernails as my time on stage&amp;nbsp;approached.
&lt;/p&gt;
&lt;p&gt;
    As it turned out my talk, entitled Excessive Enhancement, was very well received. This was incredibly encouraging to me given that it was something of a cautionary tale, and delivered to a crowd of smart developers who wanted to learn about exciting new techniques and opportunities for interesting &amp;#8216;browser&amp;nbsp;shizzle&amp;#8217;.
&lt;/p&gt;
&lt;p&gt;
    Many people who were nice enough to complement me on my talk at the after party (a nicely judged event in itself with a generous kitty behind the bar - thanks Remy and sponsors!) commented on how important my main message, of caring for the Web regardless of the cool effects we can create, was also important to them.  That is an extremely positive thing, which might perhaps reflect on the kind of people that this conference attracts, but hopefully also points to a wider community of folks who share a similar set of values which can only be a good thing for the&amp;nbsp;Web.
&lt;/p&gt;
&lt;p&gt;
    Everso slightly unfortunate, was the fact that almost every photo I&amp;#8217;ve seen from my talk, features me standing in front of a giant sign saying &amp;#8220;Sex Enhancements&amp;#8221; (as you may have spotted above).  I guess that&amp;#8217;s the price you pay for being a smart arse and/or channeling the chatter happening on&amp;nbsp;Twitter!
&lt;/p&gt;
&lt;p&gt;
    The slides from my talk are available on &lt;a href=&#34;http://speakerdeck.com/u/philhawksworth/p/excessive-enhancement&#34;&gt;SpeakerDeck&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
    I was interested to hear what &lt;a href=&#34;http://ashkenas.com/&#34;&gt;Jeremy Ashkenas&lt;/a&gt; had to say about CoffeeScript, as I had to admit to being a little hesitant to embrace it myself. In Jeremy&amp;#8217;s session, he described some of the design decisions involved when he created the language and demonstrated some beautifully intuitive and expressive features. Much to think about.  When I spoke to Jeremy and mentioned my hesitance due to concerns around debugging tools and adding a layer of abstraction atop JavaScript he replied that this was a common concern from people who have not tried CoffeeScript, and that it is seldom a problem for those using it. Perhaps I&amp;#8217;ll give it a&amp;nbsp;whirl.
&lt;/p&gt;
&lt;p&gt;
    Both &lt;a href=&#34;http://marijnhaverbeke.nl/&#34;&gt;Marijn Haverbeke&lt;/a&gt; and &lt;a href=&#34;&#34;&gt;Rik Arends&lt;/a&gt; gave fascinating presentations on the state of rich text and code editing in the browser from slightly different angles, with Rick demonstrating the rather splendid looking web-based &lt;a href=&#34;http://c9.io/&#34; title=&#34;Cloud 9&#34;&gt;Cloud 9 &lt;span class=&#34;caps&#34;&gt;IDE&lt;/span&gt;&lt;/a&gt;. This is evolving into a really compelling &lt;span class=&#34;caps&#34;&gt;IDE&lt;/span&gt; and has some beautiful integrations with GitHub and Heroku for all manner of integrated workflow and deployment strategies. Rather nice, and certainly one to watch as the pace of development at Cloud 9 seems to be steadily&amp;nbsp;increasing.
&lt;/p&gt;
&lt;p&gt; 
    I enjoyed every talk during the day, but the two which really entertained me and got me thinking most were &lt;a href=&#34;http://www.glennjones.net/&#34;&gt;Glenn Jones&lt;/a&gt;, who demonstrated umpteen different examples of uses of emerging browser APIs, and &lt;a href=&#34;http://www.aresluna.org/&#34;&gt;Marcin Wichary&lt;/a&gt; of Google who showed us a glimpse into the world of creating the Google Doodles we all&amp;nbsp;love.
&lt;/p&gt;
&lt;p&gt;
    Glenn&amp;#8217;s demonstrations were superb and provoked all kinds of discussion at the after party.  He also gave a great introduction to Web Intents. You can see his slides and demos on &lt;a href=&#34;http://glennjones.net/2011/11/beyond-the-page-fullfrontal-2011/&#34;&gt;his blog&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    Marcin was superbly entertaining and gave us all a fascinating glimpse into what goes into the creation of the interactive Google Doodles such as the &lt;a href=&#34;http://www.google.com/pacman/&#34;&gt;Pac Man&lt;/a&gt; and &lt;a href=&#34;http://www.aresluna.org/verne-ux&#34;&gt;Jules Verne&lt;/a&gt; doodles. With such a premium on optimisation and reach, the inventive techniques employed on these 24 hour delighters are cheeky and inspired. Marcin demonstrated some of those to us brilliantly through his slick, web-based presentation rig. Crafty&amp;nbsp;bugger!
&lt;/p&gt;
&lt;p&gt;
    Many reviews and blog posts of the day are popping up and many are nicely aggregated over on &lt;a href=&#34;http://lanyrd.com/2011/full-frontal/writeups/&#34;&gt;Lanyrd&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
    From the conversations I&amp;#8217;ve had, Full Frontal is set to be popular again next year. Thankfully I&amp;#8217;ve got a free ticket already in the bag as a reward for speaking this year (thanks again Remy!). Otherwise I&amp;#8217;d certainly be monitoring the &lt;a href=&#34;http://titter.com/fullfrontalconf&#34;&gt;@fullfrontalconf&lt;/a&gt; twitter feed for news of when to grab a ticket next year before they get snapped&amp;nbsp;up.
&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/remysharp/6344244492/&#34;&gt;Remy&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Excessive Enhancement at Full Frontal</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/excessive-enhancement-at-full-frontal"/>
            <updated>2011-11-03T10:00:00Z</updated>
            <published>2011-11-03T10:00:00Z</published>
            <id>/blog/excessive-enhancement-at-full-frontal</id>
                        <category   scheme="/blog/tags"
                        term="conferences"
                        label="Conferences" />
                        <category   scheme="/blog/tags"
                        term="talks"
                        label="Talks" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
                        <category   scheme="/blog/tags"
                        term="fullfrontalconf"
                        label="Fullfrontalconf" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/full-frontal-conf.png&#34; alt=&#34;FullFrontal - Javascript conference&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    In a few days I will be speaking at &lt;a href=&#34;http://2011.full-frontal.org&#34; title=&#34;FullFrontal 2011&#34;&gt;Full Frontal&lt;/a&gt; in Brighton. This conference, now in its third year, has done a great job of capturing so much of what is important and exciting to many front-end web&amp;nbsp;developers. 
&lt;/p&gt;&lt;p&gt;
    I&amp;#8217;ve attended Full Frontal each year so far and so I&amp;#8217;m rather delighted to get the chance to speak. The technical community in Brighton is fantastic and attracts smart speakers and a knowledgeable and enthusiastic audience from far and wide. Somehow I&amp;#8217;ve managed to fight my way in and find myself on a list with some &lt;a href=&#34;http://2011.full-frontal.org/schedule&#34; title=&#34;FullFrontal Schedule 2011&#34;&gt;awesome speakers&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    This is both nerve racking and genuinely&amp;nbsp;exciting. 
&lt;/p&gt;
&lt;p&gt;
    I&amp;#8217;ll be slightly running the risk of being the wet blanket of the conference as I&amp;#8217;ll talk about the pitfalls of being seduced by all the cool things that we can do in modern web browsers. Other speakers will most likely be showing all manner of engaging, bleeding-edge developments in Javascript and browser technologies, perhaps eliciting the occasional &amp;#8220;ooh&amp;#8221; and &amp;#8220;ah&amp;#8221; from the crowd. I&amp;#8217;m confident though, that while we web developers love making exciting interfaces and experiences, we do also value the underlying integrity of that thing that feeds us: The&amp;nbsp;Web.
&lt;/p&gt;
&lt;p&gt;
    At least, that&amp;#8217;s the drum that I&amp;#8217;m bringing to&amp;nbsp;bang.
&lt;/p&gt;
&lt;p&gt;
    I&amp;#8217;ll post my slides along with a look back at the conference on this site after the event and coverage from the other speakers will most likley also be posted on &lt;a href=&#34;http://lanyrd.com/ccdfc&#34; title=&#34;FullFrontal 2011 on Lanyrd&#34;&gt;Lanyrd&lt;/a&gt;. 
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Joining R/GA</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/joining-rga-london"/>
            <updated>2011-11-02T10:00:00Z</updated>
            <published>2011-11-02T10:00:00Z</published>
            <id>/blog/joining-rga-london</id>
                        <category   scheme="/blog/tags"
                        term="announcements"
                        label="Announcements" />
                        <category   scheme="/blog/tags"
                        term="rga"
                        label="Rga" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/rga.png&#34; alt=&#34;R/GA&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    While I was sad in my previous post to share that I was &lt;a href=&#34;/blog/time-to-move-on-from-the-team&#34; title=&#34;From the Hawksworx blog: Time to move on from The Team&#34;&gt;leaving The Team&lt;/a&gt;, I can now share with some excitement that I&amp;#8217;ll be moving on to join the considerable talent present at &lt;a href=&#34;http://rga.com&#34; title=&#34;R/GA&#34;&gt;R/&lt;span class=&#34;caps&#34;&gt;GA&lt;/span&gt;&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
    As I mentioned before, the decision to leave was a difficult one, but the potential at R/&lt;span class=&#34;caps&#34;&gt;GA&lt;/span&gt; provides a substantial pull and I can&amp;#8217;t wait to get stuck in. I&amp;#8217;ll be joining in the role of Technical Director, the same role that I have enjoyed so much at The Team, but the outlook is somewhat different. The organisation is digital to its core and has real momentum in attracting high profile, engaging clients who seem to have a real appetite for R/&lt;span class=&#34;caps&#34;&gt;GA&lt;/span&gt; to push the boundaries of creativity and innovation in the work that they do for&amp;nbsp;them.
&lt;/p&gt;
&lt;p&gt;
    Since this is a bigger company, the development team is also rather larger than at The Team. This is sure to present a new set of challenges and opportunities which will be great to take on.  I&amp;#8217;m hoping to apply many of the things I&amp;#8217;ve learned along the way but do expect to be regularly surprised (and hopefully delighted) by fresh&amp;nbsp;obstacles.
&lt;/p&gt;
&lt;p&gt;
    There is a buzz at R/&lt;span class=&#34;caps&#34;&gt;GA&lt;/span&gt; London at the moment. A real feeling that the agency is on the brink of unleashing some recently harnessed potential to deliver ever more awesome work.  Their steady move away from purely Flash-heavy sites into a more considered and future-proof approach to web technologies is also rather&amp;nbsp;exciting.
&lt;/p&gt;
&lt;p&gt;
    I can&amp;#8217;t wait to be a part of&amp;nbsp;it.
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Time to move on from The Team</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/time-to-move-on-from-the-team"/>
            <updated>2011-11-01T10:00:00Z</updated>
            <published>2011-11-01T10:00:00Z</published>
            <id>/blog/time-to-move-on-from-the-team</id>
                        <category   scheme="/blog/tags"
                        term="announcements"
                        label="Announcements" />
                        <category   scheme="/blog/tags"
                        term="theteam"
                        label="Theteam" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/theteam-pub.jpg&#34; alt=&#34;Cheers from The Team&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    After a few great years at &lt;a href=&#34;http://theteam.co.uk&#34; title=&#34;The Team&#34;&gt;The Team&lt;/a&gt;, the time has come to move to new pastures. Leaving a job is always, I find, an exciting but difficult experience and this feels particularly true in this&amp;nbsp;case.
&lt;/p&gt;
&lt;p&gt;
    I joined The Team tasked with leading the way for the front-end development efforts across all of our clients and projects, but soon became responsible for all of the development and technical output of the agency. This represented a significant challenge for me, and it has not been a road entirely free from&amp;nbsp;bumps. 
&lt;/p&gt;
&lt;p&gt;
    I take significant pride in the journey that The Team has taken in this time, and have particular affection and respect for past and present members of my team, the development team. I feel safe in saying that the quality and efficiency of that small team&amp;#8217;s work has steadily been improving and over the last couple of years the team has evolved into something really rather&amp;nbsp;special.
&lt;/p&gt;
&lt;p&gt;
    During my time at The Team, I&amp;#8217;ve also been involved in countless impassioned debates about what is important on the Web.  These have been in stark contrast to the debates I had at &lt;a href=&#34;http://osmosoft.com&#34; title=&#34;Osmosoft&#34;&gt;Osmosoft&lt;/a&gt; where the vantage point was a little different.  Being surrounded by talented designers, some of whom have rather different relationships with the web than myself has been frustrating, challenging, rewarding and enlightening.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
    I cherish heartfelt debate with smart people who disagree with&amp;nbsp;me
&lt;/p&gt;
&lt;p&gt;
    During my time here, I&amp;#8217;ve been incredibly lucky to work with some outrageous talent from all aspects of the web design and development fields. It&amp;#8217;s hard to describe the excitement when all of the pieces fall into place perfectly and the work lives up to your collective expectations. It&amp;#8217;s safe to say that I&amp;#8217;ve made some great friends here as part of the&amp;nbsp;experience.
&lt;/p&gt;
&lt;p&gt;
    I&amp;#8217;ve also worked on the occasional stinker where I&amp;#8217;ve done a less than stellar job and those projects yielded some of the biggest lessons for me. Tough, but&amp;nbsp;true.
&lt;/p&gt;
&lt;p&gt;
    So, thanks for everything, you folks at The Team. You&amp;#8217;ve been amazing and I&amp;#8217;m sorry to be moving on. But now, a new challenge&amp;nbsp;awaits.
&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/philliecasablanca/6288145077&#34;&gt;Phil&amp;nbsp;Whitehouse&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Profiting from a happy hack day</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/profiting-from-a-happy-hackday"/>
            <updated>2011-09-19T10:00:00Z</updated>
            <published>2011-09-19T10:00:00Z</published>
            <id>/blog/profiting-from-a-happy-hackday</id>
                        <category   scheme="/blog/tags"
                        term="projects"
                        label="Projects" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
                        <category   scheme="/blog/tags"
                        term="theteam"
                        label="Theteam" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/scamp-python.jpg&#34; alt=&#34;Writing Python on our hack day&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    A few weeks ago at The Team, inspired by the &lt;a href=&#34;http://www.atlassian.com/&#34; title=&#34;Atlassian - Software Development Tools and Collaboration Software&#34;&gt;Atlassian&lt;/a&gt; model of &lt;a href=&#34;http://blogs.atlassian.com/news/2010/11/fedex_day_in_the_wild.html&#34; title=&#34;FedEx Day in the wild - Atlassian News&#34;&gt;FedEx days&lt;/a&gt; which we have have successfully employed before, we managed to make some time for the development team to spend the day away from the office to work on something for themselves. No clients and no managers, just our own requirements and some time to work in new ways together. It yielded some valuable&amp;nbsp;results.
&lt;/p&gt;&lt;p&gt;
    The notion of creating &lt;i&gt;value&lt;/i&gt; from activities like this is not immediately obvious to all, but there is value to be found in many different places when working together on a project like this.  I&amp;#8217;ll try to mention a few of them here as a kind of a primer for anyone who is looking to arrange a similar day of their own. That might be useful when you need to convince the folks at work who need to look carefully at things like &lt;i&gt;utilisation&lt;/i&gt;, &lt;i&gt;opportunity cost&lt;/i&gt; and &lt;i&gt;project resourcing&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
    When arguing for the value of this kind of activity, it can be difficult to protect the time needed to make it really useful and valuable. I&amp;#8217;d suggest that this is actually a vital activity in helping a development team to remain fulfilled, motivated, efficient and&amp;nbsp;sharp.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
    This was a modest hack day. First of all it was just a single day, while I would have preferred to have it last for two. We had just the time that we could stay awake and productive for one day to plan, design, develop and deploy our project.  Also, while I would have liked to involve a wider team in order to profit from a range of disciplines and specialisms, it was just our small development team who could be spared for one precious day. Nieman Journalism Lab recently wrote about the benefits of similar hack days at &lt;span class=&#34;caps&#34;&gt;NPR&lt;/span&gt; which involve wider disciplines and dubbed them &lt;a href=&#34;http://www.niemanlab.org/2011/08/npr-tries-something-new-a-day-to-let-managers-step-away-and-developers-play/&#34; title=&#34;NPR Serendipity days&#34;&gt;Serendipity Days&lt;/a&gt;. I rather like&amp;nbsp;that. 
&lt;/p&gt;
&lt;p&gt;
    We cheated a little. We had something in mind that we wanted to build. A simple need that we felt could be basically fulfilled with modest amount of development.  That idea, we labelled &lt;a href=&#34;http://scampcat.com&#34; title=&#34;Sampcat. Annotate and share your scamps and wireframes&#34;&gt;Scamp Cat&lt;/a&gt;. So named as a bit of a hat-tip to &lt;a href=&#34;http://spritecow.com&#34;&gt;Sprite Cow&lt;/a&gt;, a little side project by &lt;a href=&#34;http://jakearchibald.com&#34;&gt;Jake Archibald&lt;/a&gt; which we each had some fleeting involvement in, and also just because we needed a way to refer to this &lt;i&gt;thing&lt;/i&gt;, and Scamp Cat made us giggle. We are easily amused.  Having something in mind to build, and having the opportunity to talk to potential users of this application ahead of time was a great way to get started quickly on the day. We already had an idea of the high-level requirements, and had identified a likely&amp;nbsp;&amp;#8216;customer&amp;#8217;.
&lt;/p&gt;
&lt;p&gt;
    &lt;b&gt;Having a customer&lt;/b&gt; was my first tactic for justifying the day to my boss and to my Financial Director.  We would be making something that has an application right here at work on a regular basis. Yes, there are tools around that provide a similar service, but none quite satisfied the needs of are colleagues in the &lt;span class=&#34;caps&#34;&gt;EA&lt;/span&gt; and Design departments. Building this thing would be of &lt;i&gt;value&lt;/i&gt; to us right here at&amp;nbsp;work.
&lt;/p&gt;
&lt;p&gt;
    When I presented what we built back to my elders and betters, I was eager to point out that Scamp Cat, the most tangible product of the day, was perhaps the least valuable output. More important to me, are the various processes and conventions that we used during the day, and the insights into some new technologies and conventions we gained. For instance, during the day, we made use of &lt;a href=&#34;http://nvie.com/posts/a-successful-git-branching-model/&#34; title=&#34;A successful Git branching model &amp;raquo; nvie.com&#34;&gt;Git Flow&lt;/a&gt;, a code versioning model in Git. This served us tremendously well and resulted in very few code conflicts and high confidence in our small but active codebase over the day. We now use Git Flow on all of our active client projects.&amp;nbsp;Win!
&lt;/p&gt;
&lt;p&gt;
    We also started tuning our approach to provisioning our infrastructure using &lt;a href=&#34;http://puppetlabs.com/&#34; title=&#34;Puppet Labs: The Leading Open Source Data Center Automation Solution&#34;&gt;Puppet&lt;/a&gt; and normalising on virtualised development environments with &lt;a href=&#34;http://vagrantup.com/&#34; title=&#34;Vagrant&#34;&gt;Vagrant&lt;/a&gt;. More Win!  In addition there were a number of small but useful pieces of reusable code which came from the project. These got rolled into our set of code snippets and plugins which form part of our project bootstrapping suite.  Winning&amp;nbsp;again!
&lt;/p&gt;
&lt;p&gt;
    My favourite part of the day was the fantastic sense of team spirit which was evident. We set ourselves a tough challenge, and together we knuckled down and met that challenge. Creating an opportunity for a team to pull together away from outside influences and commitments develops some great trust and mutual respect, which is perhaps the most valuable output of&amp;nbsp;all.
&lt;/p&gt;
&lt;p&gt;
    But for those wanting to see an actual &lt;i&gt;thing&lt;/i&gt; as an output from our day, &lt;a href=&#34;http://scampcat.com&#34; title=&#34;Sampcat. Annotate and share your scamps and wireframes&#34;&gt;Scamp Cat&lt;/a&gt; has found a little home on the Web, and is functional enough to use. Just. It can be used to upload, or reference, an image and add annotations to that image. The resulting annotated &amp;#8220;scamp&amp;#8221; can be freely shared via a public &lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt;. There are similar products out there already, but none quite ht the spot for&amp;nbsp;us.
&lt;/p&gt;
&lt;p&gt;   
    We&amp;#8217;ve already got some great feedback and are planning several iterations to evolve the&amp;nbsp;functionality.
&lt;/p&gt;

&lt;p class=&#34;meta&#34;&gt;
    More photos from the day &lt;a href=&#34;http://www.flickr.com/photos/philhawksworth/tags/scampcat/&#34;&gt;on&amp;nbsp;Flickr&lt;/a&gt;
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Value in a happy hack day</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/value-in-a-happy-hackday"/>
            <updated>2011-09-19T10:00:00Z</updated>
            <published>2011-09-19T10:00:00Z</published>
            <id>/blog/value-in-a-happy-hackday</id>
                        <category   scheme="/blog/tags"
                        term="projects"
                        label="Projects" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
                        <category   scheme="/blog/tags"
                        term="theteam"
                        label="Theteam" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/scamp-python.jpg&#34; alt=&#34;Writing Python on our hack day&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    A few weeks ago at &lt;a href=&#34;http://theteam.com&#34;&gt;The Team&lt;/a&gt;, inspired by the &lt;a href=&#34;http://www.atlassian.com/&#34; title=&#34;Atlassian - Software Development Tools and Collaboration Software&#34;&gt;Atlassian&lt;/a&gt; model of &lt;a href=&#34;http://blogs.atlassian.com/news/2010/11/fedex_day_in_the_wild.html&#34; title=&#34;FedEx Day in the wild - Atlassian News&#34;&gt;FedEx days&lt;/a&gt; which we have have successfully employed before, we managed to make some time for the development team to spend the day away from the office to work on something for themselves. No clients and no managers, just our own requirements and some time to work in new ways together. It yielded some valuable&amp;nbsp;results.
&lt;/p&gt;&lt;p&gt;
    The notion of creating &lt;i&gt;value&lt;/i&gt; from activities like this is not immediately obvious to all, but there is value to be found in many different places when working together on a project like this.  I&amp;#8217;ll try to mention a few of them here as a kind of a primer for anyone who is looking to arrange a similar day of their own. That might be useful when you need to convince the folks at work who need to look carefully at things like &lt;i&gt;utilisation&lt;/i&gt;, &lt;i&gt;opportunity cost&lt;/i&gt; and &lt;i&gt;project resourcing&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
    When arguing for the value of this kind of activity, it can be difficult to protect the time needed to make it really useful and valuable. I&amp;#8217;d suggest that this is actually a vital activity in helping a development team to remain fulfilled, motivated, efficient and&amp;nbsp;sharp.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
    This was a modest hack day. First of all it was just a single day, while I would have preferred to have it last for two. We had just the time that we could stay awake and productive for one day to plan, design, develop and deploy our project.  Also, while I would have liked to involve a wider team in order to profit from a range of disciplines and specialisms, it was just our small development team who could be spared for one precious day. Nieman Journalism Lab recently wrote about the benefits of similar hack days at &lt;span class=&#34;caps&#34;&gt;NPR&lt;/span&gt; which involve wider disciplines and dubbed them &lt;a href=&#34;http://www.niemanlab.org/2011/08/npr-tries-something-new-a-day-to-let-managers-step-away-and-developers-play/&#34; title=&#34;NPR Serendipity days&#34;&gt;Serendipity Days&lt;/a&gt;. I rather like&amp;nbsp;that. 
&lt;/p&gt;
&lt;p&gt;
    We cheated a little. We had something in mind that we wanted to build. A simple need that we felt could be basically fulfilled with modest amount of development.  That idea, we labelled &lt;a href=&#34;http://scampcat.com&#34; title=&#34;Sampcat. Annotate and share your scamps and wireframes&#34;&gt;Scamp Cat&lt;/a&gt;. So named as a bit of a hat-tip to &lt;a href=&#34;http://spritecow.com&#34;&gt;Sprite Cow&lt;/a&gt;, a little side project by &lt;a href=&#34;http://jakearchibald.com&#34;&gt;Jake Archibald&lt;/a&gt; which we each had some fleeting involvement in, and also just because we needed a way to refer to this &lt;i&gt;thing&lt;/i&gt;, and Scamp Cat made us giggle. We are easily amused.  Having something in mind to build, and having the opportunity to talk to potential users of this application ahead of time was a great way to get started quickly on the day. We already had an idea of the high-level requirements, and had identified a likely&amp;nbsp;&amp;#8216;customer&amp;#8217;.
&lt;/p&gt;
&lt;p&gt;
    &lt;b&gt;Having a customer&lt;/b&gt; was my first tactic for justifying the day to my boss and to my Financial Director.  We would be making something that has an application right here at work on a regular basis. Yes, there are tools around that provide a similar service, but none quite satisfied the needs of are colleagues in the &lt;span class=&#34;caps&#34;&gt;EA&lt;/span&gt; and Design departments. Building this thing would be of &lt;i&gt;value&lt;/i&gt; to us right here at&amp;nbsp;work.
&lt;/p&gt;
&lt;p&gt;
    When I presented what we built back to my elders and betters, I was eager to point out that Scamp Cat, the most tangible product of the day, was perhaps the least valuable output. More important to me, are the various processes and conventions that we used during the day, and the insights into some new technologies and conventions we gained. For instance, during the day, we made use of &lt;a href=&#34;http://nvie.com/posts/a-successful-git-branching-model/&#34; title=&#34;A successful Git branching model &amp;raquo; nvie.com&#34;&gt;Git Flow&lt;/a&gt;, a code versioning model in Git. This served us tremendously well and resulted in very few code conflicts and high confidence in our small but active codebase over the day. We now use Git Flow on all of our active client projects.&amp;nbsp;Win!
&lt;/p&gt;
&lt;p&gt;
    We also started tuning our approach to provisioning our infrastructure using &lt;a href=&#34;http://puppetlabs.com/&#34; title=&#34;Puppet Labs: The Leading Open Source Data Center Automation Solution&#34;&gt;Puppet&lt;/a&gt; and normalising on virtualised development environments with &lt;a href=&#34;http://vagrantup.com/&#34; title=&#34;Vagrant&#34;&gt;Vagrant&lt;/a&gt;. More Win!  In addition there were a number of small but useful pieces of reusable code which came from the project. These got rolled into our set of code snippets and plugins which form part of our project bootstrapping suite.  Winning&amp;nbsp;again!
&lt;/p&gt;
&lt;p&gt;
    My favourite part of the day was the fantastic sense of team spirit which was evident. We set ourselves a tough challenge, and together we knuckled down and met that challenge. Creating an opportunity for a team to pull together away from outside influences and commitments develops some great trust and mutual respect, which is perhaps the most valuable output of&amp;nbsp;all.
&lt;/p&gt;
&lt;p&gt;
    But for those wanting to see an actual &lt;i&gt;thing&lt;/i&gt; as an output from our day, &lt;a href=&#34;http://scampcat.com&#34; title=&#34;Sampcat. Annotate and share your scamps and wireframes&#34;&gt;Scamp Cat&lt;/a&gt; has found a little home on the Web, and is functional enough to use. Just. It can be used to upload, or reference, an image and add annotations to that image. The resulting annotated &amp;#8220;scamp&amp;#8221; can be freely shared via a public &lt;span class=&#34;caps&#34;&gt;URL&lt;/span&gt;. There are similar products out there already, but none quite ht the spot for&amp;nbsp;us.
&lt;/p&gt;
&lt;p&gt;   
    We&amp;#8217;ve already got some great feedback and are planning several iterations to evolve the&amp;nbsp;functionality.
&lt;/p&gt;

&lt;p class=&#34;meta&#34;&gt;
    More photos from the day &lt;a href=&#34;http://www.flickr.com/photos/philhawksworth/tags/scampcat/&#34;&gt;on&amp;nbsp;Flickr&lt;/a&gt;
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Expectations of web development at agencies</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/expectations-of-web-development-at-agencies"/>
            <updated>2011-09-09T10:00:00Z</updated>
            <published>2011-09-09T10:00:00Z</published>
            <id>/blog/expectations-of-web-development-at-agencies</id>
                        <category   scheme="/blog/tags"
                        term="web"
                        label="Web" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
                        <category   scheme="/blog/tags"
                        term="observations"
                        label="Observations" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/production-line.jpg&#34; alt=&#34;Agencies aren&#39;t just production lines&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Recently I was involved in an very short bit of consultancy for an e-commerce company. We were focussing on the performance of their site in the browser, and they were more than a little surprised at the software engineering rigour that we exhibited given that we are &lt;i&gt;just&lt;/i&gt; an agency. Perhaps we&amp;#8217;re thought of us web development production lines who churn out web sites. That&amp;#8217;s not my&amp;nbsp;view.
&lt;/p&gt;&lt;p&gt;
    This isn&amp;#8217;t the first time that I&amp;#8217;ve encountered that attitude towards agencies. It seems that there is a perception from companies whose bread and butter is developing their product for the Web, that an agency would never go to the same lengths as them to ensure quality and&amp;nbsp;performance.
&lt;/p&gt;
&lt;p&gt;
    There is a kernel of truth in that. Realistically a product company or e-commerce company can labor over fine-tuning and optimising their web site over long periods of time, making many, often constant, iterations to drive up the quality. Long term engagements in projects is often a luxury that agencies are not afforded, and so it is more difficult to agonise over finessing the performance and all that&amp;nbsp;entails.
&lt;/p&gt;
&lt;p&gt;
    But hang on. Agencies should be experts in their field.  Web development practitioners have a responsibility to their clients to craft and deliver amazing results. That doesn&amp;#8217;t end with the branding or the design, but should, nay &lt;i&gt;must&lt;/i&gt; extend through to the development and delivery of the &amp;#8216;product&amp;#8217; on the web. Otherwise everything that came before delivery is for&amp;nbsp;naught.
&lt;/p&gt;
&lt;p&gt;
    Where I work, we have gone to great lengths to instil robust software engineering practices because without them, frankly we&amp;#8217;d be screwed. Deadlines are always tight, and clients always want a lot for their money.  If we stand a chance of delivering that, we must find ways to reduce risk and create opportunities for&amp;nbsp;innovation.
&lt;/p&gt;
&lt;p&gt;
    Of particular surprise to the recent client, was the degree to which we optimise the performance in the browser. We care about this stuff. It&amp;#8217;s essential to providing a good experience to the user and that is true no matter how large or involved the project, or how ambitious the web site or application.  While this particular client poured a great deal of effort and expertise into optimising the performance of their back-end systems, the browser technologies were not given the same kind of &lt;a href=&#34;http://stevesouders.com/hpws/rules.php&#34; title=&#34;High Performance Web Sites&#34;&gt;care and attention&lt;/a&gt;. This is huge (and common) missed opportunity to &lt;a href=&#34;http://www.stevesouders.com/blog/2010/05/07/wpo-web-performance-optimization/&#34; title=&#34;WPO &amp;#8211; Web Performance Optimization | High Performance Web Sites&#34;&gt;optimise where it really matters&lt;/a&gt;.  They exclaimed to us &amp;#8220;oh, you treat JavaScript like a real, first-class language!&amp;#8221;. I&amp;#8217;m no stranger to hearing people look upon JavaScript as something that is supplementary, or a bit of a play thing, and the power and approachability of jQuery has made many people think that good JavaScript is easy, because they can make things happen with little&amp;nbsp;code. 
&lt;/p&gt;
&lt;p&gt;
    The truth is that doing this right takes just as much care and skill as any other kind of software engineering, and without the proper process, the proper approach, or the proper standards, you&amp;#8217;ll often be creating a weaker user experience, and setting up a train-wreck for you to fix just around the&amp;nbsp;corner.
&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/toyotauk/4711057629/in/photostream/&#34;&gt;Toyota&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;UK&lt;/span&gt;&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Social media did not cause the London riots</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/social-media-did-not-cause-the-london-riots"/>
            <updated>2011-08-09T10:00:00Z</updated>
            <published>2011-08-09T10:00:00Z</published>
            <id>/blog/social-media-did-not-cause-the-london-riots</id>
                        <category   scheme="/blog/tags"
                        term="observations"
                        label="Observations" />
                        <category   scheme="/blog/tags"
                        term="london"
                        label="London" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/london-cleanup.jpg&#34; /&gt;&lt;p class=&#34;excerpt&#34;&gt;
    It seems to me that this is the time for some responsibility. In the face of the kind of &lt;a href=&#34;http://www.bbc.co.uk/news/uk-england-london-14450248&#34; title=&#34;BBC News - Further riots in London as violence spreads across England&#34;&gt;civil unrest that we have witnessed&lt;/a&gt; in the &lt;span class=&#34;caps&#34;&gt;UK&lt;/span&gt; over the last few days, starting in north London and spreading to many other areas across the city and then to other cities we must have a return to responsible behaviour.  I&amp;#8217;m not just talking about the people turning to criminal acts, young and old, men and women, but also about, &lt;em&gt;specifically&lt;/em&gt; about, the&amp;nbsp;media.
&lt;/p&gt;&lt;p&gt;
    It&amp;#8217;s easy to watch the footage playing in a depressingly lengthening loop and simply shout at the idiots looting, mugging and destroying. I know, because that&amp;#8217;s what I have been doing into the early hours of the morning.  But the media needs to be careful. The apparent need to fill the airwaves with an uninterrupted stream of coverage as the disgraceful activities unfolded has lead to presenters resorting to delivering noise rather than&amp;nbsp;facts.
&lt;/p&gt;
&lt;p&gt;
    I quickly grew weary of hearing late-night presenters struggling for content as they provided the narrative for the pictures of buildings burning and angry mobs.  They seemed content to say things that had clearly not been verified or even widely suggested in order to fill the silence until the next link. Rumour and elevated anxiety easily get fuelled that&amp;nbsp;way.
&lt;/p&gt;
&lt;p&gt;
    But I&amp;#8217;m also annoyed to see a familiar, small-minded piece of commentary surface again.  That is one that lays blame at the feet of social media and technology.  Throw-away bits of commentary about the mob coordinating over Blackberry messaging, or spreading over Twitter quickly get repeated, embellished, compounded, and then before we know it, are being viewed as causes of the riots rather than simply communications mediums just like telephones or television. Headlines like &amp;#8220;&lt;a href=&#34;http://wallblog.co.uk/files/2011/08/Suntwitterriots.jpg&#34;&gt;Nail the Twitter rioters&lt;/a&gt;&amp;#8221; demonstrate an ignorance and a disregard for responsible journalism which is all too&amp;nbsp;familiar.
&lt;/p&gt;
&lt;p&gt;
    I&amp;#8217;ve noticed that a few people (on twitter, as it happens) are beginning to ask the important question of &amp;#8220;why are these people rioting&amp;#8221;. Let&amp;#8217;s not fool ourselves that this is because of a police shooting. A protest does not equal a wide-spread riot complete with looting and the mugging of anyone seen carrying an expensive phone.  But there is an underlying reason for this kind of civil unrest beyond the obvious observation that &amp;#8220;they are a bunch of&amp;nbsp;thugs&amp;#8221;.
&lt;/p&gt;
&lt;p&gt;
    I digress. The point I wanted to make is that these riots were not caused by the existence of social media. I watched the &lt;span class=&#34;caps&#34;&gt;ITV&lt;/span&gt; news as it began demonising social media and casting it as that &lt;em&gt;thing that the hooded youths of today use to coordinate their shop lootings and happy-slappings&lt;/em&gt;.  This kind of suggestion seems to me like saying that photography is bad because it is responsible to pornography, computers are bad because they lead to piracy, or that telephones are bad because they let terrorist communicate. (&lt;span class=&#34;caps&#34;&gt;ITV&lt;/span&gt; news went on to ask viewers to keep them in the loop via&amp;nbsp;Twitter!)
&lt;/p&gt;
&lt;p&gt;
    The immeasurable good that has come from enabling communication in our society on this kind of scale seems so quickly forgotten when commentators are looking for a fashionable sound-bite, or a convenient place to direct some blame.  A few small examples off the top of my (sleep deprived) head of more positive examples of modern media&amp;nbsp;usage:
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Raising awareness of countless charity and fundraising events with &lt;a href=&#34;http://twitter.com/#!/search/justgiving&#34; title=&#34;Mentions of JustGiving on Twitter&#34;&gt;JustGiving via&amp;nbsp;twitter&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Spreading the awareness of official campaigns and charities such as &lt;a href=&#34;http://twitter.com/#!/SavetheChildren&#34; title=&#34;Save the Children on Twitter&#34;&gt;Save the&amp;nbsp;children&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/#!/LAFD&#34; title=&#34;LAFD on Twitter&#34;&gt;Fire&lt;/a&gt; &lt;a href=&#34;http://twitter.com/#!/CALFIRESANDIEGO&#34; title=&#34;CALFIRESANDIEGO on Twitter&#34;&gt;departments&lt;/a&gt; and &lt;a href=&#34;http://www.wired.com/threatlevel/2007/10/firsthand-repor/&#34; title=&#34;Firsthand Reports From California Wildfires Pour Through Twitter  | Threat Level | Wired.com&#34;&gt;individuals&lt;/a&gt; in the &lt;span class=&#34;caps&#34;&gt;US&lt;/span&gt; distributed updates to at risk communities during the California wild fires when other infrastructure&amp;nbsp;failed&lt;/li&gt;
    &lt;li&gt; I also love this little idea that places some stock in people being basically decent. &lt;a href=&#34;http://latimesblogs.latimes.com/technology/2011/08/starbucks-card-jonathan-stark.html&#34; title=&#34;LA Times: Jonathan Stark wants you to use his Starbucks card&#34;&gt;Jonathan Stark decided to share his Starbucks card&lt;/a&gt; and allowed anyone to either use it to buy coffee, or to top up the balance as a gift for the next person. Shared via &lt;a href=&#34;http://jonathanstark.com/card/&#34; title=&#34;Get a coffee, give a coffee - Jonathan&#39;s Card&#34;&gt;his site&lt;/a&gt; and &lt;a href=&#34;http://twitter.com/#!/jonathanscard&#34; title=&#34;@jonathanscard on Twitter&#34;&gt;on twitter&lt;/a&gt;, I find this a rather heart warming experiment which, while being a tiny thing, reminds us that we can use these tools to be generous and trusting. and not just&amp;nbsp;cynical. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Indeed the overwhelming response from people coordinating on the likes of twitter to engage in an effort to &lt;a href=&#34;http://wallblog.co.uk/2011/08/09/two-sides-to-social-networks-and-the-riots-sun-calls-to-nail-twitter-rioters-as-riotcleanup-trends/&#34; title=&#34;Two sides to social networks: Sun calls to nail &amp;lsquo;Twitter rioters&amp;rsquo; as riotcleanup trends | The Wall Blog&#34;&gt;clean up after the riot&lt;/a&gt; should be an indication not only that there is a will and solidarity in the communities effected, but also that &lt;a href=&#34;http://twitter.com/#%21/search?q=%23riotcleanup&#34; title=&#34;#riotcleanup on Twitter&#34;&gt;people are using&lt;/a&gt; the tools available to them for&amp;nbsp;good.
&lt;/p&gt;
&lt;p&gt;
    Let&amp;#8217;s keep the focus here on what the problem is, and not direct out fear towards the infrastructure that supports not just the activities of thugs and vandals, but also police departments, fire services, hospitals, journalists and the rest of&amp;nbsp;us.
&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://twitpic.com/63d9bu&#34;&gt;http://twitpic.com/63d9bu&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Getting started with Node at AsyncJS</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/getting-started-with-node-at-asyncjs"/>
            <updated>2011-05-27T10:00:00Z</updated>
            <published>2011-05-27T10:00:00Z</published>
            <id>/blog/getting-started-with-node-at-asyncjs</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="talks"
                        label="Talks" />
                        <category   scheme="/blog/tags"
                        term="nodejs"
                        label="Nodejs" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/getting-started-with-node-at-asyncjs.jpg&#34; alt=&#34;Getting started with NodeJS&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Yesterday I had the pleasure of talking about &lt;a href=&#34;http://nodejs.org&#34;&gt;Node&lt;/a&gt; at &lt;a href=&#34;http://asyncjs.com/intro-nodejs/&#34;&gt;AsyncJS&lt;/a&gt;&lt;a&gt;&lt;/a&gt;, a meetup of smart and motivated developers and tech enthusiasts in&amp;nbsp;Brighton.
&lt;/p&gt;&lt;p&gt;Async, which is organised by &lt;a href=&#34;http://twitter.com/premasagar&#34;&gt;Premasagar Rose&lt;/a&gt; of &lt;a href=&#34;http://dharmafly.com&#34;&gt;Dharmafly&lt;/a&gt; fame meets every 2 weeks and is a regular haunt for members of Brighton&amp;#8217;s thriving technology community. My talk on Node is not the first on the topic at Async, which has already seen great sessions from &lt;a href=&#34;http://asyncjs.com/nodejs/&#34;&gt;Simon Willison&lt;/a&gt; and &lt;a href=&#34;http://asyncjs.com/express/&#34;&gt;Alex Young&lt;/a&gt;, but focused on getting started with Node.js and looked at some of the tools created by the Node community to help ease&amp;nbsp;development.&lt;/p&gt;
&lt;p&gt;The slides from my talk are available now on &lt;a href=&#34;http://www.slideshare.net/philhawksworth/getting-started-with-developing-nodejs&#34;&gt;Slideshare&lt;/a&gt; or to download as a &lt;a href=&#34;http://static.hawksworx.com/asyncjs-nodejs.pdf&#34;&gt;&lt;span class=&#34;caps&#34;&gt;PDF&lt;/span&gt;&lt;/a&gt;. The complete &lt;a href=&#34;http://static.hawksworx.com/asyncjs-nodejs.key&#34;&gt;Keynote presentation&lt;/a&gt; is available for download too, but weighs in at a hefty &lt;span class=&#34;caps&#34;&gt;182MB&lt;/span&gt; due to some animated&amp;nbsp;screen-captures.&lt;/p&gt;&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/hinkelstone/2765597758/&#34;&gt;Karl-Ludwig&amp;nbsp;Poggemann&lt;/a&gt;
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Developing a side project</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/developing-a-side-project"/>
            <updated>2011-05-09T10:00:00Z</updated>
            <published>2011-05-09T10:00:00Z</published>
            <id>/blog/developing-a-side-project</id>
                        <category   scheme="/blog/tags"
                        term="news"
                        label="News" />
                        <category   scheme="/blog/tags"
                        term="observations"
                        label="Observations" />
                        <category   scheme="/blog/tags"
                        term="projects"
                        label="Projects" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/include_beer.jpeg&#34; alt=&#34;Include Beer&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    One of the nice things about being a web developer today, is that thanks to the incredibly low cost of resilient, scalable hosting infrastructure, and the abundance of free tools and technologies, you are empowered to create things and release them to the a huge audience. You can experiment with much less risk than ever before. We are seeing evidence of this with so many entrepreneurs and startups entering the market. Some more successfully than&amp;nbsp;others. 
&lt;/p&gt;
&lt;p&gt;
    Thanks to this low cost of innovation, conversations in pubs between friends who have the right set of skills can quickly flourish into exciting and viable products (or indeed, display the inner madness of their creators and become curiosities or simply be&amp;nbsp;overlooked.)
    &lt;/p&gt;
&lt;p&gt;
    One such pub-based conversation for me has lead to my working on something with a few friends to build something that we each felt would scratch our common itch. Funnily enough it was around the subject of pubs and bars (we do think about other things, honestly) that we felt there was a missing resource. I&amp;#8217;ll come back to what we felt that was in a moment, but there was a more essential point to our discussions. That was that we all felt a similar frustration in not being able to exert our skills to pursue so many of the ideas that we each had.  We&amp;#8217;re all familiar with the maxim that ideas are cheap, and that the value lies in the execution.  I&amp;#8217;m a strong believer in that and indeed many of us are brimming with ideas for things that we&amp;#8217;d like to make if only we had more time, money, development skills, design skills or what have&amp;nbsp;you.
&lt;/p&gt;
&lt;p&gt;
    The most common missing commodity in this situation seems to be time. We all have busy day jobs which are not conducive to the pursuit of the vast majority of out &amp;#8220;big ideas&amp;#8221;. Individually, we may not have the requisite skills to realise many of these fanciful ambitions. Together, we can take it&amp;nbsp;on.
&lt;/p&gt;
&lt;p&gt;
    Our view was that a small, &lt;a href=&#34;http://weavemadethis.com&#34; title=&#34;Weave&#34;&gt;carefully assembled group&lt;/a&gt; with the right motivation and ambition, could coalesce around their ideas and do a pretty good job of going off to simply create things. Freed from the constraints of supporting an existing business with ambitions in different direction, and servicing clients, we decided that as an experiment, for our own satisfaction, and mostly to simply satisfy a need that we felt, we would work together in our spare time to &amp;#8216;make&amp;nbsp;stuff&amp;#8217;.
&lt;/p&gt;
&lt;p&gt;
    So that is what we are doing. We are just making things that we wish existed already. For now, it&amp;#8217;s just for fun. And boy, is it&amp;nbsp;ever!
&lt;/p&gt;
&lt;p&gt;
    Our first project, which I promised, I&amp;#8217;d return to, is very much in its infancy but starting to shape up nicely.  We&amp;#8217;re entering an already crowded space, that of finding and reviewing pubs and bars, where we think we can do a better job. The &lt;span class=&#34;caps&#34;&gt;UK&lt;/span&gt;, where we are based has many pub review websites and indeed Google have recently started to make it easier to find pubs and bars by the reviews of patrons, but we just don&amp;#8217;t think the experience of using them, or the quality of the data is good&amp;nbsp;enough.
&lt;/p&gt;
&lt;p&gt;
    And so, we&amp;#8217;ve begun work on a project which makes use of mobile devices, geolocation, carefully designed user-generated content and lots of other fun (and occasionally buzzword-heavy)&amp;nbsp;things.
&lt;/p&gt;
&lt;p&gt;
    I&amp;#8217;ll be talking about this more as it progresses, but for now, I&amp;#8217;m just loving getting my hands dirty with building something for the Web. I don&amp;#8217;t do as much hands on development these days as I used to, so it feels good. Working with &lt;a href=&#34;http://djangoproject.com/&#34;&gt;Django&lt;/a&gt;, &lt;a href=&#34;http://jquerymobile.com/&#34;&gt;JQuerymobile&lt;/a&gt;, &lt;a href=&#34;http://docs.fabfile.org/&#34;&gt;Fabric&lt;/a&gt;, &lt;a href=&#34;http://vagrantup.com/&#34;&gt;Vagrant&lt;/a&gt;, &lt;a href=&#34;http://aws.amazon.com/&#34;&gt;Amazon &lt;span class=&#34;caps&#34;&gt;AWS&lt;/span&gt;&lt;/a&gt;, &lt;a href=&#34;http://www.pivotaltracker.com&#34;&gt;PivotalTracker&lt;/a&gt;, &lt;a href=&#34;http://github.com&#34;&gt;Github&lt;/a&gt; and other things on our own terms, and to satisfy goals that we ourselves have set, is fun and&amp;nbsp;exciting.
&lt;/p&gt;
&lt;p&gt;
    I hope to be able to share more details as we approach a usable beta. Things can move along quickly when you are your own customer. Even if you only have evenings and weekends to work towards you&amp;nbsp;target.
&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/crashmaster/3733005619/in/photostream/&#34;&gt;Mike&amp;nbsp;Hoff&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">The next generation stack. Is NodeJS ready to go mainstream?</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/the-next-generation-stack-is-nodejs-ready-to-go-mainstream"/>
            <updated>2010-09-10T10:00:00Z</updated>
            <published>2010-09-10T10:00:00Z</published>
            <id>/blog/the-next-generation-stack-is-nodejs-ready-to-go-mainstream</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="nodejs"
                        label="Nodejs" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/the-next-generation-stack-is-nodejs-ready-to.png&#34; alt=&#34;nnnn - the node stack&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    I&amp;#8217;ve been building things with web technologies professionally for a little more than 11 years now. In that time, I&amp;#8217;ve used a variety of technology stacks with varying degrees of success and comfort.  While at university, I was making use of the faculty infrastructure and so was building the simplest of sites on top of Apache on their unix environment. Then as I moved into developing Web applications for a living, I found myself working on Windows &lt;span class=&#34;caps&#34;&gt;NT&lt;/span&gt; servers with &lt;span class=&#34;caps&#34;&gt;IIS&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;ASP&lt;/span&gt;. Later on I moved into using the &lt;span class=&#34;caps&#34;&gt;LAMP&lt;/span&gt; stack, which after the initial shock to the system, was a revelation and I have never looked&amp;nbsp;back.
&lt;/p&gt;
&lt;p&gt;This combination of Linux, Apache, MySQL and &lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt; is a tried and tested technology stack which is powerful, available and free.  No wonder then, that it has become the first choice of so many web developers.  I&amp;#8217;ve seen a swing in the default technology stack from Windows over to &lt;span class=&#34;caps&#34;&gt;LAMP&lt;/span&gt; and have become comfortable in the &lt;span class=&#34;caps&#34;&gt;LAMP&lt;/span&gt; world with it&amp;#8217;s &lt;span class=&#34;caps&#34;&gt;GUI&lt;/span&gt; free interfaces, consistent and repeatable operations through &lt;span class=&#34;caps&#34;&gt;SSH&lt;/span&gt; and so&amp;nbsp;on.&lt;/p&gt;
&lt;p&gt;The stage is set though, I think, for a new stack to emerge.  The amount of work taking place on &lt;a href=&#34;http://nodejs.org&#34; title=&#34;NodeJS&#34;&gt;NodeJS&lt;/a&gt;, both on the framework itself and utilising it to build high performance web applications is really impressive.  NodeJS really is causing quite a buzz in the Web development community, not just because it is so performant, but also because it enables Javascript developers to expand into writing the server-side application support that their web apps need, without leaving the comfortable world of Javascript. Very empowering&amp;nbsp;stuff.&lt;/p&gt;
&lt;p&gt;Through the work that we are doing with NodeJS, we are adopting a common usage pattern.  NodeJS can provide its own http server, and we tend to have several NodeJS projects being served on a single box.  These can all make use of different versions of NodeJS if necessary (via the handy &lt;a href=&#34;http://github.com/visionmedia/ndistro/&#34; title=&#34;nDistro&#34;&gt;nDistro&lt;/a&gt; distribution model) each publishing on its own port. We then proxy requests to those NodeJS servers through either &lt;a href=&#34;http://http.apache.org&#34;&gt;Apache&lt;/a&gt; or &lt;a href=&#34;http://nginx.net&#34;&gt;Nginx&lt;/a&gt;.  This brings me to my point. A stack that I now commonly employ looks less&amp;nbsp;like:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Linux&lt;/li&gt;
    &lt;li&gt;Apache&lt;/li&gt;
    &lt;li&gt;mySQL&lt;/li&gt;
    &lt;li&gt;&lt;span class=&#34;caps&#34;&gt;PHP&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and more&amp;nbsp;like:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Not&amp;nbsp;Windows&lt;/li&gt;
    &lt;li&gt;Nginx&lt;/li&gt;
    &lt;li&gt;noSQL&lt;/li&gt;
    &lt;li&gt;NodeJs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;m not just trying to be antagonistic by stating &amp;#8220;Not Windows&amp;#8221;. Yes, this is a conceit in order to wangle nnnn or 4N or whatever, but the real point is that all of the pieces of the puzzle work beautifully on various flavours of Linux, Unix and &lt;span class=&#34;caps&#34;&gt;OSX&lt;/span&gt;. Windows, less so.  I&amp;#8217;m going to be using this &amp;#8216;4N&amp;#8217; stack for more an more projects now, and as some big players start taking a more serious look at using Node and Nginx, I think that it will become more and more&amp;nbsp;common.&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;&lt;/p&gt;
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Hitched</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/hitched"/>
            <updated>2010-07-27T10:00:00Z</updated>
            <published>2010-07-27T10:00:00Z</published>
            <id>/blog/hitched</id>
                        <category   scheme="/blog/tags"
                        term="personal"
                        label="Personal" />
                        <category   scheme="/blog/tags"
                        term="announcements"
                        label="Announcements" />
                        <category   scheme="/blog/tags"
                        term="news"
                        label="News" />
            
            <content type="html">
                                &lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;/media/images/hitched-beam.jpeg&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    After more than 14 wonderful years with my girlfriend, Verity, last weekend we finally tied the&amp;nbsp;knot.
&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s hard to put into words just how excited I was to finally get to enjoy our wedding day with so many of our family and friends and there is a risk that this post could become a sprawling gush-a-thon. I&amp;#8217;ll try not to do that. You can take my gushing and delight as read. I do want to take a moment to acknowledge the effort that so many people put into making our day so fabulous though, and perhaps mention a few&amp;nbsp;highlights.&lt;/p&gt; &lt;/p&gt;
&lt;p&gt;Verity and I were married in the lovely little &lt;a href=&#34;http://www.flickr.com/photos/psd/4804940489/in/set-72157624404129727/&#34; title=&#34;St Leonard&#39;s on Flickr - Photo Sharing!&#34;&gt;church&lt;/a&gt; in Horringer near Bury St Edmunds before a reception at the &lt;a href=&#34;http://www.ickworthwestwing.co.uk/&#34; title=&#34;The West Wing at Ickworth&#34;&gt;West Wing at Ickworth House&lt;/a&gt;. I was surprised at how my nerves didn&amp;#8217;t really manage to rise too much while I was waiting at the church but the fun of greeting dear family and friends as they arrive with huge smile on their faces seems to chase the butterflies away. The downside of that is that (just as everyone had advised me) the time was flying by before I had realised the day had even&amp;nbsp;begun.&lt;/p&gt;

&lt;p&gt;A running joke among our friends is how Verity is often late to social engagements, so there was a lot of banter around how long she would keep me waiting. Happily, she was only a fashionable 10 minutes late (or so I&amp;#8217;m told, I was too busy soaking up the atmosphere to start looking at my watch). In that time I was incredibly well supported and attended by my best man, my brother Stephen.  A quick tip - a best man who has already been through a wedding of his own has some great little insights which can really help as you arrive at the church and prepare for your big&amp;nbsp;moment.&lt;/p&gt;

&lt;p&gt;Nothing, however, prepared me for the moment I saw Verity arrive at the church and make her way up the aisle towards me.&amp;nbsp;Breathtaking.&lt;/p&gt;

&lt;p&gt;From my vantage point, the ceremony seemed to be fun and spirited while being sincere and weighty. A difficult balance to strike so I was delighted with how well Rev Sue Nutt did. She made it really enjoyable. It also helps that when you turn and glance around at the congregation, you see nothing but the beaming faces of friends and family. (&amp;#8230;and I said I wouldn&amp;#8217;t gush!). We had memorable readings from Verity&amp;#8217;s brother Mark, sister-in-law Faith (ably assisted by niece and nephew Molly and Stan), and my sister Claire. All of which had special and poignant moments for both Verity and&amp;nbsp;I.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;/media/images/hitched-leaving.jpeg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;The sun came out to welcome us out of the church and we spent quite a few happy moments chatting to everyone on the green before climbing into a carriage, feeling like royalty, for the short journey up to Ickworth House where we were greeted by our lovely &lt;a href=&#34;http://www.flickr.com/photos/psd/4804975779/in/photostream/&#34; title=&#34;Master of the Toast on Flickr&#34;&gt;Toastmaster&lt;/a&gt;, Colin.  Colin really helped to keep things running roughly to schedule and looked like quite the bobby&amp;nbsp;dazzler.&lt;/p&gt;

&lt;p&gt;The next part of the day went by in the blink of an eye.  We had our group photos taken in the grounds of the West Wing. Meanwhile a local brass band provided some music while the canapes were supplemented by an &lt;a href=&#34;http://www.icicletricycle.co.uk/&#34; title=&#34;Icicle Tricycle&#34;&gt;ice cream bike&lt;/a&gt; serving ice cream to the kids (and the adults).  I would have loved to spend a good long time mingling at this point, but this was our time to gather groups for the photos. Our awesome ushers did a great job of that, which helped keep things moving&amp;nbsp;quickly.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;/media/images/hitched-groomsmen.jpeg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;When looking for a photographer, I was quite specific about the kind of style and quality that I was looking for.  Being a little less organised than I would have liked meant that we didn&amp;#8217;t find quite what we were looking for in the area and so widened the search a little. At the time of writing, we&amp;#8217;ve only seen a few &lt;a href=&#34;http://www.barriedownie.com/index.php/wedding-photography/verity-phils-wedding-at-ickworth-house-suffolk/&#34; title=&#34;Verity &amp;amp; Phil&amp;rsquo;s wedding at Ickworth House Suffolk &amp;raquo; wedding and portrait photographer London, Sussex, Surrey, Hampshire&#34;&gt;sneaky peeks&lt;/a&gt; at the photos, but the signs are really good. We couldn&amp;#8217;t have been happier with the friendly and talented &lt;a href=&#34;http://www.barriedownie.com/&#34; title=&#34;Barrie Downie photography&#34;&gt;Barrie Downie&lt;/a&gt; who directed us really well, clearly loved his job and has an amazing eye.  It never felt like Barrie was dominating the proceedings and was really sensitive to what was important to&amp;nbsp;us.&lt;/p&gt;

&lt;p&gt;While I&amp;#8217;m talking about people who did an amazing job for us, we were just delighted with our florist, Zoe Mills. Zoe is from the area and operates under the great name of &lt;a href=&#34;http://millsandbloom.com/&#34; title=&#34;Mills and Bloom - Florists based in Diss, Norfolk, UK&#34;&gt;Mills and Bloom&lt;/a&gt;.  Zoe was just fantastic and we&amp;#8217;d eagerly recommend her. She seemed genuinely excited for us and about the details of the &lt;a href=&#34;http://www.flickr.com/photos/psd/4805581012/in/set-72157624404129727/&#34; title=&#34;Bouquet on Flickr&#34;&gt;flowers&lt;/a&gt; as they developed.  That kind of excitement and calm in the run up to the day was really helpful and energising for us.  She carefully listened to all of our requests and added her own insights and considerable knowledge to really bring things to life. Thanks&amp;nbsp;Zoe!&lt;/p&gt;

&lt;p&gt;Castleton Brass, the &lt;a href=&#34;http://www.icicletricycle.co.uk/&#34; title=&#34;Icicle Tricycle&#34;&gt;Icicle Tricycle&lt;/a&gt; and the staff at Ickworth House were all wonderfully helpful and&amp;nbsp;friendly.&lt;/p&gt;

&lt;p&gt;With guests seated and ready for some grub, Verity and I got to make our entrance and make our way to our seats to loud applause.  Having gobby enthusiastic friends guarantees you a generous and exciting entrance. It. Was.&amp;nbsp;Awesome.&lt;/p&gt;

&lt;p&gt;We opted to have our speeches before we ate, which certainly helped me enjoy my food all the more without my nerves mounting as the moment approached. As it turns out, far from being particularly nervous at this point, I was actually more excited to get the chance to thank everyone and say some things that were important to me.  I firmly believe that you can&amp;#8217;t get a warmer, more receptive audience than at your wedding and you can&amp;#8217;t go far wrong as the groom if you are just sincere. It felt wonderful.  My father-in-law, Keith gave an excellent, warm speech which got me settled for mine. My brother Stephen gave an absolutely remarkable best man speech which he set up and delivered entirely as rhyming couplets. Full of moments to make me cringe, everyone laugh, and many of us cry it was, frankly,&amp;nbsp;legendary.&lt;/p&gt;

&lt;p&gt;The food was followed by drinking, chatting and dancing. All of which went by too quickly. Verity and I opted for a combination of a home made playlist (the contents of which had been largely crowd-sourced from all of the guests) to provide some quality, wedding-grade cheese, and a live band to provide some funk.  My good friend Nigel plays the bass in an excellent band called &lt;a href=&#34;http://www.clubsoulband.com/&#34; title=&#34;Club Soul // London&#39;s hottest Funk / Soul / Jazz act for your event&#34;&gt;Club Soul&lt;/a&gt; who were absolutely amazing and packed the dance floor immediately and for the duration. Another hearty&amp;nbsp;recommendation.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;/media/images/hitched-dancing.jpeg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;Another detail which was important to us was that ours should be a child friendly wedding. So many of our friends have young kids now and our family has grown over the years to include kids and teenagers of all ages who we couldn&amp;#8217;t imagine the day without. We debated for a while about whether or not a creche service, which had been recommended to us, would be worth the effort. I argued that people might not want their kids vanishing into the adjoining room to be monitored by strangers, and that they might feel like their kids weren&amp;#8217;t being included. Verity thought that many people would find it useful and that having the option would give several of our important friends the opportunity to spend more time celebrating with us, and prolong their evening.  Boy oh boy, was Verity right!  We used a group called &lt;a href=&#34;http://www.artfullsplodgers.com/award-winning-creche.html&#34; title=&#34;A totally stress free wedding with a creche from Artfull Splodgers&#34;&gt;Artful Splodgers&lt;/a&gt; who did a fantastic job. Kids of all ages were being entertained with all manor of crafts and activities and they were totally engaged. Several of our friends gave us enthusiastic hugs and thanks specifically for the creche which worked perfectly. For a wedding which had so very many children in attendance, there was no disruption during the speeches, no drama from anyone getting &amp;#8220;over tired&amp;#8221; and yet we got to enjoy the company of lots of excited kids who were keen to show us the latest things that they had made. Yet another&amp;nbsp;recommendation!&lt;/p&gt;

&lt;p&gt;All too soon, the night wound to an end and after saying some emotional goodbyes, we retired to the &lt;a href=&#34;http://www.theangel.co.uk/&#34; title=&#34;The Angel Hotel, Suffolk&#34;&gt;Angel Hotel&lt;/a&gt; in Bury St Edmunds with a handful of friends who were also staying there. We, the final few, chatted away over a bottle or two of fizz until well into the early hour before our eyelids got too heavy to&amp;nbsp;manage.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;/media/images/hitched-sunrise.jpeg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;Verity and finally came to terms with the fact that we wrung every last drop out of the day and headed for bed around 4am and spent the next hour sitting in the window of the hotel watching the sun rise over Bury St Edmunds&amp;#8217; Abbey Gate excitedly recounting the day. I think that we&amp;#8217;ll be boring people with details, highlights and &lt;a href=&#34;http://www.flickr.com/photos/tags/pvwed/&#34; title=&#34;Flickr photos tagged &#39;pvwed&#39;&#34;&gt;photos&lt;/a&gt; for a very, very long time to&amp;nbsp;come.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;/media/images/hitched-pose.png&#34; /&gt; &lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Nodejs. I just have to use it for something</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/nodejs-i-just-have-to-use-it-for-something"/>
            <updated>2010-02-15T10:00:00Z</updated>
            <published>2010-02-15T10:00:00Z</published>
            <id>/blog/nodejs-i-just-have-to-use-it-for-something</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="jquery"
                        label="Jquery" />
                        <category   scheme="/blog/tags"
                        term="nodejs"
                        label="Nodejs" />
                        <category   scheme="/blog/tags"
                        term="mashups"
                        label="Mashups" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/nodejs.png&#34; alt=&#34;Getting started with NodeJS&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
  A little while ago, inspired by &lt;a href=&#34;http://simonwillison.net/2009/Nov/23/node/&#34;&gt;Simon Willison&lt;/a&gt;&amp;#8216;s demo of &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt; at the &lt;a href=&#34;http://2009.full-frontal.org/&#34;&gt;FullFrontal&lt;/a&gt; conference, I felt the urge to make something, anything, using Nodejs. &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt; gives lightening fast, event driven &lt;span class=&#34;caps&#34;&gt;IO&lt;/span&gt; with Javascript running server-side in the rather nippy &lt;a href=&#34;http://code.google.com/p/v8/&#34;&gt;V8&lt;/a&gt; Javascript engine. Until &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt;, I hadn&amp;#8217;t seen much need to bring Javascript to the server other than for testing and as a bit of a novelty. &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt; changed all of&amp;nbsp;that.
&lt;/p&gt;
&lt;p&gt;
    Built by &lt;a href=&#34;http://tinyclouds.org/&#34;&gt;Ryah Dahl&lt;/a&gt; with a strict philosophy that none of its procedures should ever perform a blocking operation, it has a single threaded architecture and relies heavily on the use of a single event loop. Anyone with a good knowledge of Javascript or even just a familiarity with &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; will be familiar with the pattern of event handlers, callbacks and closures needed to build some really rather powerful things, quickly and easily with &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt;. For my part, I just wanted to make something to explore the ease in which &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt; could support comet-style long polling for some real-time, collaborative task. The Web is already getting flooded with examples of &lt;a href=&#34;http://chat.nodejs.org/&#34;&gt;chat rooms&lt;/a&gt; and &lt;span class=&#34;caps&#34;&gt;IRC&lt;/span&gt; servers built with &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt;, but I really wanted to make something that felt like a real web application, not an&amp;nbsp;example.
&lt;/p&gt;
&lt;p&gt;
    To that end, I resurrected an old idea which I first built circa 1999 for randomly choosing someone from a list to make the tea. Not earth-shattering, but a bit of fun and simple enough for me to see through to completion. For this incarnation, dubbed &lt;a href=&#34;http://teafr.com&#34;&gt;Teafr.com&lt;/a&gt;, I piggybacked on the lists feature of &lt;a href=&#34;http://twitter.com/philhawksworth/tea-buddies&#34;&gt;Twitter&lt;/a&gt; to allow people to create and manage their lists of potential tea-makers somewhere they are already comfortable. &lt;a href=&#34;http://teafr.com&#34;&gt;My app&lt;/a&gt; would allow a user to recall a list of their choosing and then perform a lottery, selecting a winner (or loser) from the list at random. To add a little suspense (in the loosest possible sense) I added a basic animation which gradually got slower until the winner was&amp;nbsp;revealed.
&lt;/p&gt;
&lt;img src=&#34;/media/images/teafr-tea-rotas-from-twitter-lists.jpg&#34; /&gt;
&lt;p&gt;
    I captured a couple of &lt;a href=&#34;http://www.vimeo.com/8144420&#34;&gt;videos&lt;/a&gt; showing teafr.com doing its stuff, &lt;a href=&#34;http://www.vimeo.com/8457609&#34;&gt;one of them&lt;/a&gt; on an iPhone. The fun part of this for me was in allowing this lottery and the animation to be visible to everyone viewing the same list from wherever they are. &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt; makes it trivially simple to handle long-lived http requests so that all clients could listen out for the initiation of a new lottery event. Since this is all just lightweight &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt;, &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt;, &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; and Javascript, it also runs pretty nicely on both my iPhone and Palm&amp;nbsp;Pre.
&lt;/p&gt;
&lt;p&gt;
    It is rather satisfying to stand next to someone who is viewing the site on a desktop machine, and then start their screen animating with a quick tap on your handset. Cheap thrills, I know. It seems to me though, that the cheapness of the thrills is what is so exciting. I&amp;#8217;m no rocket scientist, and I managed to create this entire application, complete with real-time online views in a couple of evenings work. The short hop and low cognitive friction for a Javascript developer to be able to build these kind of things from end to end is incredibly liberating. I&amp;#8217;m bursting at the seams with ideas for things I want to build, and am now capable of building with a new, powerful and yet familiar tool set. The only detail which kept my new toy from the masses was having a suitable place to host&amp;nbsp;it.
&lt;/p&gt;
&lt;p&gt;
    I&amp;#8217;ve been using &lt;a href=&#34;http://www.dreamhost.com/r.cgi?381199&#34;&gt;Dreamhost&lt;/a&gt; for a while now and have to say that I&amp;#8217;m pretty happy with them, but even with the great level of control and access to your server that they give you, you need a little bit more control to compile and run &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt;. The easiest and cheapest way that I found to host &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt; powered site was with a dedicated virtual server. There is no shortage of providers in this space and as Web developers get more sophisticated, the use of this kind of solution is getting more commonplace. I opted for &lt;a href=&#34;http://www.linode.com/?r=afc3f1becba08eb0ab33f62818cc90f396979563&#34;&gt;Linode&lt;/a&gt; which is working out rather nicely for me, but equally, I could have plumped for a similar offering from &lt;a href=&#34;http://www.slicehost.com/&#34;&gt;Slicehost&lt;/a&gt; or &lt;a href=&#34;http://aws.amazon.com/&#34;&gt;Amazon Web Services&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    I&amp;#8217;ll soon migrate all of my sites onto the single Linux instance that they host for me. For now though, I need to resist the temptation to spend all of my spare time (ha!) noodling away with &lt;a href=&#34;http://nodesjs.org&#34;&gt;Nodejs&lt;/a&gt;, &lt;a href=&#34;http://www.mongodb.org&#34;&gt;MongoDB&lt;/a&gt;, &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; and various other fun things which &amp;#8216;speak Javascript&amp;#8217; that smart people on the Web keep on creating and selflessly sharing with the world for&amp;nbsp;free.
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/announcements"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/announcements</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/bbc"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/bbc</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/bbconline"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/bbconline</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/conferences"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/conferences</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/development"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/development</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/discussions"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/discussions</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/events"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/events</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/fullfrontalconf"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/fullfrontalconf</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/javascript"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/javascript</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/jquery"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/jquery</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/london"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/london</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/mashups"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/mashups</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/news"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/news</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/nodejs"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/nodejs</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/observations"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/observations</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/osmosoft"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/osmosoft</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/osx"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/osx</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/personal"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/personal</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/projects"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/projects</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/python"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/python</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/rga"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/rga</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/talks"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/talks</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/theteam"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/theteam</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/tiddlywiki"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/tiddlywiki</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/tips"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/tips</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/tools"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/tools</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/twitter"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/twitter</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html"></title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/tags/web"/>
            <updated>2010-01-01T00:00:00Z</updated>
            <published>2010-01-01T00:00:00Z</published>
            <id>/blog/tags/web</id>
            
            <content type="html">
                                            </content>
        </entry>
            <entry>
            <title type="html">In defense of IE6</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/in-defense-of-ie6"/>
            <updated>2009-08-10T10:00:00Z</updated>
            <published>2009-08-10T10:00:00Z</published>
            <id>/blog/in-defense-of-ie6</id>
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
                        <category   scheme="/blog/tags"
                        term="discussions"
                        label="Discussions" />
                        <category   scheme="/blog/tags"
                        term="observations"
                        label="Observations" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/defending-ie.jpg&#34; alt=&#34;In defense of IE6&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    No really! Read that title again. I&amp;#8217;m about to argue against placing so much blame for painful Web development at the door of Internet Explorer 6. I&amp;#8217;m not going try and claim that &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; isn&amp;#8217;t a huge pain in the arse of all good Web developers. Let&amp;#8217;s face it, Web developers &lt;a href=&#34;http://twitter.com/#search?q=ie6&#34; title=&#34;Twitter - search for IE6&#34;&gt;love to bitch&lt;/a&gt; about it, but I do think that it&amp;#8217;s time for some accountability.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
    The problem with &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; is simple. It has poor support for &lt;a href=&#34;http://www.webstandards.org/&#34;&gt;Web standards&lt;/a&gt;. It doesn&amp;#8217;t always correctly render valid &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt;, and requires nudging, tweaking and finagling in order to display the content in the desired way. Its interpretation of Javascript and interactions with the &lt;span class=&#34;caps&#34;&gt;DOM&lt;/span&gt; are also less than perfect. That&amp;#8217;s a pain, but does it really warrant such &lt;a href=&#34;http://iedeathmarch.org/&#34; title=&#34;IE Death March&#34;&gt;massive hatred&lt;/a&gt; from Web developers? As a Web developer, my first instinct would be to answer, &amp;#8216;well, yes&amp;#8217;. The cost of developing for &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; is &lt;a href=&#34;http://ejohn.org/blog/the-browsers-of-2009/&#34; title=&#34;John Resig -   The Browsers of 2009&#34;&gt;extraordinarily high&lt;/a&gt;, even when compared to the benefit from its market share, because it is such a horrible and time consuming&amp;nbsp;slog.
&lt;/p&gt;
&lt;p&gt;
    But hang on a moment.  The Web is something of a meritocracy. People tend to vote with their feet (or mice) and will abandon the weak experience in favor of the strong. Doesn&amp;#8217;t this concept stretch to the browser too? Surely if &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; was really that bad, people would have abandoned it and adopted a better, newer, more well behaved Web browser. Right? Yes and no. Many people have done exactly that. They have upgraded to &lt;a href=&#34;http://www.microsoft.com/windows/internet-explorer/ie7/&#34; title=&#34;Get Internet Explorer 7&#34;&gt;&lt;span class=&#34;caps&#34;&gt;IE7&lt;/span&gt;&lt;/a&gt;, &lt;a href=&#34;http://www.microsoft.com/windows/internet-explorer/default.aspx&#34; title=&#34;Internet Explorer 8: Home page&#34;&gt;&lt;span class=&#34;caps&#34;&gt;IE8&lt;/span&gt;&lt;/a&gt;, &lt;a href=&#34;http://www.mozilla.com/en-US/firefox&#34; title=&#34;Firefox web browser | Faster, more secure, &amp;amp; customizable&#34;&gt;Firefox&lt;/a&gt;, &lt;a href=&#34;http://www.apple.com/safari/&#34; title=&#34;Apple - Safari - Introducing Safari 4 - See the web in a whole new way&#34;&gt;Safari&lt;/a&gt;, &lt;a href=&#34;http://www.opera.com/&#34; title=&#34;Opera Browser | Faster &amp;amp; safer Internet | Free Download&#34;&gt;Opera&lt;/a&gt;, &lt;a href=&#34;http://www.google.com/chrome&#34; title=&#34;Google Chrome - Download a new browser&#34;&gt;Chrome&lt;/a&gt; or something else. Let&amp;#8217;s be honest, it isn&amp;#8217;t hard to find a better browser than &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; these days. But it isn&amp;#8217;t quite that simple.   First of all, not everyone who uses the Web really understands what A Web browser is. Many people just know that they click an icon to get to &amp;#8220;The Internet&amp;#8221; (by which they often mean Google) or directly to their email (by which they mean one of the many Web based email services).  Understanding that they could choose a different application which accesses hese services to perform these tasks is something of a cognitive leap.  Others realised that they could use a better browser and have upgraded the browser on their home computers, but at work they are locked in to using whatever the company &lt;span class=&#34;caps&#34;&gt;IT&lt;/span&gt; department dictates. Often, this means &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt;. Why is that?  This is my beef. It&amp;#8217;s not that &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; is &lt;a href=&#34;http://iedeathmarch.org/category/things-younger-than-ie6/&#34; title=&#34;Things Younger Than IE6 at IE Death March&#34;&gt;out-dated&lt;/a&gt; and &lt;a href=&#34;http://iedeathmarch.org/category/things-you-cant-do-in-ie6/&#34; title=&#34;Things You Can&amp;rsquo;t Do In IE6 at IE Death March&#34;&gt;substandard&lt;/a&gt; (although it is), but that large organisations have needed to lock users in to using an approved Web&amp;nbsp;browser.
&lt;/p&gt;
&lt;p&gt;
    Having worked in a few large organisations, I&amp;#8217;m no stranger to that scenario, and it&amp;#8217;s immensely frustrating to be a user forced to use something so sub-par, and to be required to support it when you are trying to build the Webs next new hotness. So why do they do that?  There can be many reasons, but the largest, and most difficult to dispute is actually of our own creation. We (the Web developers of the world) built expensive, bespoke Web applications for large enterprises and (naturally) ensured that they worked on the most popular browser of the time. Critically though, this was done without thought to how the code might perform in future, standards compliant browsers. In many cases, the code just wasn&amp;#8217;t future proof.  As a result we have applications and systems which depend being viewed in &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; in order to function. This represents a huge risk to many large companies who invested so heavily in their development, and have come to depend on the applications. It&amp;#8217;s little wonder that they force their employees to use&amp;nbsp;&lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt;.
&lt;/p&gt;
&lt;p&gt;
    Remember that this isn&amp;#8217;t just the fault of &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt;. There have been many poor browsers over the years, but thankfully, natural selection has let them disappear and allowed better browsers to take over. &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt; suffers from its own success. That is, it&amp;#8217;s market penetration.  Combine that with bad habits from developers and you have a browser which despite being left behind by &lt;a href=&#34;http://webaim.org/blog/user-agent-string-history/&#34;&gt;evolution&lt;/a&gt;, is artificially kept alive by large enterprises as if it were on a magical life-support machine.  I imagine that it would rather be left to die in&amp;nbsp;peace.
&lt;/p&gt;
&lt;p&gt;
    Surely then, we Web developers have learned our lesson. We&amp;#8217;re not going let something like that happen again are we? Staggeringly, after all the grumbling and pain, I see evidence that many of us haven&amp;#8217;t learned our lesson at all. We still write code which detects which browser is being used, before going on to specify behaviour accordingly. What we should be doing is testing for the support of our chosen implementation, then implementing accordingly. Think &lt;a href=&#34;http://www.quirksmode.org/js/support.html&#34; title=&#34;Javascript - Object detection&#34;&gt;object detection&lt;/a&gt;, not browser detection. That way, when a browser improves its support, or the user starts using a new browser, the application can enjoy the benefits, rather than just falling over.  I was particularly aggravated to learn how &lt;span class=&#34;caps&#34;&gt;IE8&lt;/span&gt; can be &lt;a href=&#34;http://www.microsoft.com/windows/internet-explorer/readiness/developers-new.aspx&#34; title=&#34;Internet Explorer 8 Readiness Toolkit&#34;&gt;set to render as if it were &lt;span class=&#34;caps&#34;&gt;IE7&lt;/span&gt;&lt;/a&gt;. With a meta tag to provide &amp;#8220;Internet Explorer 7 Compatibility&amp;nbsp;mode&amp;#8221;.
&lt;/p&gt; 
&lt;p&gt;
    Why would this feature exist? Microsoft explain that it is so that developers can opt for &amp;#8220;backwards compatibility with Internet Explorer 7 JavaScript and layout behavior&amp;#8221;. In other words, it exists to try and get around the fact that so many developers wrote code to satisfy the quirks of &lt;span class=&#34;caps&#34;&gt;IE7&lt;/span&gt; without a thinking about how their code would fail when the quality of the browser is improved (have better conformance with &lt;a href=&#34;http://www.w3.org/&#34; title=&#34;World Wide Web Consortium - Web Standards&#34;&gt;&lt;span class=&#34;caps&#34;&gt;W3C&lt;/span&gt; standards&lt;/a&gt; for &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt;).   Microsoft didn&amp;#8217;t want people to be resistant to upgrading to &lt;span class=&#34;caps&#34;&gt;IE8&lt;/span&gt; because of so many sites failing to render correctly in their shiny, new, more compliant browsers, so they provided a way to force the browser to continue to mis-interpret the code. I&amp;#8217;m afraid I have to call &amp;#8220;bull-shit&amp;#8221; on this practice. I think that all this does is create another wave of Web sites and applications which are likely to get stuck in non-compliance land and require old rendering engines and legacy browsers to be kept alive to server&amp;nbsp;them.
&lt;/p&gt;
&lt;p&gt;
    Only by developing for the rising tide of web standards, rather than the various quirks of specific browsers, can we hope to avoid locking our users in to a given browser. It&amp;#8217;s time to make sure that we don&amp;#8217;t get into this situation ever again. So next time you are tempted to grumble about &lt;span class=&#34;caps&#34;&gt;IE6&lt;/span&gt;, remember that you can help avoid a similar mess in future by developing with standards in&amp;nbsp;mind.
&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Image credit: &lt;a href=&#34;http://www.flickr.com/photos/robotjohnny/3629069606/&#34;&gt;John&amp;nbsp;Martz&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Using Quicksilver to control Last.fm</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/using-quicksilver-to-control-lastfm"/>
            <updated>2009-08-07T10:00:00Z</updated>
            <published>2009-08-07T10:00:00Z</published>
            <id>/blog/using-quicksilver-to-control-lastfm</id>
                        <category   scheme="/blog/tags"
                        term="osx"
                        label="Osx" />
                        <category   scheme="/blog/tags"
                        term="tips"
                        label="Tips" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/quicksilver_lastfm.jpg&#34; alt=&#34;Quicksilver and Last.fm&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    For a while, I&amp;#8217;ve been using handy &lt;a href=&#34;http://docs.blacktree.com/quicksilver/what_is_quicksilver&#34;&gt;Quicksilver&lt;/a&gt; triggers to control iTunes. I like not needing to switch my attention from what I&amp;#8217;m working on, in order to skip a track, pause the playback, set a rating or whatever.  You can find out &lt;a href=&#34;http://leafraker.com/2007/09/17/how-to-create-a-quicksilver-trigger/&#34;&gt;how to create a trigger&lt;/a&gt; from one of the many great Quicksilver tutorials out on the&amp;nbsp;Web.
&lt;/p&gt;
&lt;p&gt;
    At the moment though, I find myself listening to &lt;a href=&#34;http://last.fm&#34; rel=&#34;org fn url&#34;&gt;Last.fm&lt;/a&gt; more and more, and have been looking for a similar way to control the Last.fm application. I couldn&amp;#8217;t find a plugin for Quicksilver to achieve this so I set about writing an Applescript which I could trigger with Quicksilver.  I&amp;#8217;m not much of an Applescript whizz, but I managed to put the following script together to skip the track currently playing in the Last.fm&amp;nbsp;application:
&lt;/p&gt;&lt;/p&gt;
&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;k&#34;&gt;tell&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;application&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Last.fm&amp;quot;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;activate&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;k&#34;&gt;tell&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;application&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;System Events&amp;quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;k&#34;&gt;tell&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;process&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Last.fm&amp;quot;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&#34;nv&#34;&gt;click&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;menu&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Skip&amp;quot;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;menu&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Controls&amp;quot;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;menu&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;bar&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;tell&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;tell&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;AppleScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    After saving this in a suitable location (I have a Utils folder where I keep lots of scripts and utilities), I set a Quicksilver trigger to run the script. Simple!  Happy with the result, I created similar scripts for some other controls like love, ban, play and stop and assigned them all keyboard&amp;nbsp;triggers.
&lt;/p&gt;
&lt;p&gt;
     My only wish was that I could do this without giving Last.fm focus. Generally this is fine for my because I have it running in a second display, so it doesn&amp;#8217;t steal my attention, but it would be nice if I could get Applescript to execute the command without activating the application. I&amp;#8217;d welcome suggestions from anyone with more Applescript fu than&amp;nbsp;me.
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Flash v Web. Behind Enemy Lines</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/flash-v-web-behind-enemy-lines"/>
            <updated>2009-07-27T10:00:00Z</updated>
            <published>2009-07-27T10:00:00Z</published>
            <id>/blog/flash-v-web-behind-enemy-lines</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="web"
                        label="Web" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/flashvjs.png&#34; alt=&#34;Flash versus Javascript&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    &lt;span class=&#34;caps&#34;&gt;OK&lt;/span&gt;, I&amp;#8217;m being over dramatic, but sometimes it does feel like I&amp;#8217;m on a bit of a stealth mission. Pity that I forgot to bring any stealth! I&amp;#8217;ve been working here at &lt;a href=&#34;http://theteam.co.uk&#34; rel=&#34;org url&#34;&gt;The Team&lt;/a&gt; for 3 months now and am enjoying myself greatly, but there is an issue that challenges me on a daily basis. That is that we do a lot of Flash work here, and yet I&amp;#8217;m a big advocate of using &lt;a href=&#34;http://www.w3.org/&#34; rel=&#34;org url&#34;&gt;Open Web Technologies&lt;/a&gt;.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
    In the past I have ranted on and on about how The Web is better off when we build things out of Web technologies than from proprietary technologies which seal in the content, limiting opportunities to get at it. How do I reconcile that?  Well, The Team is not just a Web development agency. We are a brand communications agency who have a &lt;a href=&#34;http://theteam.co.uk/digital&#34; rel=&#34;org url&#34;&gt;digital&lt;/a&gt; arm. That digital arm (of which I am part) produce all sorts of output, and not all of it is destined for the Web. We produce video content and interactive Flash content for DVDs, kiosks and the like which are jaw-droppingly beautiful.  Such content is produced by some very talented folks who in many cases, regard Flash as their weapon of choice.  Building things from Flash in this context is fine with me. Often it can be the ideal choice.  It is when this hunger for Flash crosses over to building web sites, that I have a&amp;nbsp;problem.
&lt;/p&gt;
&lt;p&gt;
    I enjoy a stunning, well crafted, interactive experience as much as the next guy, but I have pretty strong opinions on how and when we use Flash to deliver such an experience.  For me, Flash content lives in a similar category to video content or a pdf document. That is, you can put it on the Web, but that won&amp;#8217;t make it a Web site. (as I write this, I&amp;#8217;m find myself hearing Wesley Snipes proclaiming: &amp;#8216;You can put a cat in the oven, but that don&amp;#8217;t make it a biscuit!&amp;#8217; Perhaps I&amp;#8217;ll refrain from that level of &lt;a href=&#34;http://en.wikiquote.org/wiki/White_Men_Can%27t_Jump&#34;&gt;trash talking&lt;/a&gt; for now.)  Being vocal about this opinion (of Flash and The Web, not cats and biscuits) in my new role, while in the company of many Flash developers and Flash fans has raised a few eyebrows and brought about some interesting&amp;nbsp;debates.
&lt;/p&gt;
&lt;p&gt;
    I was particularly chuffed to hear my colleague &lt;a href=&#34;http://bruised-blood.livejournal.com/&#34; rel=&#34;friend colleague met url&#34;&gt;Stephen&lt;/a&gt; playfully remark that I must be part of the &amp;#8220;Anti Flash Mob&amp;#8221;. I&amp;#8217;ve got news for you Steve. There are loads of us out here, and we&amp;#8217;re thinking of getting t-shirts!  In truth I&amp;#8217;m not anti-Flash. I&amp;#8217;m all for choosing this right tools for the job. But my contention is that when the job is delivering information to the widest possible audience, with the greatest amount of confidence that everyone (and everything) wanting to get at that information can do so, then Flash is the wrong choice.  At &lt;a href=&#34;http://ted.com&#34;&gt;&lt;span class=&#34;caps&#34;&gt;TED&lt;/span&gt;&lt;/a&gt; this year, &lt;a href=&#34;http://www.w3.org/People/Berners-Lee/&#34; rel=&#34;url&#34;&gt;Tim Berners Lee&lt;/a&gt; gave a &lt;a href=&#34;http://www.ted.com/index.php/talks/tim_berners_lee_on_the_next_web.html&#34;&gt;fascinating talk&lt;/a&gt; where he touched on his vision of the future for The Web (which until &lt;span class=&#34;caps&#34;&gt;HTML5&lt;/span&gt; with its native &lt;a href=&#34;http://dev.w3.org/html5/spec/Overview.html#video&#34;&gt;video tag&lt;/a&gt; comes along, you&amp;#8217;ll need Flash to watch online). That future was for an &amp;#8220;Open Data Web&amp;#8221; where we have access not just to documents (as in The Web as conceived by TimBL in 1989) but also ready access to the core data beneath. That sounds good to me. I&amp;#8217;d much rather build a site which lets people bookmark pages of interest, copy and paste content to other places, be addressable via hypertext links, be accessed by screen readers and search engines, provide deeper context for information with &lt;a href=&#34;http://microformats.org&#34; rel=&#34;org url&#34;&gt;Microformats&lt;/a&gt;, and so&amp;nbsp;on.
&lt;/p&gt;
&lt;p&gt;
    Usually during a conversation like this, someone will bang their fist and say &amp;#8220;&amp;#8230;but you can do that with Flash!&amp;#8221;, Well I&amp;#8217;d be delighted to be proven wrong, so consider this a challenge. Show me. I&amp;#8217;ve heard talk of Flash sites which offer all (or at least much) of the good stuff you get from developing for and with The Web, but have never been shown any evidence. I&amp;#8217;d love to see examples.  The comments section below awaits your links.  For the time being, I&amp;#8217;ll keep challenging any automatic choice of Flash over Web technologies on projects, but that&amp;#8217;s just common sense, right?  Every technology choice should be&amp;nbsp;justified.
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Moving on from Osmosoft</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/moving-on-from-osmosoft"/>
            <updated>2009-04-23T10:00:00Z</updated>
            <published>2009-04-23T10:00:00Z</published>
            <id>/blog/moving-on-from-osmosoft</id>
                        <category   scheme="/blog/tags"
                        term="announcements"
                        label="Announcements" />
                        <category   scheme="/blog/tags"
                        term="osmosoft"
                        label="Osmosoft" />
                        <category   scheme="/blog/tags"
                        term="theteam"
                        label="Theteam" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/osmosoft.jpg&#34; alt=&#34;o s m o s o f t&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Last week was both sad and exciting for me. Exciting because I was gearing up to start my new job at &lt;a href=&#34;http://theteam.co.uk&#34;&gt;theTeam&lt;/a&gt;, a London-based communications agency with a slightly silly name. Sad because it was my last week working at &lt;a href=&#34;http://osmosoft.com&#34;&gt;Osmosoft&lt;/a&gt; (a company that created plenty of silly named things&amp;nbsp;itself).
&lt;/p&gt;
&lt;p&gt;
    I had been at Osmosoft since it grew from a &lt;a href=&#34;http://jermolene.com/2007/05/29/i-for-one-welcome-my-new-bt-overlords/&#34;&gt;one man band&lt;/a&gt; into an open source innovations team at &lt;a href=&#34;http://bt.com&#34;&gt;&lt;span class=&#34;caps&#34;&gt;BT&lt;/span&gt;&lt;/a&gt;, and had a terrific experience along the way. I think that it is safe to say that I have learned more about The Web during my time at Osmosoft than in any previous job and that is in no small part due to the quality and experience of the people around&amp;nbsp;me.
&lt;/p&gt;
&lt;p&gt;
    During my time I honed my appreciation of what makes a good Web citizen. From technology choices to quality of delivery. From interaction design to exhibiting good taste. From the importance of the &amp;#8216;View Source&amp;#8217; experience to openness and data availability. I&amp;#8217;m going to miss the raging debates and big opinions which regularly surfaced at Osmosoft.  The people there are intelligent and&amp;nbsp;articulate. 
&lt;/p&gt;
&lt;p&gt;
    Osmonauts, I salute&amp;nbsp;you!
&lt;/p&gt;
&lt;p&gt;
    But now I&amp;#8217;m off to pastures new. &lt;a href=&#34;http://theteam.co.uk&#34;&gt;theTeam&lt;/a&gt; has a young, but growing digital arm with an impressive client list.  I&amp;#8217;ll be involved in what we deliver into the browser and how. A chance to influence the nature of the browser experience by pushing for &lt;a href=&#34;http://www.hawksworx.com/blog/unobtrusify-your-javascript&#34;&gt;unobtrusive&lt;/a&gt; technologies and best practices on a range of sites which is due to increase in both reach and diversity is a big draw for me. I&amp;#8217;m looking forward to the&amp;nbsp;challenge.
&lt;/p&gt;
&lt;p&gt;
    My transition has been made easier by a number of things. Firstly, Osmosoft and theTeam have already established a bit of a relationship. Co-hosting a recent &lt;a href=&#34;http://upcoming.yahoo.com/event/2149675/&#34;&gt;Open Source Show and Tell&lt;/a&gt; revealed some common interests and enthusiasms. I&amp;#8217;m hoping for more crossover at events like that.  Secondly, a big part of my time at Osmosoft was spent developing for an open source project called &lt;a href=&#34;http://tiddlywiki.com&#34;&gt;TiddlyWiki&lt;/a&gt;. While I&amp;#8217;ll have to scale back my time on that, there is no reason for me to turn my back on it altogether. I&amp;#8217;m keen to keep on contributing and building applications with TiddlyWiki.  Besides, it&amp;#8217;s nice to bump into familiar friends in the &lt;a href=&#34;irc://irc.freenode.net/#tiddlywiki&#34;&gt;TiddlyWiki irc&lt;/a&gt;&amp;nbsp;room.
&lt;/p&gt;
&lt;p&gt;
    Osmosoft really sparked a lot of enthusiasm for me when it comes to both open source software and compelling Web content. In addition to contributing to TiddlyWiki, I&amp;#8217;m hoping to start a small open source project of my own to feed my desire to make great stuff for the Web that anyone can&amp;nbsp;use.
&lt;/p&gt;
&lt;p&gt;
    Thanks for everything Osmosoft. It&amp;#8217;s been a&amp;nbsp;blast!
&lt;/p&gt;&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/philliecasablanca/2049169747&#34;&gt;Phil&amp;nbsp;Whitehouse&lt;/a&gt;
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Leveraging jQuery and jQuery plugins in TiddlyWiki</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/leveraging-jquery-and-jquery-plugins-in-tiddlyWiki"/>
            <updated>2009-03-13T10:00:00Z</updated>
            <published>2009-03-13T10:00:00Z</published>
            <id>/blog/leveraging-jquery-and-jquery-plugins-in-tiddlyWiki</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="jquery"
                        label="Jquery" />
                        <category   scheme="/blog/tags"
                        term="tiddlywiki"
                        label="Tiddlywiki" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/jquery-logo-large.jpg&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    The recent release of &lt;a href=&#34;http://tiddlywiki.com/&#34;&gt;TiddlyWiki v2.5&lt;/a&gt; included something rather exciting for me: &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt;, the popular Javascript library is now part of the TiddlyWiki&amp;nbsp;core.
&lt;/p&gt;&lt;p&gt;This is exciting for a number of&amp;nbsp;reasons.&lt;/p&gt;
&lt;ol&gt; 
    &lt;li&gt;The TiddlyWiki core functions can now use jQuery to perform all manner of &lt;span class=&#34;caps&#34;&gt;DOM&lt;/span&gt; inspection and &lt;span class=&#34;caps&#34;&gt;DOM&lt;/span&gt; manipulation.  We can refactor a ton of code to benefit from jQuery&amp;#8217;s blistering Sizzle engine and pass the burden of maintaining lots of utility functions over to those clever jQuery bods. All of which will simplify the TiddlyWiki codebase and ultimately make it easier to read and easier to&amp;nbsp;maintain.&lt;/li&gt; 
    &lt;li&gt;TiddlyWiki plugin developers will now be able to make use of jQuery in their plugins. That&amp;#8217;s great news for both hardcore plugin developers and people dabbling for the first time.  jQuery is elegantly expressive, powerful, and superbly documented.  All of this lowers the barriers to entry for a would be developer and smooths the way for exisiting&amp;nbsp;developers.&lt;/li&gt; 
    &lt;li&gt;There is a huge wealth of jQuery plugins which can now be utilised by TiddlyWiki.  The quality of many of these plugins is tremendously high. Bring &amp;#8216;em&amp;nbsp;on!&lt;/li&gt; 
&lt;/ol&gt;
&lt;p&gt;
    But how does a TiddlyWiki plugin developer get started? How can we bring a jQuery plugin into TiddlyWiki and make it available via a Macro?  Let&amp;#8217;s take a look at an&amp;nbsp;example.
&lt;/p&gt;
&lt;p&gt;
    &lt;a href=&#34;http://fnd.lewcid.org/blog/&#34; title=&#34;FND&#39;s Blag: Just Another Personal Wobsite&#34;&gt;Fred&lt;/a&gt;, my colleague at &lt;a href=&#34;http://osmosoft.com/&#34; title=&#34;osmosoft - open source applications from BT&#34;&gt;Osmosoft&lt;/a&gt; stumbled upon a plugin which creates a nice navigation structure from an &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; List element.  The plugin has lots of &lt;a href=&#34;http://www.ihwy.com/Labs/Demos/Current/jquery-listnav-plugin.aspx&#34; title=&#34;ListNav plugin examples&#34;&gt;examples&lt;/a&gt; and &lt;a href=&#34;http://www.ihwy.com/Labs/jquery-listnav-plugin.aspx&#34; title=&#34;jQuery listnav plugin - Javascript list navigation control&#34;&gt;documentation&lt;/a&gt; and seemed like a good contender for bringing something useful into&amp;nbsp;TiddlyWiki.
&lt;/p&gt;
&lt;p&gt;
    To include the plugin, all we need to do is copy it into a tiddler and then tag the tiddler with systemConfig. After saving the file and reloading, the plugin is available for us to&amp;nbsp;use.
&lt;/p&gt;
&lt;img alt=&#34;Plugin inclusion&#34; src=&#34;/media/images/plugin_inclusion.jpg&#34; /&gt;&lt;br /&gt;
&lt;p&gt;
    With the jQuery plugin availble, we can use it to provide a snazzy &lt;span class=&#34;caps&#34;&gt;UI&lt;/span&gt; for any &lt;span class=&#34;caps&#34;&gt;UL&lt;/span&gt; or &lt;span class=&#34;caps&#34;&gt;LI&lt;/span&gt; elements on the page. The Javascript syntax for that is nice and&amp;nbsp;simple:
&lt;/p&gt;&lt;/p&gt;
&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c1&#34;&gt;// Turn the list element with an &lt;span class=&#34;caps&#34;&gt;ID&lt;/span&gt; of &amp;#39;myList&amp;#39; into a funky ListNav&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#myList&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listnav&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
     This is great, but we want people to be able to call this from TiddlyWiki without having to write Javascript. If we create a TiddlyWiki macro to call this for us, people can easily make a nice NavList anywhere. Let&amp;#8217;s make a macro which turns the contents of a tiddler into a NavList like&amp;nbsp;this:
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    To make that available, we should create a TiddlyWiki plugin which delivers this macro. We do this in a new tiddler.  I created a tiddler called &amp;#8216;ListNavPlugin&amp;#8217; and once again tagged it with systemConfig so that it becomes code that TiddlyWiki knows to interpret. To start with, let&amp;#8217;s just create the macro and ensure that we can invoke&amp;nbsp;it. 
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c1&#34;&gt;// create macro object&lt;/span&gt;&lt;br /&gt; &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;macros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listnav&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;br /&gt;   &lt;span class=&#34;c1&#34;&gt;// Add a handler function to be invoked by &amp;gt; &lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;macroName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wikifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;paramString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tiddler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;c1&#34;&gt;// do some magic...&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;nx&#34;&gt;alert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;I&amp;#39;m gonna make a funky listnav!&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    To see it working, I created two more new tiddlers. MyFruityList holds a list of items, and ExampleListNav holds a call to the new&amp;nbsp;macro.
&lt;/p&gt;
&lt;img alt=&#34;List amnd example call&#34; src=&#34;/media/images/list-and-example-call.jpg&#34; /&gt; 
&lt;p&gt;
     Saving the TiddlyWiki file and reloading will make the macro available to call. If we open the ExampleListNav tiddler, we should see our macro called like&amp;nbsp;this:
&lt;/p&gt; 
&lt;img alt=&#34;&#34; src=&#34;/media/images/macro-called-1.jpg&#34; /&gt; 
&lt;p&gt; 
    All good, but not exciting yet. Let&amp;#8217;s flesh out our TiddlyWiki macro a bit.  We&amp;#8217;ll use a TiddlyWiki function to get the text from our desired tiddler and then make a list from it.  Where we might once have used some TiddlyWiki utility functions to help us create the &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; elements (like createTiddlyElement), we can now use &lt;a href=&#34;http://docs.jquery.com/Manipulation&#34;&gt;jQuery&amp;#8217;s helper functions&lt;/a&gt; to append elements to the&amp;nbsp;document. 
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c1&#34;&gt;// create macro object&lt;/span&gt;&lt;br /&gt; &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;macros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listnav&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   &lt;span class=&#34;c1&#34;&gt;// Add a handler function to be invoked by &amp;gt; &lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;macroName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wikifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;paramString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tiddler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&#34;c1&#34;&gt;// target tiddler passed in as macro parameter&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&#34;c1&#34;&gt;// read list items from tiddler contents&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getTiddlerText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;       &lt;span class=&#34;c1&#34;&gt;// generate list&lt;/span&gt;&lt;br /&gt;       &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;items&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;       &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;listnav&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;       &lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;each&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;itm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;li&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;itm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;       &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    Now we&amp;#8217;re getting somewhere. We&amp;#8217;ve grabbed each line from our MyFruityList tiddler and used jQuery to turn them into an unordered&amp;nbsp;list.
&lt;/p&gt; 
&lt;img alt=&#34;&#34; src=&#34;/media/images/example-list-created.jpg&#34; /&gt; 
&lt;p&gt;
    We can now call the jQuery plugin to render our list as a NavList. The plugin requires a little extra &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; so we can create that, and then call the listnav&amp;nbsp;plugin.
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c1&#34;&gt;// create macro object&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;macros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listnav&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span class=&#34;c1&#34;&gt;// Add a handler function to be invoked by &amp;gt; &lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;nx&#34;&gt;handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;macroName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wikifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;paramString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tiddler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;        &lt;span class=&#34;c1&#34;&gt;// target tiddler passed in as macro parameter&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;        &lt;span class=&#34;c1&#34;&gt;// read list items from tiddler contents&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getTiddlerText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span class=&#34;c1&#34;&gt;// generate nav bar&lt;/span&gt;&lt;br /&gt;            &lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;p /&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;listnav-nav&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;            &lt;span class=&#34;c1&#34;&gt;// generate list&lt;/span&gt;&lt;br /&gt;            &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;items&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;listnav&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;each&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;itm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;             &lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;itm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;            &lt;span class=&#34;c1&#34;&gt;// apply listnav&lt;/span&gt;&lt;br /&gt;            &lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listnav&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt; 
    When we save our plugin, reload the page and open up our ExampleListNav tiddler, we see the navlist. Cool! Hang on though, it looks a bit rubbish. Not like the examples we saw earlier.  We have to include the &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; to style our new navlist.  Easy enough, let&amp;#8217;s use our TiddlyWiki plugin to create a sylesheet for our new &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; by adding&amp;nbsp;this:
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c1&#34;&gt;// add default styles (adapted from http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;shadowTiddlers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StyleSheetListNav&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;  \n&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;#listnav-nav { margin: 20px 0 10px; }\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;.ln-letters { overflow: hidden; }\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;.ln-letters a { font-size: 0.9em; display: block; float: left; padding: 2px 6px; border: 1px solid #eee; border-right: none; text-decoration: none; }\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;.ln-letters a.ln-last { border-right: 1px solid #eee; }\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;.ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;.ln-letters a.ln-disabled { color: #ccc; }\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;.ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addNotification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;StyleSheetListNav&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;refreshStyles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt; 
    And we&amp;#8217;re done.  The jQuery plugin is turning our boring old list into a dynamic indexed list with navigation. Cool!  For extra credit, we can make our jQuery a little more concise. Notice that we call jQuery by name rather than with the common idiom of $.  We could simply replace each jQuery with $ in our code and that would work, but beware!  There are other Javascript libraries that use the $ shortcut.  we don&amp;#8217;t want to introduce the possibility of a clash.  Luckily, there is a simple way to get around that.  All we need to do is wrap our TiddlyWiki plugin in a closure and pass jQuery in as an argument (as explained on the &lt;a href=&#34;http://docs.jquery.com/Plugins/Authoring#Custom_Alias_in_plugin_code&#34; title=&#34;Plugins/Authoring - jQuery JavaScript Library&#34;&gt;jQuery documentation&lt;/a&gt; site).  Then we can use whatever shortcut for jQuery in our code that we like.  The final code looks like&amp;nbsp;this:
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// set up alias&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   &lt;span class=&#34;c1&#34;&gt;// create macro object&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;macros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listnav&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   &lt;span class=&#34;c1&#34;&gt;// Add a handler function to be invoked by &amp;gt;; &lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;macroName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wikifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;paramString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tiddler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&#34;c1&#34;&gt;// target tiddler passed in as macro parameter&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&#34;c1&#34;&gt;// read list items from tiddler contents&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getTiddlerText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;      &lt;span class=&#34;c1&#34;&gt;// generate nav bar&lt;/span&gt;&lt;br /&gt;      &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;p /&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;listnav-nav&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;      &lt;span class=&#34;c1&#34;&gt;// generate list&lt;/span&gt;&lt;br /&gt;      &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;items&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;      &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;listnav&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;place&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;      &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;each&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;itm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;itm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;      &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;      &lt;span class=&#34;c1&#34;&gt;// apply listnav&lt;/span&gt;&lt;br /&gt;      &lt;span class=&#34;nx&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;listnav&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;br /&gt;     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   &lt;span class=&#34;c1&#34;&gt;// add default styles (adapted from &amp;lt;a href=&amp;quot;http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)&amp;quot;&amp;gt;http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)&amp;lt;/a&amp;gt; &lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;shadowTiddlers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StyleSheetListNav&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;\n&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;quot;#listnav-nav { margin: 20px 0 10px; }\n&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;quot;.ln-letters { overflow: hidden; }\n&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;quot;.ln-letters a { font-size: 0.9em; display: block; float: left; padding: 2px 6px; border: 1px solid #eee; border-right: none; text-decoration: none; }\n&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;quot;.ln-letters a.ln-last { border-right: 1px solid #eee; }\n&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;quot;.ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }\n&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;quot;.ln-letters a.ln-disabled { color: #ccc; }\n&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;quot;.ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class=&#34;nx&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addNotification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;StyleSheetListNav&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;refreshStyles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span class=&#34;p&#34;&gt;})(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;jQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    You can explore the finished example in a &lt;a href=&#34;http://static.hawksworx.com/listnavplugin.html&#34; title=&#34;ListNavPlugin example TiddlyWiki&#34;&gt; TiddlyWiki&lt;/a&gt;.
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Mashing up flickr in the client with jQuery</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/mashing-up-flickr-in-the-client-with-jquery"/>
            <updated>2009-02-15T10:00:00Z</updated>
            <published>2009-02-15T10:00:00Z</published>
            <id>/blog/mashing-up-flickr-in-the-client-with-jquery</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="jquery"
                        label="Jquery" />
                        <category   scheme="/blog/tags"
                        term="mashups"
                        label="Mashups" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/polaroiderizer-a-slideshow-from-your-flickr-tags.jpg&#34; alt=&#34;Polaroiderizer&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Recently I saw Tim Stevens &lt;a href=&#34;http://twitter.com/san1t1/status/1193906661&#34;&gt;post on Twitter&lt;/a&gt; about a slide show he had built using his &lt;a href=&#34;http://www.liveloom.com/&#34;&gt;Liveloom&lt;/a&gt; application. His slide show grabs some photos from Flickr tagged with &amp;#8216;Osmosoft&amp;#8217; and then renders them with all manner of visual effects using Flex.  While the visual effects available via Tim&amp;#8217;s app are impressive, I&amp;#8217;m a big advocate of open web standards and enjoy making things from &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; and Javascript, rather than using tools like&amp;nbsp;Flex.
&lt;/p&gt;
&lt;p&gt;
    My first encounter with the slide show made by Liveloom was on an iPhone where it couldn&amp;#8217;t run. The temptation to cobble together a simple Flickr mashup which could operate in any Javascript capable browser was too much to resist.  Let&amp;#8217;s not pretend, that there aren&amp;#8217;t already slide show mashups galore, or that I was going to be able to rival some of the advanced visual effects that Liveloom can offer, but making a simple, attractive slide show which could run on lots of devices seemed like a fun and valuable exercise.  I was also keen to see just how quickly and easily I could produce this using jQuery.  I&amp;#8217;m forever going on about how good jQuery is at manipulating the &lt;span class=&#34;caps&#34;&gt;DOM&lt;/span&gt;, so this seemed like a good chance to demonstrate that.  I shared the result my efforts as the &amp;#8216;Poloaroiderizer&amp;#8217; and after getting some great feedback, promoted it to its very own&amp;nbsp;domain.
&lt;/p&gt;
&lt;p&gt;
    Check it out over at &lt;a href=&#34;http://polaroiderizer.com&#34;&gt;polaroiderizer.com&lt;/a&gt; As it turns out, the task was incredibly simple and took just a few hours one evening. The interface is rendered with &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt;. As such, it will work in any modern browser.  I used jQuery to request &lt;a href=&#34;http://ajaxian.com/archives/jsonp-json-with-padding&#34;&gt;&lt;span class=&#34;caps&#34;&gt;JSONP&lt;/span&gt;&lt;/a&gt; from the Flickr &lt;span class=&#34;caps&#34;&gt;API&lt;/span&gt;. &lt;span class=&#34;caps&#34;&gt;JSPONP&lt;/span&gt; gets you around the cross domain scripting restrictions and delivers &lt;span class=&#34;caps&#34;&gt;JSON&lt;/span&gt; to the browser which is a snap to parse and render.  There is no logic on the server. All of my code is run in the browser.  The animations are provided by &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;DOM&lt;/span&gt; manipulation, made simple by &lt;a href=&#34;http://docs.jquery.com/Effects/animate&#34;&gt;jQuery&amp;#8217;s animation functions&lt;/a&gt;.  The display needs Javascript to render, so without it Polaroiderizer is a bit toothless, but that doesn&amp;#8217;t mean we can forget about those without Javascript. If you submit a flickr tag while you don&amp;#8217;t have Javascript capabilities, the form will submit your tag to the standard flickr interface and you&amp;#8217;ll find yourself at the flickr search results page.  This is another example of progressive enhancement. A topic close to my heart that I tried to demonstrate recently on &lt;a href=&#34;http://unobtrusify.com&#34;&gt;Unobtrusify&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    Another little bonus of building this slide show app this way, is that it is super-easy to share the results. I made sure that the tag entered was echoed into the address of the page as the page fragment identifier. Manipulating and interrogating the frag id can be useful in Ajax applications as my colleague &lt;a href=&#34;http://softwareas.com/fun-with-fragment-identifiers&#34;&gt;Michael Mahemoff explained recently&lt;/a&gt;.  When the page loads, it looks for a tag stored in the frag id as its starting point. That means you can bookmark slide shows and share them as easily as email a &lt;span class=&#34;caps&#34;&gt;URI&lt;/span&gt;. Here are a&amp;nbsp;few:
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;http://polaroiderizer.com/#PhilHawksworth&#34;&gt;http://polaroiderizer.com/#PhilHawksworth&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://polaroiderizer.com/#TheWebIsAgreement&#34;&gt;http://polaroiderizer.com/#TheWebIsAgreement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://polaroiderizer.com/#TED2009&#34;&gt;http://polaroiderizer.com/#&lt;span class=&#34;caps&#34;&gt;TED2009&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Unobtrusify your Javascript</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/unobtrusify-your-javascript"/>
            <updated>2009-01-05T10:00:00Z</updated>
            <published>2009-01-05T10:00:00Z</published>
            <id>/blog/unobtrusify-your-javascript</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="jquery"
                        label="Jquery" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/unobtrusive.jpg&#34; alt=&#34;Unobtrusive Javascript&#34; class=&#34;free&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Recently &lt;a href=&#34;http://jaybyjayfresh.com&#34; title=&#34;jaybyjayfresh&#34;&gt;Jon Lister&lt;/a&gt;, a colleague of mine at &lt;a href=&#34;http://www.osmosoft.com&#34;&gt;Osmosoft&lt;/a&gt; showed me a website made by his friend &lt;a href=&#34;http://joshuabradley.co.uk/&#34; title=&#34;Joshua Bradley&#34;&gt;Joshua Bradley&lt;/a&gt;. The site, used some of the Javscript code from &lt;a href=&#34;http://tiddlywiki.com&#34; title=&#34;TiddlyWiki&#34;&gt;TiddlyWiki&lt;/a&gt;&amp;#8216;s animation engine to create some nice visual effects. I loved the design, but could see some room for improvement in the implementation. I&amp;#8217;m a big advocate of &lt;a href=&#34;http://en.wikipedia.org/wiki/Unobtrusive_JavaScript&#34; title=&#34;Unobtrusive JavaScript&#34;&gt;Unobtrusive Javascript&lt;/a&gt; and &lt;a href=&#34;http://en.wikipedia.org/wiki/Progressive_enhancement&#34; title=&#34;Progressive enhancement&#34;&gt;Progressive Enhancement&lt;/a&gt; and so I set about producing a quick demo of how a similar result could be achieved in the most Web-kind and accessible way available using &lt;a href=&#34;http://jquery.com&#34; title=&#34;jQuery&#34;&gt;jQuery&lt;/a&gt; for the&amp;nbsp;behaviors.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt; 
    The result has been published as &lt;a href=&#34;http://unobtrusify.com&#34; title=&#34;Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement&#34;&gt;Unobtrusify.com&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;The&amp;nbsp;aim.&lt;/h3&gt;

&lt;p&gt;&lt;ul&gt; 
    &lt;li&gt;Create a similar effect to that on Josh&amp;#8217;s site, but make sure that the page is readable without&amp;nbsp;Javascript.&lt;/li&gt; 
    &lt;li&gt;Use images to make the headings look snazzy, but make sure that they are not required in order for the content to make&amp;nbsp;sense.&lt;/li&gt; 
    &lt;li&gt;Use only unobtrusive Javascript and keep the &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; as clean as&amp;nbsp;possible.&lt;/li&gt; 
    &lt;li&gt;Reduce the number of http requests required to as few as possible in order to improve&amp;nbsp;performance.&lt;/li&gt; 
&lt;/ul&gt; &lt;/p&gt;
&lt;h4&gt;The&amp;nbsp;approach.&lt;/h4&gt;

&lt;p&gt;&lt;p&gt; 
    First of all, I wrote the text for the page. I chose a simple statement and tried to structure it such that it would make sense regardless of which sections were&amp;nbsp;expanded.
&lt;/p&gt; 
&lt;p&gt; 
    Then I used the simplest &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; markup I could to logically represent the content with its various headings.  &lt;a href=&#34;http://unobtrusify.com/justhtml.html&#34; title=&#34;Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement (HTML only)&#34;&gt;This is how the page would look&lt;/a&gt; to text-only browsers search engines, web-crawlers and&amp;nbsp;screen-readers.
&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;
    I then used a well-known &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; technique to replace the text in the headings with images. This would ensure that the text would remain for non-human consumers of the site, while the images would be presented to those able to appreciate them.  The technique is simple.  You prevent the browser from scrolling the content of your element with &lt;code&gt;overflow:hidden&lt;/code&gt; and then scoot the text out of the way with &lt;code&gt;text-indent&lt;/code&gt;. Now that the way is clear, you can display an image with &lt;code&gt;background-image&lt;/code&gt;.  Be sure to specify the dimensions of your desired image as the &lt;code&gt;background-image&lt;/code&gt; property will not resize your element to the correct size automatically. The &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; would look something like&amp;nbsp;this:
&lt;/p&gt; &lt;/p&gt;
&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nf&#34;&gt;#myHeading&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;text-indent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;-9999px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;background-image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;sx&#34;&gt;url(myImage.gif)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;380px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;123px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;&lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    My content had 6 headings to render in this way. I also wanted to have a mouseover effect to give some affordance for the click-ability of the headings so this would require another 6 images. Rather than having 12 images to download (which would require 12 separate &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; requests), I combined all of these images into a single image.  This would have a number of effects. Firstly, combining the 12 images into one meant that the total download would be a bit smaller due to the way that the file was compressed. (A tiny saving, but every little helps.)  Secondly, there is an overhead with making &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; requests so when it comes to performance, the fewer the better. This method cuts out 11 &lt;span class=&#34;caps&#34;&gt;HTTP&lt;/span&gt; requests. Score!  Thirdly, as the browser uses the same image for the original heading images and their associated mouseover images, there is no need to preload the alternate images to avoid that nasty pause when mousing over. The image is already downloaded and ready to display. A nice&amp;nbsp;bonus.
&lt;/p&gt;  
&lt;p&gt;
    In order to use this &amp;#8216;image sprite&amp;#8217; for each and every heading, I just needed to specify the &lt;code&gt;background-position &lt;/code&gt;for each one. Some attributes would be common to each one so I could save some code like&amp;nbsp;this:
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;text-indent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;-9999px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;background-image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;sx&#34;&gt;url(images/unobtrusive_sprite.gif)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;380px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;#uj&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;k&#34;&gt;background-position&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;123px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;#cmh&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;k&#34;&gt;background-position&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;-123px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;150px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;&lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    At this point our &lt;a href=&#34;http://unobtrusify.com/withcss.html&#34; title=&#34;Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement (with CSS)&#34;&gt;page looks like this&lt;/a&gt;.  This is exactly how we want things to appear for those without Javascript. There is no ability to toggle the display of the various sections, the content is shown in full, and there is no mouseover behavior on the headings to suggest that they can be clicked (since they cannot).  This is the essence of &lt;a href=&#34;http://en.wikipedia.org/wiki/Progressive_enhancement&#34; title=&#34;Progressive enhancement&#34;&gt;Progressive Enhancement&lt;/a&gt;.  We have a perfectly serviceable web page (albeit a simple one) which we can now enhance for those with Javascript&amp;nbsp;enabled.
&lt;/p&gt; 
&lt;p&gt;
    Using jQuery to easily and unobtrusively add behavior to elements on the page, we can now hide all of the expanded sections. We do this with a simple jQuery statement like&amp;nbsp;this:
&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#wrapper &amp;gt; div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hide&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;
    This hides all of the div elements which are a direct descendent of the element with an &lt;span class=&#34;caps&#34;&gt;ID&lt;/span&gt; of wrapper. (my chosen &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt;&amp;nbsp;structure). 
&lt;/p&gt; 
&lt;p&gt;
    Headings are not by default clickable so we can add some behavior to suggest that the clicking a heading will have a effect by changing the cursor for them like&amp;nbsp;this:
&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#wrapper h1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addClass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;clickable&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;JavaScript&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;
    A &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; class of &amp;#8216;clickable&amp;#8217; specifies the cursor with &lt;code&gt;cursor: pointer;&lt;/code&gt;
&lt;/p&gt; 
&lt;p&gt;
    We also use jQuery to show the hover image by just repositioning the background image when we hover with the mouse and also to show the hidden div element when we click a heading. Remember, none of this will happen unless Javascript is&amp;nbsp;available.
&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;/media/images/unobtrusifycom.jpg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;
    I also use an additional trick to prevent a flash of unstyled content or &lt;span class=&#34;caps&#34;&gt;FOUC&lt;/span&gt; (gratifyingly pronounced &amp;#8216;&lt;span class=&#34;caps&#34;&gt;FOOOOOOK&lt;/span&gt;&amp;#8217; by &lt;a href=&#34;http://hicksdesign.co.uk/&#34; title=&#34;hicksdesign: design for print and new-fangled media&#34;&gt;John Hicks&lt;/a&gt;) while the Javascript is being downloaded. This trick is &lt;a href=&#34;http://www.learningjquery.com/2008/10/1-awesome-way-to-avoid-the-not-so-excellent-flash-of-amazing-unstyled-content&#34; title=&#34;1 (Awesome) Way To Avoid the (Not So Excellent) Flash of (Amazing) Unstyled Content &amp;raquo; Learning jQuery - Tips, Techniques, Tutorials&#34;&gt;very well explained&lt;/a&gt; by &lt;a href=&#34;http://www.englishrules.com/&#34; title=&#34;English Rules&#34;&gt;Karl Swedberg&lt;/a&gt; on the excellent &lt;a href=&#34;http://www.learningjquery.com/&#34; title=&#34;Learning jQuery - Tips, Techniques, Tutorials&#34;&gt;learningjquery.com&lt;/a&gt;&amp;nbsp;site.
&lt;/p&gt; 
&lt;p&gt; 
    For a better picture of exactly what is going on, why not swing by &lt;a href=&#34;http://Unobtrusify.com&#34; title=&#34;Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement&#34;&gt;Unobtrusify.com&lt;/a&gt; and exercise your right as a citizen of the Web to view the source. Hitting View Source is so often the best way to learn how things are done. Go on! Go and get your hands&amp;nbsp;dirty!
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Announcing JigglyWiki. A TiddlyWiki experiment with jQuery</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/announcing-jigglywiki-a-tiddlywiki-experiment"/>
            <updated>2008-08-27T10:00:00Z</updated>
            <published>2008-08-27T10:00:00Z</published>
            <id>/blog/announcing-jigglywiki-a-tiddlywiki-experiment</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="jquery"
                        label="Jquery" />
                        <category   scheme="/blog/tags"
                        term="tiddlywiki"
                        label="Tiddlywiki" />
            
            <content type="html">
                                &lt;p&gt;&lt;img alt=&#34;Jigglywiki&#34; src=&#34;/media/images/jigglywiki.jpg&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Once upon a time I was resistant to the idea of Javascript libraries. That was due to a couple of things. Firstly, I was comfortable with writing the Javascript for my projects myself and didn&amp;#8217;t like the idea of relying on someone else&amp;#8217;s code which I couldn&amp;#8217;t easily inspect. Secondly, at the time there weren&amp;#8217;t really any libraries. Then there were a few, but they were all, well, to be blunt, a bit&amp;nbsp;pants.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
    That all changed for me when &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; came along. &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; is a lightweight, elegant but powerful Javascript library originally developed by &lt;a href=&#34;http://ejohn.org&#34;&gt;John Resig&lt;/a&gt;. &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; provides fast and efficient interrogation and manipulation of the &lt;span class=&#34;caps&#34;&gt;DOM&lt;/span&gt; and borrows conventions from &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; and &lt;a&gt;&lt;span class=&#34;caps&#34;&gt;XPATH&lt;/span&gt;&lt;/a&gt; to provide concise and expressive queries to be constructed. It&amp;#8217;s worth checking out if you haven&amp;#8217;t already.  &lt;a href=&#34;http://tiddlyWiki.com&#34;&gt;TiddlyWiki&lt;/a&gt; has been around since before the existence of Javascript libraries and long before &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; came along, so it was never developed in a way to take advantage of such things. It could easily be argued that TiddlyWiki is itself, a Javascript library since it provides helper functions for many common Javascript tasks.  The extent of this library though, is a little limited since it has evolved to serve a single purpose: To drive&amp;nbsp;TiddlyWiki.
&lt;/p&gt;
&lt;p&gt;
    Recently I have been longing to experiment with replacing a lot of the TiddlyWiki core with code built to take advantage of &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt;. The idea of developing TiddlyWiki with a Javascript library turns out not to be a new one as similar discussions have occurred in the past and different libraries considered.  I then began to imagine other benefits from reengineering TiddlyWiki from first principles taking advantage of all of the lessons learned over its lifetime.   It became too hard to resist.  Over the course of 2 reasonably long train journeys, I set about building my own version of TiddlyWiki with &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; at its core. I settled on a number of&amp;nbsp;objectives:
&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;To use &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt; to provide the core TiddlyWiki&amp;nbsp;functions.&lt;/li&gt;
    &lt;li&gt;To make the code modular such that the core could be very small and additional functionality could easily be included via bespoke &lt;a href=&#34;http://jquery.com&#34;&gt;jQuery&lt;/a&gt;&amp;nbsp;plugins.&lt;/li&gt;
    &lt;li&gt;To use &lt;a href=&#34;http://en.wikipedia.org/wiki/Unobtrusive_JavaScript&#34;&gt;unobtrusive&amp;nbsp;Javascript&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;For the document to be sensibly parsed by screen readers and web&amp;nbsp;crawlers.&lt;/li&gt;
    &lt;li&gt;To allow navigation of the document even without&amp;nbsp;Javascript&lt;/li&gt;
    &lt;li&gt;To use &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; which is valid according to the &lt;a href=&#34;http://www.w3.org/&#34;&gt;&lt;span class=&#34;caps&#34;&gt;W3C&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;To conform to the TiddlyWiki naming convention and adopt a suitably ridiculous working title for the&amp;nbsp;project&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
    An important thing to note, is that I am not attempting to replace TiddlyWiki. I see JigglyWiki as an experimental prototype to explore ways that TiddlyWiki 3.0 might evolve.  I also hoped to keep this quiet for long enough to allow it to progress to the point that I was happy to reveal a working prototype for general discussion. That proved tricky thanks to my own excitement and the way that gossip spreads around the web and discussion&amp;nbsp;groups!
&lt;/p&gt;
&lt;p&gt;
    In its current state, it provides some of the more basic TiddlyWiki functions in terms of displaying tiddlers and allowing editing. It also demonstrates how it might elegantly degrade when &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; or Javascript are not available.  Below are a few different build which demonstrate those&amp;nbsp;scenarios.
&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;a href=&#34;http://static.hawksworx.com/playground/jigglywiki/html_only.html&#34;&gt;Just the &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt;&lt;/a&gt;. I&amp;#8217;ve not included &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; or any of the Javascript here. The data store is visible and you can navigate the document via the tiddler&amp;nbsp;links.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://static.hawksworx.com/playground/jigglywiki/html_css.html&#34;&gt;The &lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt; and &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt;&lt;/a&gt;. This will function just as the version above, only it will look a bit prettier. In environments where Javascript is not available or is slow to be initialised, this is how things look until the Javascript kicks&amp;nbsp;in.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://static.hawksworx.com/playground/jigglywiki/html_css_js.html&#34;&gt;&lt;span class=&#34;caps&#34;&gt;HTML&lt;/span&gt;, &lt;span class=&#34;caps&#34;&gt;CSS&lt;/span&gt; and Javascript&lt;/a&gt;. Now the data store is hidden and the default content is displayed with additional, Javascript dependent functionality&amp;nbsp;included.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
    I&amp;#8217;d love to get comments on this approach. I&amp;#8217;d also be very interested to get advise on TiddlyWiki issues that we might be able to avoid if the opportunity to develop this into TiddlyWiki 3.0 really did come about. I&amp;#8217;m less interested in bug reports though. This is a very early proof of concept which will contain many bugs and glitches.  You can get to the source of this project via the &lt;a href=&#34;http://svn.tiddlywiki.org/Trunk/contributors/PhilHawksworth/experimental/jigglywiki/proto/&#34;&gt;TiddlyWiki subversion repository&lt;/a&gt; More to&amp;nbsp;come!
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Enthusiasm and Good Food at TiddlyParis</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/enthusiasm-and-good-food-at-tiddlyparis"/>
            <updated>2008-08-27T10:00:00Z</updated>
            <published>2008-08-27T10:00:00Z</published>
            <id>/blog/enthusiasm-and-good-food-at-tiddlyparis</id>
                        <category   scheme="/blog/tags"
                        term="tiddlywiki"
                        label="Tiddlywiki" />
                        <category   scheme="/blog/tags"
                        term="osmosoft"
                        label="Osmosoft" />
                        <category   scheme="/blog/tags"
                        term="events"
                        label="Events" />
            
            <content type="html">
                                &lt;img alt=&#34;Paris&#34; src=&#34;http://farm4.static.flickr.com/3131/2803239794_6a48afbdc3.jpg&#34; /&gt;

&lt;p class=&#34;excerpt&#34;&gt;
    Yesterday I was fortunate to be able to make the quick trip over to Paris to attend a meeting of &lt;a href=&#34;http://tiddlywiki.com&#34; title=&#34;TiddlyWiki - a reusable non-linear personal web notebook&#34;&gt;TiddlyWiki&lt;/a&gt; enthusiasts at &lt;a href=&#34;http://upcoming.yahoo.com/event/1028826/&#34; title=&#34;TiddlyParis (TiddlyWiki get together) at Culture Biere (Tuesday August 26, 2008) - Upcoming&#34;&gt;TiddlyParis&lt;/a&gt;. Arranged by long time TiddlyWiki community member and &lt;a href=&#34;http://unamesa.org&#34;&gt;Una Mesa&lt;/a&gt; stalwart &lt;a href=&#34;http://lewcid.org&#34;&gt;Saq Imtiaz&lt;/a&gt;, this event was a great chance to put some faces to the names of some of the TiddlyWiki developers and users whose work I have been enjoying and benefitting from for some&amp;nbsp;time.
&lt;/p&gt;

&lt;p&gt;Gathering in a funky bar on the Champs Elysees, the 10 of us shared a beer or two and got to talk about what we were all doing with TiddlyWiki and get to know each other a little&amp;nbsp;better.&lt;/p&gt;
&lt;p&gt;The spectrum of TiddlyWiki experience was pleasingly&amp;nbsp;broad. &lt;/p&gt;
&lt;p&gt;Zap recently found TiddlyWiki and is using it to manage his notes and background material to support the effort in writing a novel. He is also tinkering with &lt;a href=&#34;http://gettematasks.com&#34;&gt;TeamTasks&lt;/a&gt; and made the observation that once you start experimenting with ways to customise and extend TiddlyWiki, you can easily find yourself absorbed in the endeavour. Ideas spring forth even faster than you can execute&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;At the other end of the spectrum we have Jacques, who has been working with TiddlyWiki since the very early days.  Jacques showed us all his TiddlyWiki &lt;span class=&#34;caps&#34;&gt;PIM&lt;/span&gt; on his 4 year old tablet &lt;span class=&#34;caps&#34;&gt;PC&lt;/span&gt;. The file was well over &lt;span class=&#34;caps&#34;&gt;3MB&lt;/span&gt; in size (something of a beast in TiddlyWiki terms) chock full of content and heavily customised. I  mean really heavily customised!  Jacques had moulded it to fit his way of working and had borrowed from the best TiddlyWiki adaptations around the web. With advanced workflow management and various task lists, widgets and doohickies, I found it a bit hard to drink it all in, but it was a perfect fit for Jacques and goes everywhere with him.  Jacques pledged to make a blank copy available at some point. You&amp;#8217;ll need to speak French though as he had also carried out extensive&amp;nbsp;translation.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;http://farm4.static.flickr.com/3013/2802391393_d939f28c9a.jpg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;I was delighted to learn that relative newcomer Pier, whose Google Maps / TiddlyWiki mashup gathers information about popular activities and movements around Paris, chose TiddlyWiki primarily because of its ease of use as a mashup platform. Score!  (He was also attracted by the snazzy tiddler&amp;nbsp;animations!)&lt;/p&gt;
&lt;p&gt;Loic Dachary revealed several TiddlyWiki resources which have been around for a while, but I had failed to stumble upon. Perhaps targeted at the more techie geeks among us, they were impressive nonetheless. My favorite was &lt;a href=&#34;http://tiddlywikicp.dachary.org/&#34;&gt;TiddlyWiki_CP&lt;/a&gt; which is a ruby gem providing a library and a command line interface to copy TiddlyWiki tiddlers to files and vice versa. Incredibly useful for any developer who builds a variety of&amp;nbsp;TiddlyWikis.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;http://farm4.static.flickr.com/3209/2802391055_ca4fe53d4e.jpg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;I was very keen to meet BidiX who has quietly been producing great TiddlyWiki assets for some time. Recent work includes &lt;a href=&#34;http://itw.bidix.info/&#34;&gt;iTW&lt;/a&gt;, the best iPhone TiddlyWiki that I know of. The &lt;a href=&#34;http://itw.bidix.info/tiddlyparis/&#34;&gt;TiddlyParis edition&lt;/a&gt; of iTW went with me in my pocket to help me find the venue and read about the agenda.  BidiX is also the man behind &lt;a href=&#34;http://tiddlyhome.bidix.info&#34;&gt;TiddlyHome&lt;/a&gt;, a lovely and seemingly simple hosted TiddlyWiki resource which he recently deployed to Google App Engine for its &lt;a href=&#34;http://th2.bidix.info/&#34;&gt;next release&lt;/a&gt; (which we got to play with, but he insists isn&amp;#8217;t quite ready for prime time&amp;nbsp;yet).&lt;/p&gt;
&lt;p&gt;For my part I spoke about &lt;a href=&#34;http://gettematasks.com&#34;&gt;TeamTasks&lt;/a&gt;, which I was happy to learn was being used to some degree by several people around the table. I also answered questions about &lt;a href=&#34;http://bt.com&#34;&gt;BTs&lt;/a&gt; interest in TiddlyWiki and motives for being involved in such a project and community.  I&amp;#8217;ll not go over that again here, as it has already been well articulated by several of my colleagues on &lt;a href=&#34;http://jermolene.com/2008/08/13/what-is-the-point-of-osmosoft/&#34;&gt;their&lt;/a&gt; &lt;a href=&#34;http://philwhitehouse.blogspot.com/2008/01/managing-open-source-projects.html&#34;&gt;blogs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I went on to talk about a new pet project of mine which, following the TiddlyWiki convention for absurd names, has been dubbed JigglyWiki. (As it turns out, the French accent lends this name much more gravitas due to the soft &amp;#8216;j&amp;#8217;. Marvelous!)  &lt;a href=&#34;/blog/announcing-jigglywiki-a-tiddlywiki-experiment-with-jquery&#34;&gt;JigglyWiki deserves a blog post of its own&lt;/a&gt;. For now, through, let&amp;#8217;s just describe it as and experiment to explore what TiddlyWiki 3.0 might be like if it were to be developed from the ground up with the use of the jQuery javascript library and adopt an unobtrusive Javascript&amp;nbsp;approach. &lt;/p&gt;
&lt;p&gt;JigglyWiki (I can only hear that in a French accent now!) created quite a bit of discussion.  Proppy and Loic Dachary were particularly vocal about the potential for a TiddlyWiki implementation benefitting from unobtrusive javascript and built in a modular way with a library such as jQuery.  Debate raged about the need for a javascript library to properly manage plugins and dependancies. A topic that I&amp;#8217;m sure I will be discussing more in a later&amp;nbsp;post.&lt;/p&gt;
&lt;p&gt;My thanks go out to all of the folks I encountered at &lt;a href=&#34;http://upcoming.yahoo.com/event/1028826/&#34;&gt;TiddlyParis&lt;/a&gt;. Not only for their passion about TiddlyWiki, but also for making me feel so welcome and for conducting the entire event in English rather than in French which I know required considerable effort from some.  For what it&amp;#8217;s worth, my French stretched far enough for me to order my meal (which was bloomin&amp;#8217; great) and a few drinks without totally shaming myself. Big thanks also to &lt;a href=&#34;http://lewcid.org&#34;&gt;Saq Imtiaz&lt;/a&gt; for putting it all together. When&amp;#8217;s the next&amp;nbsp;one?!&lt;/p&gt;
&lt;p&gt;A&amp;nbsp;bient&amp;ocirc;t!&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Get your Task Management wiki</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/get-your-task-management-wiki"/>
            <updated>2008-07-16T10:00:00Z</updated>
            <published>2008-07-16T10:00:00Z</published>
            <id>/blog/get-your-task-management-wiki</id>
                        <category   scheme="/blog/tags"
                        term="tiddlywiki"
                        label="Tiddlywiki" />
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="osmosoft"
                        label="Osmosoft" />
            
            <content type="html">
                                &lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;http://farm4.static.flickr.com/3182/2674867706_0397fca6e0.jpg&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    After a bit of a hiatus, I&amp;#8217;ve recently been concentrating on developing my pet project, &lt;a href=&#34;http://getteamtasks.com&#34; title=&#34;getteamtasks - get your flexible task management wiki here.&#34;&gt;teamtasks&lt;/a&gt; again.  Teamtasks is a simple application built using TiddlyWiki to provide a place to manage your tasks alongside other content in your very own personal&amp;nbsp;wiki.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;This little project is by no means new. I have been tinkering with it for quite a while but have been working on other projects so &lt;a href=&#34;http://getteamtasks.com&#34;&gt;teamtasks&lt;/a&gt; has had to sit patiently in the corner and wait for me to get back to working on&amp;nbsp;it. &lt;/p&gt;
&lt;p&gt;Rather gratifyingly, quite a few people had seen the early work on &lt;a href=&#34;http://getteamtasks.com&#34;&gt;teamtasks&lt;/a&gt; and expressed interest in using it for all manor of purposes.  The attention made me realise that it was time to promote &lt;a href=&#34;http://getteamtasks.com&#34;&gt;teamtasks&lt;/a&gt; from its place in my playground (version 0.3 can &lt;a href=&#34;http://static.hawksworx.com/playground/teamtasks/index.html&#34;&gt;still be found there&lt;/a&gt; for those keen on glancing in the rear view mirror) to the big time! Or at least, a place of its own.  And so &lt;a href=&#34;http://getteamtasks.com&#34;&gt;getteamtasks.com&lt;/a&gt; was born. From there you can download the latest version (v0.4 at time of writing) and configure it to fit your task management&amp;nbsp;habits.&lt;/p&gt;
&lt;p&gt;This is an open source project and I&amp;#8217;m doing my best to resist the urge to tinker with it until I think that it&amp;#8217;s perfect before letting it out into the wild, so you may find things about teamtasks that don&amp;#8217;t work perfectly or you just don&amp;#8217;t like. If that&amp;#8217;s the case, then please let me know, or better yet, fix it and then show me.  I&amp;#8217;m living by the old &amp;#8220;Release early. Release often&amp;#8221; mantra here and welcome contributions, in the form of suggestions, bug reports, bug fixes, enhancements, criticism, praise, sticky buns, pats on the back, or&amp;nbsp;hugs.&lt;/p&gt;
&lt;p&gt;Along with the new site and new release, there is a new way to get in touch and keep track of developments. Obviously, you can leave your comments here, but now you can also &lt;a href=&#34;http://twitter.com/teamtasks&#34;&gt;follow teamtasks on Twitter&lt;/a&gt;. You&amp;#8217;d get to hear about teamtasks developments if you just &lt;a href=&#34;http://twitter.com/philhawksworth&#34;&gt;followed me on Twitter&lt;/a&gt; too of course, but then you&amp;#8217;d also be subject to &lt;a href=&#34;http://twitter.com/philhawksworth/statuses/857888010&#34;&gt;other&lt;/a&gt; &lt;a href=&#34;http://twitter.com/philhawksworth/statuses/853655405&#34;&gt;random&lt;/a&gt; &lt;a href=&#34;http://twitter.com/philhawksworth/statuses/852759376&#34;&gt;utterances&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After just a few hours of launching &lt;a href=&#34;http://getteamtasks.com&#34;&gt;getteamtasks.com&lt;/a&gt;, I have already had a nice response. This really helps to keep me motivated and on track. As the project gains a little momentum, it also gains more pairs of hands to do the work. We&amp;#8217;ve spent some time here at &lt;a href=&#34;http://www.osmosoft.com&#34;&gt;Osmosoft&lt;/a&gt; today planning the next set of enhancements for &lt;a href=&#34;http://getteamtasks.com&#34;&gt;teamtasks&lt;/a&gt; which will soon be listed on the site for you to&amp;nbsp;inspect.&lt;/p&gt;
&lt;p&gt;Roll on version&amp;nbsp;0.5!&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">NBA updates on Twitter</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/nba-updates-on-twitter"/>
            <updated>2008-05-19T10:00:00Z</updated>
            <published>2008-05-19T10:00:00Z</published>
            <id>/blog/nba-updates-on-twitter</id>
                        <category   scheme="/blog/tags"
                        term="twitter"
                        label="Twitter" />
                        <category   scheme="/blog/tags"
                        term="mashups"
                        label="Mashups" />
                        <category   scheme="/blog/tags"
                        term="python"
                        label="Python" />
                        <category   scheme="/blog/tags"
                        term="projects"
                        label="Projects" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/nba_results.jpg&#34; alt=&#34;Twitter NBA results&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Just in time for the 2008 &lt;span class=&#34;caps&#34;&gt;NBA&lt;/span&gt; playoffs, and heavily influenced by &lt;a href=&#34;http://blog.iclutton.com&#34;&gt;Robbie Clutton&amp;#8217;s&lt;/a&gt; marvellous &lt;a href=&#34;http://code.google.com/p/latestscorestwitter/&#34;&gt;&lt;span class=&#34;caps&#34;&gt;UK&lt;/span&gt; football scores&lt;/a&gt; service, I have created &lt;a href=&#34;http://twitter.com/NBA_Results&#34;&gt;&lt;span class=&#34;caps&#34;&gt;NBA&lt;/span&gt;&amp;nbsp;Results&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;This simple service monitors results published as &lt;span class=&#34;caps&#34;&gt;RSS&lt;/span&gt; feeds from &lt;a href=&#34;http://www.totallyscored.com/&#34;&gt;TotallyScores&lt;/a&gt; and then sends updates to twitter.  By following &lt;a href=&#34;http://twitter.com/NBA_Results&#34;&gt;&lt;span class=&#34;caps&#34;&gt;NBA&lt;/span&gt; Results&lt;/a&gt; on Twitter, you can get alerts of all &lt;span class=&#34;caps&#34;&gt;NBA&lt;/span&gt; match results.  Only interested in updates for your team? That&amp;#8217;s fine, you can choose instead to follow your team.  There are currently accounts&amp;nbsp;for:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/celtics_results&#34;&gt;http://twitter.com/celtics_results&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/cavs_results&#34;&gt;http://twitter.com/cavs_results&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/hornets_results&#34;&gt;http://twitter.com/hornets_results&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/jazz_results&#34;&gt;http://twitter.com/jazz_results&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/lakers_results&#34;&gt;http://twitter.com/lakers_results&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/magic_results&#34;&gt;http://twitter.com/magic_results&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/pistons_results&#34;&gt;http://twitter.com/pistons_results&lt;/a&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;a href=&#34;http://twitter.com/spurs_results&#34;&gt;http://twitter.com/spurs_results&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;

&lt;p&gt;I&amp;#8217;ll be adding more teams ready for next season, but if you want to make sure that you can get updates on Twitter of your team&amp;#8217;s results, feel free to email me (phawksworth [at] gmail [dot] com) and push your team to the top of my todo&amp;nbsp;list.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m also readying &lt;a href=&#34;http://twitter.com/mlb_results&#34;&gt;&lt;span class=&#34;caps&#34;&gt;MLB&lt;/span&gt; Results&lt;/a&gt; to provide Major League Baseball results. &lt;a href=&#34;http://twitter.com/mlb_results&#34;&gt;&lt;span class=&#34;caps&#34;&gt;MLB&lt;/span&gt; Results&lt;/a&gt; will be active very soon. As with the &lt;span class=&#34;caps&#34;&gt;NBA&lt;/span&gt; teams, please poke me if you want to get updates for your team and I&amp;#8217;ll be sure to create their&amp;nbsp;account.&lt;/p&gt;
&lt;p&gt;The code which drives this, is my first outing into the world of Python. You can &lt;a href=&#34;http://static.hawksworx.com/playground/tweet_results/tweet_results.py.txt&#34;&gt;find the code here&lt;/a&gt;. Feel free to take it and use it as you wish.  I also welcome feedback and suggestions on the code, please be gentle though, as I said, this is my first time playing with&amp;nbsp;Python.&lt;/p&gt;
&lt;p&gt;Many thanks to the nice folks at &lt;a href=&#34;http://www.carsonified.com&#34;&gt;Carsonified&lt;/a&gt; for permission to use their site&amp;#8217;s background image on &lt;a href=&#34;http://twitter.com/NBA_Results&#34;&gt;&lt;span class=&#34;caps&#34;&gt;NBA&lt;/span&gt; Results&lt;/a&gt;. 
Thanks also to &lt;a href=&#34;http://www.flickr.com/photos/balakov&#34;&gt;Balakov&lt;/a&gt; who published &lt;a href=&#34;http://www.flickr.com/photos/balakov/502470343/&#34;&gt;the image used&lt;/a&gt; for each &lt;span class=&#34;caps&#34;&gt;NBA&lt;/span&gt; team twitter account icon under a Creative Commons license on&amp;nbsp;flickr.&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">JSSpec bundle for Textmate helps with writing tests</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/jsspec-bundle-for-textmate-helps-with-writing"/>
            <updated>2008-04-18T10:00:00Z</updated>
            <published>2008-04-18T10:00:00Z</published>
            <id>/blog/jsspec-bundle-for-textmate-helps-with-writing</id>
                        <category   scheme="/blog/tags"
                        term="javascript"
                        label="Javascript" />
                        <category   scheme="/blog/tags"
                        term="development"
                        label="Development" />
                        <category   scheme="/blog/tags"
                        term="tools"
                        label="Tools" />
                        <category   scheme="/blog/tags"
                        term="tiddlywiki"
                        label="Tiddlywiki" />
                        <category   scheme="/blog/tags"
                        term="osmosoft"
                        label="Osmosoft" />
            
            <content type="html">
                                &lt;p class=&#34;excerpt&#34;&gt;
    Recently, we at &lt;a href=&#34;http://www.osmosoft.com&#34;&gt;Osmosoft&lt;/a&gt; have been trying to make good on one of our pledges: To introduce a unit testing framework to &lt;a href=&#34;http://www.tiddlywiki.com&#34;&gt;Tiddlywiki&lt;/a&gt;&amp;nbsp;development.
&lt;/p&gt;

&lt;p&gt;Along the way we examined several Javascript testing frameworks and found that JSSpec suited our needs quite nicely. JSSpec resembles the popular &lt;a href=&#34;http://rspec.info/&#34;&gt;RSpec&lt;/a&gt; testing framework popularly used by Ruby&amp;nbsp;developers.&lt;/p&gt;
&lt;p&gt;As a result, I have been dabbling away at writing tests in my favoured text editor - the rather lovely  &lt;a href=&#34;http://www.macromates.com/&#34;&gt;Textmate&lt;/a&gt;. Since this is a repetitive task, I figured that it was worth creating some helper to speed things along. Textmate offers an easy to make powerful bundles to automate tasks and help you in your code development and so I quickly put together a JSSpec bundle Textmate. This simple bundle offers a set of snippets which can act as a quick reference of what methods are available in JSSpec and let you rapidly create your test code.  Textmate users can &lt;a href=&#34;http://www.hawksworx.com/resources/JSSpec.tmbundle.zip&#34;&gt;download this bundle&lt;/a&gt; and just double-click it to make it available for use in&amp;nbsp;Textmate.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://static.hawksworx.com/JSSpec.tmbundle.zip&#34;&gt;&lt;img src=&#34;/media/images/jsspecbundle.png&#34; class=&#34;free&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I won&amp;#8217;t go into the workings of testing with JSSpec here, rather, you can learn about that at the &lt;a href=&#34;http://code.google.com/p/jsspec/&#34;&gt;official site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Feel free to take this bundle and modify it to fit your purpose.&amp;nbsp;Enjoy.&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">How to create and distribute lovely screencasts</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/how-to-create-and-distribute-lovely-screencasts"/>
            <updated>2008-03-28T10:00:00Z</updated>
            <published>2008-03-28T10:00:00Z</published>
            <id>/blog/how-to-create-and-distribute-lovely-screencasts</id>
                        <category   scheme="/blog/tags"
                        term="tips"
                        label="Tips" />
                        <category   scheme="/blog/tags"
                        term="osx"
                        label="Osx" />
            
            <content type="html">
                                &lt;p class=&#34;excerpt&#34;&gt;
    For a while I have been meaning to start posting screencasts of some of my work to spread the word, and to explain some of the details that are difficult to describe in&amp;nbsp;text.
&lt;/p&gt;

&lt;p&gt;After much tinkering, I think that I have arrived at a nice setup and have found a good way to distribute the screencasts, making them available to stream over the web or to download for consumption in your own sweet&amp;nbsp;time.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;#8217;ll share my findings so that you can set yourself up with a similar environment.  I use a Mac, and so these tips are levelled squarely at the Mac users out there. Sorry to everyone else, but I&amp;#8217;m just writing about what I&amp;nbsp;know.&lt;/p&gt;
&lt;p&gt;Here is an example screencast.  &lt;a href=&#34;http://vimeo.com/833608&#34; target=&#34;_blank&#34;&gt;The best view is in &lt;span class=&#34;caps&#34;&gt;HD&lt;/span&gt; over&amp;nbsp;here.&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;object data=&#34;http://www.vimeo.com/moogaloop.swf?clip_id=833608&amp;amp;server=www.vimeo.com&amp;amp;fullscreen=1&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00ADEF&#34; type=&#34;application/x-shockwave-flash&#34; height=&#34;250&#34; width=&#34;400&#34;&gt;
    &lt;param name=&#34;quality&#34; value=&#34;best&#34; /&gt;   &lt;param name=&#34;allowfullscreen&#34; value=&#34;true&#34; /&gt;   &lt;param name=&#34;scale&#34; value=&#34;showAll&#34; /&gt;  &lt;param name=&#34;movie&#34; value=&#34;http://www.vimeo.com/moogaloop.swf?clip_id=833608&amp;amp;server=www.vimeo.com&amp;amp;fullscreen=1&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00ADEF&#34; /&gt;
&lt;/object&gt; &lt;/p&gt;
&lt;p&gt;I think that in order to create a good screencasts you need to think about the following&amp;nbsp;things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Good content. Know what you&amp;#8217;re going to say/show and prepare yourself in&amp;nbsp;advance.&lt;/li&gt;
&lt;li&gt;Have a clean environment on&amp;nbsp;screen.&lt;/li&gt;
&lt;li&gt;Capture your content with the optimal&amp;nbsp;settings.&lt;/li&gt;
&lt;li&gt;Compress your content&amp;nbsp;correctly.&lt;/li&gt;
&lt;li&gt;Host and distribute your content in the most effective&amp;nbsp;way.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let&amp;#8217;s take a look at those in more&amp;nbsp;detail.&lt;/p&gt;
&lt;h2&gt;1 - Good&amp;nbsp;content&lt;/h2&gt;
&lt;p&gt;I think that it is worth practicing what you are going to show and getting everything ready in advance so that you don&amp;#8217;t waste any time. As far as having something compelling to show, I&amp;#8217;m afraid that you&amp;#8217;re on your own on this&amp;nbsp;one.&lt;/p&gt;
&lt;h2&gt;2 - Have a clean environment on&amp;nbsp;screen.&lt;/h2&gt;
&lt;p&gt;Removing clutter which can be distracting and untidy is a good way to help communicate you message more effectively. Since I don&amp;#8217;t want to have to disrupt the setup that I use for my everyday work, I created a new user on my Mac called Demo which I use not only for capturing screencasts, but also for when I need to use my laptop to give a presentation using a projector.  Having this separate user account allows me to keep the desktop totally clear and to keep it set to the optimal screen resolution for captures and projection. I chose to hide any mounted drives and whatnot by modifying my Finder preferences. I also increased the font size and icon size in the Finder View&amp;nbsp;Options.&lt;/p&gt;
&lt;p&gt;&lt;img class=&#34;free&#34; src=&#34;/media/images/finder-prefs.jpeg&#34; alt=&#34;Finder preferences&#34; /&gt; &lt;/p&gt;
&lt;p&gt;There is also value in having a simple, clean wallpaper displayed. Again, the aim is to reduce noise and distractions.  People don&amp;#8217;t all need to see the photos of your kids learning to ride a bike while they are trying to absorb what you are&amp;nbsp;demonstrating.&lt;/p&gt;
&lt;h2&gt;3 - Capture your content with the optimal&amp;nbsp;settings.&lt;/h2&gt;
&lt;p&gt;I chose to use &lt;a href=&#34;http://www.ambrosiasw.com/utilities/snapzprox/&#34; target=&#34;_blank&#34;&gt;SnapzPro&lt;/a&gt; as my screen capture software. There are others, but this suited my needs and worked well for me.  The screen resolution that you choose is important here. It took me a little time to settle on the right screen resolution.  Initially I chose 1024x640.  &lt;a href=&#34;http://www.ambrosiasw.com/utilities/snapzprox/&#34;&gt;SnapzPro&lt;/a&gt; allows you to scale your capture which I did, choosing 70%. This gave a nice result which was big and clear and the file size was also good.  In the end, I increased my screen resolution for capture to 1280x800 and didn&amp;#8217;t scale it down at&amp;nbsp;all. &lt;/p&gt;
&lt;p&gt;The reason for this is due to the channel that I chose to distribute my content through. More on that in point 5.  I also lowered the frame rate a little. I dropped it to 18 frames per second in order to save a little on the file&amp;nbsp;size.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Capture settings&#34; class=&#34;free&#34; src=&#34;/media/images/snaps-capture-settings.jpg&#34; /&gt; &lt;/p&gt;
&lt;p&gt;I also like to let the viewer see what keys I am pressing during demonstrations. For this I used the rather handy &lt;a href=&#34;http://www.boinx.com/mousepose/&#34; target=&#34;_blank&#34;&gt;Mousepose&lt;/a&gt; application. This also allows you to highlight the location of the mouse&amp;nbsp;pointer. &lt;/p&gt;
&lt;h2&gt;4 - Compress your content&amp;nbsp;correctly.&lt;/h2&gt;
&lt;p&gt;Now that you have recorded your content, you need to make sure that you compress it appropriately. This will of course be influenced by the your chosen hosting and distribution method. I compressed to h.264 to give good quality output while squeezing the file size down. My other settings are shown&amp;nbsp;below.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Compression settings&#34; src=&#34;/media/images/compression-settings.jpg&#34; /&gt; &lt;/p&gt;
&lt;h2&gt;5 - Host and distribute your content in the most effective&amp;nbsp;way.&lt;/h2&gt;
&lt;p&gt;I wanted to be able to embed my screencasts on my website, but also allow any interested viewers to be able to download them to keep.  Reducing any barriers to accessing the screencasts was important to me, so I didn&amp;#8217;t want to require the viewer to install any software before being able to view them. For that reason, a flash based video seemed sensible, due to the ubiquity of the flash player in browsers. I also wanted the screencasts to be of a suitably video quality. &lt;a href=&#34;http://www.vimeo.com&#34;&gt;Vimeo.com&lt;/a&gt; will host &lt;span class=&#34;caps&#34;&gt;HD&lt;/span&gt; content and stream content to your site. A bit of a sticking point at the moment is that they don&amp;#8217;t yet allow &lt;span class=&#34;caps&#34;&gt;HD&lt;/span&gt; streaming to your embedded videos. You need to view them on their site for that. Apparently, this is will be available soon.  They allow you to download the videos from their site and their fullscreen viewer is super-slick. &lt;a href=&#34;http://www.vimeo.com&#34;&gt;Vimeo.&lt;/a&gt; fitted my requirements pretty well and I heartily recommend them. Their site is slick and they offer lots of support on how to best create your video&amp;nbsp;content.&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Observing Twitter behaviours</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/observing-twitter-behaviours"/>
            <updated>2008-01-07T10:00:00Z</updated>
            <published>2008-01-07T10:00:00Z</published>
            <id>/blog/observing-twitter-behaviours</id>
                        <category   scheme="/blog/tags"
                        term="observations"
                        label="Observations" />
                        <category   scheme="/blog/tags"
                        term="twitter"
                        label="Twitter" />
            
            <content type="html">
                                &lt;p class=&#34;excerpt&#34;&gt;
    It seems that the &lt;a href=&#34;http://twitter.com&#34;&gt;Twitterverse&lt;/a&gt; is all of a flutter following recent blog posts from Phillie Casablanca and Paul Downey.  I&amp;#8217;m watching this with keen interest and it has been the subject of much impassioned discussion in our&amp;nbsp;office.
&lt;/p&gt;

&lt;p&gt;Frustrated by the noisy habits of &lt;a href=&#34;http://twitter.com/gapingvoid&#34;&gt;some&lt;/a&gt; &lt;a href=&#34;http://twitter.com/scobleizer&#34;&gt;twitterers&lt;/a&gt;, &lt;a href=&#34;http://philwhitehouse.blogspot.com/&#34; title=&#34;The Casablanca Weblog&#34;&gt;Phil&lt;/a&gt; &lt;a href=&#34;http://philwhitehouse.blogspot.com/2008/01/tweetaholics.html&#34; title=&#34;The Casablanca Weblog: Tweetaholics&#34;&gt;opened a discussion&lt;/a&gt; on good Twitter practices that led to him posting the &lt;a href=&#34;http://philwhitehouse.blogspot.com/2008/01/ten-commandments-of-twitter.html&#34; title=&#34;The Casablanca Weblog: The Ten Commandments of Twitter&#34;&gt;10 Commandments of Twitter&lt;/a&gt;, an attempt to articulate some of the good, and highlight some of the annoying, practices when posting tweets. For the record, I&amp;#8217;m right behind him, and was quick to follow the 10 commandments. It has been interesting though, to observe the response to his post, and to see how many people agree and how many people strongly object to his&amp;nbsp;suggestions.&lt;/p&gt;
&lt;p&gt;Many people, &lt;a href=&#34;http://www.evilgeniuschronicles.org/wordpress/2008/01/06/in-my-second-month-on-twitter-i-reject-your-commandments/&#34;&gt;object&lt;/a&gt; to being told how they should use Twitter, and that&amp;#8217;s fair enough. It isn&amp;#8217;t for any one person to dictate how we should all use [Twitter][].  Rather, patterns of usage will emerge and we will all find our own ways of using Twitter to get the most out of it. It is reasonable though, for people to express how they think the best value can be derived from Twitter and to describe some useful guidelines for people to either adopt, or not, as they wish.  In my eyes that is what Phil was doing with the [10 Commandments of Twitter][]. I also think that Phil will be the first to admit that the use of the word &amp;#8216;commandment&amp;#8217; may be a bit strong, but it was used to elicit a response. &lt;a href=&#34;http://terraminds.com/twitter/query?query=10commandments+&amp;amp;submit=search+in+updates&#34;&gt;Job&amp;nbsp;done!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sharing similar frustrations, &lt;a href=&#34;http://blog.whatfettle.com/2008/01/05/are-you-a-twitter-twit-or-a-twerp&#34; title=&#34;Whatfettle - Paul Downey (psd)&#34;&gt;Paul Downey&lt;/a&gt; took things a step further on his blog describing two different camps of Twitter users: &lt;a href=&#34;http://blog.whatfettle.com/2008/01/05/are-you-a-twitter-twit-or-a-twerp/#Twit&#34; title=&#34;Whatfettle - Paul Downey (psd)&#34;&gt;Twits&lt;/a&gt; and &lt;a href=&#34;http://blog.whatfettle.com/2008/01/05/are-you-a-twitter-twit-or-a-twerp/#Twit&#34; title=&#34;Whatfettle - Paul Downey (psd)&#34;&gt;Twerps&lt;/a&gt;.  Judging by some of the responses to that post, many are upset at being labelled a Twit or a Twerp, thinking that the terms are a little strong. (Paul clarified his use of the terms recently &lt;a href=&#34;http://twitter.com/psd/statuses/571252882&#34;&gt;in a tweet&lt;/a&gt;) I personally find the terms merely playful and see that I am a Twit who sometimes displays Twerpish&amp;nbsp;tendencies(!).&lt;/p&gt;
&lt;p&gt;One worry that I do have though, and this was &lt;a href=&#34;http://confusedofcalcutta.com/2008/01/06/freewheeling-about-social-media/&#34;&gt;articulated by &lt;span class=&#34;caps&#34;&gt;JP&lt;/span&gt; Rangaswami on his blog&lt;/a&gt; much better than I am likely to do here, is the experience of the Newbie.  We should avoid creating an environment which is intimidating and unwelcoming to the new user.  Some of the emerging &lt;a href=&#34;http://microformats.org/wiki/twitter-nanoformats&#34;&gt;nanoformats&lt;/a&gt; add great value to Twitter, but we must never try and dictate that they are used by all. Instead, we should provide complete, and accessible information on them for anyone who is interested enough to use them.  I for one was scared off &lt;span class=&#34;caps&#34;&gt;IRC&lt;/span&gt; and the like for years by the seemingly ferocious users who knew the conventions inside and out, but didn&amp;#8217;t appear to tolerate newcomers.  I&amp;#8217;d hate for twitter to end up like that.  We should use things like the &lt;a href=&#34;http://twitter.com/tencommandments&#34;&gt;10 Commandments of Twitter&lt;/a&gt; as useful tips for people, rather than an iron rod with which to force people to use Twitter &amp;#8216;our&amp;nbsp;way.&amp;#8217;&lt;/p&gt;
&lt;p class=&#34;meta&#34;&gt;
    Photo credit: &lt;a href=&#34;http://www.flickr.com/photos/crashmaster/3733005619/in/photostream/&#34;&gt;Mike&amp;nbsp;Hoff&lt;/a&gt;
&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Osmosoft return from LeWeb3 intact</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/osmosoft-return-from-leweb3-intact"/>
            <updated>2007-12-17T10:00:00Z</updated>
            <published>2007-12-17T10:00:00Z</published>
            <id>/blog/osmosoft-return-from-leweb3-intact</id>
                        <category   scheme="/blog/tags"
                        term="news"
                        label="News" />
                        <category   scheme="/blog/tags"
                        term="osmosoft"
                        label="Osmosoft" />
                        <category   scheme="/blog/tags"
                        term="events"
                        label="Events" />
            
            <content type="html">
                                &lt;p&gt;&lt;img src=&#34;/media/images/le-web-3.jpg&#34; alt=&#34;LeWeb3&#34; class=&#34;free&#34; /&gt;
&lt;p class=&#34;excerpt&#34;&gt;
    Last week the entire &lt;a href=&#34;http://www.osmosoft.com&#34;&gt;Osmosoft&lt;/a&gt; team visited Paris to attend the &lt;a href=&#34;http://www.leweb3.com&#34;&gt;LeWeb3&lt;/a&gt; conference.  Initially, we had intended to be attending simply as delegates, but as time went by, we decided that we might be able to build something handy to use at the conference, and that perhaps, others might find it useful&amp;nbsp;too.
&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;And so, &lt;a href=&#34;http://ripplerap.com&#34;&gt;RippeRap&lt;/a&gt; (then dubbed &amp;#8216;TiddleLeWeb&amp;#8217;) was conceived. We considered that building a tool based on &lt;a href=&#34;http://www.tiddlywiki.com&#34;&gt;TiddlyWiki&lt;/a&gt; where you could make notes on the conference and effortlessly share those notes with others, while being shielded from network hiccups, would be cool. To be ready, we had much to do, and little time to do&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://ripplerap.com&#34;&gt;&lt;img src=&#34;/media/images/ripplerap.jpg&#34; class=&#34;free&#34;&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;We found that getting up-to-date and accurate information about the agenda from the &lt;a href=&#34;http://www.leweb3.com&#34;&gt;LeWeb3 website&lt;/a&gt;, was a little fiddly, so including an agenda and using it as the basic navigation in RippleRap seemed like a natural choice. For added value, we also used &lt;a href=&#34;http://www.microformats.org&#34;&gt;Microformats&lt;/a&gt; to markup the agenda so that you could export the sessions to your calendar and so&amp;nbsp;on.&lt;/p&gt;
&lt;p&gt;Since we were planning to hand out copies of RippleRap to other delegates, we decided to have a stand at the conference so that we could explain what we were doing with RippleRap, and in the open source world. Osmosoft and &lt;a href=&#34;http://bt.com&#34;&gt;&lt;span class=&#34;caps&#34;&gt;BT&lt;/span&gt;&lt;/a&gt; shared a stand which was busy throughout. I think that having &lt;a href=&#34;http://blog.whatfettle.com&#34;&gt;Paul Downey&lt;/a&gt; around to talk people through his excellent, and popular uber-doodle, &amp;#8216;&lt;a href=&#34;http://map.whatfettle.com&#34;&gt;The Web Is Agreement&lt;/a&gt;&amp;#8216; (more than 60 thousand views &lt;a href=&#34;http://www.flickr.com/photos/psd/1805709102/&#34;&gt;on flickr&lt;/a&gt; at time of writing) helped draw people to the stand.  I rather think that the retro-chic &lt;a href=&#34;http://www.flickr.com/photos/philliecasablanca/2070476239/&#34;&gt;bat phone&lt;/a&gt; also raised a smile.  We enabled every copy of RippleRap to make free calls to the bat phone at the stand in order to get support. Building that feature was made easy with &lt;a href=&#34;http://mojo.bt.com&#34;&gt;Mojo&lt;/a&gt;, &lt;span class=&#34;caps&#34;&gt;BT&lt;/span&gt;&amp;#8217;s &lt;a href=&#34;http://en.wikipedia.org/wiki/Representational_State_Transfer&#34;&gt;&lt;span class=&#34;caps&#34;&gt;REST&lt;/span&gt;&lt;/a&gt; exposure to its &lt;a href=&#34;http://sdk.bt.com&#34;&gt;21cSDK&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/psd/sets/72157602805227511/&#34;&gt;&lt;img src=&#34;/media/images/paul-explains-twia-to-yossi-vardi.jpg&#34; alt=&#34;Paul explains TWIA to Yossi Vardi&#34;&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;RippleRap was distributed with the mantra &amp;#8216;release early, release often&amp;#8217; ringing in our ears. There is no arguing with the suggestion that this is an application in it&amp;#8217;s early days.  Releasing software in this way has been something of a revelation to me. I&amp;#8217;m used to a more traditional release cycle, where you possessively guard your work until you are good and ready to face the scrutiny. As I attend more conferences like this, I hear &amp;#8216;release early, release often&amp;#8217; more and more regularly, and it is always met with lots of enthusiastic head nodding from around the room. There has been a lot of feedback and we are finding it all valuable.  Hopefully, the next release of RippleRap will have some of the useful improvements that were&amp;nbsp;suggested.&lt;/p&gt;
&lt;p&gt;The LeWeb3 conference was, on the whole, pretty good. Some of the speakers where really interesting, and I found some unexpected gems. &lt;a href=&#34;http://en.wikipedia.org/wiki/Yossi_Vardi&#34;&gt;Yossi Vardi&lt;/a&gt; and &lt;a href=&#34;http://www.philippe-starck.com/&#34;&gt;Philippe Starck&lt;/a&gt; were really entertaining, although I gather that some of these talks were already available on YouTube.  Listening to &lt;span class=&#34;caps&#34;&gt;BT&lt;/span&gt;&amp;#8217;s &lt;a href=&#34;http://www.confusedofcalcutta.com&#34;&gt;&lt;span class=&#34;caps&#34;&gt;JP&lt;/span&gt; Rangaswami&lt;/a&gt; was as ever, rather inspiring. I was also lucky enough to listen in on several ad hoc discussions that &lt;span class=&#34;caps&#34;&gt;JP&lt;/span&gt; had around the conference, and noted that you rarely saw &lt;span class=&#34;caps&#34;&gt;JP&lt;/span&gt; talking, without a small crowd gathering around him. I unexpectedly found myself on stage with &lt;span class=&#34;caps&#34;&gt;JP&lt;/span&gt; and am now enjoying the glory of photos on flickr described &amp;#8220;&lt;span class=&#34;caps&#34;&gt;JP&lt;/span&gt; Rangaswami takes the stage at Le Web, supported by Phil Hawksworth&amp;#8221;. Brilliant! (just don&amp;#8217;t tell anyone that I was up there in nothing more than a &amp;#8216;helper-monkey&amp;#8217;&amp;nbsp;capacity!)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/psd/2104675535/&#34;&gt;&lt;img src=&#34;/media/images/jp-presenting.jpg&#34; alt=&#34;JP presenting&#34;&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;There were a couple of things about LeWeb3 that I did find a little irksome though (aside from the absurd name - this is not the third year of the LeWeb conference, the 3 refers to web 3.0!). I found that the time allocation for the various speakers was a bit odd at times.  It seemed that some panel discussions that featured &lt;a href=&#34;http://loiclemeur.com/&#34;&gt;Loic Le Meur&lt;/a&gt; (organiser of LeWeb3) went on for a very long time, and I found them, to be blunt, a little self indulgent.  This is all well and good except that several other speakers had their time trimmed to ridiculously short slots.  Notably, &lt;a href=&#34;http://www.searls.com/&#34;&gt;Doc Searls&lt;/a&gt;, who I was particularly looking forward to listening to, had to rush through his presentation at lightening speed and was told that he didn&amp;#8217;t have time to take questions.&amp;nbsp;Booo.&lt;/p&gt;
&lt;p&gt;I was also really disappointed at the handling of some of the questions from the auditorium by Loic. At times I found him rather rude in the way he dealt with those asking questions, especially if the questions were in any way challenging to the panel.  Perhaps Mr Le Meur was just trying to take care of his speakers by shielding them from any potential awkwardness on stage, and the rudeness was just a artefact of a slight language barrier, but I suspect&amp;nbsp;not.&lt;/p&gt;
&lt;p&gt;The facilities at LeWeb3 were very good. I had reservations about the conference being split into 3 separate buildings, but this was not actually a problem.  The staging and audiovisuals where outstanding. The food was superb and the provision of power on every row of the main auditorium was very welcome.  I am led to believe that a significant amount of money had been spent on providing free wifi, but sadly the wifi was rather unreliable - but hey, that&amp;#8217;s what you get at conferences, and why a tool like RippleRap might be a handy thing to have at your&amp;nbsp;fingertips.&lt;/p&gt;
&lt;p&gt;Check out the photos that Osmosoft took at LeWeb3. Several Osmosoftians &lt;a href=&#34;http://www.flickr.com/photos/psd/sets/72157603456702447/&#34;&gt;more&lt;/a&gt; &lt;a href=&#34;http://www.flickr.com/photos/philliecasablanca/sets/72157603435510986/&#34;&gt;talented&lt;/a&gt; &lt;a href=&#34;http://www.flickr.com/photos/carrierdetect/sets/72157603197236730&#34;&gt;than&lt;/a&gt; &lt;a href=&#34;http://www.flickr.com/photos/philhawksworth/sets/72157603446183588&#34;&gt;I&lt;/a&gt; have posted pictures at&amp;nbsp;flickr.&lt;/p&gt;            </content>
        </entry>
            <entry>
            <title type="html">Opening a Finder window from the Terminal</title>
            <author><name>Phil Hawksworth</name></author>
            <link href="/blog/opening-a-finder-window-from-the-terminal"/>
            <updated>2007-11-04T10:00:00Z</updated>
            <published>2007-11-04T10:00:00Z</published>
            <id>/blog/opening-a-finder-window-from-the-terminal</id>
                        <category   scheme="/blog/tags"
                        term="osx"
                        label="Osx" />
                        <category   scheme="/blog/tags"
                        term="tips"
                        label="Tips" />
            
            <content type="html">
                                &lt;p class=&#34;excerpt&#34;&gt;
I stumbled upon a simple method for opening a Finder window at your current Terminal session location recently.  Since it is something that I have a regular need for, I thought that there might be other Mac users out there who might also find this useful from time to&amp;nbsp;time.
&lt;/p&gt;

&lt;p&gt;To set things up so that it is easy to use whenever you need it, you just need to follow these two&amp;nbsp;steps:&lt;/p&gt;
&lt;p&gt;First, using your &lt;a href=&#34;http://www.macromates.com&#34;&gt;preferred text editor&lt;/a&gt; create a file which contains this&amp;nbsp;command:&lt;/p&gt;
&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c&#34;&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;open /System/Library/CoreServices/Finder.app &lt;span class=&#34;nv&#34;&gt;$&lt;span class=&#34;caps&#34;&gt;PWD&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;Bash&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;You should name this file with whatever you want to use to call it later.  I named it &lt;code&gt;fndr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Second, you should place this somewhere that is visible on your path. I collect any little utility scripts like this together in a directory called &lt;code&gt;Utils&lt;/code&gt; which I added to my path to make all of its contents easily&amp;nbsp;accessible.&lt;/p&gt;
&lt;p&gt;Now you can simply type &lt;code&gt;fndr&lt;/code&gt; in your Terminal window to open a Finder at your present&amp;nbsp;directory.&lt;/p&gt;
&lt;p&gt;If you need help adding something to your path, I recommend creating a file in your home directory (it may even already exist) called &lt;code&gt;.bash_profile&lt;/code&gt;.  This file gets invoked whenever you enter the Terminal&amp;nbsp;environment. &lt;/p&gt;
&lt;p&gt;Add an item to your path by entering a line something like this to your &lt;code&gt;.bash_profile&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nb&#34;&gt;export &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;&lt;span class=&#34;caps&#34;&gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;$&lt;span class=&#34;caps&#34;&gt;PATH&lt;/span&gt;:/Users/PhilH/Utils&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;Bash&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p&gt;I&amp;#8217;m always on the look out for bits and pieces like this to help make my life easier in Mac &lt;span class=&#34;caps&#34;&gt;OSX&lt;/span&gt;.  Not that I think that things are difficult in this excellent &lt;span class=&#34;caps&#34;&gt;OS&lt;/span&gt;, but there is always room for shortcuts to speed up common tasks. If you have any little gems that might be useful to the Mac &lt;span class=&#34;caps&#34;&gt;OSX&lt;/span&gt; world, it would be great if you could post them in the comments.&amp;nbsp;Thanks!&lt;/p&gt;
&lt;h3&gt;Update:&lt;/h3&gt;

&lt;p&gt;This can simple be done with a single command already as it turns out. Just use&amp;nbsp;this:&lt;/p&gt;

&lt;div class=&#34;codebox&#34;&gt;&lt;figure class=&#34;code&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;open .&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;figcaption&gt;Bash&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;            </content>
        </entry>
    </feed>
