diff --git a/.gitignore b/.gitignore index c0c0324f..5a64202d 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules +dist _site .sass-cache diff --git a/README.md b/README.md index 95ae2110..276e3ba1 100755 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ To build the site you need: - Gulp -To setup the build environment, clone the repository and then in the working directory run: `npm install` to intsall any node modules required by grunt. +To setup the build environment, clone the repository and then in the working directory run: `npm install` to install any node modules required by grunt. The site can then be built and served via Jekyll: diff --git a/dist/blog/announcing-jigglywiki-a-tiddlywiki-experiment/index.html b/dist/blog/announcing-jigglywiki-a-tiddlywiki-experiment/index.html deleted file mode 100644 index 2fd6aa9a..00000000 --- a/dist/blog/announcing-jigglywiki-a-tiddlywiki-experiment/index.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - Announcing JigglyWiki. A TiddlyWiki experiment with jQuery - - - - -
-
- -
-
    -
    -

    Announcing JigglyWiki. A TiddlyWiki experiment with jQuery

    - -
    - Posted by Phil Hawksworth on -
    and tagged - - - #javascript - - - #jquery - - - and - - #tiddlywiki - -
    - -
    -
    - -
    -
    -
    -

    - 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't like the idea of relying on someone else's code which I couldn't easily inspect. Secondly, at the time there weren't really any libraries. Then there were a few, but they were all, well, to be blunt, a bit pants. -

    -
    -
    - - - - -

    - That all changed for me when jQuery came along. jQuery is a lightweight, elegant but powerful Javascript library originally developed by John Resig. jQuery provides fast and efficient interrogation and manipulation of the DOM and borrows conventions from CSS and XPATH to provide concise and expressive queries to be constructed. It's worth checking out if you haven't already. TiddlyWiki has been around since before the existence of Javascript libraries and long before jQuery 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 TiddlyWiki. -

    -

    - Recently I have been longing to experiment with replacing a lot of the TiddlyWiki core with code built to take advantage of jQuery. 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 jQuery at its core. I settled on a number of objectives: -

    -
      -
    1. To use jQuery to provide the core TiddlyWiki functions.
    2. -
    3. To make the code modular such that the core could be very small and additional functionality could easily be included via bespoke jQuery plugins.
    4. -
    5. To use unobtrusive Javascript
    6. -
    7. For the document to be sensibly parsed by screen readers and web crawlers.
    8. -
    9. To allow navigation of the document even without Javascript
    10. -
    11. To use HTML and CSS which is valid according to the W3C
    12. -
    13. To conform to the TiddlyWiki naming convention and adopt a suitably ridiculous working title for the project
    14. -
    -

    - 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 groups! -

    -

    - 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 CSS or Javascript are not available. Below are a few different build which demonstrate those scenarios. -

    -
      -
    1. Just the HTML. I've not included CSS or any of the Javascript here. The data store is visible and you can navigate the document via the tiddler links.
    2. -
    3. The HTML and CSS. 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 in.
    4. -
    5. HTML, CSS and Javascript. Now the data store is hidden and the default content is displayed with additional, Javascript dependent functionality included.
    6. -
    -

    - I'd love to get comments on this approach. I'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'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 TiddlyWiki subversion repository More to come! -

    - - - - -
    -
    - - - - - - - - - - - - - - - diff --git a/dist/blog/bootrapping-front-end-development-with-yeoman/index.html b/dist/blog/bootrapping-front-end-development-with-yeoman/index.html deleted file mode 100644 index 7b6c67cb..00000000 --- a/dist/blog/bootrapping-front-end-development-with-yeoman/index.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - Bootstrapping front-end development with Yeoman - - - - -
    -
    - -
    -
      -
      -

      Bootstrapping front-end development with Yeoman

      - -
      - Posted by Phil Hawksworth on -
      and tagged - - - #development - - - #html - - - #javascript - - - and - - #resources - -
      - -
      -
      - -
      -
      -
      -

      - Recently Addy Osmani posted a sneak peek at Yeoman.io, which is described as a client-side stack, comprised of tools and frameworks that can help developers build beautiful web applications. For me, this is incredibly timely as at R/GA we have been making some effort to build tools to help us streamline our front-end development efforts, and keep the quality high. -

      -
      -
      - - - -

      - At the time of writing, Yeoman was not quite ready to be released, but the teaser video and description of its capabilities look bang on to me. It tackles things like: -

      - -

      - Addy gives a nice overview of some of the basics that all good front-end developers should aim to have as part of their development workflow in his blog post to accompany the introduction to Yeoman. I also particularly like the slightly more involved talk on the same topic from Paul Irish at Google IO. -

      -

      - It is little wonder that front-end development practices are coming of age gieven the ever increasing complexity and sophistication in web development. Great stuff. -

      - - - -
      -
      - - -
      -
      - You can keep up to date with Yeoman on its Google Plus page - -
      -
      - - - - - - - - - - - - - - diff --git a/dist/blog/data-viz-at-digital-dumbo/index.html b/dist/blog/data-viz-at-digital-dumbo/index.html deleted file mode 100644 index c28cbf35..00000000 --- a/dist/blog/data-viz-at-digital-dumbo/index.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - Data viz at Digital Dumbo - - - - -
      -
      - -
      -
        -
        -

        Data viz at Digital Dumbo

        - -
        - Posted by Phil Hawksworth on -
        and tagged - - - #events - - - #javascript - - - and - - #rga - -
        - -
        -
        - -
        -
        -
        -

        - This week, as the Digital Shoreditch festival draws to a close, a few of us from R/GA got the chance to attend an evening to talk with other London agencies and start-ups about data visualisation. We couldn't resist the urge to build a little something to take along. -

        -
        - -
        - -

        - The evening event, which was a bit of a mixer following a one day conference hosted by Digital Dumbo, took place at the CampusLondon in Shoreditch. Local creative companies were invited to create a data visualisation about some aspect of their company. There were interesting graphics exhibited by Moo, Carrot Creative and several others. We, however took the chance to make something which people could interact with. -

        - -

        - The temptation was to engineer something very ambitious, but this was a quick project which we would need to pull together between other jobs, so we did our best to keep the idea simple. -

        -

        - The result was a rendering of the Instagram activity of R/GA-ers from offices around the world. Anthony built a simple web form which was circulated to all of the company asking for access to their Instagram photos. It also identified which of our offices they are based in and then went off to gather up the instagram content. A bit of harvesting later and we had a rich set of data which we could serve to a front-end via a simple API. -

        -

        - The front-end, built with HTML, JavaScript and Canvas by Pedro illustrated the geographical spread of the location of Instagram photos of people from each office. Plotting the distance between photo and office showed differing habits and characteristics at our different offices. It also made a fun slideshow of people's images. -

        -

        - Being able to touch the display to explore different offices and their photos brought people closer to the data, and it was interesting to watch them play. -

        - -

        Just an ad agency

        - -

        - I was a little surprised by a comment that I heard from several people. -

        -
        - "How come you are writing code? I thought you were just an ad agency." -
        -

        - It's nice to get a chance to dispel that myth and tell people about the products and platforms we build at R/GA. we create a lot with code, and sharing a tiny glimpse of that was lots of fun. -

        - - - - - - - - - -
        -
        - - - - - - - - - - - - - - - diff --git a/dist/blog/developing-a-side-project/index.html b/dist/blog/developing-a-side-project/index.html deleted file mode 100644 index d174f409..00000000 --- a/dist/blog/developing-a-side-project/index.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - Developing a side project - - - - -
        -
        - -
        -
          -
          -

          Developing a side project

          - -
          - Posted by Phil Hawksworth on -
          and tagged - - - #news - - - #observations - - - and - - #projects - -
          - -
          -
          - -
          -
          -
          -

          - 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 others. -

          -
          -
          - - - -

          - 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 overlooked.) -

          -

          - 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'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're all familiar with the maxim that ideas are cheap, and that the value lies in the execution. I'm a strong believer in that and indeed many of us are brimming with ideas for things that we'd like to make if only we had more time, money, development skills, design skills or what have you. -

          -

          - 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 "big ideas". Individually, we may not have the requisite skills to realise many of these fanciful ambitions. Together, we can take it on. -

          -

          - Our view was that a small, carefully assembled group 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 'make stuff'. -

          -

          - So that is what we are doing. We are just making things that we wish existed already. For now, it's just for fun. And boy, is it ever! -

          -

          - Our first project, which I promised, I'd return to, is very much in its infancy but starting to shape up nicely. We're entering an already crowded space, that of finding and reviewing pubs and bars, where we think we can do a better job. The UK, 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't think the experience of using them, or the quality of the data is good enough. -

          -

          - And so, we'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) things. -

          -

          - I'll be talking about this more as it progresses, but for now, I'm just loving getting my hands dirty with building something for the Web. I don't do as much hands on development these days as I used to, so it feels good. Working with Django, JQuerymobile, Fabric, Vagrant, Amazon AWS, PivotalTracker, Github and other things on our own terms, and to satisfy goals that we ourselves have set, is fun and exciting. -

          -

          - 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 target. -

          - - - - -
          -
          - - -
          -
          - Photo credit: Mike Hoff - -
          -
          - - - - - - - - - - - - - - diff --git a/dist/blog/enthusiasm-and-good-food-at-tiddlyparis/index.html b/dist/blog/enthusiasm-and-good-food-at-tiddlyparis/index.html deleted file mode 100644 index 48772b48..00000000 --- a/dist/blog/enthusiasm-and-good-food-at-tiddlyparis/index.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - Enthusiasm and Good Food at TiddlyParis - - - - -
          -
          - -
          -
            -
            -

            Enthusiasm and Good Food at TiddlyParis

            - -
            - Posted by Phil Hawksworth on -
            and tagged - - - #events - - - #osmosoft - - - and - - #tiddlywiki - -
            - -
            -
            - -
            -
            -
            -

            - Yesterday I was fortunate to be able to make the quick trip over to Paris to attend a meeting of TiddlyWiki enthusiasts at TiddlyParis. Arranged by long time TiddlyWiki community member and Una Mesa stalwart Saq Imtiaz, 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 time. -

            -
            -
            - - - - -

            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 better.

            - -

            The spectrum of TiddlyWiki experience was pleasingly broad.

            - -

            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 TeamTasks 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 them.

            - -

            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 PIM on his 4 year old tablet PC. The file was well over 3MB 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'll need to speak French though as he had also carried out extensive translation.

            - -
            - -

            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 animations!)

            - -

            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 TiddlyWiki_CP 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 TiddlyWikis.

            - -
            - - -

            I was very keen to meet BidiX who has quietly been producing great TiddlyWiki assets for some time. Recent work includes iTW, the best iPhone TiddlyWiki that I know of. The TiddlyParis edition 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 TiddlyHome, a lovely and seemingly simple hosted TiddlyWiki resource which he recently deployed to Google App Engine for its next release (which we got to play with, but he insists isn't quite ready for prime time yet).

            - -

            For my part I spoke about TeamTasks, which I was happy to learn was being used to some degree by several people around the table. I also answered questions about BTs interest in TiddlyWiki and motives for being involved in such a project and community. I'll not go over that again here, as it has already been well articulated by several of my colleagues on their blogs.

            - -

            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 'j'. Marvelous!) JigglyWiki deserves a blog post of its own. For now, through, let'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 approach.

            - -

            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'm sure I will be discussing more in a later post.

            - -

            My thanks go out to all of the folks I encountered at TiddlyParis. 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's worth, my French stretched far enough for me to order my meal (which was bloomin' great) and a few drinks without totally shaming myself. Big thanks also to Saq Imtiaz for putting it all together. When's the next one?!

            - -

            A bientôto!

            - - - - - -
            -
            - - - - - - - - - - - - - - - diff --git a/dist/blog/excess-cms-and-stink-at-txjs/index.html b/dist/blog/excess-cms-and-stink-at-txjs/index.html deleted file mode 100644 index 8a473de7..00000000 --- a/dist/blog/excess-cms-and-stink-at-txjs/index.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - Excess, CMS and Stink at Texas JavaScript - - - - -
            -
            - -
            -
              -
              -

              Excess, CMS and Stink at Texas JavaScript

              - -
              - Posted by Phil Hawksworth on -
              and tagged - - - #talks - - - #conferences - - - and - - #smellcms - -
              - -
              -
              - -
              -
              -
              -

              - I'm rather excited to be speaking at Texas JavaScript in Austin this year. TXJS takes place on Monday the 15th of April at Austin's rather beautiful Paramount Theatre. This talk will take from my Smelly CMS talk and also touch on aspects of another talk of mine called Excessive Enahnacement. -

              -
              -
              - - - -

              Here's the synopsis:

              -
              - -

              - You make web sites. Clients want them to include all of the latest exciting fads and "interface shizzle". You want them to render quickly and have a shelf-life longer than that hummus you bought the other day. Clients want to be able to maintain the site themselves, they know about content management systems and are going to invest big money in a real belter. You know that they'll be unleashing their 'creativity' and messing with your mojo. -

              -

              - This talk will explore the good, the bad, and the fugly of rich interfaces, and look at ways to champion what matters. We'll also look at examples of the damaging traces CMSs leave behind in the front-end and at ways to avoid the smell of your CMS wafting over to the user and sacrificing the all-important craftsmanship of good front-end engineering. -

              -
              - -
              -

              This year, TXJS is a single track conference and is organised into topic sections. My talk falls into the rethink.js section with Charlie Robbins and Drew Wilson which is set up like this:

              -
              - -
              - This set of speakers will be talking about thinking differently. These ideas will be framed for a technical audience but often have more to do with you than your computer. -
              - - - - - - - - - - - -
              -
              - - -
              -
              - More info on the conference site: texasjavascript.com and on Lanyrd - -
              -
              - - - - - - - - - - - - - - diff --git a/dist/blog/excessive-enhancement-at-full-frontal/index.html b/dist/blog/excessive-enhancement-at-full-frontal/index.html deleted file mode 100644 index f726bf1e..00000000 --- a/dist/blog/excessive-enhancement-at-full-frontal/index.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - Excessive Enhancement at Full Frontal - - - - -
              -
              - -
              -
                -
                -

                Excessive Enhancement at Full Frontal

                - -
                - Posted by Phil Hawksworth on -
                and tagged - - - #conferences - - - #talks - - - #development - - - and - - #fullfrontalconf - -
                - -
                -
                - -
                -
                -
                -

                - In a few days I will be speaking at Full Frontal 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 developers. -

                -
                -
                - - - -

                - I've attended Full Frontal each year so far and so I'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've managed to fight my way in and find myself on a list with some awesome speakers. -

                -

                - This is both nerve racking and genuinely exciting. -

                -

                - I'll be slightly running the risk of being the wet blanket of the conference as I'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 "ooh" and "ah" from the crowd. I'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 Web. -

                -

                - At least, that's the drum that I'm bringing to bang. -

                -

                - I'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 Lanyrd. -

                - - - - -
                -
                - - - - - - - - - - - - - - - diff --git a/dist/blog/expectations-of-web-development-at-agencies/index.html b/dist/blog/expectations-of-web-development-at-agencies/index.html deleted file mode 100644 index f352c7af..00000000 --- a/dist/blog/expectations-of-web-development-at-agencies/index.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - Expectations of web development at agencies - - - - -
                -
                - -
                -
                  -
                  -

                  Expectations of web development at agencies

                  - -
                  - Posted by Phil Hawksworth on -
                  and tagged - - - #web - - - #development - - - and - - #observations - -
                  - -
                  -
                  - -
                  -
                  -
                  -

                  - 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 just an agency. Perhaps we're thought of us web development production lines who churn out web sites. That's not my view. -

                  -
                  -
                  - - - - -

                  - This isn't the first time that I'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 performance. -

                  -

                  - 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 entails. -

                  -

                  - 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't end with the branding or the design, but should, nay must extend through to the development and delivery of the 'product' on the web. Otherwise everything that came before delivery is for naught. -

                  -

                  - Where I work, we have gone to great lengths to instil robust software engineering practices because without them, frankly we'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 innovation. -

                  -

                  - 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'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 care and attention. This is huge (and common) missed opportunity to optimise where it really matters. They exclaimed to us "oh, you treat JavaScript like a real, first-class language!". I'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 code. -

                  -

                  - 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'll often be creating a weaker user experience, and setting up a train-wreck for you to fix just around the corner. -

                  - - - - - -
                  -
                  - - -
                  -
                  - Photo credit: Toyota UK - -
                  -
                  - - - - - - - - - - - - - - diff --git a/dist/blog/flash-v-web-behind-enemy-lines/index.html b/dist/blog/flash-v-web-behind-enemy-lines/index.html deleted file mode 100644 index 9f4bb416..00000000 --- a/dist/blog/flash-v-web-behind-enemy-lines/index.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - Flash v Web. Behind Enemy Lines - - - - -
                  -
                  - -
                  -
                    -
                    -

                    Flash v Web. Behind Enemy Lines

                    - -
                    - Posted by Phil Hawksworth on -
                    and tagged - - - #javascript - - - #web - - - and - - #development - -
                    - -
                    -
                    - -
                    -
                    -
                    -

                    - OK, I'm being over dramatic, but sometimes it does feel like I'm on a bit of a stealth mission. Pity that I forgot to bring any stealth! I've been working here at The Team 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'm a big advocate of using Open Web Technologies. -

                    -
                    -
                    - - - -

                    - 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 digital 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 problem. -

                    -

                    - 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't make it a Web site. (as I write this, I'm find myself hearing Wesley Snipes proclaiming: 'You can put a cat in the oven, but that don't make it a biscuit!' Perhaps I'll refrain from that level of trash talking 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 debates. -

                    -

                    - I was particularly chuffed to hear my colleague Stephen playfully remark that I must be part of the "Anti Flash Mob". I've got news for you Steve. There are loads of us out here, and we're thinking of getting t-shirts! In truth I'm not anti-Flash. I'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 TED this year, Tim Berners Lee gave a fascinating talk where he touched on his vision of the future for The Web (which until HTML5 with its native video tag comes along, you'll need Flash to watch online). That future was for an "Open Data Web" 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'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 Microformats, and so on. -

                    -

                    - Usually during a conversation like this, someone will bang their fist and say "...but you can do that with Flash!", Well I'd be delighted to be proven wrong, so consider this a challenge. Show me. I'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'd love to see examples. The comments section below awaits your links. For the time being, I'll keep challenging any automatic choice of Flash over Web technologies on projects, but that's just common sense, right? Every technology choice should be justified. -

                    - - - - - -
                    -
                    - - - - - - - - - - - - - - - diff --git a/dist/blog/get-your-task-management-wiki/index.html b/dist/blog/get-your-task-management-wiki/index.html deleted file mode 100644 index 2fc57b80..00000000 --- a/dist/blog/get-your-task-management-wiki/index.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - Get your Task Management wiki - - - - -
                    -
                    - -
                    -
                      -
                      -

                      Get your Task Management wiki

                      - -
                      - Posted by Phil Hawksworth on -
                      and tagged - - - #tiddlywiki - - - #javascript - - - and - - #osmosoft - -
                      - -
                      -
                      - -
                      -
                      -
                      -

                      - After a bit of a hiatus, I've recently been concentrating on developing my pet project, teamtasks again. Teamtasks is a simple application built using Tiddlywik. -

                      -
                      -
                      - - - -

                      - 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 teamtasks has had to sit patiently in the corner and wait for me to get back to working on it. -

                      -

                      - Rather gratifyingly, quite a few people had seen the early work on teamtasks and expressed interest in using it for all manor of purposes. The attention made me realise that it was time to promote teamtasks from its place in my playground (version 0.3 can still be found there for those keen on glancing in the rear view mirror) to the big time! Or at least, a place of its own. And so getteamtasks.com was born. From there you can download the latest version (v0.4 at time of writing) and configure it to fit your task management habits. -

                      -

                      - This is an open source project and I'm doing my best to resist the urge to tinker with it until I think that it's perfect before letting it out into the wild, so you may find things about teamtasks that don't work perfectly or you just don't like. If that's the case, then please let me know, or better yet, fix it and then show me. I'm living by the old "Release early. Release often" mantra here and welcome contributions, in the form of suggestions, bug reports, bug fixes, enhancements, criticism, praise, sticky buns, pats on the back, or hugs. -

                      -

                      - 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 follow teamtasks on Twitter. You'd get to hear about teamtasks developments if you just followed me on Twitter too of course, but then you'd also be subject to other random utterances. -

                      -

                      - After just a few hours of launching getteamtasks.com, 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've spent some time here at Osmosoft today planning the next set of enhancements for teamtasks which will soon be listed on the site for you to inspect. -

                      -

                      Roll on version 0.5!

                      - - - - - - -
                      -
                      - - - - - - - - - - - - - - - diff --git a/dist/blog/getting-started-with-node-at-asyncjs/index.html b/dist/blog/getting-started-with-node-at-asyncjs/index.html deleted file mode 100644 index 9f80cb2f..00000000 --- a/dist/blog/getting-started-with-node-at-asyncjs/index.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - Getting started with Node at AsyncJS - - - - -
                      -
                      - -
                      -
                        -
                        -

                        Getting started with Node at AsyncJS

                        - -
                        - Posted by Phil Hawksworth on -
                        and tagged - - - #javascript - - - #javascript - - - and - - #nodejs - -
                        - -
                        -
                        - -
                        -
                        -
                        -

                        - Yesterday I had the pleasure of talking about Node at AsyncJS, a meetup of smart and motivated developers and tech enthusiasts in Brighton. -

                        -
                        -
                        - - - -

                        Async, which is organised by Premasagar Rose of Dharmafly fame meets every 2 weeks and is a regular haunt for members of Brighton's thriving technology community. My talk on Node is not the first on the topic at Async, which has already seen great sessions from Simon Willison and Alex Young, but focused on getting started with Node.js and looked at some of the tools created by the Node community to help ease development.

                        -

                        The slides from my talk are available now on Slideshare or to download as a PDF. The complete Keynote presentation is available for download too, but weighs in at a hefty 182MB due to some animated screen-captures.

                        - - - - -
                        -
                        - - -
                        -
                        - Photo credit: Karl-Ludwig Poggemann - -
                        -
                        - - - - - - - - - - - - - - diff --git a/dist/blog/hitched/index.html b/dist/blog/hitched/index.html deleted file mode 100644 index 4f311453..00000000 --- a/dist/blog/hitched/index.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - Hitched - - - - -
                        -
                        - -
                        -
                          -
                          -

                          Hitched

                          - -
                          - Posted by Phil Hawksworth on -
                          and tagged - - - #personal - - - #announcements - - - and - - #news - -
                          - -
                          -
                          - -
                          -
                          -
                          -

                          - After more than 14 wonderful years with my girlfriend, Verity, last weekend we finally tied the knot. -

                          -
                          -
                          - - - - -

                          It'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'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 highlights.

                          - -

                          Verity and I were married in the lovely little church in Horringer near Bury St Edmunds before a reception at the West Wing at Ickworth House. I was surprised at how my nerves didn'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 begun.

                          - -

                          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'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 moment.

                          - -

                          Nothing, however, prepared me for the moment I saw Verity arrive at the church and make her way up the aisle towards me. Breathtaking.

                          - -

                          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. (...and I said I wouldn't gush!). We had memorable readings from Verity'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 I.

                          - -
                          - -

                          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 Toastmaster, Colin. Colin really helped to keep things running roughly to schedule and looked like quite the bobby dazzler.

                          - -

                          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 ice cream bike 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 quickly.

                          - -
                          - - -

                          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't find quite what we were looking for in the area and so widened the search a little. At the time of writing, we've only seen a few sneaky peeks at the photos, but the signs are really good. We couldn't have been happier with the friendly and talented Barrie Downie 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 us.

                          - -

                          While I'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 Mills and Bloom. Zoe was just fantastic and we'd eagerly recommend her. She seemed genuinely excited for us and about the details of the flowers 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 Zoe!

                          - -

                          Castleton Brass, the Icicle Tricycle and the staff at Ickworth House were all wonderfully helpful and friendly.

                          - -

                          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. Awesome.

                          - -

                          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't get a warmer, more receptive audience than at your wedding and you can'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, legendary.

                          - -

                          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 Club Soul who were absolutely amazing and packed the dance floor immediately and for the duration. Another hearty recommendation.

                          - -
                          - -

                          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'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'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 Artful Splodgers 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 "over tired" 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 recommendation!

                          - -

                          All too soon, the night wound to an end and after saying some emotional goodbyes, we retired to the Angel Hotel 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 manage.

                          - -
                          - -

                          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' Abbey Gate excitedly recounting the day. I think that we'll be boring people with details, highlights and photos for a very, very long time to come.

                          - -
                          - - - - - - - - - - -
                          -
                          - - - - - - - - - - - - - - - diff --git a/dist/blog/how-to-create-and-distribute-lovely-screencasts/index.html b/dist/blog/how-to-create-and-distribute-lovely-screencasts/index.html deleted file mode 100644 index 30a989e6..00000000 --- a/dist/blog/how-to-create-and-distribute-lovely-screencasts/index.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - How to create and distribute lovely screencasts - - - - -
                          -
                          - -
                          -
                            -
                            -

                            How to create and distribute lovely screencasts

                            - -
                            - Posted by Phil Hawksworth on -
                            and tagged - - - #tips - - - and - - #osx - -
                            - -
                            -
                            - -
                            -
                            -
                            -

                            - 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 text. -

                            -
                            -
                            - - - - -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 time. - -In this post, I'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'm just writing about what I know. - - -Here is an example screencast. The best view is in HD over here. - -
                            - -
                            - - -

                            I think that in order to create a good screencasts you need to think about the following things:

                            -
                              -
                            1. Good content. Know what you're going to say/show and prepare yourself in advance.
                            2. -
                            3. Have a clean environment on screen.
                            4. -
                            5. Capture your content with the optimal settings.
                            6. -
                            7. Compress your content correctly.
                            8. -
                            9. Host and distribute your content in the most effective way.
                            10. -
                            -

                            Let's take a look at those in more detail.

                            -

                            1 - Good content

                            -

                            - I think that it is worth practicing what you are going to show and getting everything ready in advance so that you don't waste any time. As far as having something compelling to show, I'm afraid that you're on your own on this one. -

                            -

                            2 - Have a clean environment on screen.

                            -

                            Removing clutter which can be distracting and untidy is a good way to help communicate you message more effectively. Since I don'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 Options.

                            -
                            Finder preferences
                            -

                            There is also value in having a simple, clean wallpaper displayed. Again, the aim is to reduce noise and distractions. People don't all need to see the photos of your kids learning to ride a bike while they are trying to absorb what you are demonstrating.

                            -

                            3 - Capture your content with the optimal settings.

                            -

                            I chose to use SnapzPro 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. SnapzPro 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't scale it down at all.

                            -

                            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 size.

                            - -
                            Capture settings
                            - -

                            I also like to let the viewer see what keys I am pressing during demonstrations. For this I used the rather handy Mousepose application. This also allows you to highlight the location of the mouse pointer.

                            - -

                            4 - Compress your content correctly.

                            -

                            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 below.

                            - -
                            Compression settings
                            - -

                            5 - Host and distribute your content in the most effective way.

                            -

                            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'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. Vimeo.com will host HD content and stream content to your site. A bit of a sticking point at the moment is that they don't yet allow HD 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. Vimeo. 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 content.

                            - - - -
                            -
                            - - - - - - - - - - - - - - - diff --git a/dist/blog/i-can-smell-your-cms-a-talk-at-fronteers/index.html b/dist/blog/i-can-smell-your-cms-a-talk-at-fronteers/index.html deleted file mode 100644 index 45b44361..00000000 --- a/dist/blog/i-can-smell-your-cms-a-talk-at-fronteers/index.html +++ /dev/null @@ -1,411 +0,0 @@ - - - - - - - - - I can smell your CMS at Fronteers 2012 - - - - -
                            -
                            - -
                            -
                              -
                              -

                              I can smell your CMS at Fronteers 2012

                              - -
                              - Posted by Phil Hawksworth on -
                              and tagged - - - #conferences - - - #fronteers - - - and - - #smellcms - -
                              - -
                              -
                              - -
                              -
                              -
                              -

                              - This year, I was lucky enough to be invited to speak at Fronteers, the very well regarded web development conference in Amsterdam. I was particular excited by this since the event had been high on my wishlist to attend for the last few years. I spoke about the negative impact that content management systems regularly have on the front-end development effort, and how we might try to combat this. -

                              -
                              -
                              - - - -

                              - The format this year adopted a small but very positive change. The two days of the conference were MC'd by Christian Heilmann of Mozilla and Yahoo! fame, and rather than accepting questions from the floor at the end of each session, Christian interviewed the speaker and presented questions from the audience via Twitter. This worked beautifully, and he should be praised for doing a wonderful job of getting the best out of the speakers. -

                              -

                              - Sadly, not all of the questions could be addressed in the available time, but Christian captured the questions and has presented them via a nice summary of the sessions on his blog. Below you can find not only the slides from my session, but also the answers to the questions that we didn't manage to get to on the day. -

                              - -

                              I Can Smell Your CMS : synopsis

                              -

                              - The word is getting out. Great web site experiences require careful development and crafty execution in the front end. Squeezing every drop of performance out of your user's browser is tough, but Steve Souders and friends have mobilized an army, and we are all having a bloody good go. -

                              -

                              - But there is a common threat to doing great work in the front-end. It lurks in the back-end and clients love it. It's the content management system, and more often than not, it stinks. -

                              - -

                              - We'll look at examples of the damaging traces CMSs leave behind in the front-end and at how we might work to reduce them. We'll find ways to fight for what matters in a CMS, and ways to avoid the smell of your CMS wafting over to the user and sacrificing the craftsmanship of good front-end engineering. -

                              -

                              Slides

                              - - -

                              Video

                              - - - -
                              -

                              Questions and answers

                              - -
                              -

                              - Alexander Griffioen ‏@oscaralexander -

                              -

                              - What degree of influence does the client have in the CMS choice? @philhawksworth #fqa #fron teers12 -

                              -
                              -
                              -

                              - This varies a lot in practice, Alexander. But ultimately the client needs to be totally on board with the decisions being made about this critical technology choice. I have found that the levels of expertise, opinions and influence vary dramatically from one client to another and some arrive with preconceptions about what CMS they want to use. In many cases this can be something which is already decided or in place in the client's infrastructure so you have very little chance to change that. Others are more willing to enter a discussion and allow you, as the domain expert, to provide some carefully considered recommendations. -

                              -
                              -
                              -

                              - Robbert Broersma ‏@RobbertAtWork -

                              -

                              - #fronteers12 I suppose @philhawksworth means free-form editing where he says WYSIWYG. #fqa -

                              -
                              -
                              -

                              - Good point, Robbert. In fact I mean both. Each type of input has different implications in terms of introducing CMS Stink, but both can be problematic. WYSIWYG tools which allow the user to edit the content while seeing the formatted output of their work are particularly bad as they introduce all manor of inefficient code artifacts without the user being aware of this.As they often include wide formatting options they also allow the content editor to deviate from the design which can rapidly degrade the designed experience of the site. -

                              -
                              - -
                              -

                              - Martijn Saly ‏@MartijnSaly -

                              -

                              - @codepo8 The viewstate actually still exists and it cannot be turned off completely. You can only make it smaller. #fqa #fronteers12 -

                              -
                              -
                              -

                              - I wasn't aware of that, Martijn. I gather that this is something that is improving in .net but not all CMS platforms built with .net will adopt the improved pattern right, away so you may still find this kind of smelly code finding its way into your work. -

                              -
                              - -
                              -

                              - MikeVierwind ‏@mikevierwind -

                              -

                              - #fqa #fronteers12 The new edition of Episerver is better!! You have no big form element!! They inline js is gone etc. A lot better! -

                              -
                              -
                              -

                              - Wonderful! They should update the implementation on their own site to make use of that. Enterprise platforms that I have encountered often bring a high level of technical debt or friction to migrating. I'm not sure what effort is required for EPiServer to upgrade their own site to use their own latest best practices, but I'd like to see that happen. -

                              -
                              - -
                              -

                              - Darius Kruythoff ‏@dkruythoff -

                              -

                              - Are there any true CMS solutions out there that manage content and don't mess with design at all? #fronteers12 #fqa -

                              -
                              -
                              -

                              - Тихий Бес ‏@SilentImp -

                              -

                              - @dkruythoff is it possible at all? Content is tied with markup. Markup tied to representation of data — design. #Fronteers12 #fqa -

                              -
                              -
                              -

                              - Darius, I'm sure that there must be several, but there is only one I know of at the moment. Perch sets itself up to be a "tiny CMS" but I think that it has a lovely and powerful approach. You begin by creating your site as static templates and then declare areas in those templates which should be dynamic and managed by an admin application. This action builds an appropriate administration area for you while leaving the output untainted by CMS Stink. This allows you to have complete control over the front-end development and enhance the site with various types managed content. -

                              -

                              - There will be limits to the projects where this is appropriate, but I'd argue that it is a viable solution more often than you might imagine. -

                              -

                              - SilentImp, Ideally it is good to separate content from style from behavior as we have learned with HTML, CSS and JavaScript respectively. You have a good point though, that with the ability to author or generate HTML, content editors can indeed influence the style of the content. This should really be limited to using defined styles though if we encourage them to adhere to structured markup rater than giving free reign over all. -

                              -

                              - For total separation of content from style, then systems that allow only plain text input into defined content areas might provide an answer, but I find that those can be just too restrictive at times and have very particular useful scenarios. -

                              -
                              - -
                              -

                              - LBiNetherlands ‏@LBiNetherlands -

                              -

                              - WYSIWYG is danger, but customers demand it @Fronteers #fronteers12 #fqa -

                              -
                              -
                              -

                              - Wilfred Nas ‏@wnas -

                              -

                              - @jashajWYSIWYG is danger, but customers demand it #fronteers12 #smellcms #fqa -

                              -
                              -
                              -

                              - Rebecca Murphey ‏@rmurphey -

                              -

                              - #fqa @philhawksworth how do you convince clients they don’t really want a wysiwyg editor? i’ve had this argument too many times :/ -

                              -
                              -
                              -

                              - Yes indeed. I think that one of our responsibilities in agency work, is to determine when WYSIWYG is beneficial and when it is detrimental. Projects are seldom the same and there are some cases when we can argue the point better than others. I believe that we can use examples of the effects of the use of WYSIWYG editors over time with case studies and examples to try to make the point. Presenting effective alternatives and demonstrating the different potential workflows and results can be helpful. -

                              -

                              - I have found it very hard to persuade clients who demand WYSIWYG to reconsider. Only in a few cases have I been successful. I'm hoping that the community as a whole can help to compile case studies and communicate the alternatives. -

                              -

                              - Halp! -

                              - -
                              -

                              - Norbert de Langen ‏@NorbertdeLangen -

                              -

                              - #fronteers12 #fqa @codepo8 any other content editing tips besides markdown? Consider it WILL be the intern editing the site? -

                              -
                              -
                              -

                              - Norbert, I think that Markdown is well within reach of most people who you would be comfortable being responsible editing content on your site. Accompanying it with a simple guide to content strategy, style and markup syntax can be a huge help. -

                              -

                              - There are many wiki markups available out there, but I like the way that Markdown is so well understood and supported. -

                              -

                              - I have also had some good success with systems which are even more prescriptive in terms of what they allow people to enter as text. By using something like Django or other suitable MVC frameworks to build out a very structured input for content into templates, you can get the the point that you are just allowing people to enter text into the sections that you need. This allows for a complete separation of style and content but can be a little bit too rigorous for some projects. -

                              - -
                              -

                              - Тихий Бес ‏@SilentImp -

                              -

                              - #Fronteers12 #fqa what are you think about inplace content editors? -

                              -
                              -

                              - I have to say that I'm not a fan. I can see the temptation to allow users to navigate around the site as normal an then switch to a mode where they are able to edit the content that they see. This gives good context to the editor about how their content will appear but does a poor job of protecting the designed experience. This kind of interface always seem to add a lot of UI hooks and other CMS smells into your code which make optimising and being future friendly incredibly hard. -

                              - -
                              -

                              - Norbert de Langen @NorbertdeLangen‏ -

                              -

                              - #fqa @codepo8 tips for agencies wanting to do a more agile work system? -

                              -
                              -

                              - Norbert, this is a tough one. I think the biggest key to success here is complete buy-in from the client. Unless they are totally on board with that approach to the project, then you can't run it in a truly Agile manor. I've been fortunate enough to work on a couple of projects where that has been the case, but it is very rare. The desire to define upfront the cost, scope and deadlines makes a true Agile approach impossible. -

                              -

                              - At R/GA we do borrow aspects of Agile development and tailor those practices to work within the constraints of a traditional waterfall engagement. Finding those aspects of Agile that work for you can be helpful but they tend to shift depending on how you work with each particular client. -

                              -
                              -
                              -

                              - Wes Oudshoorn ‏@wesoudshoorn -

                              -

                              - #fqa Could you describe your ideal cms for responsive design? What challenges are we facing there? #fronteers12 -

                              -
                              -
                              -

                              - Randy ‏@Randynamic_4 -

                              -

                              - #fronteers12 #fqa CMS and responsive design (responsive content) is still a big problem any suggestions on that? -

                              -
                              -

                              -Wes, Randy, I think that a good CMS should be totally transparent in the front end. As such we should be able to adopt the kind of techniques that are emerging in front-end development to support a responsive design approach. Stripping out the UI hooks and other smells left by many CMS platforms can actually help to enable a responsive design. -

                              -

                              - One area of a responsive approach which gets a little overlooked does have a burden on the back-end however. Rather than delivering the same large image assets to all devices and then scaling them down in the browsers to fit the screen size, it can be important to have smaller versions of image assets and then 'upgrade' them to lager images where appropriate. Ideally the system would support the generation of different sizes of the automatically to support that. -

                              - -
                              -

                              - Varya ‏@toivonens -

                              -

                              - #fqa @phlhawksworth Doesn't all what you are showing just mean that those CMS are bad coded? -

                              -
                              -

                              - Varya, Yes, but this is a tough problem and I think many large platforms try to serve many masters and provide solutions to each and every possible problem that they can imagine in this area. As a result they often focus on the capabilities without giving any consideration to front-end performance or the kind of challenges that front-end developers need to overcome. -

                              -

                              - I think that this is a symptom of front-end development not being given the respect that it deserves. Historically platform developers seem to have considered the front-end development work as the 'easy last step' in producing a system and so not given it the attention it needs.In recent years we have come to appreciate the complexity and craftsmanship involved in front-end engineering and I think that we need to highlight that realisation, which is one of the motives for me to give this talk. -

                              -
                              - -
                              -

                              - Victor Zuydweg ‏@VZuydweg -

                              -

                              - The CSM stink seems a lot like framework stink, dontyouthink? @philhawksworth #fqa #fronteers12 -

                              -
                              -

                              - Yes Victor. There are many frameworks out there that can let you introduce your very own code smells into the work. Even with the best tools, we can always find ways to do a bad job - I've been guilty of that myself plenty of times in the past! The trick is in recognising the smells we should avoid! -

                              -
                              - -
                              -

                              - Тихий Бес ‏@SilentImp -

                              -

                              - @philhawksworth #smellcms May i have video or slides or some sing?! Talk is great!!! #Fronteers12 #fqa -

                              -
                              -

                              - Thanks SilentImp! -

                              -

                              - You can get to the slides on speakerdeck where they are also available to download as a PDF. Other coverage from Fronteers 2012 is collecting nicely on the event coverage page at Lanyrd. A video will soon be available from the nice folks at Fronteers. -

                              -
                              - - - - -
                              -
                              - - -
                              -
                              - Photo credit: Robert Sedovšek - -
                              -
                              - - - - - - - - - - - - - - diff --git a/dist/blog/in-defense-of-ie6/index.html b/dist/blog/in-defense-of-ie6/index.html deleted file mode 100644 index fc620c96..00000000 --- a/dist/blog/in-defense-of-ie6/index.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - In defense of IE6 - - - - -
                              -
                              - -
                              -
                                -
                                -

                                In defense of IE6

                                - -
                                - Posted by Phil Hawksworth on -
                                and tagged - - - #development - - - #discussions - - - and - - #observations - -
                                - -
                                -
                                - -
                                -
                                -
                                -

                                - No really! Read that title again. I'm about to argue against placing so much blame for painful Web development at the door of Internet Explorer 6. I'm not going try and claim that IE6 isn't a huge pain in the arse of all good Web developers. Let's face it, Web developers love to bitch about it, but I do think that it's time for some accountability. -

                                -
                                -
                                - - - - -

                                - The problem with IE6 is simple. It has poor support for Web standards. It doesn't always correctly render valid HTML and CSS, and requires nudging, tweaking and finagling in order to display the content in the desired way. Its interpretation of Javascript and interactions with the DOM are also less than perfect. That's a pain, but does it really warrant such massive hatred from Web developers? As a Web developer, my first instinct would be to answer, 'well, yes'. The cost of developing for IE6 is extraordinarily high, even when compared to the benefit from its market share, because it is such a horrible and time consuming slog. -

                                -

                                - 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't this concept stretch to the browser too? Surely if IE6 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 IE7, IE8, Firefox, Safari, Opera, Chrome or something else. Let's be honest, it isn't hard to find a better browser than IE6 these days. But it isn'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 "The Internet" (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 IT department dictates. Often, this means IE6. Why is that? This is my beef. It's not that IE6 is out-dated and substandard (although it is), but that large organisations have needed to lock users in to using an approved Web browser. -

                                -

                                - Having worked in a few large organisations, I'm no stranger to that scenario, and it'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't future proof. As a result we have applications and systems which depend being viewed in IE6 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's little wonder that they force their employees to use IE6. -

                                -

                                - Remember that this isn't just the fault of IE6. There have been many poor browsers over the years, but thankfully, natural selection has let them disappear and allowed better browsers to take over. IE6 suffers from its own success. That is, it's market penetration. Combine that with bad habits from developers and you have a browser which despite being left behind by evolution, 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 peace. -

                                -

                                - Surely then, we Web developers have learned our lesson. We'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'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 object detection, 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 IE8 can be set to render as if it were IE7. With a meta tag to provide "Internet Explorer 7 Compatibility mode". -

                                -

                                - Why would this feature exist? Microsoft explain that it is so that developers can opt for "backwards compatibility with Internet Explorer 7 JavaScript and layout behavior". In other words, it exists to try and get around the fact that so many developers wrote code to satisfy the quirks of IE7 without a thinking about how their code would fail when the quality of the browser is improved (have better conformance with W3C standards for HTML and CSS). Microsoft didn't want people to be resistant to upgrading to IE8 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'm afraid I have to call "bull-shit" 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 them. -

                                -

                                - 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's time to make sure that we don't get into this situation ever again. So next time you are tempted to grumble about IE6, remember that you can help avoid a similar mess in future by developing with standards in mind. -

                                - - - - -
                                -
                                - - -
                                -
                                - Image credit: John Martz - -
                                -
                                - - - - - - - - - - - - - - diff --git a/dist/blog/index.html b/dist/blog/index.html deleted file mode 100644 index 61131feb..00000000 --- a/dist/blog/index.html +++ /dev/null @@ -1,1124 +0,0 @@ - - - - - - - - - Blog - - - - -
                                -
                                - -
                                -
                                  -
                                  -

                                  Blog

                                  - -
                                  -
                                  - -
                                  -
                                  - - -
                                  -

                                  TF;DR - Too funky; Didn't read.

                                  -
                                  - - Tagged - - - #observations - - - #web - - - and - - #excess - -
                                  -
                                  -
                                  -

                                  - The trend for 'parallax' or 'scrolljacking' web sites has long had me grumbling about their large page weight, slow rendering times and general accessibility black spots, but some are better than others. That got me thinking, do they ever do a good job? -

                                  -
                                  -
                                  - - - continue reading this post -
                                  -
                                  - - - -
                                  -

                                  Using a Wiimote for presentations

                                  -
                                  - - Tagged - - - #talks - - - #tools - - - and - - #tips - -
                                  -
                                  -
                                  -

                                  - Over the last couple of years I've given a number of presentations. No matter what the subject matter of the talk, there is one question I always seem to get asked afterwards: -

                                  -

                                  Was that a Wiimote controller you were using to control your slides?

                                  -

                                  - The answer is yes. This is a quick post to explain why and how. -

                                  -
                                  - -
                                  -
                                  - - - continue reading this post -
                                  -
                                  - - - - - - - - - - - -
                                  -

                                  Oakley's Moto diet

                                  -
                                  - - Tagged - - - #excess - - - and - - #examples - -
                                  -
                                  -
                                  -

                                  - I recently blogged some crticism about a site which had an 85MB home page. At the time of writing, Oakley's Moto site was the most dramatic example I had ever seen of an excessively enhanced, heavyweight single page site. Since then, the team at Oakley have responded by putting the site on a diet and dramatically improving its performance and footprint. Great stuff! -

                                  -
                                  -
                                  - - - continue reading this post -
                                  -
                                  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                  -
                                  - - - - - - - - - - - - - - - diff --git a/dist/blog/joining-rga-london/index.html b/dist/blog/joining-rga-london/index.html deleted file mode 100644 index 9966eee4..00000000 --- a/dist/blog/joining-rga-london/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - Joining R/GA - - - - -
                                  -
                                  - -
                                  -
                                    -
                                    -

                                    Joining R/GA

                                    - -
                                    - Posted by Phil Hawksworth on -
                                    and tagged - - - #rga - - - and - - #announcements - -
                                    - -
                                    -
                                    - -
                                    -
                                    -
                                    -

                                    - While I was sad in my previous post to share that I was leaving The Team, I can now share with some excitement that I'll be moving on to join the considerable talent present at R/GA. -

                                    -
                                    -
                                    - - - -

                                    - As I mentioned before, the decision to leave was a difficult one, but the potential at R/GA provides a substantial pull and I can't wait to get stuck in. I'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/GA to push the boundaries of creativity and innovation in the work that they do for them. -

                                    -

                                    - 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'm hoping to apply many of the things I've learned along the way but do expect to be regularly surprised (and hopefully delighted) by fresh obstacles. -

                                    -

                                    - There is a buzz at R/GA 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 exciting. -

                                    -

                                    - I can't wait to be a part of it. -

                                    - - - - - - -
                                    -
                                    - - - - - - - - - - - - - - - diff --git a/dist/blog/jsspec-bundle-for-textmate-helps-with-writing/index.html b/dist/blog/jsspec-bundle-for-textmate-helps-with-writing/index.html deleted file mode 100644 index 6e979438..00000000 --- a/dist/blog/jsspec-bundle-for-textmate-helps-with-writing/index.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - JSSpec bundle for Textmate helps with writing tests - - - - -
                                    -
                                    - -
                                    -
                                      -
                                      -

                                      JSSpec bundle for Textmate helps with writing tests

                                      - -
                                      - Posted by Phil Hawksworth on -
                                      and tagged - - - #javascript - - - #development - - - #tools - - - #tiddlywiki - - - and - - #osmosoft - -
                                      - -
                                      -
                                      - -
                                      -
                                      -
                                      -

                                      - Recently, we at Osmosoft have been trying to make good on one of our pledges: To introduce a unit testing framework to Tiddlywiki development. -

                                      -
                                      - - - -

                                      Along the way we examined several Javascript testing frameworks and found that JSSpec suited our needs quite nicely. JSSpec resembles the popular RSpec testing framework popularly used by Ruby developers. -

                                      -

                                      As a result, I have been dabbling away at writing tests in my favoured text editor - the rather lovely Textmate. 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 download this bundle and just double-click it to make it available for use in Textmate.

                                      - - -

                                      Download the bundle

                                      - -

                                      I won't go into the workings of testing with JSSpec here, rather, you can learn about that at the official site.

                                      - -

                                      Feel free to take this bundle and modify it to fit your purpose. Enjoy.

                                      - - - - - -
                                      -
                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/leveraging-jquery-and-jquery-plugins-in-tiddlyWiki/index.html b/dist/blog/leveraging-jquery-and-jquery-plugins-in-tiddlyWiki/index.html deleted file mode 100644 index 764b7ec3..00000000 --- a/dist/blog/leveraging-jquery-and-jquery-plugins-in-tiddlyWiki/index.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - - Leveraging jQuery and jQuery plugins in TiddlyWiki - - - - -
                                      -
                                      - -
                                      -
                                        -
                                        -

                                        Leveraging jQuery and jQuery plugins in TiddlyWiki

                                        - -
                                        - Posted by Phil Hawksworth on -
                                        and tagged - - - #javascript - - - #jquery - - - and - - #tiddlywiki - -
                                        - -
                                        -
                                        - -
                                        -
                                        -
                                        -

                                        - The recent release of TiddlyWiki v2.5 included something rather exciting for me: jQuery, the popular Javascript library is now part of the TiddlyWiki core. -

                                        -
                                        -
                                        - - - -

                                        This is exciting for a number of reasons.

                                        -
                                          -
                                        1. The TiddlyWiki core functions can now use jQuery to perform all manner of DOM inspection and DOM manipulation. We can refactor a ton of code to benefit from jQuery'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 maintain.
                                        2. -
                                        3. TiddlyWiki plugin developers will now be able to make use of jQuery in their plugins. That'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 developers.
                                        4. -
                                        5. 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 'em on!
                                        6. -
                                        -

                                        - 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's take a look at an example. -

                                        -

                                        - Fred, my colleague at Osmosoft stumbled upon a plugin which creates a nice navigation structure from an HTML List element. The plugin has lots of examples and documentation and seemed like a good contender for bringing something useful into TiddlyWiki. -

                                        -

                                        - 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 use. -

                                        -
                                        Plugin inclusion
                                        -

                                        - With the jQuery plugin availble, we can use it to provide a snazzy UI for any UL or LI elements on the page. The Javascript syntax for that is nice and simple: -

                                        - -``` js - // Turn the list element with an ID of 'myList' into a funky ListNav - $('#myList').listnav(); -``` - -

                                        - 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's make a macro which turns the contents of a tiddler into a NavList like this: -

                                        - - -{% highlight js %} -> -{% endhighlight %} - - -

                                        - 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 'ListNavPlugin' and once again tagged it with systemConfig so that it becomes code that TiddlyWiki knows to interpret. To start with, let's just create the macro and ensure that we can invoke it. -

                                        - -{% highlight js %} -// create macro object - config.macros.listnav = { - // Add a handler function to be invoked by > - handler: function(place, macroName, params, wikifier, paramString, tiddler) { - // do some magic... - alert("I'm gonna make a funky listnav!"); - } - }; -{% endhighlight %} - -

                                        - To see it working, I created two more new tiddlers. MyFruityList holds a list of items, and ExampleListNav holds a call to the new macro. -

                                        -
                                        List amnd example call
                                        -

                                        - 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 this: -

                                        -
                                        -

                                        - All good, but not exciting yet. Let's flesh out our TiddlyWiki macro a bit. We'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 HTML elements (like createTiddlyElement), we can now use jQuery's helper functions to append elements to the document. -

                                        - -{% highlight js %} -// create macro object - config.macros.listnav = { - - // Add a handler function to be invoked by > - handler: function(place, macroName, params, wikifier, paramString, tiddler) { - - // target tiddler passed in as macro parameter - var title = params[0]; - - // read list items from tiddler contents - var text = store.getTiddlerText(title); - if(text) { - - // generate list - var items = text.split('\n'); - var list = jQuery('').attr('id', 'listnav').appendTo(place); - jQuery.each(items, function(i, itm) { - jQuery('
                                      • ').text(itm).appendTo(list); - }); - - } - } - }; -{% endhighlight %} - -

                                        - Now we're getting somewhere. We've grabbed each line from our MyFruityList tiddler and used jQuery to turn them into an unordered list. -

                                        -
                                        -

                                        - We can now call the jQuery plugin to render our list as a NavList. The plugin requires a little extra HTML so we can create that, and then call the listnav plugin. -

                                        - - -{% highlight js %} -// create macro object -config.macros.listnav = { - - // Add a handler function to be invoked by > - handler: function(place, macroName, params, wikifier, paramString, tiddler) { - - // target tiddler passed in as macro parameter - var title = params[0]; - - // read list items from tiddler contents - var text = store.getTiddlerText(title); - if(text) { - // generate nav bar - jQuery('

                                        ').attr('id', 'listnav-nav').appendTo(place); - - // generate list - var items = text.split('\n'); - var list = jQuery('

                                          ').attr('id', 'listnav').appendTo(place); - jQuery.each(items, function(i, itm) { - jQuery('
                                        • ').text(itm).appendTo(list); - }); - - // apply listnav - list.listnav(); - } - } -}; -{% endhighlight %} - - - - -

                                          - 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 CSS to style our new navlist. Easy enough, let's use our TiddlyWiki plugin to create a sylesheet for our new HTML by adding this: -

                                          - -{% highlight js %} - - // add default styles (adapted from http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css) - config.shadowTiddlers.StyleSheetListNav = ' \n' + - '#listnav-nav { margin: 20px 0 10px; }\n' + - '.ln-letters { overflow: hidden; }\n' + - '.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'+ - '.ln-letters a.ln-last { border-right: 1px solid #eee; }\n' + - '.ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }\n' + - '.ln-letters a.ln-disabled { color: #ccc; }\n' + - '.ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }'; - store.addNotification('StyleSheetListNav', refreshStyles); - -{% endhighlight %} - -

                                          - And we'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'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 jQuery documentation site). Then we can use whatever shortcut for jQuery in our code that we like. The final code looks like this: -

                                          - -{% highlight js %} - -(function($) { // set up alias - - // create macro object - config.macros.listnav = { - - // Add a handler function to be invoked by >; - handler: function(place, macroName, params, wikifier, paramString, tiddler) { - - // target tiddler passed in as macro parameter - var title = params[0]; - - // read list items from tiddler contents - var text = store.getTiddlerText(title); - if(text) { - - // generate nav bar - $('

                                          ').attr('id', 'listnav-nav').appendTo(place); - - // generate list - var items = text.split('\n'); - var list = $('

                                            ').attr('id', 'listnav').appendTo(place); - $.each(items, function(i, itm) { - $('
                                          • ').text(itm).appendTo(list); - }); - - // apply listnav - list.listnav(); - } - } - }; - - // add default styles (adapted from http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css) - config.shadowTiddlers.StyleSheetListNav = "\n" + - "#listnav-nav { margin: 20px 0 10px; }\n" + - ".ln-letters { overflow: hidden; }\n" + - ".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"+ - ".ln-letters a.ln-last { border-right: 1px solid #eee; }\n" + - ".ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }\n" + - ".ln-letters a.ln-disabled { color: #ccc; }\n" + - ".ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }"; - store.addNotification("StyleSheetListNav", refreshStyles); - - })(jQuery); - -{% endhighlight %} - -

                                            - You can explore the finished example in a TiddlyWiki. -

                                            - - - - -
                                          • -
                                            - - - - - - - - - - - - - - - diff --git a/dist/blog/london-content-strategy-meetup/index.html b/dist/blog/london-content-strategy-meetup/index.html deleted file mode 100644 index 90085300..00000000 --- a/dist/blog/london-content-strategy-meetup/index.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - London Content Strategy Meetup - - - - -
                                            -
                                            - -
                                            -
                                              -
                                              -

                                              London Content Strategy Meetup

                                              - -
                                              - Posted by Phil Hawksworth on -
                                              and tagged - - - #talks - - - #london - - - and - - #smellcms - -
                                              - -
                                              -
                                              - -
                                              -
                                              -
                                              -

                                              - Last night I faced a bit of a fear of mine by giving a 5 minute lightning talk at The popular Content Strategy Meetup, hosted at The Book Club in London's startup-rich Shoreditch. -

                                              -
                                              -
                                              - - - -

                                              - The fear was less about speaking in public, which I enjoy (although it still gives me a certain amount of the heebie-jeebies) but more about the format. Speaking for five minutes with 20 slides which automatically advance every 15 seconds is, for me, bum-clenchingly terrifying. It strips me of all of my security mechanisms and forces a particular focus and rhythm. An interesting challenge. -

                                              -

                                              - I loved it. -

                                              -

                                              - The event, which is well organised by local agency, Together, had a wonderfully warm and generous atmosphere. The line-up of 8 speakers was well structured to give a good variety of topics. As the nerd in the room, I was most happy with the reception my talk got. -

                                              -

                                              - Feedback from longer versions of my I Can Smell Your CMS talk has often brought the question of how I was taking this topic to the ears of those who benefit most from its message. This was my first step towards that. -

                                              -

                                              - My talk argues for more consideration for the performance impact complex CMS can have on websites. Many developers appreciate the message already. The challenge is to convince decision makers outside of the dev community that expensive and popular platforms are not always suitable just by dint of their price-tag, brand, or popularity in the enterprise. -

                                              -

                                              - The evening ended with a chance to socialise with the 100 or so who had filled every nook and cranny of The Book Club's downstairs bar. -

                                              -

                                              Slides and video

                                              - - -

                                              A deeper look

                                              -

                                              - Some may be interested in the longer version of my talk, which goes a bit deeper and has some real-life case-studies and battle scars. There is a video of this talk at Fronteers conference in Amsterdam and also a more extensive slide deck available should you wish. -

                                              -

                                              - The Content Strategy lightening talks were all recorded. I hope to share a video of this 5 minute version here soon. -

                                              -

                                              Photos from the evening

                                              - - - - -
                                              -
                                              - - -
                                              -
                                              - Photo credit: Sylvain Deleu. Related article: I can smell your CMS at Fronteers 2012 - -
                                              -
                                              - - - - - - - - - - - - - - diff --git a/dist/blog/mashing-up-flickr-in-the-client-with-jquery/index.html b/dist/blog/mashing-up-flickr-in-the-client-with-jquery/index.html deleted file mode 100644 index f5f69744..00000000 --- a/dist/blog/mashing-up-flickr-in-the-client-with-jquery/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - Mashing up flickr in the client with jQuery - - - - -
                                              -
                                              - -
                                              -
                                                -
                                                -

                                                Mashing up flickr in the client with jQuery

                                                - -
                                                - Posted by Phil Hawksworth on -
                                                and tagged - - - #javascript - - - #development - - - #jquery - - - and - - #mashups - -
                                                - -
                                                -
                                                - -
                                                -
                                                -
                                                -

                                                - Recently I saw Tim Stevens post on Twitter about a slide show he had built using his Liveloom application. His slide show grabs some photos from Flickr tagged with 'Osmosoft' and then renders them with all manner of visual effects using Flex. While the visual effects available via Tim's app are impressive, I'm a big advocate of open web standards and enjoy making things from HTML and Javascript, rather than using tools like Flex. -

                                                -
                                                -
                                                - - - -

                                                - My first encounter with the slide show made by Liveloom was on an iPhone where it couldn'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's not pretend, that there aren'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'm forever going on about how good jQuery is at manipulating the DOM, so this seemed like a good chance to demonstrate that. I shared the result my efforts as the 'Poloaroiderizer' and after getting some great feedback, promoted it to its very own domain. -

                                                -

                                                - Check it out over at polaroiderizer.com As it turns out, the task was incredibly simple and took just a few hours one evening. The interface is rendered with HTML and CSS. As such, it will work in any modern browser. I used jQuery to request JSONP from the Flickr API. JSPONP gets you around the cross domain scripting restrictions and delivers JSON 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 CSS and DOM manipulation, made simple by jQuery's animation functions. The display needs Javascript to render, so without it Polaroiderizer is a bit toothless, but that doesn't mean we can forget about those without Javascript. If you submit a flickr tag while you don't have Javascript capabilities, the form will submit your tag to the standard flickr interface and you'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 Unobtrusify. -

                                                -

                                                - 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 Michael Mahemoff explained recently. 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 URI. Here are a few: -

                                                - - - - - - - -
                                                -
                                                - - - - - - - - - - - - - - - diff --git a/dist/blog/moving-on-from-osmosoft/index.html b/dist/blog/moving-on-from-osmosoft/index.html deleted file mode 100644 index 92d9180a..00000000 --- a/dist/blog/moving-on-from-osmosoft/index.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - Moving on from Osmosoft - - - - -
                                                -
                                                - -
                                                -
                                                  -
                                                  -

                                                  Moving on from Osmosoft

                                                  - -
                                                  - Posted by Phil Hawksworth on -
                                                  and tagged - - - #announcements - - - #osmosoft - - - and - - #theteam - -
                                                  - -
                                                  -
                                                  - -
                                                  -
                                                  -
                                                  -

                                                  - Last week was both sad and exciting for me. Exciting because I was gearing up to start my new job at theTeam, a London-based communications agency with a slightly silly name. Sad because it was my last week working at Osmosoft (a company that created plenty of silly named things itself). -

                                                  -
                                                  -
                                                  - - - -

                                                  - I had been at Osmosoft since it grew from a one man band into an open source innovations team at BT, 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 me. -

                                                  -

                                                  - 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 'View Source' experience to openness and data availability. I'm going to miss the raging debates and big opinions which regularly surfaced at Osmosoft. The people there are intelligent and articulate. -

                                                  -

                                                  - Osmonauts, I salute you! -

                                                  -

                                                  - But now I'm off to pastures new. theTeam has a young, but growing digital arm with an impressive client list. I'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 unobtrusive 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'm looking forward to the challenge. -

                                                  -

                                                  - 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 Open Source Show and Tell revealed some common interests and enthusiasms. I'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 TiddlyWiki. While I'll have to scale back my time on that, there is no reason for me to turn my back on it altogether. I'm keen to keep on contributing and building applications with TiddlyWiki. Besides, it's nice to bump into familiar friends in the TiddlyWiki irc room. -

                                                  -

                                                  - 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'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 use. -

                                                  -

                                                  - Thanks for everything Osmosoft. It's been a blast! -

                                                  - - - - -
                                                  -
                                                  - - -
                                                  -
                                                  - Photo credit: Phil Whitehouse - -
                                                  -
                                                  - - - - - - - - - - - - - - diff --git a/dist/blog/nba-updates-on-twitter/index.html b/dist/blog/nba-updates-on-twitter/index.html deleted file mode 100644 index 03989406..00000000 --- a/dist/blog/nba-updates-on-twitter/index.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - NBA updates on Twitter - - - - -
                                                  -
                                                  - -
                                                  -
                                                    -
                                                    -

                                                    NBA updates on Twitter

                                                    - -
                                                    - Posted by Phil Hawksworth on -
                                                    and tagged - - - #twitter - - - #mashups - - - #python - - - and - - #projects - -
                                                    - -
                                                    -
                                                    - -
                                                    -
                                                    -
                                                    -

                                                    - Just in time for the 2008 NBA playoffs, and heavily influenced by Robbie Clutton's marvellous UK football scores service, I have created NBA Results -

                                                    -
                                                    -
                                                    - - - - -

                                                    This simple service monitors results published as RSS feeds from TotallyScores and then sends updates to twitter. By following NBA Results on Twitter, you can get alerts of all NBA match results. Only interested in updates for your team? That's fine, you can choose instead to follow your team. There are currently accounts for:

                                                    - - -

                                                    I'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's results, feel free to email me (phawksworth [at] gmail [dot] com) and push your team to the top of my todo list.

                                                    -

                                                    I'm also readying MLB Results to provide Major League Baseball results. MLB Results will be active very soon. As with the NBA teams, please poke me if you want to get updates for your team and I'll be sure to create their account.

                                                    -

                                                    The code which drives this, is my first outing into the world of Python. You can find the code here. 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 Python.

                                                    -

                                                    Many thanks to the nice folks at Carsonified for permission to use their site's background image on NBA Results. -Thanks also to Balakov who published the image used for each NBA team twitter account icon under a Creative Commons license on flickr.

                                                    - - - - - -
                                                    -
                                                    - - - - - - - - - - - - - - - diff --git a/dist/blog/nodejs-i-just-have-to-use-it-for-something/index.html b/dist/blog/nodejs-i-just-have-to-use-it-for-something/index.html deleted file mode 100644 index 94d76d61..00000000 --- a/dist/blog/nodejs-i-just-have-to-use-it-for-something/index.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - Nodejs. I just have to use it for something - - - - -
                                                    -
                                                    - -
                                                    -
                                                      -
                                                      -

                                                      Nodejs. I just have to use it for something

                                                      - -
                                                      - Posted by Phil Hawksworth on -
                                                      and tagged - - - #javascript - - - #mashups - - - #jquery - - - and - - #nodejs - -
                                                      - -
                                                      -
                                                      - -
                                                      -
                                                      -
                                                      -

                                                      - A little while ago, inspired by Simon Willison's demo of Nodejs at the FullFrontal conference, I felt the urge to make something, anything, using Nodejs. Nodejs gives lightening fast, event driven IO with Javascript running server-side in the rather nippy V8 Javascript engine. Until Nodejs, I hadn't seen much need to bring Javascript to the server other than for testing and as a bit of a novelty. Nodejs changed all of that. -

                                                      -
                                                      -
                                                      - - - - -

                                                      - Built by Ryah Dahl 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 jQuery will be familiar with the pattern of event handlers, callbacks and closures needed to build some really rather powerful things, quickly and easily with Nodejs. For my part, I just wanted to make something to explore the ease in which Nodejs could support comet-style long polling for some real-time, collaborative task. The Web is already getting flooded with examples of chat rooms and IRC servers built with Nodejs, but I really wanted to make something that felt like a real web application, not an example. -

                                                      -

                                                      - 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 Teafr.com, I piggybacked on the lists feature of Twitter to allow people to create and manage their lists of potential tea-makers somewhere they are already comfortable. My app 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 revealed. -

                                                      -
                                                      -

                                                      - I captured a couple of videos showing teafr.com doing its stuff, one of them 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. Nodejs 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 HTTP, HTML, CSS and Javascript, it also runs pretty nicely on both my iPhone and Palm Pre. -

                                                      -

                                                      - 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'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'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 it. -

                                                      -

                                                      - I've been using Dreamhost for a while now and have to say that I'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 Nodejs. The easiest and cheapest way that I found to host Nodejs 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 Linode which is working out rather nicely for me, but equally, I could have plumped for a similar offering from Slicehost or Amazon Web Services. -

                                                      -

                                                      - I'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 Nodejs, MongoDB, jQuery and various other fun things which 'speak Javascript' that smart people on the Web keep on creating and selflessly sharing with the world for free. -

                                                      - - - - - - - - -
                                                      -
                                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/oakleys-monster-page-of-baubles/index.html b/dist/blog/oakleys-monster-page-of-baubles/index.html deleted file mode 100644 index fe875ef9..00000000 --- a/dist/blog/oakleys-monster-page-of-baubles/index.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - Oakley's monster page of baubles - - - - -
                                                      -
                                                      - -
                                                      -
                                                        -
                                                        -

                                                        Oakley's monster page of baubles

                                                        - -
                                                        - Posted by Phil Hawksworth on -
                                                        and tagged - - - #excess - - - and - - #examples - -
                                                        - -
                                                        -
                                                        - -
                                                        -
                                                        -
                                                        -

                                                        - The ridiculous trend of giant, bloated web pages crammed with every visual bauble and gimmick imaginable seems set to continue. This time thanks to a site by Oakley. -

                                                        -
                                                        - -
                                                        - -

                                                        - I have been gathering examples of this kind of site and using them as examples of what NOT to do in my talk "Excessive Enhancement" for some time. -

                                                        -

                                                        - When Brad Frost alerted me to this example though, I thought it had to be a spoof. Nobody would consider this to be a good idea would they? Really? These types of site, which uses HTML5, CSS3 and emerging web development techniques to create a page with parallax effects and animations as you scroll are frequently bloated and terrible citizens of the Web. -

                                                        - -

                                                        Vital statistics

                                                        -

                                                        - Without a primed cache, over my home broadband (advertised by my provider as 16meg but usually peaking around 11meg) this was my experience: -

                                                        -
                                                        -
                                                          -
                                                        • 85.4MB page weight
                                                        • -
                                                        • 471 HTTP requests
                                                        • -
                                                        • 2 minutes 45 seconds until loading screen replaced with content
                                                        • -
                                                        • 4 minutes 10 seconds minute onLoad event
                                                        • -
                                                        -
                                                        -

                                                        - Astounding! -

                                                        -

                                                        - You can visit the page to take a look while it is still around at http://moto.oakley.com (I predict it might not last forever) but you can see a video of it below at a cost of just 28.5MB (saving you almost 60MB of bandwidth and allowing you to skip 2 minutes 45 seconds ahead to see the site) -

                                                        - - -
                                                        - -

                                                        - Now, I want these things to stop emerging, but at the same time, I'd rather not let Brad beat me with this example. Does anyone have a better (worse) example out there to share? Send them my way on Twitter at @philhawksworth -

                                                        -

                                                        Update

                                                        -

                                                        - Oakley responded and have updated this site. Some of the particulars are in my follow-up post: Oakley's Moto diet -

                                                        - - - - - - - - - - - -
                                                        -
                                                        - - -
                                                        -
                                                        - Related: Reflecting on Full Frontal 2011 - -
                                                        -
                                                        - - - - - - - - - - - - - - diff --git a/dist/blog/oakleys-moto-diet/index.html b/dist/blog/oakleys-moto-diet/index.html deleted file mode 100644 index 1e00905f..00000000 --- a/dist/blog/oakleys-moto-diet/index.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - Oakley's Moto diet - - - - -
                                                        -
                                                        - -
                                                        -
                                                          -
                                                          -

                                                          Oakley's Moto diet

                                                          - -
                                                          - Posted by Phil Hawksworth on -
                                                          and tagged - - - #excess - - - and - - #examples - -
                                                          - -
                                                          -
                                                          - -
                                                          -
                                                          -
                                                          -

                                                          - I recently blogged some crticism about a site which had an 85MB home page. At the time of writing, Oakley's Moto site was the most dramatic example I had ever seen of an excessively enhanced, heavyweight single page site. Since then, the team at Oakley have responded by putting the site on a diet and dramatically improving its performance and footprint. Great stuff! -

                                                          -
                                                          -
                                                          - - - -

                                                          - My criticisms of the site provoked some conversation on Twitter. Many people echoed my surprise at such an excessive page weight, others argued that this was a great example of pushing the boundaries of the web. -

                                                          -

                                                          - Notably though, Josh Austin, a member of the team at Oakley contacted me to say thanks for bringing my concerns to his attention. I was impressed by this as it's not easy to hear criticisms of something you've worked hard on. Indeed, not everyone took the criticism with such good grace. Oh well. -

                                                          -

                                                          - And so I was delighted when Josh contacted me again to let me know that a number of optimisations had been implemented, and that I should take another look. -

                                                          - -

                                                          Credit where credit is due

                                                          -

                                                          - The result of the efforts at Oakley was that a new version of the page (which has the same aesthetic and functionality as far as I can tell) was deployed with a drastically reduced page weight. -

                                                          - - -

                                                          Comparing the footprints

                                                          -

                                                          The original site:

                                                          -
                                                          -
                                                            -
                                                          • 85.4MB page weight
                                                          • -
                                                          • 471 HTTP requests
                                                          • -
                                                          -
                                                          -

                                                          And now the recently revised site:

                                                          -
                                                          -
                                                            -
                                                          • 13.6MB page weight
                                                          • -
                                                          • 285 HTTP requests
                                                          • -
                                                          -
                                                          - -

                                                          - That's a saving of more than 70MB! That's huge! -

                                                          -

                                                          - I'm still not really a fan of this kind of site, and 13MB for a single page is still very large indeed, but this is a fantastic optimisation when you consider where the original version. Bravo to the Oakley team for revisiting this and making such good improvements. -

                                                          - - - - - - - - - - - -
                                                          -
                                                          - - -
                                                          -
                                                          - Related: Oakley's monster page of baubles, Reflecting on Full Frontal 2011 - -
                                                          -
                                                          - - - - - - - - - - - - - - diff --git a/dist/blog/observing-twitter-behaviours/index.html b/dist/blog/observing-twitter-behaviours/index.html deleted file mode 100644 index 30d7c0d6..00000000 --- a/dist/blog/observing-twitter-behaviours/index.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - Observing Twitter behaviours - - - - -
                                                          -
                                                          - -
                                                          -
                                                            -
                                                            -

                                                            Observing Twitter behaviours

                                                            - -
                                                            - Posted by Phil Hawksworth on -
                                                            and tagged - - - #observations - - - and - - #twitter - -
                                                            - -
                                                            -
                                                            - -
                                                            -
                                                            -
                                                            -

                                                            - It seems that the Twitterverse is all of a flutter following recent blog posts from Phillie Casablanca and Paul Downey. I'm watching this with keen interest and it has been the subject of much impassioned discussion in our office. -

                                                            -
                                                            - - - - -

                                                            Frustrated by the noisy habits of some twitterers, Phil opened a discussion on good Twitter practices that led to him posting the 10 Commandments of Twitter, an attempt to articulate some of the good, and highlight some of the annoying, practices when posting tweets. For the record, I'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 suggestions.

                                                            - -

                                                            Many people, object to being told how they should use Twitter, and that's fair enough. It isn'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 'commandment' may be a bit strong, but it was used to elicit a response. Job done!

                                                            - -

                                                            Sharing similar frustrations, Paul Downey took things a step further on his blog describing two different camps of Twitter users: Twits and Twerps. 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 in a tweet) I personally find the terms merely playful and see that I am a Twit who sometimes displays Twerpish tendencies(!).

                                                            - -

                                                            One worry that I do have though, and this was articulated by JP Rangaswami on his blog 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 nanoformats 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 IRC and the like for years by the seemingly ferocious users who knew the conventions inside and out, but didn't appear to tolerate newcomers. I'd hate for twitter to end up like that. We should use things like the 10 Commandments of Twitter as useful tips for people, rather than an iron rod with which to force people to use Twitter 'our way.'

                                                            - - - - - -
                                                            -
                                                            - - -
                                                            -
                                                            - Photo credit: Mike Hoff - -
                                                            -
                                                            - - - - - - - - - - - - - - diff --git a/dist/blog/on-hiring-developers/index.html b/dist/blog/on-hiring-developers/index.html deleted file mode 100644 index a5acfe0a..00000000 --- a/dist/blog/on-hiring-developers/index.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - On hiring web developers - - - - -
                                                            -
                                                            - -
                                                            -
                                                              -
                                                              -

                                                              On hiring web developers

                                                              - -
                                                              - Posted by Phil Hawksworth on -
                                                              and tagged - - - #opinions - - - and - - #development - -
                                                              - -
                                                              -
                                                              - -
                                                              -
                                                              -
                                                              -

                                                              - Recently, I made a comment on twitter about how I think developers can make it easier for employers to recruit them. It sparked a little discussion which has been hard to summarise in 140 characters, so here's a short blog post to try to clarify my point. -

                                                              -
                                                              -
                                                              - - - -

                                                              What I said

                                                              - -

                                                              - The comment was sparked by my activity of looking to recruit a Senior Front End Engineer at R/GA. These thoughts are my personal opinions, and don't reflect the hiring policy of my employer, something, something, scary legal disclaimer etc. -

                                                              - -
                                                              -

                                                              - Dear jobbing web developers, I urge you to have a site of your own. A portfolio page, links to github & projects makes it easier to hire you -

                                                              - @philhawksworth, 12th Nov 2013 -
                                                              - - -

                                                              What was my point?

                                                              -

                                                              - I'm trying to find talented, engaged, and experienced developers to join the team. One of the qualities I look for is a passion for the web and a demonstration that the you've engaged with it. -

                                                              -

                                                              - This doesn't have to be in the form of public and available web sites. Usually people who work in the Web industry also participate in it and so have activity available to see. Be that code on Github, opinions and discussion on Twitter, photos on Flickr, or whatever happens on Google+ (insert, "stays on Google+" joke here). -

                                                              -

                                                              - This does not mean that shareable URLs and a footprint of activity on the web is in any way a formal requirement for landing a job at R/GA or in any team that I happen to be involved in putting together. -

                                                              -

                                                              - But it can help me figure out that we should talk. A resumé alone, doesn't always do that. -

                                                              - -

                                                              What was the debate?

                                                              -

                                                              - After posting that tweet, Norm, whose opinion I respect, quickly replied with: -

                                                              -
                                                              -

                                                              - @philhawksworth Really? I never needed those when working at Yahoo and built a VERY sizeable team of world-class devs. -

                                                              - @cackhanded, 13th Nov 2013 -
                                                              - -

                                                              ...and some discussion ensued. -

                                                              -

                                                              - Norm suggested that requiring any kind of online profile significantly limits the talent pool that you might recruit from. As he observed, "selecting only people who had an online profile would exclude some of the best I’ve ever worked with". -

                                                              -

                                                              - And I quite agree. As I say, this is not a prerequisite for a job. My problem though is simply this. -

                                                              -

                                                              - Resumés usually suck. -

                                                              -

                                                              - They just suck. Especially if they have been 'sanitised' by an intermediary recruiting consultancy who has tried to summarise it for you or make it conform to their standard format (which often happens). -

                                                              -

                                                              - In this industry, you often find resumés which are made up of a lot of snazzy technology buzzwords. A well-crafted summary of your experience which shows evidence of engagement, passion, and skill is tough to create, and rare to see. -

                                                              -

                                                              - I included having an active Github profile as a positive thing in my tweet. Simply put, it's a convenient place to see development activity, and being familiar with Git and Github is advantageous. I was not suggesting that candidates must show that they contribute to open source projects. Github is more than that. -

                                                              -

                                                              - Norm responded specifically to that, with an interesting article: -

                                                              -
                                                              -

                                                              - @philhawksworth @rossbruniges @larister More on not needing a Github profile: http://ashedryden.com/blog/the-ethics-of-unpaid-labor-and-the-oss-community -

                                                              - @cackhanded, 13th Nov 2013 -
                                                              -

                                                              - To which I reply: I do not consider contributing to an open source project, or having a Github profile as a prerequisite for landing a job. Perhaps I should just restate my advice without that pesky 140 character constraint. -

                                                              - -

                                                              My advice to web development candidates

                                                              -

                                                              - Dear front-end web developers who are seeking freelance or permanent employment. Landing a good job demands that you find a way to stand out from all the other candidates. Luckily you are good at what you do and have a platform to show it. May I suggest that you make it easier for people like me, who see lots and lots of resumés, to recruit you, by: -

                                                              - -

                                                              - If you can't do any of that, I'll do my best to get enough information from your resumé to determine that we should talk. But without something to see on the Web, you'll be making me work harder to figure out how awesome you are than that other person who's online resumé let me see what I needed without spending lots of time in Microsoft Word. -

                                                              -

                                                              - Love, hugs, and good luck. -

                                                              -

                                                              - Phil -

                                                              -

                                                              - At time of writing, R/GA are still looking for a senior front-end engineer to join the team in London. If that's you, then please do get in touch with me on phil.hawksworth@rga.com. No recruiters please. Just good candidates. Ideally with URLs. -

                                                              -

                                                              - If instead, you think I'm talking twaddle. Let me know what you think and why on twitter -

                                                              - - - - - - -
                                                              -
                                                              - - -
                                                              -
                                                              - Photo credit: flickr.com/photos/mrgranito/4527639541 (who probably has a lovely resumé) - -
                                                              -
                                                              - - - - - - - - - - - - - - diff --git a/dist/blog/opening-a-finder-window-from-the-terminal/index.html b/dist/blog/opening-a-finder-window-from-the-terminal/index.html deleted file mode 100644 index 349a920c..00000000 --- a/dist/blog/opening-a-finder-window-from-the-terminal/index.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - Opening a Finder window from the Terminal - - - - -
                                                              -
                                                              - -
                                                              -
                                                                -
                                                                -

                                                                Opening a Finder window from the Terminal

                                                                - -
                                                                - Posted by Phil Hawksworth on -
                                                                and tagged - - - #osx - - - and - - #tips - -
                                                                - -
                                                                -
                                                                - -
                                                                -
                                                                -
                                                                -

                                                                - 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 time. -

                                                                -
                                                                - - - -

                                                                To set things up so that it is easy to use whenever you need it, you just need to follow these two steps:

                                                                -

                                                                First, using your preferred text editor create a file which contains this command:

                                                                - -{% highlight bash %} -!/bin/bash -open /System/Library/CoreServices/Finder.app $PWD -{% endhighlight %} - -

                                                                You should name this file with whatever you want to use to call it later. I named it fndr.

                                                                -

                                                                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 Utils which I added to my path to make all of its contents easily accessible.

                                                                -

                                                                Now you can simply type fndr in your Terminal window to open a Finder at your present directory.

                                                                -

                                                                If you need help adding something to your path, I recommend creating a file in your home directory (it may even already exist) called .bash_profile. This file gets invoked whenever you enter the Terminal environment.

                                                                -

                                                                Add an item to your path by entering a line something like this to your .bash_profile file:

                                                                - -{% highlight bash %} -export PATH='$PATH:/Users/PhilH/Utils' -{% endhighlight %} - -

                                                                I'm always on the look out for bits and pieces like this to help make my life easier in Mac OSX. Not that I think that things are difficult in this excellent OS, 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 OSX world, it would be great if you could post them in the comments. Thanks!

                                                                -

                                                                Update:

                                                                - -

                                                                This can simple be done with a single command already as it turns out. Just use this:

                                                                - -{% highlight bash %} -open . -{% endhighlight %} - - - - - -
                                                                -
                                                                - - - - - - - - - - - - - - - diff --git a/dist/blog/osmosoft-return-from-leweb3-intact/index.html b/dist/blog/osmosoft-return-from-leweb3-intact/index.html deleted file mode 100644 index 142cbc4c..00000000 --- a/dist/blog/osmosoft-return-from-leweb3-intact/index.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - Osmosoft return from LeWeb3 intact - - - - -
                                                                -
                                                                - -
                                                                -
                                                                  -
                                                                  -

                                                                  Osmosoft return from LeWeb3 intact

                                                                  - -
                                                                  - Posted by Phil Hawksworth on -
                                                                  and tagged - - - #news - - - #events - - - #tools - - - and - - #osmosoft - -
                                                                  - -
                                                                  -
                                                                  - -
                                                                  -
                                                                  -
                                                                  -

                                                                  - Last week the entire Osmosoft team visited Paris to attend the LeWeb3 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 too. -

                                                                  -
                                                                  -
                                                                  - - - - -

                                                                  And so, RippeRap (then dubbed 'TiddleLeWeb') was conceived. We considered that building a tool based on TiddlyWiki 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 it.

                                                                  - -
                                                                  - -
                                                                  Ripplerap
                                                                  -
                                                                  - -

                                                                  We found that getting up-to-date and accurate information about the agenda from the LeWeb3 website, 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 Microformats to markup the agenda so that you could export the sessions to your calendar and so on.

                                                                  -

                                                                  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 BT shared a stand which was busy throughout. I think that having Paul Downey around to talk people through his excellent, and popular uber-doodle, 'The Web Is Agreement' (more than 60 thousand views on flickr at time of writing) helped draw people to the stand. I rather think that the retro-chic bat phone 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 Mojo, BT's REST exposure to its 21cSDK.

                                                                  - -
                                                                  Paul explains TWIA to Yossi Vardi -
                                                                  - Paul explains TWIA to Yossi Vardi -
                                                                  -
                                                                  - -

                                                                  RippleRap was distributed with the mantra 'release early, release often' ringing in our ears. There is no arguing with the suggestion that this is an application in it's early days. Releasing software in this way has been something of a revelation to me. I'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 'release early, release often' 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 suggested.

                                                                  -

                                                                  The LeWeb3 conference was, on the whole, pretty good. Some of the speakers where really interesting, and I found some unexpected gems. Yossi Vardi and Philippe Starck were really entertaining, although I gather that some of these talks were already available on YouTube. Listening to BT's JP Rangaswami was as ever, rather inspiring. I was also lucky enough to listen in on several ad hoc discussions that JP had around the conference, and noted that you rarely saw JP talking, without a small crowd gathering around him. I unexpectedly found myself on stage with JP and am now enjoying the glory of photos on flickr described "JP Rangaswami takes the stage at Le Web, supported by Phil Hawksworth". Brilliant! (just don't tell anyone that I was up there in nothing more than a 'helper-monkey' capacity!)

                                                                  -
                                                                  - JP presenting -
                                                                  JP presenting
                                                                  -
                                                                  -

                                                                  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 Loic Le Meur (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, Doc Searls, who I was particularly looking forward to listening to, had to rush through his presentation at lightening speed and was told that he didn't have time to take questions. Booo.

                                                                  -

                                                                  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 not.

                                                                  -

                                                                  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's what you get at conferences, and why a tool like RippleRap might be a handy thing to have at your fingertips.

                                                                  -

                                                                  Check out the photos that Osmosoft took at LeWeb3. Several Osmosoftians more talented than I have posted pictures at flickr.

                                                                  - - - -
                                                                  -
                                                                  - - - - - - - - - - - - - - - diff --git a/dist/blog/pathing-the-gimmicky-cowpaths/index.html b/dist/blog/pathing-the-gimmicky-cowpaths/index.html deleted file mode 100644 index 7904f076..00000000 --- a/dist/blog/pathing-the-gimmicky-cowpaths/index.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - Pathing the gimmicky cow-paths - - - - -
                                                                  -
                                                                  - -
                                                                  -
                                                                    -
                                                                    -

                                                                    Pathing the gimmicky cow-paths

                                                                    - -
                                                                    - Posted by Phil Hawksworth on -
                                                                    and tagged - - - #observations - - - #web - - - and - - #excess - -
                                                                    - -
                                                                    -
                                                                    - -
                                                                    -
                                                                    -
                                                                    -

                                                                    - I've ranted quite a bit about clumsy and excessive parallax scrolling effects on web sites recently. Following Adobe's announcement that they are making this kind of effect simple to do via a WYSIWYG authoring tool, I'm bracing for another glut of sites with this effect. Some might be beautiful. Many will not. -

                                                                    -
                                                                    -
                                                                    - - - -

                                                                    - And so what? What's the problem with recognising the desire for this visual effect and providing a tool to help deliver it? Well first of all, I'm still wary of WYSYWIG authoring tools. I'm just not convinced that they capture the subtlety and nuance of crafting experiences in the browser that perform well everywhere, gracefully degrade and are future friendly. -

                                                                    -

                                                                    - In Adobe's video touting the feature, Rufus Deuchler, Creative Cloud Evangelist for Design mentions that this provides: -

                                                                    -
                                                                    - "a sophisticated effect that you can apply without writing any code" -
                                                                    -

                                                                    - My fear is that this trendy effect has been popping up a lot and is rarely done in a way that shows care for page-weight, performance or perceived performance. Making it easier to do without knowing the code or the considerations seems like a storm brewing, to me. -

                                                                    -

                                                                    What is parallax?

                                                                    -

                                                                    - The term parallax is getting used for any visual effect triggered by scrolling. Of course, that's not the correct use of the term. Parallax is the effect you get when objects move at different speeds in different planes, giving the impression of depth. It's not parallax when objects spin, explode or woof when you scroll. -

                                                                    -

                                                                    - But those often seem to go hand in hand on sites that use this to excess. -

                                                                    -

                                                                    An early example

                                                                    -

                                                                    - To be clear, I'm not apposed to this kind of visual effect. Only when it is delivered gratuitously or with no consideration to the experience of the user (and that includes their bandwidth costs). -

                                                                    -

                                                                    - Back in early 2008, Paul Annett blogged about how Clearleft had implemented a beautiful example of a parallax effect on the Silverback site. This example got quite a bit of attention at the time and was done with care and attention, was not bloated or self indulgent, and degraded thoughtfully. -

                                                                    -

                                                                    - Let's hope that those using Adobe's new auto-web-shizzle tool give the same thought and consideration when they start churning out more of these. -

                                                                    - -

                                                                    - Related: Oakley's monster page of baubles, Excessive Enhancement -

                                                                    - - - - -
                                                                    -
                                                                    - - -
                                                                    -
                                                                    - Photo credit: Iain Tait - -
                                                                    -
                                                                    - - - - - - - - - - - - - - diff --git a/dist/blog/reflecting-on-fullfrontal-2011/index.html b/dist/blog/reflecting-on-fullfrontal-2011/index.html deleted file mode 100644 index 5c89abd0..00000000 --- a/dist/blog/reflecting-on-fullfrontal-2011/index.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - Reflecting on Full Frontal 2011 - - - - -
                                                                    -
                                                                    - -
                                                                    -
                                                                      -
                                                                      -

                                                                      Reflecting on Full Frontal 2011

                                                                      - -
                                                                      - Posted by Phil Hawksworth on -
                                                                      and tagged - - - #fullfrontalconf - - - #conferences - - - and - - #talks - -
                                                                      - -
                                                                      -
                                                                      - -
                                                                      -
                                                                      -
                                                                      -

                                                                      - The third installment of Full Frontal, the JavaScript conference hosted each year in Brighton by LeftLogic, 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 experience. -

                                                                      -
                                                                      -
                                                                      - - - -

                                                                      - 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 Remy 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 brains. -

                                                                      -

                                                                      - This all added to the sweat on my brow, and the shortness of my fingernails as my time on stage approached. -

                                                                      -

                                                                      - 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 'browser shizzle'. -

                                                                      -

                                                                      - 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 Web. -

                                                                      -

                                                                      - Everso slightly unfortunate, was the fact that almost every photo I've seen from my talk, features me standing in front of a giant sign saying "Sex Enhancements" (as you may have spotted above). I guess that's the price you pay for being a smart arse and/or channeling the chatter happening on Twitter! -

                                                                      -

                                                                      - The slides from my talk are available on SpeakerDeck -

                                                                      -

                                                                      - I was interested to hear what Jeremy Ashkenas had to say about CoffeeScript, as I had to admit to being a little hesitant to embrace it myself. In Jeremy'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'll give it a whirl. -

                                                                      -

                                                                      - Both Marijn Haverbeke and Rik Arends 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 Cloud 9 IDE. This is evolving into a really compelling IDE 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 increasing. -

                                                                      -

                                                                      - I enjoyed every talk during the day, but the two which really entertained me and got me thinking most were Glenn Jones, who demonstrated umpteen different examples of uses of emerging browser APIs, and Marcin Wichary of Google who showed us a glimpse into the world of creating the Google Doodles we all love. -

                                                                      -

                                                                      - Glenn'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 his blog. -

                                                                      -

                                                                      - 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 Pac Man and Jules Verne 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 bugger! -

                                                                      -

                                                                      - Many reviews and blog posts of the day are popping up and many are nicely aggregated over on Lanyrd -

                                                                      -

                                                                      - From the conversations I've had, Full Frontal is set to be popular again next year. Thankfully I've got a free ticket already in the bag as a reward for speaking this year (thanks again Remy!). Otherwise I'd certainly be monitoring the @fullfrontalconf twitter feed for news of when to grab a ticket next year before they get snapped up. -

                                                                      - - - - -
                                                                      -
                                                                      - - -
                                                                      -
                                                                      - Photo credit: Remy - -
                                                                      -
                                                                      - - - - - - - - - - - - - - diff --git a/dist/blog/reflecting-on-txjs/index.html b/dist/blog/reflecting-on-txjs/index.html deleted file mode 100644 index c2b3ff72..00000000 --- a/dist/blog/reflecting-on-txjs/index.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - Reflecting on Texas JavaScript 2013 - - - - -
                                                                      -
                                                                      - -
                                                                      -
                                                                        -
                                                                        -

                                                                        Reflecting on Texas JavaScript 2013

                                                                        - -
                                                                        - Posted by Phil Hawksworth on -
                                                                        and tagged - - - #talks - - - #conferences - - - and - - #smellcms - -
                                                                        - -
                                                                        -
                                                                        - -
                                                                        -
                                                                        -
                                                                        -

                                                                        - I recently blogged that I'd be speaking at the annual Texas JavaScript conference in Austin. After a few days to reflect, I'd have to say that it was not only a privilege to speak at TXJS, but also that it was a pretty special event to attend. -

                                                                        -
                                                                        -
                                                                        - - - -

                                                                        - This was my first visit to TXJS, now in its fourth year. The event has steadily grown in size and popularity over the years, but Alex Sexton, who runs the event, has worked hard to retain its intimate and friendly atmosphere. - -

                                                                        -

                                                                        - I gave a version of my "I can smell your CMS talk" along with a few aspects borrowed from another talk of mine called "Excessive Enhancement". - The slides are below, and a video from the session is due to be published sometime soon available on Vimeo. - -

                                                                        - - - -

                                                                        Impressions of the day

                                                                        -

                                                                        - This year, TXJS was a single track event. I like that as it removes that nagging feeling of choosing to see one talk at the expensive of another. Talks were also just 25 minutes long which, as an attendee, I liked. It felt like we got to see a LOAD of great talks in a single day. My head was buzzing by the end of the day. -

                                                                        -

                                                                        - The quality of the talks was, I felt, very high. There was a suggestion on twitter that there was less deep JavaScript content than some people would like, but the Node.js section offered a bunch of JavaScript from some proper brain-boxes which seemed to satisfy most. The variety of topics was great, with a lot of thought-provoking and inspiring content. You can see the full line-up and a growing set of coverage from the event on Lanyrd, but I've briefly picked out a few of my personal highlights below. (which was not easy) -

                                                                        - -

                                                                        Harper Reed

                                                                        -

                                                                        Entertaining and inspiring. Harper spoke about his time as CTO of Threadless and as CTO of the Obama for America campaign. Some great stories and philosophies around building great teams and products.

                                                                        - -

                                                                        Chris Coyer

                                                                        -

                                                                        - Anyone who is still on the fence about using SASS should see Chris speak. His style of presentation has an infectious energy and he makes some great points about the value of SASS and ways to use it. -

                                                                        - -

                                                                        Frances Berriman

                                                                        -

                                                                        - I know Frances from such places in London as "the pub", but had never seen her present a talk before. Frances' description of the award winning work going on at GovUK was both fascinating and inspiring. Real examples of truly valuable work being done to overhaul the UK government web sites, and some lessons for anyone working to produce thoughtful experiences on the web. -

                                                                        - -

                                                                        Jed Schmidt

                                                                        -

                                                                        - Jed worked rapidly through an example of building an API with numerous server-side JavaScript utilities with Node. Jed's presentation style was fantastic. With humor, energy and a staggeringly high pun count. Dense with information, yet very funny. I enjoyed Jed's talk greatly, -

                                                                        - -

                                                                        Charlie Robbins

                                                                        -

                                                                        - As CEO of Nodejitsu, Charlie had some nice insights into building a business which embraces and supports open source. As an advocate of open source myself, it was good to hear about how Nodejitsu protects its proprietary code while sharing parts of its stack as open source projects for the greater good. -

                                                                        - -

                                                                        Drew Wilson

                                                                        -

                                                                        - Listening to Drew was both depressing and uplifting. Depressing because he reminds you of how much you procrastinate or fear failure. Uplifting because of the sheer volume of things that he has done and the message that you should just get on and pursue your ambitions. Like many of the other speakers, Drew is outrageously prolific and his talk followed the theme of his book (written in 8 days!) - how and why to execute rapidly. -

                                                                        - -

                                                                        Night watchman

                                                                        -
                                                                        - Speaking at TXJS -
                                                                        -

                                                                        I was last to speak, and was a little nervous considering the high quality of the talks that I was to follow. Plus, I was pretty much all that stood between a few hundred people and their much anticipated beer. As I started, I quipped:

                                                                        -
                                                                        - I've spent the day being thankful that I didn't have to follow the current, excellent speaker... but that feeling has continued all day... until there was nobody left to lower the bar for me. -
                                                                        -

                                                                        - I meant it, but thankfully the audience gave a generous welcome and seemed entertained by my accent, if not my slides. As Alex Sexton told me later: -

                                                                        -
                                                                        - "It's funny because you sound like a prince" -
                                                                        -

                                                                        - I'm adding that to my resume. -

                                                                        - -

                                                                        Update

                                                                        -

                                                                        - All the talks have now been published as videos on the TXJS2013 Vimeo channel -

                                                                        - - - - - - - - - - - -
                                                                        -
                                                                        - - -
                                                                        -
                                                                        - Photo credit: Eugene Lazutkin - -
                                                                        -
                                                                        - - - - - - - - - - - - - - diff --git a/dist/blog/simplicity-and-performance/index.html b/dist/blog/simplicity-and-performance/index.html deleted file mode 100644 index c0ddfbd1..00000000 --- a/dist/blog/simplicity-and-performance/index.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - Simplicity and performance with static files - - - - -
                                                                        -
                                                                        - -
                                                                        -
                                                                          -
                                                                          -

                                                                          Simplicity and performance with static files

                                                                          - -
                                                                          - Posted by Phil Hawksworth on -
                                                                          and tagged - - - #development - - - #observations - - - and - - #smellcms - -
                                                                          - -
                                                                          -
                                                                          - -
                                                                          -
                                                                          -
                                                                          -

                                                                          - I've been beating a drum recently, and it has a lot to do with pursuing simplicity in technical architectures. I want to allow for optimizations where it matter most and avoid the kind of technical and functional bloat you can get through using some CMS platforms. So I was delighted when a colleague recently shared a link to Kyle Rush's post which demonstrates some huge value in this approach on the Obama fund-rising campaign site. -

                                                                          -
                                                                          -
                                                                          - - - -

                                                                          - Kyle's article is well worth a read. In it, he talks at high level about some of the principles and approaches that were used to ensure high performance on the contribute.barackobama.com site. -

                                                                          -

                                                                          - Many of the techniques and technical architecture decisions map very closely to those that I have been championing recently, and I talked a little about this at Fronteers in Amsterdam when I spoke about the complexity overhead from some Content Management Systems. -

                                                                          -

                                                                          Of particular interest to me, Kyle mentions some great stuff like:

                                                                          - - - -

                                                                          So much of this rings true to me, but it is great to read of the very tangible and financial benefits of ensuring that the site is well optimized and front-end development is not compromised by (what I call) CMS Stink.

                                                                          - -

                                                                          A couple of quotes from Kyle that gave me real, 'Amen brother!' moments:

                                                                          - -
                                                                          -

                                                                          - By using Jekyll we managed to avoid the complexity that comes with most CMS (databases, server configuration) and instead focus on things like optimizing the UI and providing a better user experience. -

                                                                          -
                                                                          - -

                                                                          and

                                                                          - -
                                                                          -

                                                                          - There is a lot to be said about simplicity. -

                                                                          -
                                                                          - -

                                                                          Can I get a 'hell yeah!'

                                                                          - - - - -
                                                                          -
                                                                          - - -
                                                                          -
                                                                          - Just go and read Kyle Rush's blog post - -
                                                                          -
                                                                          - - - - - - - - - - - - - - diff --git a/dist/blog/sketchjs-adds-convenient-canvas-rendering/index.html b/dist/blog/sketchjs-adds-convenient-canvas-rendering/index.html deleted file mode 100644 index f80cb181..00000000 --- a/dist/blog/sketchjs-adds-convenient-canvas-rendering/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - Sketch.js adds convenient canvas rendering - - - - -
                                                                          -
                                                                          - -
                                                                          -
                                                                            -
                                                                            -

                                                                            Sketch.js adds convenient canvas rendering

                                                                            - -
                                                                            - Posted by Phil Hawksworth on -
                                                                            and tagged - - - #canvas - - - #webgl - - - #javascript - - - and - - #resources - -
                                                                            - -
                                                                            -
                                                                            - -
                                                                            -
                                                                            -
                                                                            -

                                                                            - Sketch.js is an open source javascript library which offers some animation utilities. Aimed at making animating with canvas or webgl easier, sketch.js is a lightweight piece of boilerplate code which streamlines a number of common tasks. -

                                                                            -
                                                                            -
                                                                            - - - -

                                                                            - Sketch helps by augmenting things like the mouse, touch and keyboard events with often neded utilities. It also sets up your animation loop and helps to manage it with enriched math functions and other handy bits and pieces. -

                                                                            -

                                                                            - Check out the demo or go and find out more on Github -

                                                                            -

                                                                            - The project site has good documentation of the API in the project wiki, and many of the conventions and patterns may look familiar to those used to using prototype. -

                                                                            - - - - -
                                                                            -
                                                                            - - -
                                                                            -
                                                                            - Download: sketch.js - -
                                                                            -
                                                                            - - - - - - - - - - - - - - diff --git a/dist/blog/smelly-cms-at-html5devconf/index.html b/dist/blog/smelly-cms-at-html5devconf/index.html deleted file mode 100644 index f5990562..00000000 --- a/dist/blog/smelly-cms-at-html5devconf/index.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - Smelly CMS at HTML5DevConf - - - - -
                                                                            -
                                                                            - -
                                                                            -
                                                                              -
                                                                              -

                                                                              Smelly CMS at HTML5DevConf

                                                                              - -
                                                                              - Posted by Phil Hawksworth on -
                                                                              and tagged - - - #talks - - - #conferences - - - and - - #smellcms - -
                                                                              - -
                                                                              -
                                                                              - -
                                                                              -
                                                                              -
                                                                              -

                                                                              - On April 1st, I'll be speaking at the HTML5DevConf at the Palace Hotel in San Francisco. I'll be giving a version of my "I can smell yor CMS" talk which looks at how content managment systems can adversily effect performance and experience in the front-end. -

                                                                              -
                                                                              -
                                                                              - - - -

                                                                              Here's the synopsis:

                                                                              -
                                                                              -

                                                                              - The word is getting out. Great web site experiences require careful development and crafty execution in the front end. Squeezing every drop of performance out of your user's browser is tough, but Steve Souders and friends have mobilized an army, and we are all having a bloody good go. -

                                                                              -

                                                                              - But there is a common threat to doing great work in the front-end. It lurks in the back-end and clients love it. It's the content management system, and more often than not, it stinks. -

                                                                              - We'll look at examples of the damaging traces CMSs leave behind in the front-end and at how we might work to reduce them. We'll find ways to fight for what matters in a CMS, and ways to avoid the smell of your CMS wafting over to the user and sacrificing the craftsmanship of good front-end engineering. -

                                                                              -
                                                                              - -

                                                                              - I'll be presenting at 4pm on Monday 1st of April (no, really!) in the Twin Peaks room. Do come along and say hello. -

                                                                              - - -

                                                                              Update:

                                                                              -

                                                                              - Once again, this session was well received which is an encouraging sign. A number of people asked about getting a recording of the talk. Sadly the session was not recorded at this event, however you can find a video of this talk from Fronteers and also the slides and some Q&A from the Fronteers session -

                                                                              More info: The Palace Hotel, Session info, Session info and coverage on Lanyrd. - - - - - - - - - -
                                                                              -
                                                                              - - -
                                                                              -
                                                                              - More info: The Palace Hotel, Session info, Session info and coverage on Lanyrd. - -
                                                                              -
                                                                              - - - - - - - - - - - - - - diff --git a/dist/blog/social-media-did-not-cause-the-london-riots/index.html b/dist/blog/social-media-did-not-cause-the-london-riots/index.html deleted file mode 100644 index a14ea6df..00000000 --- a/dist/blog/social-media-did-not-cause-the-london-riots/index.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - Social media did not cause the London riots - - - - -
                                                                              -
                                                                              - -
                                                                              -
                                                                                -
                                                                                -

                                                                                Social media did not cause the London riots

                                                                                - -
                                                                                - Posted by Phil Hawksworth on -
                                                                                and tagged - - - #observations - - - and - - #london - -
                                                                                - -
                                                                                -
                                                                                - -
                                                                                -
                                                                                -
                                                                                -

                                                                                - It seems to me that this is the time for some responsibility. In the face of the kind of civil unrest that we have witnessed in the UK 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'm not just talking about the people turning to criminal acts, young and old, men and women, but also about, specifically about, the media. -

                                                                                -
                                                                                -
                                                                                - - - -

                                                                                - It'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'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 facts. -

                                                                                -

                                                                                - 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 way. -

                                                                                -

                                                                                - But I'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 "Nail the Twitter rioters" demonstrate an ignorance and a disregard for responsible journalism which is all too familiar. -

                                                                                -

                                                                                - I've noticed that a few people (on twitter, as it happens) are beginning to ask the important question of "why are these people rioting". Let'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 "they are a bunch of thugs". -

                                                                                -

                                                                                - I digress. The point I wanted to make is that these riots were not caused by the existence of social media. I watched the ITV news as it began demonising social media and casting it as that thing that the hooded youths of today use to coordinate their shop lootings and happy-slappings. 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. (ITV news went on to ask viewers to keep them in the loop via Twitter!) -

                                                                                -

                                                                                - 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 usage: -

                                                                                - -

                                                                                - Indeed the overwhelming response from people coordinating on the likes of twitter to engage in an effort to clean up after the riot should be an indication not only that there is a will and solidarity in the communities effected, but also that people are using the tools available to them for good. -

                                                                                -

                                                                                - Let'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 us. -

                                                                                - - - - -
                                                                                -
                                                                                - - -
                                                                                -
                                                                                - Photo credit: http://twitpic.com/63d9bu - -
                                                                                -
                                                                                - - - - - - - - - - - - - - diff --git a/dist/blog/tag/announcements/index.html b/dist/blog/tag/announcements/index.html deleted file mode 100644 index f82fad4b..00000000 --- a/dist/blog/tag/announcements/index.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - - #announcements - - - - -
                                                                                -
                                                                                - -
                                                                                -
                                                                                  -
                                                                                  -

                                                                                  #announcements

                                                                                  - -
                                                                                  -
                                                                                  - -
                                                                                  -
                                                                                  - - - - - - - - - - - - - - - -

                                                                                  Other tags used on the blog:

                                                                                  - - -
                                                                                  -
                                                                                  - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/bbc/index.html b/dist/blog/tag/bbc/index.html deleted file mode 100644 index dc256d1d..00000000 --- a/dist/blog/tag/bbc/index.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - - - #bbc - - - - -
                                                                                  -
                                                                                  - -
                                                                                  -
                                                                                    -
                                                                                    -

                                                                                    #bbc

                                                                                    - -
                                                                                    -
                                                                                    - -
                                                                                    -
                                                                                    - - - - - - -

                                                                                    Other tags used on the blog:

                                                                                    - - -
                                                                                    -
                                                                                    - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/bbconline/index.html b/dist/blog/tag/bbconline/index.html deleted file mode 100644 index 58bf8d12..00000000 --- a/dist/blog/tag/bbconline/index.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - - - #bbconline - - - - -
                                                                                    -
                                                                                    - -
                                                                                    -
                                                                                      -
                                                                                      -

                                                                                      #bbconline

                                                                                      - -
                                                                                      -
                                                                                      - -
                                                                                      -
                                                                                      - - - - - - -

                                                                                      Other tags used on the blog:

                                                                                      - - -
                                                                                      -
                                                                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/canvas/index.html b/dist/blog/tag/canvas/index.html deleted file mode 100644 index 11dd3c4a..00000000 --- a/dist/blog/tag/canvas/index.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - #canvas - - - - -
                                                                                      -
                                                                                      - -
                                                                                      -
                                                                                        -
                                                                                        -

                                                                                        #canvas

                                                                                        - -
                                                                                        -
                                                                                        - -
                                                                                        -
                                                                                        - - - - - - -

                                                                                        Other tags used on the blog:

                                                                                        - - -
                                                                                        -
                                                                                        - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/conferences/index.html b/dist/blog/tag/conferences/index.html deleted file mode 100644 index 71db0e77..00000000 --- a/dist/blog/tag/conferences/index.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - - - - #conferences - - - - -
                                                                                        -
                                                                                        - -
                                                                                        -
                                                                                          -
                                                                                          -

                                                                                          #conferences

                                                                                          - -
                                                                                          -
                                                                                          - -
                                                                                          -
                                                                                          - - - - - - - - - - - - - - - - - - - - - - - - -

                                                                                          Other tags used on the blog:

                                                                                          - - -
                                                                                          -
                                                                                          - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/development/index.html b/dist/blog/tag/development/index.html deleted file mode 100644 index 95e27b0e..00000000 --- a/dist/blog/tag/development/index.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - - - #development - - - - -
                                                                                          -
                                                                                          - -
                                                                                          -
                                                                                            -
                                                                                            -

                                                                                            #development

                                                                                            - -
                                                                                            -
                                                                                            - -
                                                                                            -
                                                                                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                                                                            Other tags used on the blog:

                                                                                            - - -
                                                                                            -
                                                                                            - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/discussions/index.html b/dist/blog/tag/discussions/index.html deleted file mode 100644 index 14308924..00000000 --- a/dist/blog/tag/discussions/index.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - - - #discussions - - - - -
                                                                                            -
                                                                                            - -
                                                                                            -
                                                                                              -
                                                                                              -

                                                                                              #discussions

                                                                                              - -
                                                                                              -
                                                                                              - -
                                                                                              -
                                                                                              - - - - - - -

                                                                                              Other tags used on the blog:

                                                                                              - - -
                                                                                              -
                                                                                              - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/events/index.html b/dist/blog/tag/events/index.html deleted file mode 100644 index 70975dac..00000000 --- a/dist/blog/tag/events/index.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - #events - - - - -
                                                                                              -
                                                                                              - -
                                                                                              -
                                                                                                -
                                                                                                -

                                                                                                #events

                                                                                                - -
                                                                                                -
                                                                                                - -
                                                                                                -
                                                                                                - - - - - - - - - - - - - - - -

                                                                                                Other tags used on the blog:

                                                                                                - - -
                                                                                                -
                                                                                                - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/examples/index.html b/dist/blog/tag/examples/index.html deleted file mode 100644 index c63745a5..00000000 --- a/dist/blog/tag/examples/index.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - - - #examples - - - - -
                                                                                                -
                                                                                                - -
                                                                                                -
                                                                                                  -
                                                                                                  -

                                                                                                  #examples

                                                                                                  - -
                                                                                                  -
                                                                                                  - -
                                                                                                  -
                                                                                                  - - - - - - - - - -

                                                                                                  Other tags used on the blog:

                                                                                                  - - -
                                                                                                  -
                                                                                                  - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/excess/index.html b/dist/blog/tag/excess/index.html deleted file mode 100644 index 179ab141..00000000 --- a/dist/blog/tag/excess/index.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - - #excess - - - - -
                                                                                                  -
                                                                                                  - -
                                                                                                  -
                                                                                                    -
                                                                                                    -

                                                                                                    #excess

                                                                                                    - -
                                                                                                    -
                                                                                                    - -
                                                                                                    -
                                                                                                    - - - - - - - - - - - - - - - - - - -

                                                                                                    Other tags used on the blog:

                                                                                                    - - -
                                                                                                    -
                                                                                                    - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/fronteers/index.html b/dist/blog/tag/fronteers/index.html deleted file mode 100644 index 96cab987..00000000 --- a/dist/blog/tag/fronteers/index.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - - - #fronteers - - - - -
                                                                                                    -
                                                                                                    - -
                                                                                                    -
                                                                                                      -
                                                                                                      -

                                                                                                      #fronteers

                                                                                                      - -
                                                                                                      -
                                                                                                      - -
                                                                                                      -
                                                                                                      - - - - - - -

                                                                                                      Other tags used on the blog:

                                                                                                      - - -
                                                                                                      -
                                                                                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/fullfrontalconf/index.html b/dist/blog/tag/fullfrontalconf/index.html deleted file mode 100644 index c0b5bc91..00000000 --- a/dist/blog/tag/fullfrontalconf/index.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - - - #fullfrontalconf - - - - -
                                                                                                      -
                                                                                                      - -
                                                                                                      -
                                                                                                        -
                                                                                                        -

                                                                                                        #fullfrontalconf

                                                                                                        - -
                                                                                                        -
                                                                                                        - -
                                                                                                        -
                                                                                                        - - - - - - - - - -

                                                                                                        Other tags used on the blog:

                                                                                                        - - -
                                                                                                        -
                                                                                                        - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/html/index.html b/dist/blog/tag/html/index.html deleted file mode 100644 index 1683bd39..00000000 --- a/dist/blog/tag/html/index.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - #html - - - - -
                                                                                                        -
                                                                                                        - -
                                                                                                        -
                                                                                                          -
                                                                                                          -

                                                                                                          #html

                                                                                                          - -
                                                                                                          -
                                                                                                          - -
                                                                                                          -
                                                                                                          - - - - - - -

                                                                                                          Other tags used on the blog:

                                                                                                          - - -
                                                                                                          -
                                                                                                          - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/index.html b/dist/blog/tag/index.html deleted file mode 100644 index e5cfb6b5..00000000 --- a/dist/blog/tag/index.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - hawksworx / tags - - - - -
                                                                                                          -
                                                                                                          - -
                                                                                                          -
                                                                                                            -
                                                                                                            -

                                                                                                            hawksworx / tags

                                                                                                            - -
                                                                                                            -
                                                                                                            - -
                                                                                                            -
                                                                                                            - - -
                                                                                                            -
                                                                                                            - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/javascript/index.html b/dist/blog/tag/javascript/index.html deleted file mode 100644 index 375fb4ab..00000000 --- a/dist/blog/tag/javascript/index.html +++ /dev/null @@ -1,601 +0,0 @@ - - - - - - - - - #javascript - - - - -
                                                                                                            -
                                                                                                            - -
                                                                                                            -
                                                                                                              -
                                                                                                              -

                                                                                                              #javascript

                                                                                                              - -
                                                                                                              -
                                                                                                              - -
                                                                                                              -
                                                                                                              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                                                                                              Other tags used on the blog:

                                                                                                              - - -
                                                                                                              -
                                                                                                              - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/jquery/index.html b/dist/blog/tag/jquery/index.html deleted file mode 100644 index 9928aa8c..00000000 --- a/dist/blog/tag/jquery/index.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - - - - #jquery - - - - -
                                                                                                              -
                                                                                                              - -
                                                                                                              -
                                                                                                                -
                                                                                                                -

                                                                                                                #jquery

                                                                                                                - -
                                                                                                                -
                                                                                                                - -
                                                                                                                -
                                                                                                                - - - - - - - - - - - - - - - - - - -

                                                                                                                Other tags used on the blog:

                                                                                                                - - -
                                                                                                                -
                                                                                                                - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/london/index.html b/dist/blog/tag/london/index.html deleted file mode 100644 index c318acaf..00000000 --- a/dist/blog/tag/london/index.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - - - #london - - - - -
                                                                                                                -
                                                                                                                - -
                                                                                                                -
                                                                                                                  -
                                                                                                                  -

                                                                                                                  #london

                                                                                                                  - -
                                                                                                                  -
                                                                                                                  - -
                                                                                                                  -
                                                                                                                  - - - - - - - - - -

                                                                                                                  Other tags used on the blog:

                                                                                                                  - - -
                                                                                                                  -
                                                                                                                  - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/mashups/index.html b/dist/blog/tag/mashups/index.html deleted file mode 100644 index 25e5723b..00000000 --- a/dist/blog/tag/mashups/index.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - - #mashups - - - - -
                                                                                                                  -
                                                                                                                  - -
                                                                                                                  -
                                                                                                                    -
                                                                                                                    -

                                                                                                                    #mashups

                                                                                                                    - -
                                                                                                                    -
                                                                                                                    - -
                                                                                                                    -
                                                                                                                    - - - - - - - - - - - - -

                                                                                                                    Other tags used on the blog:

                                                                                                                    - - -
                                                                                                                    -
                                                                                                                    - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/news/index.html b/dist/blog/tag/news/index.html deleted file mode 100644 index 90954d6c..00000000 --- a/dist/blog/tag/news/index.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - - - #news - - - - -
                                                                                                                    -
                                                                                                                    - -
                                                                                                                    -
                                                                                                                      -
                                                                                                                      -

                                                                                                                      #news

                                                                                                                      - -
                                                                                                                      -
                                                                                                                      - -
                                                                                                                      -
                                                                                                                      - - - - - - - - - - - - -

                                                                                                                      Other tags used on the blog:

                                                                                                                      - - -
                                                                                                                      -
                                                                                                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/nodejs/index.html b/dist/blog/tag/nodejs/index.html deleted file mode 100644 index 61f52ee1..00000000 --- a/dist/blog/tag/nodejs/index.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - - #nodejs - - - - -
                                                                                                                      -
                                                                                                                      - -
                                                                                                                      -
                                                                                                                        -
                                                                                                                        -

                                                                                                                        #nodejs

                                                                                                                        - -
                                                                                                                        -
                                                                                                                        - -
                                                                                                                        -
                                                                                                                        - - - - - - - - - - - - -

                                                                                                                        Other tags used on the blog:

                                                                                                                        - - -
                                                                                                                        -
                                                                                                                        - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/observations/index.html b/dist/blog/tag/observations/index.html deleted file mode 100644 index 7b28c9bc..00000000 --- a/dist/blog/tag/observations/index.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - - - - - - #observations - - - - -
                                                                                                                        -
                                                                                                                        - -
                                                                                                                        -
                                                                                                                          -
                                                                                                                          -

                                                                                                                          #observations

                                                                                                                          - -
                                                                                                                          -
                                                                                                                          - -
                                                                                                                          -
                                                                                                                          - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                                                                                                          Other tags used on the blog:

                                                                                                                          - - -
                                                                                                                          -
                                                                                                                          - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/opinions/index.html b/dist/blog/tag/opinions/index.html deleted file mode 100644 index 483cd64d..00000000 --- a/dist/blog/tag/opinions/index.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - - - - #opinions - - - - -
                                                                                                                          -
                                                                                                                          - -
                                                                                                                          -
                                                                                                                            -
                                                                                                                            -

                                                                                                                            #opinions

                                                                                                                            - -
                                                                                                                            -
                                                                                                                            - -
                                                                                                                            -
                                                                                                                            - - - - - - -

                                                                                                                            Other tags used on the blog:

                                                                                                                            - - -
                                                                                                                            -
                                                                                                                            - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/osmosoft/index.html b/dist/blog/tag/osmosoft/index.html deleted file mode 100644 index b31189b4..00000000 --- a/dist/blog/tag/osmosoft/index.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - #osmosoft - - - - -
                                                                                                                            -
                                                                                                                            - -
                                                                                                                            -
                                                                                                                              -
                                                                                                                              -

                                                                                                                              #osmosoft

                                                                                                                              - -
                                                                                                                              -
                                                                                                                              - -
                                                                                                                              -
                                                                                                                              - - - - - - - - - - - - - - - - - - -

                                                                                                                              Other tags used on the blog:

                                                                                                                              - - -
                                                                                                                              -
                                                                                                                              - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/osx/index.html b/dist/blog/tag/osx/index.html deleted file mode 100644 index 2ef5f6be..00000000 --- a/dist/blog/tag/osx/index.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - - - - #osx - - - - -
                                                                                                                              -
                                                                                                                              - -
                                                                                                                              -
                                                                                                                                -
                                                                                                                                -

                                                                                                                                #osx

                                                                                                                                - -
                                                                                                                                -
                                                                                                                                - -
                                                                                                                                -
                                                                                                                                - - - - - - - - - - - - -

                                                                                                                                Other tags used on the blog:

                                                                                                                                - - -
                                                                                                                                -
                                                                                                                                - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/personal/index.html b/dist/blog/tag/personal/index.html deleted file mode 100644 index f760f64a..00000000 --- a/dist/blog/tag/personal/index.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - - - #personal - - - - -
                                                                                                                                -
                                                                                                                                - -
                                                                                                                                -
                                                                                                                                  -
                                                                                                                                  -

                                                                                                                                  #personal

                                                                                                                                  - -
                                                                                                                                  -
                                                                                                                                  - -
                                                                                                                                  -
                                                                                                                                  - - - - - - -

                                                                                                                                  Other tags used on the blog:

                                                                                                                                  - - -
                                                                                                                                  -
                                                                                                                                  - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/projects/index.html b/dist/blog/tag/projects/index.html deleted file mode 100644 index d34fc68f..00000000 --- a/dist/blog/tag/projects/index.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - - - #projects - - - - -
                                                                                                                                  -
                                                                                                                                  - -
                                                                                                                                  -
                                                                                                                                    -
                                                                                                                                    -

                                                                                                                                    #projects

                                                                                                                                    - -
                                                                                                                                    -
                                                                                                                                    - -
                                                                                                                                    -
                                                                                                                                    - - - - - - - - - - - - -

                                                                                                                                    Other tags used on the blog:

                                                                                                                                    - - -
                                                                                                                                    -
                                                                                                                                    - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/python/index.html b/dist/blog/tag/python/index.html deleted file mode 100644 index dcaff85a..00000000 --- a/dist/blog/tag/python/index.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - #python - - - - -
                                                                                                                                    -
                                                                                                                                    - -
                                                                                                                                    -
                                                                                                                                      -
                                                                                                                                      -

                                                                                                                                      #python

                                                                                                                                      - -
                                                                                                                                      -
                                                                                                                                      - -
                                                                                                                                      -
                                                                                                                                      - - - - - - -

                                                                                                                                      Other tags used on the blog:

                                                                                                                                      - - -
                                                                                                                                      -
                                                                                                                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/resources/index.html b/dist/blog/tag/resources/index.html deleted file mode 100644 index 65661a09..00000000 --- a/dist/blog/tag/resources/index.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - - - #resources - - - - -
                                                                                                                                      -
                                                                                                                                      - -
                                                                                                                                      -
                                                                                                                                        -
                                                                                                                                        -

                                                                                                                                        #resources

                                                                                                                                        - -
                                                                                                                                        -
                                                                                                                                        - -
                                                                                                                                        -
                                                                                                                                        - - - - - - - - - -

                                                                                                                                        Other tags used on the blog:

                                                                                                                                        - - -
                                                                                                                                        -
                                                                                                                                        - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/rga/index.html b/dist/blog/tag/rga/index.html deleted file mode 100644 index 78da5f85..00000000 --- a/dist/blog/tag/rga/index.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - - - #rga - - - - -
                                                                                                                                        -
                                                                                                                                        - -
                                                                                                                                        -
                                                                                                                                          -
                                                                                                                                          -

                                                                                                                                          #rga

                                                                                                                                          - -
                                                                                                                                          -
                                                                                                                                          - -
                                                                                                                                          -
                                                                                                                                          - - - - - - - - - -

                                                                                                                                          Other tags used on the blog:

                                                                                                                                          - - -
                                                                                                                                          -
                                                                                                                                          - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/smellcms/index.html b/dist/blog/tag/smellcms/index.html deleted file mode 100644 index cd82d2a5..00000000 --- a/dist/blog/tag/smellcms/index.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - - - - #smellcms - - - - -
                                                                                                                                          -
                                                                                                                                          - -
                                                                                                                                          -
                                                                                                                                            -
                                                                                                                                            -

                                                                                                                                            #smellcms

                                                                                                                                            - -
                                                                                                                                            -
                                                                                                                                            - -
                                                                                                                                            -
                                                                                                                                            - - - - - - - - - - - - - - - - - - - - - -

                                                                                                                                            Other tags used on the blog:

                                                                                                                                            - - -
                                                                                                                                            -
                                                                                                                                            - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/talks/index.html b/dist/blog/tag/talks/index.html deleted file mode 100644 index 0926dc85..00000000 --- a/dist/blog/tag/talks/index.html +++ /dev/null @@ -1,442 +0,0 @@ - - - - - - - - - #talks - - - - -
                                                                                                                                            -
                                                                                                                                            - -
                                                                                                                                            -
                                                                                                                                              -
                                                                                                                                              -

                                                                                                                                              #talks

                                                                                                                                              - -
                                                                                                                                              -
                                                                                                                                              - -
                                                                                                                                              -
                                                                                                                                              - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                                                                                                                              Other tags used on the blog:

                                                                                                                                              - - -
                                                                                                                                              -
                                                                                                                                              - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/theteam/index.html b/dist/blog/tag/theteam/index.html deleted file mode 100644 index 9e954759..00000000 --- a/dist/blog/tag/theteam/index.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - #theteam - - - - -
                                                                                                                                              -
                                                                                                                                              - -
                                                                                                                                              -
                                                                                                                                                -
                                                                                                                                                -

                                                                                                                                                #theteam

                                                                                                                                                - -
                                                                                                                                                -
                                                                                                                                                - -
                                                                                                                                                -
                                                                                                                                                - - - - - - - - - - - - -

                                                                                                                                                Other tags used on the blog:

                                                                                                                                                - - -
                                                                                                                                                -
                                                                                                                                                - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/tiddlywiki/index.html b/dist/blog/tag/tiddlywiki/index.html deleted file mode 100644 index b31f3480..00000000 --- a/dist/blog/tag/tiddlywiki/index.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - - - - #tiddlywiki - - - - -
                                                                                                                                                -
                                                                                                                                                - -
                                                                                                                                                -
                                                                                                                                                  -
                                                                                                                                                  -

                                                                                                                                                  #tiddlywiki

                                                                                                                                                  - -
                                                                                                                                                  -
                                                                                                                                                  - -
                                                                                                                                                  -
                                                                                                                                                  - - - - - - - - - - - - - - - - - - -

                                                                                                                                                  Other tags used on the blog:

                                                                                                                                                  - - -
                                                                                                                                                  -
                                                                                                                                                  - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/tips/index.html b/dist/blog/tag/tips/index.html deleted file mode 100644 index 51f72f2b..00000000 --- a/dist/blog/tag/tips/index.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - #tips - - - - -
                                                                                                                                                  -
                                                                                                                                                  - -
                                                                                                                                                  -
                                                                                                                                                    -
                                                                                                                                                    -

                                                                                                                                                    #tips

                                                                                                                                                    - -
                                                                                                                                                    -
                                                                                                                                                    - -
                                                                                                                                                    -
                                                                                                                                                    - - - - - - - - - - - - - - - -

                                                                                                                                                    Other tags used on the blog:

                                                                                                                                                    - - -
                                                                                                                                                    -
                                                                                                                                                    - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/tools/index.html b/dist/blog/tag/tools/index.html deleted file mode 100644 index 82f695b9..00000000 --- a/dist/blog/tag/tools/index.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - - #tools - - - - -
                                                                                                                                                    -
                                                                                                                                                    - -
                                                                                                                                                    -
                                                                                                                                                      -
                                                                                                                                                      -

                                                                                                                                                      #tools

                                                                                                                                                      - -
                                                                                                                                                      -
                                                                                                                                                      - -
                                                                                                                                                      -
                                                                                                                                                      - - - - - - - - - - - - -

                                                                                                                                                      Other tags used on the blog:

                                                                                                                                                      - - -
                                                                                                                                                      -
                                                                                                                                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/twitter/index.html b/dist/blog/tag/twitter/index.html deleted file mode 100644 index 5f84fac6..00000000 --- a/dist/blog/tag/twitter/index.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - - - #twitter - - - - -
                                                                                                                                                      -
                                                                                                                                                      - -
                                                                                                                                                      -
                                                                                                                                                        -
                                                                                                                                                        -

                                                                                                                                                        #twitter

                                                                                                                                                        - -
                                                                                                                                                        -
                                                                                                                                                        - -
                                                                                                                                                        -
                                                                                                                                                        - - - - - - - - - -

                                                                                                                                                        Other tags used on the blog:

                                                                                                                                                        - - -
                                                                                                                                                        -
                                                                                                                                                        - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/web/index.html b/dist/blog/tag/web/index.html deleted file mode 100644 index c274152a..00000000 --- a/dist/blog/tag/web/index.html +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - - - - #web - - - - -
                                                                                                                                                        -
                                                                                                                                                        - -
                                                                                                                                                        -
                                                                                                                                                          -
                                                                                                                                                          -

                                                                                                                                                          #web

                                                                                                                                                          - -
                                                                                                                                                          -
                                                                                                                                                          - -
                                                                                                                                                          -
                                                                                                                                                          - - - - - - - - - - - - - - - -

                                                                                                                                                          Other tags used on the blog:

                                                                                                                                                          - - -
                                                                                                                                                          -
                                                                                                                                                          - - - - - - - - - - - - - - - diff --git a/dist/blog/tag/webgl/index.html b/dist/blog/tag/webgl/index.html deleted file mode 100644 index 8ea8f7bc..00000000 --- a/dist/blog/tag/webgl/index.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - #webgl - - - - -
                                                                                                                                                          -
                                                                                                                                                          - -
                                                                                                                                                          -
                                                                                                                                                            -
                                                                                                                                                            -

                                                                                                                                                            #webgl

                                                                                                                                                            - -
                                                                                                                                                            -
                                                                                                                                                            - -
                                                                                                                                                            -
                                                                                                                                                            - - - - - - -

                                                                                                                                                            Other tags used on the blog:

                                                                                                                                                            - - -
                                                                                                                                                            -
                                                                                                                                                            - - - - - - - - - - - - - - - diff --git a/dist/blog/talking-at-jsday-verona/index.html b/dist/blog/talking-at-jsday-verona/index.html deleted file mode 100644 index 8033b5c3..00000000 --- a/dist/blog/talking-at-jsday-verona/index.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - Talking at JSDay in Verona - - - - -
                                                                                                                                                            -
                                                                                                                                                            - -
                                                                                                                                                            -
                                                                                                                                                              -
                                                                                                                                                              -

                                                                                                                                                              Talking at JSDay in Verona

                                                                                                                                                              - -
                                                                                                                                                              - Posted by Phil Hawksworth on -
                                                                                                                                                              and tagged - - - #conferences - - - #talks - - - #javascript - - - and - - #excess - -
                                                                                                                                                              - -
                                                                                                                                                              -
                                                                                                                                                              - -
                                                                                                                                                              -
                                                                                                                                                              -
                                                                                                                                                              -

                                                                                                                                                              - In a few days I'll be speaking at JSDay in Verona. I'm lucky enough to have another chance to present a version of my Excessive Enhancement talk which I first gave in Brighton way back in November 2011. But isn't it out of date? -

                                                                                                                                                              -
                                                                                                                                                              -
                                                                                                                                                              - - - -

                                                                                                                                                              - Well, I don't think so. The message that I'm trying to convey in this talk is, sadly, still as pertinent as ever. I'll be updating it to keep it current, with new examples and case studies, but the trends that I'm hoping to encourage people to think about remains the same. -

                                                                                                                                                              -

                                                                                                                                                              - Here's the synopsis: -

                                                                                                                                                              -
                                                                                                                                                              -

                                                                                                                                                              - We all love to see exciting and innovative "interface shizzle" driven by JavaScript and the ever increasing rendering capabilities of modern browsers, but are we getting these at the expense of the Web? -

                                                                                                                                                              -

                                                                                                                                                              - This talk will explore the good, the bad, and the fugly of rich interfaces, while examining how and why we should take care not to damage the Web. -

                                                                                                                                                              -
                                                                                                                                                              -

                                                                                                                                                              - My main message is that of care and consideration for users and for the Web. -

                                                                                                                                                              -

                                                                                                                                                              - In the last year, the average page weight has grown 24%, according to the HTTP Archive, and this includes a growth in the amount of JavaScript which is delivered for interpreting in the browser. -

                                                                                                                                                              -

                                                                                                                                                              - In itself, that's not the end of the world, but there are a few examples of fashionable web site designs (often popular with big brands who employ agencies) which might suggest that this slope will get steeper if their practices and tastes are emulated and become popular. -

                                                                                                                                                              -

                                                                                                                                                              - This talk reflects on that while trying not to burst everyone's bubble. Let's see how we get on. -

                                                                                                                                                              - -

                                                                                                                                                              Update - all done!

                                                                                                                                                              -

                                                                                                                                                              - After giving this talk and speaking to people afterwards, it's nice to see that there are lots of people caring about the same issues and being mindful of them during their own development. Thanks to all for such a warm reception. -

                                                                                                                                                              - -

                                                                                                                                                              - One question I got a few times later in the day was: -

                                                                                                                                                              -
                                                                                                                                                              -

                                                                                                                                                              I care about this kind of thing too, but how do I convince pushy clients or managers that it is important?

                                                                                                                                                              -
                                                                                                                                                              -

                                                                                                                                                              - Certainly, I can relate to that. For me there is an on-going battle to convince clients and some of the more ambitious designers that there is a need for care and restraint (in tandem with striving for an exciting and engaging experience). -

                                                                                                                                                              -

                                                                                                                                                              - I wish I had the perfect answer to this. The truth is that some are more open to hearing arguments that others. I'd echo something that Marco said in his talk on a different topic: -

                                                                                                                                                              -
                                                                                                                                                              - "Bring numbers, not theories" -
                                                                                                                                                              -

                                                                                                                                                              - There are a lot of studies on how page performance and percieved performance impact user engagement and convesion rates. Often, the people we need to convince about these issues care a lot about conversion rates. I'd recommend taking a look at Steve Souders' post about page performance and the impacts on results. -

                                                                                                                                                              -

                                                                                                                                                              A few key figures from that post which might help:

                                                                                                                                                              -
                                                                                                                                                              - -
                                                                                                                                                              - -

                                                                                                                                                              - There were many great talks at JSday and I enjoyed the event a great deal. It's worth keeping an eye on Lanyrd to see covereage of other talks. -

                                                                                                                                                              - - - - - - - - - - - -
                                                                                                                                                              -
                                                                                                                                                              - - -
                                                                                                                                                              -
                                                                                                                                                              - Coverage of the event Lanyrd at http://lanyrd.com/2013/jsday/coverage - -
                                                                                                                                                              -
                                                                                                                                                              - - - - - - - - - - - - - - diff --git a/dist/blog/the-next-generation-stack-is-nodejs-ready-to-go-mainstream/index.html b/dist/blog/the-next-generation-stack-is-nodejs-ready-to-go-mainstream/index.html deleted file mode 100644 index 661434a1..00000000 --- a/dist/blog/the-next-generation-stack-is-nodejs-ready-to-go-mainstream/index.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - The next generation stack. Is NodeJS ready to go mainstream? - - - - -
                                                                                                                                                              -
                                                                                                                                                              - -
                                                                                                                                                              -
                                                                                                                                                                -
                                                                                                                                                                -

                                                                                                                                                                The next generation stack. Is NodeJS ready to go mainstream?

                                                                                                                                                                - -
                                                                                                                                                                - Posted by Phil Hawksworth on -
                                                                                                                                                                and tagged - - - #javascript - - - and - - #nodejs - -
                                                                                                                                                                - -
                                                                                                                                                                -
                                                                                                                                                                - -
                                                                                                                                                                -
                                                                                                                                                                -
                                                                                                                                                                -

                                                                                                                                                                - I've been building things with web technologies professionally for a little more than 11 years now. In that time, I'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 NT servers with IIS and ASP. Later on I moved into using the LAMP stack, which after the initial shock to the system, was a revelation and I have never looked back. -

                                                                                                                                                                -
                                                                                                                                                                -
                                                                                                                                                                - - - - -

                                                                                                                                                                This combination of Linux, Apache, MySQL and PHP 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've seen a swing in the default technology stack from Windows over to LAMP and have become comfortable in the LAMP world with it's GUI free interfaces, consistent and repeatable operations through SSH and so on.

                                                                                                                                                                -

                                                                                                                                                                The stage is set though, I think, for a new stack to emerge. The amount of work taking place on NodeJS, 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 stuff.

                                                                                                                                                                -

                                                                                                                                                                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 nDistro distribution model) each publishing on its own port. We then proxy requests to those NodeJS servers through either Apache or Nginx. This brings me to my point. A stack that I now commonly employ looks less like:

                                                                                                                                                                - -

                                                                                                                                                                and more like:

                                                                                                                                                                - -

                                                                                                                                                                I'm not just trying to be antagonistic by stating "Not Windows". 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 OSX. Windows, less so. I'm going to be using this '4N' 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 common.

                                                                                                                                                                - - - - - - - -
                                                                                                                                                                -
                                                                                                                                                                - - - - - - - - - - - - - - - diff --git a/dist/blog/time-to-move-on-from-the-team/index.html b/dist/blog/time-to-move-on-from-the-team/index.html deleted file mode 100644 index eeecff18..00000000 --- a/dist/blog/time-to-move-on-from-the-team/index.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - Time to move on from The Team - - - - -
                                                                                                                                                                -
                                                                                                                                                                - -
                                                                                                                                                                -
                                                                                                                                                                  -
                                                                                                                                                                  -

                                                                                                                                                                  Time to move on from The Team

                                                                                                                                                                  - -
                                                                                                                                                                  - Posted by Phil Hawksworth on -
                                                                                                                                                                  and tagged - - - #announcements - - - and - - #theteam - -
                                                                                                                                                                  - -
                                                                                                                                                                  -
                                                                                                                                                                  - -
                                                                                                                                                                  -
                                                                                                                                                                  -
                                                                                                                                                                  -

                                                                                                                                                                  - After a few great years at The Team, 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 case. -

                                                                                                                                                                  -
                                                                                                                                                                  -
                                                                                                                                                                  - - - -

                                                                                                                                                                  - 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 bumps. -

                                                                                                                                                                  -

                                                                                                                                                                  - 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's work has steadily been improving and over the last couple of years the team has evolved into something really rather special. -

                                                                                                                                                                  -

                                                                                                                                                                  - During my time at The Team, I'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 Osmosoft 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. -

                                                                                                                                                                  -

                                                                                                                                                                  - I cherish heartfelt debate with smart people who disagree with me -

                                                                                                                                                                  -

                                                                                                                                                                  - During my time here, I've been incredibly lucky to work with some outrageous talent from all aspects of the web design and development fields. It'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's safe to say that I've made some great friends here as part of the experience. -

                                                                                                                                                                  -

                                                                                                                                                                  - I've also worked on the occasional stinker where I've done a less than stellar job and those projects yielded some of the biggest lessons for me. Tough, but true. -

                                                                                                                                                                  -

                                                                                                                                                                  - So, thanks for everything, you folks at The Team. You've been amazing and I'm sorry to be moving on. But now, a new challenge awaits. -

                                                                                                                                                                  - - - - -
                                                                                                                                                                  -
                                                                                                                                                                  - - -
                                                                                                                                                                  -
                                                                                                                                                                  - Photo credit: Phil Whitehouse - -
                                                                                                                                                                  -
                                                                                                                                                                  - - - - - - - - - - - - - - diff --git a/dist/blog/too-funky-didnt-read/index.html b/dist/blog/too-funky-didnt-read/index.html deleted file mode 100644 index 1fe83da4..00000000 --- a/dist/blog/too-funky-didnt-read/index.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - TF;DR - Too funky; Didn't read. - - - - -
                                                                                                                                                                  -
                                                                                                                                                                  - -
                                                                                                                                                                  -
                                                                                                                                                                    -
                                                                                                                                                                    -

                                                                                                                                                                    TF;DR - Too funky; Didn't read.

                                                                                                                                                                    - -
                                                                                                                                                                    - Posted by Phil Hawksworth on -
                                                                                                                                                                    and tagged - - - #observations - - - #web - - - and - - #excess - -
                                                                                                                                                                    - -
                                                                                                                                                                    -
                                                                                                                                                                    - -
                                                                                                                                                                    -
                                                                                                                                                                    -
                                                                                                                                                                    -

                                                                                                                                                                    - The trend for 'parallax' or 'scrolljacking' web sites has long had me grumbling about their large page weight, slow rendering times and general accessibility black spots, but some are better than others. That got me thinking, do they ever do a good job? -

                                                                                                                                                                    -
                                                                                                                                                                    -
                                                                                                                                                                    - - - -

                                                                                                                                                                    - Today, I saw an article from Creative Bloq heralding a recent example of these kind of sites as "a quirky masterpiece". They start their article by commenting: -

                                                                                                                                                                    -
                                                                                                                                                                    - "Parallax scrolling may be on the way to becoming a web design cliche..." -
                                                                                                                                                                    -

                                                                                                                                                                    - Er, yep. Somewhat! -

                                                                                                                                                                    -

                                                                                                                                                                    - The article actually looks at some of the technical approaches Shout Digital took in order to keep the page weight down to just 7.7MB (Big for a web page, but low for a typical single page, parallax site) -

                                                                                                                                                                    -

                                                                                                                                                                    The rest of that quote hits home for me though:

                                                                                                                                                                    -
                                                                                                                                                                    - "...but as long as agencies keep putting it to imaginative and aesthetically pleasing uses, there's surely life in the old dog yet." -
                                                                                                                                                                    -

                                                                                                                                                                    - This reminds me of one of the reasons that I wanted to join a big agency like R/GA in the first place - To add a voice to those fighting for responsible executions on sites which often have large audiences and sometimes start (or at least propagate) web design and development trends. We need to be mindful of type of sites we build. Are they the best solution? The most responsible? It was good to see that Shout Digital were making efforts to bring the weight of the page down. -

                                                                                                                                                                    -

                                                                                                                                                                    You sound like a broken record, Phil

                                                                                                                                                                    -

                                                                                                                                                                    - I'm not going to embark on one of my usual rants about bloated web pages which require loading screens and gobble your mobile data allowance, because I've done it so many times before. But as I went to look at the site Creative Bloq was referring to, I noticed something: -

                                                                                                                                                                    -

                                                                                                                                                                    - I didn't read, or really even notice, any of the content. -

                                                                                                                                                                    -

                                                                                                                                                                    It might be that this was because I was squinting through the judgmental eyes of a web purist, but I don't think so. I think that the reality is that this style of site is rarely a good choice for conveying content. Perhaps when people encounter a site which has all kinds of whizzy interaction and baubles, they play with those ahead of reading the content on the site.

                                                                                                                                                                    -

                                                                                                                                                                    - This example was, apparently a site for Cadillac. I know this because it said so on the Creative Bloq article. Otherwise, I'm afraid that this detail passed me by. -

                                                                                                                                                                    -

                                                                                                                                                                    - And so, I'm putting the question out there: -

                                                                                                                                                                    -
                                                                                                                                                                    - Did you notice what all those parallax sites you've seen recently said? -
                                                                                                                                                                    -

                                                                                                                                                                    - I'm curious to hear, regardless of technical implementation or page performance, how good people think examples of this kind of site are at getting their message across. -

                                                                                                                                                                    -

                                                                                                                                                                    - Any observations? Just reply to this tweet on twitter. -

                                                                                                                                                                    - - - - - - - -
                                                                                                                                                                    -
                                                                                                                                                                    - - -
                                                                                                                                                                    -
                                                                                                                                                                    - Photo credit: David San - -
                                                                                                                                                                    -
                                                                                                                                                                    - - - - - - - - - - - - - - diff --git a/dist/blog/unobtrusify-your-javascript/index.html b/dist/blog/unobtrusify-your-javascript/index.html deleted file mode 100644 index d7a59798..00000000 --- a/dist/blog/unobtrusify-your-javascript/index.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - Unobtrusify your Javascript - - - - -
                                                                                                                                                                    -
                                                                                                                                                                    - -
                                                                                                                                                                    -
                                                                                                                                                                      -
                                                                                                                                                                      -

                                                                                                                                                                      Unobtrusify your Javascript

                                                                                                                                                                      - -
                                                                                                                                                                      - Posted by Phil Hawksworth on -
                                                                                                                                                                      and tagged - - - #javascript - - - #jquery - - - and - - #development - -
                                                                                                                                                                      - -
                                                                                                                                                                      -
                                                                                                                                                                      - -
                                                                                                                                                                      -
                                                                                                                                                                      -
                                                                                                                                                                      -

                                                                                                                                                                      - Recently Jon Lister, a colleague of mine at Osmosoft showed me a website made by his friend Joshua Bradley. The site, used some of the Javscript code from TiddlyWiki's animation engine to create some nice visual effects. I loved the design, but could see some room for improvement in the implementation. I'm a big advocate of Unobtrusive Javascript and Progressive Enhancement 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 jQuery for the behaviors. -

                                                                                                                                                                      -
                                                                                                                                                                      -
                                                                                                                                                                      - - - -

                                                                                                                                                                      - The result has been published as Unobtrusify.com. -

                                                                                                                                                                      - -

                                                                                                                                                                      The aim.

                                                                                                                                                                      - - -

                                                                                                                                                                      The approach.

                                                                                                                                                                      -

                                                                                                                                                                      - 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 expanded. -

                                                                                                                                                                      -

                                                                                                                                                                      - Then I used the simplest HTML markup I could to logically represent the content with its various headings. This is how the page would look to text-only browsers search engines, web-crawlers and screen-readers. -

                                                                                                                                                                      -

                                                                                                                                                                      - I then used a well-known CSS 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 overflow:hidden and then scoot the text out of the way with text-indent. Now that the way is clear, you can display an image with background-image. Be sure to specify the dimensions of your desired image as the background-image property will not resize your element to the correct size automatically. The CSS would look something like this: -

                                                                                                                                                                      - -{% highlight css %} -#myHeading { - text-indent: -9999px; - overflow: hidden; - background-image: url(myImage.gif); - width: 380px; - height: 123px; -} -{% endhighlight %} - -

                                                                                                                                                                      - 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 HTTP 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 HTTP requests so when it comes to performance, the fewer the better. This method cuts out 11 HTTP 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 bonus. -

                                                                                                                                                                      -

                                                                                                                                                                      - In order to use this 'image sprite' for each and every heading, I just needed to specify the background-position for each one. Some attributes would be common to each one so I could save some code like this: -

                                                                                                                                                                      - -{% highlight css %} -h1 { - text-indent: -9999px; - overflow: hidden; - background-image: url(images/unobtrusive_sprite.gif); - width: 380px; -} - -h1#uj { - background-position: 0 0; - height: 123px; -} - -h1#cmh { - background-position: 0 -123px; - height: 150px; -} -... -{% endhighlight %} - -

                                                                                                                                                                      - At this point our page looks like this. 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 Progressive Enhancement. We have a perfectly serviceable web page (albeit a simple one) which we can now enhance for those with Javascript enabled. -

                                                                                                                                                                      -

                                                                                                                                                                      - 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 this: -

                                                                                                                                                                      - -{% highlight js %} -$('#wrapper > div').hide(); -{% endhighlight %} - - -

                                                                                                                                                                      - This hides all of the div elements which are a direct descendent of the element with an ID of wrapper. (my chosen HTML structure). -

                                                                                                                                                                      -

                                                                                                                                                                      - 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 this: -

                                                                                                                                                                      -{% highlight js %} -$('#wrapper h1').addClass('clickable'); -{% endhighlight %} - - -

                                                                                                                                                                      - A CSS class of 'clickable' specifies the cursor with cursor: pointer; -

                                                                                                                                                                      -

                                                                                                                                                                      - 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 available. -

                                                                                                                                                                      - -
                                                                                                                                                                      - -

                                                                                                                                                                      - I also use an additional trick to prevent a flash of unstyled content or FOUC (gratifyingly pronounced 'FOOOOOOK' by John Hicks) while the Javascript is being downloaded. This trick is very well explained by Karl Swedberg on the excellent learningjquery.com site. -

                                                                                                                                                                      -

                                                                                                                                                                      - For a better picture of exactly what is going on, why not swing by Unobtrusify.com 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 dirty! -

                                                                                                                                                                      - - - - - - -
                                                                                                                                                                      -
                                                                                                                                                                      - - - - - - - - - - - - - - - diff --git a/dist/blog/using-a-wiimote-for-presentations/index.html b/dist/blog/using-a-wiimote-for-presentations/index.html deleted file mode 100644 index e5e9dc28..00000000 --- a/dist/blog/using-a-wiimote-for-presentations/index.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - Using a Wiimote for presentations - - - - -
                                                                                                                                                                      -
                                                                                                                                                                      - -
                                                                                                                                                                      -
                                                                                                                                                                        -
                                                                                                                                                                        -

                                                                                                                                                                        Using a Wiimote for presentations

                                                                                                                                                                        - -
                                                                                                                                                                        - Posted by Phil Hawksworth on -
                                                                                                                                                                        and tagged - - - #talks - - - #tools - - - and - - #tips - -
                                                                                                                                                                        - -
                                                                                                                                                                        -
                                                                                                                                                                        - -
                                                                                                                                                                        -
                                                                                                                                                                        -
                                                                                                                                                                        -

                                                                                                                                                                        - Over the last couple of years I've given a number of presentations. No matter what the subject matter of the talk, there is one question I always seem to get asked afterwards: -

                                                                                                                                                                        -

                                                                                                                                                                        Was that a Wiimote controller you were using to control your slides?

                                                                                                                                                                        -

                                                                                                                                                                        - The answer is yes. This is a quick post to explain why and how. -

                                                                                                                                                                        -
                                                                                                                                                                        - -
                                                                                                                                                                        -
                                                                                                                                                                        - - - -

                                                                                                                                                                        Why use a wiimote?

                                                                                                                                                                        -

                                                                                                                                                                        - There are lots of products out there. I started using a Wiimote for three main reasons: -

                                                                                                                                                                        -
                                                                                                                                                                          -
                                                                                                                                                                        1. Bluetooth not IR. A controller must use bluetooth. I started using the provided Apple IR Remote, which does fine, but if you need to ensure line of sight to your laptop, it means you think about that every time you change slides. I've even seen presenters pointing their clickers at the giant projector screen behind them in an attempt to advance a slide. It isn't your TV! Agony.
                                                                                                                                                                        2. -
                                                                                                                                                                        3. Custom commands. I use Keynote for my presentations. Keynote has lots of useful keyboard shortcuts to help you during a presentation and you are guaranteed to forget those commands when you need them on stage. Mapping those commands to a button on your remote can save you some nervous keyboard fumbling.
                                                                                                                                                                        4. -
                                                                                                                                                                        5. Money. I owned one already and wasn't sure how often I'd need to do this when I started.
                                                                                                                                                                        6. -
                                                                                                                                                                        - -

                                                                                                                                                                        What do I use?

                                                                                                                                                                        -

                                                                                                                                                                        - I use a bit of software called Osculator to pair the remote to my laptop and map whatever buttons I want to the correct keyboard commands. It costs $29 but has a free trial which you can experiment with. There are others available, some of them free, but this worked best for me. -

                                                                                                                                                                        -

                                                                                                                                                                        You can save your key mappings and configuration for use in future. If you're interested, you can get my key mappings to try by downloading my config. Just load open the file in Osculator, pair your wiimote and you are ready to play.

                                                                                                                                                                        - -

                                                                                                                                                                        My mapped commands

                                                                                                                                                                        -

                                                                                                                                                                        - I try to have as few buttons active on my controller as possible. I'm clumsy enough already without the risk of rebooting my laptop or tweeting my browser history to the audience via a misplaced thumb. These are use useful to me, and perhaps to you: -

                                                                                                                                                                        - -

                                                                                                                                                                        - I considered mapping a button to the x key. That little gem of a shortcut switches your presenter screen and the display screen. Very handy, but I tend to only need that when I'm plugging in and am at the keyboard already. -

                                                                                                                                                                        - -

                                                                                                                                                                        What, no wrist strap?

                                                                                                                                                                        -

                                                                                                                                                                        - That's right. I finally took the plunge and removed the wrist strap. That's because I live on the edge and am confident that I can grip onto the wiimote throughout a talk without accidentally throwing it into the fourth row. My friend, Jake Archibald prefers strapping in before giving a talk. But that's because he's a big girl's blouse. -

                                                                                                                                                                        -
                                                                                                                                                                        - Jake's belt and braces Wiimote style -
                                                                                                                                                                        Tight grip and wrist strap - perhaps essential given Jake's "propeller hands" style
                                                                                                                                                                        -
                                                                                                                                                                        - - - -

                                                                                                                                                                        Other thoughts and tips on speaking

                                                                                                                                                                        -

                                                                                                                                                                        - Some more experienced speakers have posted some of their tips about speaking at (and attending) conferences recently. Those posts have been useful to me and some of them have their own preferred clicker. Take a look at: -

                                                                                                                                                                        - - - - - - - -
                                                                                                                                                                        -
                                                                                                                                                                        - - -
                                                                                                                                                                        -
                                                                                                                                                                        - Photo credits: Alex Sexton and Philip Tellis - -
                                                                                                                                                                        -
                                                                                                                                                                        - - - - - - - - - - - - - - diff --git a/dist/blog/using-quicksilver-to-control-lastfm/index.html b/dist/blog/using-quicksilver-to-control-lastfm/index.html deleted file mode 100644 index 8bb095bd..00000000 --- a/dist/blog/using-quicksilver-to-control-lastfm/index.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - Using Quicksilver to control Last.fm - - - - -
                                                                                                                                                                        -
                                                                                                                                                                        - -
                                                                                                                                                                        -
                                                                                                                                                                          -
                                                                                                                                                                          -

                                                                                                                                                                          Using Quicksilver to control Last.fm

                                                                                                                                                                          - -
                                                                                                                                                                          - Posted by Phil Hawksworth on -
                                                                                                                                                                          and tagged - - - #osx - - - and - - #tips - -
                                                                                                                                                                          - -
                                                                                                                                                                          -
                                                                                                                                                                          - -
                                                                                                                                                                          -
                                                                                                                                                                          -
                                                                                                                                                                          -

                                                                                                                                                                          - For a while, I've been using handy Quicksilver triggers to control iTunes. I like not needing to switch my attention from what I'm working on, in order to skip a track, pause the playback, set a rating or whatever. You can find out how to create a trigger from one of the many great Quicksilver tutorials out on the Web. -

                                                                                                                                                                          -
                                                                                                                                                                          -
                                                                                                                                                                          - - - -

                                                                                                                                                                          - At the moment though, I find myself listening to Last.fm more and more, and have been looking for a similar way to control the Last.fm application. I couldn't find a plugin for Quicksilver to achieve this so I set about writing an Applescript which I could trigger with Quicksilver. I'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 application: -

                                                                                                                                                                          - -{% highlight applescript %} - -tell application "Last.fm" to activate -tell application "System Events" - tell process "Last.fm" - click menu item "Skip" of menu "Controls" of menu bar 1 - end tell -end tell -{% endhighlight %} - -

                                                                                                                                                                          - 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 triggers. -

                                                                                                                                                                          -

                                                                                                                                                                          - 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't steal my attention, but it would be nice if I could get Applescript to execute the command without activating the application. I'd welcome suggestions from anyone with more Applescript fu than me. -

                                                                                                                                                                          - - - - -
                                                                                                                                                                          -
                                                                                                                                                                          - - - - - - - - - - - - - - - diff --git a/dist/blog/value-in-a-happy-hackday/index.html b/dist/blog/value-in-a-happy-hackday/index.html deleted file mode 100644 index 680afa22..00000000 --- a/dist/blog/value-in-a-happy-hackday/index.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - Value in a happy hack day - - - - -
                                                                                                                                                                          -
                                                                                                                                                                          - -
                                                                                                                                                                          -
                                                                                                                                                                            -
                                                                                                                                                                            -

                                                                                                                                                                            Value in a happy hack day

                                                                                                                                                                            - -
                                                                                                                                                                            - Posted by Phil Hawksworth on -
                                                                                                                                                                            and tagged - - - #projects - - - #development - - - and - - #theteam - -
                                                                                                                                                                            - -
                                                                                                                                                                            -
                                                                                                                                                                            - -
                                                                                                                                                                            -
                                                                                                                                                                            -
                                                                                                                                                                            -

                                                                                                                                                                            - A few weeks ago at The Team, inspired by the Atlassian model of FedEx days 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 results. -

                                                                                                                                                                            -
                                                                                                                                                                            -
                                                                                                                                                                            - - - - -

                                                                                                                                                                            - The notion of creating value 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'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 utilisation, opportunity cost and project resourcing. -

                                                                                                                                                                            -

                                                                                                                                                                            - 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'd suggest that this is actually a vital activity in helping a development team to remain fulfilled, motivated, efficient and sharp. -

                                                                                                                                                                            - -

                                                                                                                                                                            - 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 NPR which involve wider disciplines and dubbed them Serendipity Days. I rather like that. -

                                                                                                                                                                            -

                                                                                                                                                                            - 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 Scamp Cat. So named as a bit of a hat-tip to Sprite Cow, a little side project by Jake Archibald which we each had some fleeting involvement in, and also just because we needed a way to refer to this thing, 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 'customer'. -

                                                                                                                                                                            -

                                                                                                                                                                            - Having a customer 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 EA and Design departments. Building this thing would be of value to us right here at work. -

                                                                                                                                                                            -

                                                                                                                                                                            - 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 Git Flow, 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. Win! -

                                                                                                                                                                            -

                                                                                                                                                                            - We also started tuning our approach to provisioning our infrastructure using Puppet and normalising on virtualised development environments with Vagrant. 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 again! -

                                                                                                                                                                            -

                                                                                                                                                                            - 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 all. -

                                                                                                                                                                            -

                                                                                                                                                                            - But for those wanting to see an actual thing as an output from our day, Scamp Cat 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 "scamp" can be freely shared via a public URL. There are similar products out there already, but none quite ht the spot for us. -

                                                                                                                                                                            -

                                                                                                                                                                            - We've already got some great feedback and are planning several iterations to evolve the functionality. -

                                                                                                                                                                            - - - - -
                                                                                                                                                                            -
                                                                                                                                                                            - - -
                                                                                                                                                                            -
                                                                                                                                                                            - More photos from the day on Flickr - -
                                                                                                                                                                            -
                                                                                                                                                                            - - - - - - - - - - - - - - diff --git a/dist/blog/visiting-bbc-online-at-salford/index.html b/dist/blog/visiting-bbc-online-at-salford/index.html deleted file mode 100644 index 06e8bfb8..00000000 --- a/dist/blog/visiting-bbc-online-at-salford/index.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - - Visiting BBC Online at Salford - - - - -
                                                                                                                                                                            -
                                                                                                                                                                            - -
                                                                                                                                                                            -
                                                                                                                                                                              -
                                                                                                                                                                              -

                                                                                                                                                                              Visiting BBC Online at Salford

                                                                                                                                                                              - -
                                                                                                                                                                              - Posted by Phil Hawksworth on -
                                                                                                                                                                              and tagged - - - #bbc - - - #events - - - and - - #bbconline - -
                                                                                                                                                                              - -
                                                                                                                                                                              -
                                                                                                                                                                              - -
                                                                                                                                                                              -
                                                                                                                                                                              -
                                                                                                                                                                              -

                                                                                                                                                                              - Last week I travelled with some of my new R/GA colleagues to Salford near Manchester to visit the BBC'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 BBC are keen to share their thinking and product plans for this and the event was kicked off by Ralph Rivera, Director, Future Media. -

                                                                                                                                                                              -
                                                                                                                                                                              -
                                                                                                                                                                              - - - -

                                                                                                                                                                              - Rivera began the afternoon by talking about the ambition to unify the existing silos around the BBC into a cohesive online experience. The ten core online products of Home page, Search, News, Sport, Weather, Knowledge and Learning, TV, Radio, cBBC and Cbeebies are set to form the backbone of the online offering accross the various BBC estates. -

                                                                                                                                                                              -

                                                                                                                                                                              - The common theme throughout the day, was that of how best to deliver a simple, intuitive and accessible experience on "the four screens": -

                                                                                                                                                                              - -

                                                                                                                                                                              - Also a hot topic was how we can leverage the red button as a bridge to a more connected and engaged experience with the content that the BBC has to offer. -

                                                                                                                                                                              -

                                                                                                                                                                              - Many parts of the BBC have been steadily rolling out all manor of innovations, not only through the R & D team, but also through steady iterations and evolutions of existing products across the BBC 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 platforms. -

                                                                                                                                                                              -

                                                                                                                                                                              - It was interesting that Rivera observed that there was a gap between the official R & 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 investment. -

                                                                                                                                                                              - -

                                                                                                                                                                              - Holly Goodier, Head of Audiences BBC Future Media then gave an excellent presentation describing the audiences and contexts that people consume BBC 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 BBC were clearly looking to fulfill that desire in their audience. -

                                                                                                                                                                              -

                                                                                                                                                                              - 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 IPTV capable. Personally, I have doubts about whether that is a good indicator of what capabilities that same audience has given how little of my TV's capabilities I, as a techie, geeky bloke, exploit. -

                                                                                                                                                                              -

                                                                                                                                                                              - 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 BBC 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 HTML5, and other web technologies for delivering game content seems, quite rightly, high on the radar for the producers of children's content on BBC on-line. -

                                                                                                                                                                              -

                                                                                                                                                                              - Ben Gollop, Head of F1, and Ciat O'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 scales. -

                                                                                                                                                                              -

                                                                                                                                                                              - Finally, Daniel Danker, General Manager, Programmes & 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've found that my TV watching methods, even in the living room, have grown to include a 'workflow' 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 'standardisation'. Like many others, I'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 'app store silo' does the TV support. Give me a capable, but dumb display any day. -

                                                                                                                                                                              - - - -
                                                                                                                                                                              -
                                                                                                                                                                              - - -
                                                                                                                                                                              -
                                                                                                                                                                              - Photo credit: Ray Morris - -
                                                                                                                                                                              -
                                                                                                                                                                              - - - - - - - - - - - - - - diff --git a/dist/css/styles.css b/dist/css/styles.css deleted file mode 100644 index eec2c1b0..00000000 --- a/dist/css/styles.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:league_gothicregular;src:url(leaguegothic-regular-webfont.eot)}@font-face{font-family:league_gothicregular;src:url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAADscABMAAAAAWjAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcaC1/zUdERUYAAAHEAAAAHQAAACAAuQAER1BPUwAAAeQAAAJSAAAESFK0T+ZHU1VCAAAEOAAAACwAAAAwuP+4/k9TLzIAAARkAAAATQAAAGB207dBY21hcAAABLQAAAE/AAAB+oJqy2tjdnQgAAAF9AAAAEQAAABED5YTMmZwZ20AAAY4AAABsQAAAmVTtC+nZ2FzcAAAB+wAAAAIAAAACAAAABBnbHlmAAAH9AAALNQAAEVU/rdyp2hlYWQAADTIAAAAMgAAADYEBZnMaGhlYQAANPwAAAAgAAAAJAz7BnBobXR4AAA1HAAAAZEAAAIwdqAgr2xvY2EAADawAAABCgAAARpBgzFcbWF4cAAAN7wAAAAgAAAAIAGpAfxuYW1lAAA33AAAAUoAAAMAQ2Vl9nBvc3QAADkoAAABPwAAAekS954IcHJlcAAAOmgAAACrAAABHtLGvEd3ZWJmAAA7FAAAAAYAAAAGMApTZQAAAAEAAAAAzD2izwAAAADMZPx0AAAAAM+K4Il42mNgZGBg4ANiCQYQYGJgBMJuIGYB8xgACkMAvgAAAHjafZO9T5NRFMaf+7altpSqCUIEhw41waRRo4lE0zi91FaIQKEfQA0xURcJg2Fy8es/YHJ2Mg6ODg6uDIaJwT+hizGEkOZN0+T6uzdQ6wf0yTnvvc8595xzz7mVkZTWdd1VEJbmlpXdeLS1qQnF4WWtnH1wbZ49eb6pM27lJa6Ab6C0+SJjNrxvTve1oLoea1NbeqFX2tY7vdcHfda+uoZjJm1G1dW2uYqt6zikaKqmaZ7CGE3Y7173FNMYFU7qnC75bKPsxm0b6wUboaftHrpof2AN0SWkjFQRowY+gfKcKvqI07AxfNr4tPFpK6s8EaaJH9qvWHaw7GjBftMiUmW9xLeGrNiOVpE1IrX4BqqgG/bA5zns750lpPIK3JDOkrsEV0aqSJ2KXsPF/mATnNiHiWAimAi/jo/7E08XzWV4qIznnCVHxWMaZ1aT3O+yrqiga7qhm9wl1IxKKqvCJGY1pweaZyKLqmpJNSbTUFPrCoKcm5eZMtv0NMuM9+yuPaRDp/3i/6epyenI9jw6J3n4Ve/k8P/ajs9x/78tu/3VR/tpYHdUS38fDZyJjursorunXdQeePtFpnleU8DQ4QLTKIIhehzyP5gBCXpdwqsMAvo9CzMHYnR9Hu06n6D3VaxLIEH3m0pqRatKqQVSTGMdz4B5psEIE83j5/KldAvEdVt33DsHgc+d9lmHdQ9kfO5hnzXls6Z81qTPOuyzJrUMMsy/xroOhnwFMV9BzFeQ0kv+rSN6o7dowyvNc+8COY9flHtNv99S00doaf0XKFDregAAeNpjYGRgYOBi0GHQY2BycfMJYeDLSSzJY5BgYAGKM/z/DyQQLCAAAJ7KB2t42mNgZlrEOIGBlYGF1ZjlLAMDwywIzXSWIY1pAZAPlIIDdgYkEOod7sfgwMCr+of14d+HQEkbJj4FBobJIDkWDdZpQEqBgQkAgpMNNwAAAHjaY2BgYGaAYBkGRgYQ+ALkMYL5LAw3gLQRgwKQJQRk8TLUMSxgWMywlGElwzqGLQw7mI4x3WK6o8ClIKIgpSCnoKSgpqCvEK+wRlFJ9c///2DTeIG6FzAsAupZwbAWSQ+DgoCChIIMhh7G/1//P/5/6P/B/wf+7/u/+/+2/5v/Lvs7+e+kB/kPsh6kP0h7kPwg4UHEA837d+9n3OqHuplEwMjGANfIyAQkmNAVAIOEhZWNnYOTi5uHl49fQFBIWERUTFxCUkpaRlZOXkFRSVlFVU1dQ1NLW0dXT9/A0MjYxNTM3MLSytrG1s7ewdHJ2cXVzd3D08vbx9fPPyAwKDgkNCw8IjIqOiY2Lj4hkQhXJqcwtDIwZKZ3ZaVBRVKxKWtLAlO1dU3N9Q1gZidEorEFU3FOHpDIzQYSAJhFXtkAAAAEKAWWALgA1gCjAKwAsQC/AMYAzADQAFsAwADKAMAAxQC3AM4A0gDZAJcAwwCVAJMAswCuAJwApQCKAHUASQBEBRF42l1Ru05bQRDdDQ8DgcTYIDnaFLOZkMZ7oQUJxNWNYmQ7heUIaTdykYtxAR9AgUQN2q8ZoKGkSJsGIRdIfEI+IRIza4iiNDs7s3POmTNLypGqd+lrz1PnJJDC3QbNNv1OSLWzAPek6+uNjLSDB1psZvTKdfv+Cwab0ZQ7agDlPW8pDxlNO4FatKf+0fwKhvv8H/M7GLQ00/TUOgnpIQTmm3FLg+8ZzbrLD/qC1eFiMDCkmKbiLj+mUv63NOdqy7C1kdG8gzMR+ck0QFNrbQSa/tQh1fNxFEuQy6axNpiYsv4kE8GFyXRVU7XM+NrBXbKz6GCDKs2BB9jDVnkMHg4PJhTStyTKLA0R9mKrxAgRkxwKOeXcyf6kQPlIEsa8SUo744a1BsaR18CgNk+z/zybTW1vHcL4WRzBd78ZSzr4yIbaGBFiO2IpgAlEQkZV+YYaz70sBuRS+89AlIDl8Y9/nQi07thEPJe1dQ4xVgh6ftvc8suKu1a5zotCd2+qaqjSKc37Xs6+xwOeHgvDQWPBm8/7/kqB+jwsrjRoDgRDejd6/6K16oirvBc+sifTv7FaAAAAAAEAAf//AA942t18eWBb1ZnvPXfR1a57tUvWvlqWLdlXm2VbthNvWRwnIWFJAmRlp2xtCKGEJVAoATqsgVIKzAMKnRa4V3bCThOIpy1N0uJ23MzQmb5HO52602VoS5k0sfK+c65kO1Bmee/99WIk3e2ce873fef7ft9yoGhqkKLobdyZFEPxVEZBVLanyrOh30iKhvtJT5Wh4ZBSGHyZw5ervCZ8sqeK8PWcGBbjYTE8SIdqMfRI7WLuzD9/Y5A9QkGX1DBFoRS3l/RLNaGcjckVosOF6/M/PnyY23vi16z9z5ceg+eWMXtobf25fqrK0lRapnITHEtp2bSMJCRrszKanqBFqgku0ILCofSEhpwpOpRWOFq0KgxbLlPtHfg9+G9Z4D5/3H9/gNs7+0faiD9kTFmKYi+AdzVRQfQwheRQVqanFUackRlBcUBfdji0C4oGDnk45AVFhEPBNKOEUVouel/tu/ijVZQjrWdlOiPbM3g4DHMct3Ewx+fuypqMLGRkjaDwcFOAXtSbK+GmAdqMI9phS8NLx1nGDgcaYZzTiHDAC+NaXrClxw3k20i+LfgbP2Mlz0ArG2kF/ThxP+Me8u1t9OnDd8f9jZ4DuNV4EH8D2xyhPaE9UY1ZtJZlb1n2lGVnuQqjwOe+suwvy7ZyFQaDz4NlOVCWreUqjAmfG8qysSxbylS/G9EMy2l4rcFogVs2u8Pp8fr8gWDmU/6hfgGxHH7cavuUR+V+LwIW2nJMTv2UoiX42KIM+fA5Phou5fjsG+XXOv8dPvs8E9H93pc7Xy9+VHyt+Jrn1ejraEfsoxh6srZJ/bzy4Svor2pX488rH374IYgAhajoqTx9hcZAdVPrKdmbnYixlJlNI7knK6emFadpRqZC06LSDex3CkoO2O6XFANcDkhKBYQh5xSt/TqWt2oisXi2FHMBXURZLFNKzAuCGImXyzAJp8vpcuQKxVKxkE8mkhkEX4lCvlTMFZ2uEhwnC1GHhtc47C6n+uew85poBG5EmVLPdduv65XEyEpdq3FZrGS3pVIpzUumbPfF2z9TSNv8azqWNhtLdmemJ+hj0Nqb1m12TB01XX7mvX1dF1xt7Bc3VzYsKeY6UH+n+6pFq/U7drm3nbGjr/P8nUvP73ZsHF6WLZWyyymOyp/6gPkC9zXKRrmoZqDIGdSjVLWNotITK41UJ5uuWmA1ToSMVIlNTwyW2iwm+DFSRThLcuQsSc6QvCYrU9MTbpESYI26BSUOa1SnnukEJQVnPepZj6AshbMOcqasBYLG3aJ13MKFkpiUOlF2lJWelGiV4WypOF5qG1wJN7Bg2F0BlJNKxZKICRqNAPVsORRFYqLUy+QkIKFoj0YQUPTjTy18gjfTmMx5q623UPb30rTV3pXv9i3aspvW7qppaJZhtAathTNHkqhqTW/obqowjOCAZ/z92+Euyxt5M2dmWc6oNfMCszkTT7Z5C+egJzPRRMZbWvvnU6B1voee1Fl4Xs9q7e7apvzsJe2x1Z78Oejx9hh+6OzaFvS4XuA1+AFPbYvRotfq9TYKtGAWeMICT1qpLmoJdSloROCHUmJmqiFghtLHzSB5Kaa2kjHPyBlBcQINHeKMsgx+MxSIYCxZhlUtvqRhvaFcacliTFeHtWoU/WVQkkqJhWc0RnimT9xnorzJjiF4gtAXE44IY66ARRSkt5TU8OQgmQBSmhFvd5lZJ77hdKmEtPXSmLK8HZ5LZFev+fznt0f9w3GrjvdaY2mXwD3rsfesWpc7b3H309vyBYm+IBDraLJ9F2nMvt6LXU2tnmavEOYsfnvQEmQ2BXQelN51/sbbkva8mf8pYzMkz7py2VDovs5zXtq+9ZsTj0ntN54zfTTTfe7oxuZFoTXpa77m97tTHuaII+B0pkY3PLis9VK8zovMHkQTuxKhqhSWY0RMCpLZBfYEG5O63SgG7vep9oLoib7aL9BvuV9QIqwOJFsJxXVAZhtpAMSy4nVMi/mSFROJ7mtZ9ZVHh4rXJ5ff+uiKvjvpC15/rPa936/acjMKoOz+vaj5jVU776t9i/SdhL5/vLBv87TCzfUdRMWSVcwn6STvdFlBYunko8v77k6vfOzRwdL1yZXvrLr2ATSCsq8/gVKzqy65vvaj2j/t21v7karfhpl9dC/M20xRNhfvKrlKyVKSL0VdyeGnr9i1ZNmuK55OPWa93/oY+3To1tF77x29NXTP4mefXUzaohDzN+yZlAHahkUw74WwGBXDw2jTU2hz7Ymnak/Sl9ReQkufQktrL8Hz6VMM9RF1jNJQAUpmshMaltJhCvNZhQJpZM0zipZMqRvxuVIhmh4c3HzZ4dnZY+RdMtpEXwL8gbZUFszoDGYNbjiB7JRljjc2GMUw8gLJ5FegnQSzPAXvZCg/8BWvDYada6kg60y9WTcqRKUjR47heWlPfY5+hsjCGorwH3QVEqkEBhhgwOGNNDnDTbGV7/mnX3epVp7KYENPCQpyHCfG3nGcHqfA+i2wWC5QQtonUO3RuzURiuCMRac+oK+CNeyh0rCKqxo8ymb9TNWGV3BQD8NtJfLktc3IXkGJwcCNthmlDX6JEbFpCJqxqWsRKzOizhJkEYLV4G0iNiV1hUbMxiIm6CtULrqgp6spyMBxedGmLYvz/iAzxQuZJtHLmzu8Fh9KnNfXn2pvb630nccsW9/f3yJJyYH+9Sf3M8tC9qIQ6Ty5P2rNW8KqLLnhazvQTUeFMY8mdBzlw/zVq2xi7ZQRiGZQ2ZQDgYniwbnvmrpRCK7Yym4+8QS3N5Y4w4b7ygNhrgCahKgSVTVgQjh1QIhwVhamZUpSRKCFKCheDL3gEElKBA69AEQUA0PIkQNBgJWBDSomgx/lCg0qaAhV8nRXbeL6tdd3DT/y1cHSD01Cc4tooMsdS9ae+4Ojb6PwgWfOvvjqc5/ZunU0m+9uHr36G39111/fQxE5/oBeB2Prpe6iqs2YWwHQt914kDwzM2G1NXeb0oqVh/H2ZeUYGW/UigcpRwXFCOMswVlJkNsxdPCAXvZklXaQ/n64FY3BFKw20LdGcZwPNHeDtlVKHrBwOdDGtoBorUZj7aCaZasIl2TeqlAlAiJy+ZKqXP0Imy3ekXOCCXRoCMsxnoja58QDcEYiWepFDeqkj5pYs9XcZuJNumhXq7WSCjXRvLnN4dHajqYWPT+QOaM5xNC5ITrXER/82t/0xpnj9xStTl1v/KzPdjTZvRbmRcblGCnFvxGtOH3dt0+c/2VP22UbljhtXzpUonMvPLJh9J5HzlXlHeSEvhHkRE9ZQFKQLKjywdkpHuQDQ2gOGyaDWRVrrFrAGRCjoHVLOdGNhg5s3jxVO1L9vMGEOmvfQZ0vM187uR59K11zqjoN+HMp9N8CmE1dTXFmRvZnFYsWWJLGa0l2SUoK1pANcJtHklMCRuyKHq60wm8YAIXih1Ul60XF4cRm0B+HS24KLllEwLwqvqAxNQsipmECBIoowBwRsvmVVkHDKXvn+X3PLW6Odu9xOUJtaKTGyu6mYChiMUfjJjN68q1z23oTe9Y8gvrWrdjN6PRh1PKDWYs/nuzK1g5e2ppKJ6/sBLr1wby2gtxFqPY5S58ByQtiybOD5JmSbBAkz4SNfgdRGVFYGxYidmnQVR5J0WIdIikSljQgMgbtaVExgT8ka62A3ynFlITLlrJsB9H0luctfX2iEV5VJhiD5rD4hAhk6kXqpLGo9aUGn35mKBXtvrut22RIur2cfio5VBsfSkyhUCAQjQaCIZS4ePnu3csvRtHPLL0uSp1aE4u7fJmH1t82euuty24/+RBSHImstXamNZshPNWCzHiApxrKSWGLQTwxO1n42rreByegENai7ul/mJr9Hfu3J7rYQ1MUxkjSArr1YcoRmchoZ6ouTLkCUK6S1LiAchWsbPuJgDRJSgxWaUxQWoByZQD1sE6tkrIIa10snlwQaNYiVhOuDrwaDYCSLFhSKkA/JWhpUM7lJCuugmDB9SL4aagjO0Ai5HAmSkVpDs7TxbqGUk8lk9i55E8jZdHYWchK0cFnnh6MdbQXyu+yRt1njHq9sdhqZmmTIZYy6PWGVIsOScnKOV3Ll/ec1dn67JqHpPa7lu/cuOSee5adt3N0T7v00Jrv/qm3t3do58ZKuYOe/p8t6Y7K2RdWCgV1XRaBThuATmGg0+V1+WoC+TJiKiWASvYMawQq2efkC2RLCYFERSQ5JCguIFSLhPUxka8QphKDkaNLlO1EU7EGTCF7E9wIheFGRgR/UqVTqC5gWJxEVeLEec0FFgwIA9pMNANITxSTg2jVQDI1XHtlGMtZpttoTrg9nP6HP4wEnEEDDWIWQQO3LbsN/mPaLhq75Zaxi2q/uhxErfaHFS1Y1B5En0NPWDPeJkNtgyOeacQgbGwziS14KRxJwHpJZiWME2ROwvGDOlTACmn4CPw7Rl93jLQ9xZC2GtBquK1BbctLCgtttRJW+/PIhjQHdHM59AD4hvQBeot6hnmOPQR9UDZU0KECGma2zF5CP3zycQBSPW+gNeiMN2oVNV6CJpnnmGNqvARjHvwHj598HH/Q5NOHn6I+1mcJOnToEHmIfnj2kmfQoUfQ22/UXqg9P6+Xe7mvUnEqha1uGLOdwzirhVjdBFhdQJ26pCRh06szpBW/aQYrFkUEr17miLZ21UWYmNiG1QVLA7aJ+LYJcAtsMH3310V3oi0pGlldqtKU3md0ZHkP53N50v337zg70vHVw4fZ51flI/moz5sa2LZ0+11/+EN7ac0qY1qbbRtLnDd8Kc1sSaw+UT5Gxg66kdGA7JaoxdSDVJXDsmvgZqodRDdyMxPxRVwHeKBxIxUGf9TfTc785AzJA0RZWsAYWAQlCraoU4V7nYLSB1x0S0oaZj4IM+2MitZ9Brufi3dgR6lPVLQpEOS0VeZBsuMGoIO2LC8Sq6mWNKgFxd8NVzxExlVwlsQCDCLdgGR+RHCamQapJ8bZlRPzKnSDa0jMq3o1GumLxDe9/r0L7vUsq5zfEY/nzt2Yi3L2eFu8FLTs8bqarbbHIrEtr7+x0RMxojfanO5MGwo1b2vd8cXVgUA5KTGj2baurnRHi8Ee8mQ6I7XcUzp7tEB/kLqsbefO4GiPd3YCKVKTq7ZSUuUBgBh9CHQuT5kAmSLZTKiE1wLAYBabacAsFozcEfjkGl5rUl3vboSjaky4CZVyLpvtSOJ7ycPHTlGdPRojV0Gx2k+4vScvR2/H40SWGWoM3vMQvMcKb1lMraOqCHPPZpipiph7bYaZiVY7EkHztGIDDswKT8udksLZZxSTWeWLKQx01mGEBGORaWy+QCDlVnxRbhNlUxkjwkaApf6bRjaxiwlwROGauRbEiF10gJ07HUP0+MoBV9uKpX7f5vWTL0/RWo1ea9AbDAaur09jMVoMZt6IkElj0cOJRr2mt2hM2usueuHygdvSg73dlx1Zv/ZEF3oZIZplNWzmkUcyHM8xcLoT7cKBMQA9N93UwmnwNbJmG/5AOzVat1V28AZaMC38+jnT7ga96xYw/eUwqBdhRo6qdt3ixh57C0EtdoCLpki0PBdlagDAQhTPkYhiUiw2RFF15Btuw2lOwiGtNhT0WoI0o7G3hYTgoYVew0JH4dChsN3TZIkVmWVxS1GIlg4dmvcciFw1+G0BdO+rc1swqOjeO63wwNZIXVtKMDSA8HQyQ2NmSQG6EfyCwY8989DXUgm3O9F0/h3bnpkKxGMurcjQNCNaugdWr6BO/epfERotLfKd6GF+z1mCnkVnD33/B4MbKh1+Qmc8jiyMwwDIAMnGOWdSh8NQkmLCDiLGSEzDnSAwFH7H0P+qffD228hSCx5Dd/4C7Tg2199i4v+4KOL1gL2Y4El/da+nG811MQXtIzUjfcXfq80X8L2D2khVtZgqDrC+acz3AOa7RPjuAb57SKQZzC52BOWYhAOPighOQlVrxmoHfAdZD/x3aOGS3mDElwLiOG2KxurBGzWSCMIA6ibsyDXQ6gK19DFZcHqk4qZNA54bau+tAe/QI/hUT3HqdDnQ61b09LW0rxmkv6PUZiPWghDuZM5VncX33lsoCGhODgwUhQmDHUL8Nzb11BT8R18xez+3d1ahV9afRSHik9upeffdNu++43ZT8AA8azj1ezRG5MtBVWlMRxMmH7gZInm4AWej9Vkb7NYHRgamxKZ2PXgUK5bsZu858UCHPU7Xx/ht6EugLoL3ilmZn1a01hnFqrr+B3v/8FnV9eczZpk7wCpa53GzrDsgc8K4huNt6Sp8zwfRqQkcBtepQe4qp9HV4wKKlgdB06vaU+xDoDdzjC3K8IQe7SZOc9/R9w4eftHAT6Hj2wOB2fuZA2i6FnOjP1JzsleEcXJE9jQLZVnhyayJAEfH0C9rv5p6m/2h2obZBG1s1JXQxp6VuWmcKcGRVoc6vQN3ffQCnp5ZZgSZPaCIruOycODVvhV/uk+9bBFk8wGFdx+XtQeol0CXac0WQZwL43/iSj0GgtkNM8TuHIgfzDLJhMfeNmjvWHc7b3qrduoGPavfdYpiDlRO7mJurZzsB0G4ZnSU/tLcXMdh3CZVbqAjLDZJJjp20CAeee2gUTz8GpNePOsCO/OjAXrm/58Yi6o77yNrxgEzqerx8E3sjExnFSMObDmzsjitaGDogMbBmTOCWGnKhOLSvNFTXQzQoFOPbv3c5zY+PjV1fiQQECt0z3lXvv/zK9bP3oBekFpvujHpthPaPUB/GWgXAIvU8Kjb9DPjhjaNFpxmfqbqxsOIzdumIFAxSAL5OFBDrFIqiB1o7FOLgJlM2DoZNCpaqpvnOdqSeDI20f81AucLQw+U/G5a/M9oLF45rk8VdL0d/0U6P0xkzEmtpVQXyIJtlCsr26axT6AD5MHB5Nx1TcD98XFVE7CgCRjQBJwONIHmADWOc19kOSiM5rQlAGsch2AWsEQzNtX5manbu7qff2VqanGkszNKb5h9ht6XfOHK7x+d/SJ6LtDxhdukQCM39QG9k9iLrXVvrQ18Wj8eqlWr2ovwtCJY6zmqDjgQ1ECAU8JKDAdBsOFIA3rfZ2Kb/Mk2jGm1omwE7ljb4KqWcrrCHQsD/iqAUtNTeMwl4tBGP5acIrYkmh/Z/8TSSl9y4zp3fiTjFI8Whp5j6C+OVsTQyEjF7+k8u9slovsObrz58g1PXnj96Jd2t6zvu5teLK23PXLhjcyl67/YXbrqys+c3Zba0vPVMemzMGeYJvjyGJO66h6aYS5ypJuPLOYKYfZvp749+9fsmycWs2+q9nkU6HUDtPVQ2boU27DIeonIukBkXQROkYXfhIGUiyyeTyz76Ly1jI4yIV+x56ILezqbwvS7OhMYRv8USqxfjNd0unfxevaqE/eG7XlLpJO9CsYg1uVKRzUTjEDyBOYZnPbCiJoBoTJgRK2D1UKjuSx1lOhI8b2pvz98CW/iL+X2/hk+J39bqTDWRuyVOQj9OkByiRaAfh2mGdkhKAJYAouaDgfvRg+960xEPSgOjG5QWRZEjJgtVoVjScwLfBlZh5dm/e0loqzVMajf7gNPbTFojZufPvDWWlbQrHtkncbCrcGjop9Zu3Z2A+hrTzZL/4v6DeOzwLyfh/GJ1L818iOyoDrWFgn7ExoQS72k8HABsJdNXVSVB357TyOybpZFWFQILyrmwKtvffjrb6t3hIxCiVpy08LATfOBV3tO/foJ9aYemhngjk6AO1po9plGh5q6veY9xxWtTotvVu7/7R0k5Y6EcRoxYLvhe4Ht7rfgUD4x4HrDQqvWMHf74a7WYBY/buxUAjINCtosR3dyPLvz6C9/fvSzGp6/5vs/R98QxdqZ9O/oZ2t7RRFdOrsOaAb2jb6b6PoWgk8xTw1AH4NacsABDMEYVQNOZxXhkgaVXyD+9TeZfjw1ffRSDaPBsvK92SfozUyhVjKZ0HeJzGD/rp/IYoSai9IDZsCVFKDgDJ/Av6gQdoSRjW6rKWhljUZNtf0/YP70gx+c9Kl2+VQRfZeszchc9AT3Z4D+1OjJgv5cYRIGASz9+QMHal945zX2X18luZcz6RnNyGm5F0Z1xhlBQZ/Ivbwd+nXfx3IvjJp7QX8h92JDOaSlFz05+4pm5LhZ83tVjxZh3NWF40Yk6jNBk6GTcdOooQpcjjABzEV0Q+22g5bXNJtePeFQ+5EYxPwziVFStpwOXhWV3kA+5H+jtvenDAxkdpZ+iMRkau+wnaeugDnaKBkBmTg1I6VCWXhBYZj5/f1PPw3PIid7jB7h7lCfBSNP8QufRa5cEjkffXgbd8eLL6o1K6DjlrKdVAZQznWNbLAWZxsUrRHgDsLOhAb66CbilAUV4SZZCPAfswKZa0SSJMUszCg9cJIFZ1Jmy4oOnItxra2FVDCYRdkAFkKLU8PYuVACJdE6YbZQbomYilIj0ZCzu3KJRtx4YQrGj8wkPuTKgz61q35otifZVc6GHSbrAdOSJZuuXj46yepbYiYO8Qa9zejlt5ZWHxgcdMadIZP+o/sH2+PeRJ9r9cX0ly4eGlxz1mfbcvZAZ8iW2c7qdLxBY2ILgxfetvpmf+131oCQaqrbdaDPENGTMWp13QqEwcuyYMJ4cbArrkY5YP42p0RUUwCnBuA8gX8DYiPQGwb4olA0TN8CCJEkBbpRwXl6sFzDi/XgZT06nkFjkyFrV3ZJazSaGfZ7s4XJyZjDFQy6zE3CsM+cHulaST+7ojJsdkho/MRaeq07FffNftMXFwM4zwzjLwJ/m3FsgHDXDPgrhkfvwaKRIqO3ATdtAl7BuBxFC2dBCcexFYMNxszG8PA9oNOqukCwvDDGX0FRBxklDRPA2aQAIlxT5+LoG+m99pbu/kOusM2tZxi92+Z06w/199y8vW8Epb8+NtA38o2LHuyImf1uK91rdfvNQix885pvjPQPjn1djVvC+Hvr9F9Tn0EE6C8iNdjcoL9TIAU1WB6NAZDHBv2dOKjMingCERb7uzo9DrOJTcAB00LRc2CnoI4eHcCBhQmK4XjLkqC3tTSJOdE+ko5Pmt1mZyzqcgYOru4cMdnzw9ze2gpgxnD3ytnd9FqbX0y5Z7/ZlIjXY410F/AgCHr5rPocBM1MtQnPIa5p5JhIeVhIwtVeRmBESsIFARh64RSTHSvCAHbUFbYJzyYOIGxc73CGVLClilEvUgM1aqkP+G8NOOwqzMVs+mhf75Obc/kcu5/ADx+Dhhhf/+Nb2rdp9zO82OYDAKxbNnBXOnXl2Oc/F3LlLfHSv6DiwOBd6TO+sndvXCxaIt17VXuAJrivUj4qTlWdxLPQ4JwHkv0434LzRgywhZfwiphHWtEKUld1ALkKjZUetW07tHWrxtxibmKMjNvefr/k38bsOHkns0PxZYK+xSyi0dc1/O4Vd/pxDNBQu5V+GGiKq1g2Uf+DqjYDMeVITjmDmZHDElZ5w9wMOKnKBqwtN2fltmm5ICmjAGWEjbBO1TIsUGejgnI2ENhjmhlf7DkbHBStiHtQtsDFUcC04+lMB9FiZ4v7TNbKcPMZ+MRjHXcbgwkcwFTsw6DNKK1QqOA7G0TF2gGw6AyrEvTDb7MoJ4BDLox2T4fDzm5EKonyCey/5AqYUXUdgPGjCpGJ0ivNl3AlbCJuq2Zu51ybQt5wzvIv7zn30nUDn+uPd/g0JuuG/AU6lmZTS1P5YHz4xvM7Nhppc9NwW7z52sF4x7eWbhtwCbnW0qL+LOIYo8viNro1lqTT5HzxyvZWpmvovhv6Mma90Rhye+jUivtQm9loYZ1OOemMb0mP7a39NFzaknG3SakrgqFom5hvsRvsgj9qF1P08yim5UXB5LBYotnaT/z2rOBp5eZ8caxP/bi+woEXgB67HoGsEsT+p0MPYt6k+p/FUi+r5nByc8oRq8exSc6oYQ28UWO2Wd6Opoc83mjOgSaZEZ2gYXUMwzltJ/cxF2OdaJMcCH1b9c+QrV4H+rFcjXBarkaMFkBExybhH9v89UkY7qm/q92PTEQHeUCPyhwYfCaXU0SQNEoi/oBpGq9TnUBcpCbSE+9wzseN6ksyQzIZaSNvzz7U4ZtkTa36JsZw1eTk8/tYWnPzyF3s4Ik3W+3BbrD+3E2TDXqd9/F4kmk+njTzb9d/LJ7k/X8eT5p08zp28xvVe5RNBt0kuqpXEGpn0EfR+tqvovSzc/GkOn0XxtuE0+Jtk5NqvA3HkW4hNqmZqobwunXnFI0WI3tskLDhoZQQWMvxQCLZTPQbEQfQGVgW5g7mhaLxixnHWby+/Mus1estvBJND7v95YTdkNrg8WTa6kLiyYB4jPBW8ovFRIg023U7zJ5WB1rXkFEYn58Kf5qMVpt8fmIIP1VOC/9tOV2HbUUP2Io8vNtKtVIDdVuRBFthJngD24o2YivSoKTSahUCLhvLYLccmwixLIfFcTPrTdbLGucMw5wtUBVIPW/sEOdKQwv5Htrf+8SmXE5iaX//V7d0bNa+gnhztsniQbyp3WvxIt2SIWIX6JhqDmZnaJeWd4JJCOY4zewMHOOYSAdHsFPtfkJHBxXFtvsvYKfYp2Kn+CexE/icBDlVbXaHCkJy4ifQU+F09JT4JHiKOjF4csRgUU+cDp+GTr5FrwWbTdBTSsV/wzCHXjKHOMZ/hB/R0/BH4lPxR/J0/BFlSfiKYA/FYCovRB84lu04DX0QgSJI9y/CD79XFJosc/ijNsrtHToNf4gB6+w3hYAtPr8+fwzzEHEUUIcHr8HhP2uDATgzj+sDFR1Qugq+akO6VUkp4OwikemWaH/Ita5idurQJP2z3liI/4eyOezS7piPMbXDe/LU5jq12rmZahBR9TKAQlaOTiuCWI8x5UUSY8qoSVMtqa5RirjUFODNhIn1p9oXhJjs7XBRS7k90U+LMKlSnVsYYwrQrgDTiDBlhx/fNVzqCm0o+9IGcywp8i8nu+5juRsXdfSI7b6IP9RiG8i7BVTcteq6zaPXrtvUsaGYyGcL/nTa27lr0RZ609Lt29a5i75QIFpod93ck+hXfeNTH6CDXBZ0Rktd0kUd0RkYCDVJikMgUyMKRMTCbFAF2D6H28yoESQixUvgBmzzdzyQ9XN2lhGYJlezWXv77YcAE83+9P6Vt3FIgw4CJGL7o6O0qCC+dpyMYxnQfzHbDDYuXKe/A+uupqziI7qLnUvwLJC+OvrVkOJlHKVaFm0Z9vrCeZGdnDSxeq3V4PBMHlzZNWKx5kV6Hdt88lUHp9NqbU3McpXvOF7TBu/VgSdJ4lRoWqEBUuloBJCKwnXvWRxHGmfJBcY0U09xzUerLC+89cK3FvECv4htPnGMbZ59eHCQvkTFmcxS6NtB3TcfqxIXxqqEBbEqkcSqSDbixT99fT4ahMA4OprAONoOjNsdNrCM8L3QMoIBszvqlhEOG5ZRcKgJYotYD3dZSbhL/I/CXbbHnxo18PrRpx6f6OWN+jO2r9YbdBU8LXSyp6fGwuR+VKnQrep3g349MEeR2j9XD4yAaiLWirIFrxW8aIQsqTpYEP8CQtbrhkkA7JzfvDU/ZVpgSXEpQwIceJfIW1t/SxI0sgC3zXAbFp+lCa4/p7abD3P5SACM6jdQgEU0p2dlMInGaU5r/stRKwuKZgHQW761SsNoVn1r/7OvDsPB8CvPIZPPV/sDHaeZ437/8dlZHIcEHD9I5LVMyWYQEZ5IK0mtmEhqhWycgVn6cL0mhUNXRHxBUwHbQC1gHqj53UQyknTUQXWdHe4J3po1t3i0erpdcF++ctjyxoExsL1jwItXwp7emEGHaPpFduOZO9nrZq8pFknKCOcE4etXRJ5Pj3Xp/qNYVw4Z0E9rHyBLbfTntQ/G6b97cnw2rfbXBYjpbO5rVBu1iqpGsK8UBvfEkFWMHFkabVg5ZnBKTW6WFKuqCLPwFisHb3HCdCkjLiLDhZ5tuApKDlsVT3MjTw+mAhdvlgoRvC2hIJLiMfgpYkehkMDUUX2FrqGwK9PR/uiOwTVen7vS01Nx+6yFStuOR9s7Mq7gCHqBLqeDtTuuuDMZ99NPmR3OJV1o59JtifjWZWhn94jTYuGeRr5E8s4randEU2ViW2pexJIY3ELsJzawH063je3fX/Nq2+rxM6DFWqBFFtPCg2nhBSKogS2cVif1iO1ZuWUa+2F4p5QoKR24crcFaJEAWhixVeVxIY0Je1ey16pYI4QWDicuHiJpaSAGSVBnEJCEd4BBdRGbCr+EGpgoxR2PtUutrvDQSNBlawm3P7Yj01O0+tyBXDOmjHdN7cOnaH8cZot2hlNl+ivlZBztXHb5mDfhQ09zFotzpLt2h7Sq5ElsW1q7o2uJ02Emc7yMPcLerWmnYsBx7DGE+ZlxZ5gD1WfiSdACRycohTPBjKiyEnYS7DZXDwXMZIhqTmpUz4HHyOCyW0zBylnNK6Vk88hQckXl6u6bbU2dq4Y3alotza5kqMVxZu9Oji0l2s+KRTyuiDmz7slie/OZA2yTzgmgk2vbSPYenLqLznLvAvrOU40IEJY4Kwk8VFlfFEf0cPAhoEaBjFZYdnQ8oUaMbYIL4Eov3Yj9JD4e+iGbj8S+ye2VlS0TkWgszFt8NldAmGhrO3f7JPpZ7Wf+2vsopOu/ZdtFD2aa8xG6V/B7BCERunntA8MDll/+wl/7Z5y7AVv2G5CT5dQ/UtUSlpMMtqmjWXlwWl4iKRHzzHhLZBBo2g3WtRscB/iJCHIIa8thGP5wVgmJ+BLJKObMM8oKVU2+9dhvfqkmpCuCvOiA0gwaMnFgPNmcsKXh0nhvZZEtPd5HvvvxdxVuzduKKtzHO9b6ynJ/mXop0b8o2Vzp7ZtPY3/8CjEkkUHRus/s4/zxDK7RlkLE1QWCllSeBzhSIazyHG93SZJ6a0ADyQx9GrbhCbIJ0EHgQE6tbtGwe/RiNKu12Mwug48NhvLOzbcaxhmPwx93xQJen+uZ72icTqfdme7zOL7Xt/KFe5dXDF6bVXP3uD+aSQ33LPfZOxgNZ+QsjCAIr7/g2NTSzDBWp6l4VcvQ5t2uZWM7Oxan8mVp1XObr2OYa867179ky6KKfffFvedt0kb752r6SY2Gh9pONVJlHiupQLEDD2xWkiojrusjHxw+3Tp7eLA57gPUOIXcHjUBitx14nlgxY/TjIbHcNAu7ue0OKXC4jObddwkGK2qv9OESeKAjxpqwr58wxS8evdzzz33LnzufvXoxTyruZjbO5u/dffu2htoYPfuW+nDc6kOikY0e4x+px4vaKKqDN43qskpFHipLNk0Wg8YgMRHOfggev9+ZNu3jz325ptvqjXE3L+A7Dpg/Z9JfUWtMJxIkb1u6r43v7rvTapweKebRPY+TKweJmer63WGZ5F8hlMFOE6CkycWqam5RYJSBkIukyaK6oVRSS4KuBBqQq/WZOCoVhnk9CWLPyVxleHVJFg1XBGt+/XOCFVaPlpH0VYn+K8xUjeViEUjLMBAV574tLQDPBBS9pWhuQZahNXt/Fj1D+8g1T/Ee5GueQfpH3wIGd+56qp3an986MHany4Y2Fi4uu2Ma+54fM2un31zY+uq8tnv77rhn17YjBRH9pqB+IDuNkZjCIl6u8YQsOvszG2Mo/3ywcQo/c4DtQ/fufrq7yLjAw8hwzvXXHPBwF+/sW3tE3des7p10zff37Xm8S+Wz9q86YWf3iSlzw+Ut117rUXw68QI+neLJaC3BXfskNLn+Sqb1drWuT1B1Gm7fiiKPY1fPdQIoMFP5Vh3L+FRt5HKYR4t+RiPBoArkjRRJlyZyKnMKZ/GmaV1LWT63e/UFSDBCuiAFZDzwwrIwwrokHJ5dQV05OsrYABMxH4L509leiqEk70p4C3mZKa9XPlvsRLl1FoCppBPI1throL8v8W6F/fk1//VNl9UYH/y6p6WHrvJZKv81/lVew9tqD2DbnBnO7OxD2v3fZjydRabkphP6HZYe/sbOSyABczpOaxcKYpuf/jLh9ljLxKdgx4CH73z1MOUBu8jYsk+MaG+TwwnADmRageiq2X/nCOHK6rRQz2JLelLbr/ppttVvfURvPNH8E6y1wxlZSanaPBroQ/cEOA28QIwmim5csnoRxPlnonb32WPDQy8iPXFWvZNegf3fdAWFuoMslvNYqTKwHlDdoInR7igDO8MnN+3alIHJ9Q3sZh0WMVpeIZw12CBM8RyFOEsZXdKxXwioskXJaddE0Frz7x+7dqdxtZya2uZu+XaFSuuHXu6mEoVU0CPFPsu/RR3N+itCsEeLoBVOmwTbRhY+VQsa1KTlX6CQnD1AGUCOGUTwSTJLqtshpcicEuLuUYhg+qgNoJIKKVxsml/RyKVttlTLs7FZLzJbGvKKabc7DFGT4MVsfJ6+32snhYYm4UzW/+TNfh/cY++hH6ZiXzaXj/+9L1+9DWzX6IveUVtx5xF2tlOa7fgYUY4+W/4YfKeLHOQOkHytSHQDvU9nwt3JKK5HYk4zluK8tnDeEsic/AY8XXS0P4j0r5F/T8RLGzP4ayx2l6hOcyPegUZrv935NKbLzs8yBycPVav/fw/3xtJUxJzkA6QcZigNZmJbMjVByPzEq7cxoUt8/Pg1B/pCN6DgEKHBwY2XU5mdQzPjPpkn+T/s6D/tD7JjFzqj7TlsiND72259PAQmd0smSH0d4qhA2R+JsqHZyjrcvVJysaFvdXnx5FlHZWGhqA/FIKfSw+rw6vX2tIeOsX8EXoLE3rp6/Qyq2JSr7qtD9BeDysRUR+7e+vm4aE7t24bGma0W+8eHrxg651Dw2SfEHxtptQ9FQYqWN8vympzObxpVNHoJYmUCZvmtoFwdbQgHTmCpMOHUcfhw8fwv3o9AODd74AN6qO2Nep59TPVHNlNU99oRE8r5QqAc49tRvGHJalR2dtCMvByq7rfCFf2KtpcGWfex5t8wRDRKAkH4E9kodKtXaq1yDk+UeFdTxzWkVPhUwq9HQRjSRcurGU6pBVLuNz7H+Efy+GS79AhOuwrLd60ZVHBH2IuvPBCWvv+fJ3TypW4ei5WfH/37t3vq4Xfq1ads3hRCpfZLT4HLqvxV8bItJFaCwd1DVXlMTEEey43QbN4YVe1BrOEyezMyo7pCbtqbe0klT1hVDWtkZBoQlB3ZOM6JjtQQtHrymXFaKjvnlQEkWSEKYWncYjMZG2EmElxGFhMW86Go7QM/A1vvWxr7fvo3C2j7cu27l7E9d/K5Wb/nk5unb0W/U3tLPyh99TeRVmVrxhgxNgYyElBlRG8LPDgFxzP1a4QfVX/qWuiDjEs4g5O/AQa/G/X1340eNpjYGRgYGDsj+mYaOkTz2/zlUGegwEEznc96ITR/6/+k2J9zuYO5HIwMIFEAYPWDgUAAHjaY2BkYGC3+fuJgYGD4f/V/x9ZnzMARVBADwCpKwd5eNpFkT9IQlEUxr977kMECQn7Y/NLIhxeSDiUIUIYWUiIFFZQg7REFEVL0BQEISIWDlZDS9BgtESTROBQglNQFNHUWtQWDWHf06Lhx3fufed759xz5BXDTgA2yk+WEVVfiBm7sCQPU1+gX/thKR+C0oYw6ZEtRPU783zwq2NqHwJSglPOEFEVeIUeycAvO4wPEZUifRa/F5hXRFBN0UP02z+ShleHmHcPj1QQlyNE5JaaJKOkzPML4mqJ5OGSR94NIa5PqXXC2uwhLufUS+o+TFmAIdcYlxO06gf2Uoab9VskAY+yPR9wUoNGOwLGJvuoqQ5Z47sz/JZmLxn2tYow3+ShzyU51p4jqfqdzDdjXWUu72UFoYaPHvVMnYSpnujLISaDcOsZxmOsPw0v5+uSLAZUgnlZ1r/Coj17mUVYO9lzibOoKXF0IWDP11aet0mB9T51VSUZ92oTcIwAfyqd3F+euJrghhqhpqj2nn6Rb771oLE/q7FDIhPczR/rfNcea0ea/9MG628ganQDP+VbZYMAAAB42mNgYNCBQgeGMsYKxn9MJ5hzmHuYdzG/YGFjkWOxYYlgKWJZxcrHasLaxKbEFsS2j92GPYr9HUceRw/HOo4jHDc43nH6cH7j0uLaxK3Encbdx72OR43HhieIp4LnDM8zXifeGN4DvL/4SviO8Tvwx/Ev4D8jICOwTeCZIJ+ggWCWYJ/gIsEdgheEEoQOCCsINwm/E9ER5RB1EU0SXSD6RYxLLEpshtg/8QTxI+I/JEokdkh8kVSSnCIlIBUj1SL1SZpLukb6lPQpGTmZH7IxsjVybnIh8lLyRvIh8iXyuxQ4cEAxBRUFIwU/hTSFNoU1CqcUvijKKLoo5ilOA0ElBaUmpVUAbS9IEAAAAAEAAACMAGEABQAAAAAAAgABAAIAFgAAAQABlwAAAAB42p2SzU7CQBSFvwKakBAXLly46sKFIYKVv0RIXJm48CdEUNwCEVFbMViI7nwKH8Vn0LfwOVx5Oh20kpiouZmZc88990znpkCOJ9I4mSzQ1Iqxw6qyGKdY4sriNDvcW5whz7PFC2LfLF5k3TmzOEvNebQ4x64z0y+Td94tfmEltWbxK16qTglPsY1LQSvKthQbwm2GnOs80N7lgonJRgy0H+qcGr6Hb/g2D9wKfVfvSRfK55I+x2Ii3ld9rDuKVKnpvgYn7NPhSCjZnewtzHX/fIs7pzxVNuZOtRE3qibvbdIS45k3f7FD49Y3+qnt8Gy9QSDXa3lGmoFYX849zS3WlKQua6/++iX/m/JQfqFQnU1FaDz8hEPUH8x1h7a3aN4W/GGGHWU9OUYTCT8n0lItNF/ZlbOrKJtaRV/laVZ1M9fZP1X5ABQQcZQAAHjabczJLkNxGMbh36fVVlFarXmeZ+ccjnmqUvM8zyQoiSCkC3siMS3dhJ3xBrgHFtwK0v6X3s2T9/2Sjxgi+Qmxw3+5BokRCxasxGLDjoM4nMSTQCIukkjGjYcUvPhIJY10Msgki2xyyCWPfAoopIhiSiiljHIqqKSKamqopQ4NHYN6GjBppIlmWmiljXY66KSLbvz0EKCXPoL0M8AgQwwzwihjjDPBJFNMM8Msc8yzwCJLLLPCKmuss8GmWDnjnDtuuZJYLrnhmw+++BSb2MUhceKUeEmQRHFJkiSLWzySwgOPvPDKG088884F9+IVn6RyLWm20P7p0a5uDx/saZrWG9WvKSPd+DsodaWhrFc2KE1lo7JJ2axsUfqj6uqvrjt39kLh4+2tzZPd6GQEo5pBa1/4+DBSzGDgF97sVWoAeNo9zasOwkAUhOFut/dSerUkRa8hQEjwtKYGUF3CQ6AgQWGQ8Aw47CmKt4MJbNfNN+Z/s8+V2M1oyFu3HWN32dWOaMeUyIaKLcZFjsgR+9YgXlbExYqssnrxiSl+sAGrhwPYJwUXcDYKHuAuFHzAmysEgD9TCIFgqjAAwvQPRpGqD/FGZ1N0vD6CMTh8aCZg/NRMweSgmYHpTjMHs0qzAPNlT0mF+AJZ1VFhAAABU2UwCQAA) format("woff"),url(leaguegothic-regular-webfont.ttf) format("truetype"),url(leaguegothic-regular-webfont.svg#league_gothicregular) format("svg");font-weight:400;font-style:normal}*{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body,html{margin:0;padding:0}body{text-align:center;font:400 16px/1.5 'Myriad Pro',Helvetica,Arial,sans-serif;color:#444;background-color:#fff}.header{background-color:#be0606;padding:0 16px 16px;margin:0;background-image:linear-gradient(to top,#be0606,#740404);color:#fff;text-align:left}h1,h2,h3,h4{font-family:league_gothicregular,arial;text-transform:uppercase;color:#333;line-height:.9}h1{font-size:3.4em;font-weight:400;line-height:.9;margin:2em 0 0;color:#fff}h2,h3,h4{margin:1em 0 .4em}h2{font-size:3em}ul.nav{list-style:none;font-size:.9em}.nav li{display:inline;margin:0 .2em}.nav a:link,.nav a:visited{color:#fff;text-decoration:none}.nav a:focus,.nav a:hover{text-decoration:underline}.nav a.home:link,.nav a.home:visited{display:inline-block;padding:3em .4em .1em;background-color:#fff;color:#c00;box-shadow:0 2px 4px rgba(0,0,0,.3)}.meta{font-size:.75em;margin:.4em 0;line-height:1.1em}.meta a:link,.meta a:visited{text-decoration:none;color:#fff;border-bottom:dotted 1px #fff}.content{padding:16px}figure{margin:16px;margin-left:-16px;margin-right:-16px}figure img{width:100%}figure figcaption{font-size:.8em;font-style:italic;padding:.2em 1em}.content p,.footer p{margin:0 0 1em}.container{width:100%;margin:0 auto;text-align:left;position:relative}.grab{font-size:1.2em;font-style:italic}blockquote{background-color:#eee;padding:24px 16px 24px 10px;margin-top:16px;margin-bottom:16px;margin-left:-16px;margin-right:-16px;border-left:solid 6px #aaa}.credits{background-color:#eee;color:#333;font-size:.9em;font-style:italic;padding:16px;margin-top:1em}.footer{background-color:#292929;color:#aaa;padding:2em 0 0;font-size:.8em}.footer .container{padding:16px 16px 0}.footer h2{color:#fff;margin-top:0}.footer div.nav{background-color:#222;margin:3em 0 0;padding:1em 0 0}.footer .nav a:link,.footer .nav a:visited{color:#ccc}.footer .nav a.home:link,.footer .nav a.home:visited{padding:.1em .4em 3em;color:#222;background-color:#f0f0f0}.content a:link,.content a:visited,.credits a:link,.credits a:visited{text-decoration:none;color:#900;border-bottom:dotted 1px #900}.content a:focus,.content a:hover,.credits a:focus,.credits a:hover{color:#c00;border-bottom:dotted 1px #c00;background-color:#fee}.content ol,.content ul{margin:0 1em 1em}.listing{margin:1em 0 3em}.listing h2{margin:0}.listing h2 a:link,.listing h2 a:visited{color:#000;border-bottom-style:none;display:inline-block}.listing h2 a:focus,.listing h2 a:hover{color:#fff;background-color:#000;padding:6px 8px;margin:-6px -8px}.listing .grab{font-style:normal;font-size:1em;margin:1em 0}.searchform{display:inline-block;display:none;background-color:rgba(0,0,0,.2);padding:16px;border-radius:4px 4px 0 0;margin-top:16px}.searchform .q{background-color:#fff;border-style:none;font-family:'Myriad Pro',Helvetica,Arial,sans-serif;padding:.2em .4em .1em;color:#c00;font-size:1em}.searchform .q:focus{outline:0}.search-results{display:none;background-color:rgba(0,0,0,.2);padding:16px;border-radius:6px}.search-results .listing{border-style:none;margin:0}.search-results .listing li{border-style:none;padding:.2em}.search-results ul.listing time{color:rgba(255,255,255,.6)}.search-results a:link,.search-results a:visited{color:#fff;text-decoration:none}.search-results a:focus,.search-results a:hover{text-decoration:underline}form.search{margin:1em 0;padding:2em;background-color:#eee;border-radius:2px}form.search input{font-size:1.2em;font-family:'Myriad Pro',Helvetica,Arial,sans-serif;padding:.2em;margin:.2em;color:#555;width:60%}form.search .submit{border:solid 1px #999;padding:.2em 1em;border-bottom-width:2px;color:#555;cursor:pointer;background-color:#ccc;width:auto}form.search .submit:focus,form.search .submit:hover{background-color:silver;color:#444}aside{font-style:italic;color:#666;margin:1em 0}.footer a:link,.footer a:visited{color:#fff}.colo,.howdy{display:inline-block;margin:2em 0 0;vertical-align:top;position:relative}.face{display:none}h1.shout{font-size:4em;margin-top:1em}ul.listing{margin:1em 0 3em;list-style:none;border-top:1px solid #eee}ul.listing li{padding:.8em 0;border-bottom:1px solid #eee}ul.listing time{display:block;color:#bbb;font-size:.8em}@media all and (min-width:400px){figure{margin:1em 0}.colo,.howdy{padding-left:100px}.face{display:block;position:absolute;left:0;top:0;width:80px;height:80px;border-radius:88px;box-shadow:0 2px 5px 0 rgba(0,0,0,.8);border:solid 2px #eee;padding:2px}}@media all and (min-width:500px){.container{width:90%;margin:0 auto}h1{font-size:4em}h1.shout{font-size:8em;margin-top:1em}blockquote{border-left-width:2px;padding-left:14px}}@media all and (min-width:600px){.howdy{width:50%;margin-right:32px}.colo{width:35%;padding-left:0}}@media all and (min-width:900px){.container{width:65%;margin:0 auto}h1{font-size:5em;display:inline-block;width:500px}h1.shout{font-size:9em;margin-top:1.2em}.meta{display:inline-block}}.syntax .hll{background-color:#49483e}.syntax{background:#272822;color:#f8f8f2}.syntax .c{color:#75715e}.syntax .err{color:#960050;background-color:#1e0010}.syntax .k{color:#66d9ef}.syntax .l{color:#ae81ff}.syntax .n{color:#f8f8f2}.syntax .o{color:#f92672}.syntax .p{color:#f8f8f2}.syntax .c1,.syntax .cm,.syntax .cp,.syntax .cs{color:#75715e}.syntax .ge{font-style:italic}.syntax .gs{font-weight:700}.syntax .kc,.syntax .kd{color:#66d9ef}.syntax .kn{color:#f92672}.syntax .kp,.syntax .kr,.syntax .kt{color:#66d9ef}.syntax .ld{color:#e6db74}.syntax .m{color:#ae81ff}.syntax .s{color:#e6db74}.syntax .na{color:#a6e22e}.syntax .nb{color:#f8f8f2}.syntax .nc{color:#a6e22e}.syntax .no{color:#66d9ef}.syntax .nd{color:#a6e22e}.syntax .ni{color:#f8f8f2}.syntax .ne,.syntax .nf{color:#a6e22e}.syntax .nl,.syntax .nn{color:#f8f8f2}.syntax .nx{color:#a6e22e}.syntax .py{color:#f8f8f2}.syntax .nt{color:#f92672}.syntax .nv{color:#f8f8f2}.syntax .ow{color:#f92672}.syntax .w{color:#f8f8f2}.syntax .mf,.syntax .mh,.syntax .mi,.syntax .mo{color:#ae81ff}.syntax .s2,.syntax .sb,.syntax .sc,.syntax .sd{color:#e6db74}.syntax .se{color:#ae81ff}.syntax .s1,.syntax .sh,.syntax .si,.syntax .sr,.syntax .ss,.syntax .sx{color:#e6db74}.syntax .bp,.syntax .vc,.syntax .vg,.syntax .vi{color:#f8f8f2}.syntax .il{color:#ae81ff}.embed-container{position:relative;padding-bottom:56.25%;padding-top:30px;overflow:hidden;max-width:100%;height:auto}.embed-container embed,.embed-container iframe,.embed-container object{position:absolute;top:0;left:0;width:100%;height:100%} \ No newline at end of file diff --git a/dist/feed.rss b/dist/feed.rss deleted file mode 100644 index 70fd7bfd..00000000 --- a/dist/feed.rss +++ /dev/null @@ -1,2765 +0,0 @@ - - - - hawksworx.com - - - 2014-06-23T15:30:14+01:00 - http://hawksworx.com/ - - Phil Hawksworth - phawksworth@gmail.com - - - - - http://hawksworx.com/blog/too-funky-didnt-read - - TF;DR - Too funky; Didn't read. - 2014-01-06T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> -<p> - The trend for 'parallax' or 'scrolljacking' web sites has long had me grumbling about their large page weight, slow rendering times and general accessibility black spots, but some are better than others. That got me thinking, do they ever do a good job? -</p> -</div> -<figure><img src="/images/funk.jpg" alt=""></figure> - -<!-- more --> - -<p> - Today, I saw an article from <a href="http://www.creativebloq.com/web-design/parallax-cadillac-site-quirky-masterpiece-11410263">Creative Bloq</a> heralding a recent example of these kind of sites as "a quirky masterpiece". They start their article by commenting: -</p> -<blockquote> - "Parallax scrolling may be on the way to becoming a web design cliche..." -</blockquote> -<p> - Er, yep. Somewhat! -</p> -<p> - The article actually looks at some of the technical approaches <a href="http://www.shoutdigital.com/">Shout Digital</a> took in order to keep the page weight down to just 7.7MB (Big for a web page, but low for a typical single page, parallax site) -</p> -<p>The rest of that quote hits home for me though:</p> -<blockquote> - "...but as long as agencies keep putting it to imaginative and aesthetically pleasing uses, there's surely life in the old dog yet." -</blockquote> -<p> - This reminds me of one of the reasons that I wanted to join a big agency like <a href="http://rga.com">R/GA</a> in the first place - To add a voice to those fighting for responsible executions on sites which often have large audiences and sometimes start (or at least propagate) web design and development trends. We need to be mindful of type of sites we build. Are they the best solution? The most responsible? It was good to see that <a href="http://www.shoutdigital.com/">Shout Digital</a> were making efforts to bring the weight of the page down. -</p> -<h2>You sound like a broken record, Phil</h2> -<p> - I'm not going to embark on one of my usual rants about bloated web pages which require loading screens and gobble your mobile data allowance, because I've done it so many times <a href="/blog/oakleys-monster-page-of-baubles/">before</a>. But as I went to look at the site Creative Bloq was referring to, I noticed something: -</p> -<p> - <b>I didn't read, or really even notice, <em>any</em> of the content.</b> -</p> -<p>It might be that this was because I was squinting through the judgmental eyes of a web purist, but I don't think so. I think that the reality is that this style of site is rarely a good choice for conveying content. Perhaps when people encounter a site which has all kinds of whizzy interaction and baubles, they play with those ahead of reading the content on the site.</p> -<p> - This example was, apparently a site for Cadillac. I know this because it said so on the Creative Bloq article. Otherwise, I'm afraid that this detail passed me by. -</p> -<p> - And so, I'm putting the question out there: -</p> -<blockquote> - Did you notice what all those parallax sites you've seen recently said? -</blockquote> -<p> - I'm curious to hear, regardless of technical implementation or page performance, how good people think examples of this kind of site are at getting their message across. -</p> -<p> - Any observations? Just reply to <a href="https://twitter.com/philhawksworth/status/420252237680500736">this tweet</a> on twitter. -</p> - - - - - - - - http://hawksworx.com/blog/using-a-wiimote-for-presentations - - Using a Wiimote for presentations - 2013-11-16T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Over the last couple of years I've given a number of <a href="/speaking">presentations</a>. No matter what the subject matter of the talk, there is one question I always seem to get asked afterwards: - </p> - <p>Was that a Wiimote controller you were using to control your slides?</p> - <p> - The answer is yes. This is a quick post to explain why and how. - </p> - <figure> - <img src="/images/phil-with-wiimote.jpg" alt=""> - </figure> -</div> - -<!-- more --> - -<h2>Why use a wiimote?</h2> -<p> - There are lots of products out there. I started using a Wiimote for three main reasons: -</p> -<ol> - <li><b>Bluetooth not IR.</b> A controller <em>must</em> use bluetooth. I started using the provided Apple IR Remote, which does fine, but if you need to ensure line of sight to your laptop, it means you think about that every time you change slides. I've even seen presenters pointing their clickers at the giant projector screen behind them in an attempt to advance a slide. It isn't your TV! Agony.</li> - <li><b>Custom commands.</b> I use Keynote for my presentations. Keynote has lots of useful <a href="http://support.apple.com/kb/PH5986">keyboard shortcuts</a> to help you during a presentation and you are guaranteed to forget those commands when you need them on stage. Mapping those commands to a button on your remote can save you some nervous keyboard fumbling.</li> - <li><b>Money.</b> I owned one already and wasn't sure how often I'd need to do this when I started.</li> -</ol> - -<h2>What do I use?</h2> -<p> - I use a bit of software called <a href="http://www.osculator.net/">Osculator</a> to pair the remote to my laptop and map whatever buttons I want to the correct keyboard commands. It costs $29 but has a free trial which you can experiment with. There are others available, some of them free, but this worked best for me. -</p> -<p>You can save your key mappings and configuration for use in future. If you're interested, you can get my key mappings to try by <a href="http://static.hawksworx.com/wii-keynote.oscd">downloading my config</a>. Just load open the file in Osculator, pair your wiimote and you are ready to play.</p> - -<h2>My mapped commands</h2> -<p> - I try to have as few buttons active on my controller as possible. I'm clumsy enough already without the risk of rebooting my laptop or tweeting my browser history to the audience via a misplaced thumb. These are use useful to me, and perhaps to you: -</p> -<ul> - <li>Button A - next slide</li> - <li>Button B - previous slide</li> - <li>D-pad Up - play/pause movie</li> - <li>Home - reset timer</li> -</ul> -<p> - I considered mapping a button to the x key. That little gem of a shortcut switches your presenter screen and the display screen. Very handy, but I tend to only need that when I'm plugging in and am at the keyboard already. -</p> - -<h2>What, no wrist strap?</h2> -<p> - That's right. I finally took the plunge and removed the wrist strap. That's because I live on the edge and am confident that I can grip onto the wiimote throughout a talk without accidentally throwing it into the fourth row. My friend, <a href="http://jakearchibald.com/">Jake Archibald</a> prefers strapping in before giving a talk. But that's because he's a big girl's blouse. -</p> -<figure> - <img src="/images/jake-with-wiimote.jpg" alt="Jake's belt and braces Wiimote style"> - <figcaption>Tight grip and wrist strap - perhaps essential given Jake's "propeller hands" style</figcaption> -</figure> - - - -<h2>Other thoughts and tips on speaking</h2> -<p> - Some more experienced speakers have posted some of their tips about speaking at (and attending) conferences recently. Those posts have been useful to me and some of them have their own preferred clicker. Take a look at: -</p> -<ul> - <li><a href="http://bradfrostweb.com/blog/post/on-speaking/">Brad Frost - On Speaking</a></li> - <li><a href="http://markboulton.co.uk/journal/speakingtips">Mark Boulton - Speaking Tips</a></li> -</ul> - - - - - - - http://hawksworx.com/blog/on-hiring-developers - - On hiring web developers - 2013-11-14T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> -<p> - Recently, I made <a href="https://twitter.com/philhawksworth/status/400319683372392448">a comment on twitter</a> about how I think developers can make it easier for employers to recruit them. It sparked a little discussion which has been hard to summarise in 140 characters, so here's a short blog post to try to clarify my point. -</p> -</div> -<figure><img src="/images/resume.jpg" alt=""></figure> - -<!-- more --> - -<h2>What I said</h2> - -<p> - The comment was sparked by my activity of looking to recruit a Senior Front End Engineer at <a href="http://rga.com">R/GA</a>. These thoughts are my personal opinions, and don't reflect the hiring policy of my employer, something, something, scary legal disclaimer etc. -</p> - -<blockquote> - <p> - Dear jobbing web developers, I urge you to have a site of your own. A portfolio page, links to github &amp; projects makes it easier to hire you - </p> - <a href="https://twitter.com/philhawksworth/status/400319683372392448">@philhawksworth, 12th Nov 2013</a> -</blockquote> - - -<h2>What was my point?</h2> -<p> - I'm trying to find talented, engaged, and experienced developers to join the team. One of the qualities I look for is a passion for the web and a demonstration that the you've engaged with it. -</p> -<p> - This doesn't <em>have</em> to be in the form of public and available web sites. Usually people who work in the Web industry also participate in it and so have activity available to see. Be that code on Github, opinions and discussion on Twitter, photos on Flickr, or whatever happens on Google+ (insert, "stays on Google+" joke here). -</p> -<p> - <b>This does not mean</b> that shareable URLs and a footprint of activity on the web is in any way a formal requirement for landing a job at R/GA or in any team that I happen to be involved in putting together. -</p> -<p> - But it can help me figure out that we should talk. A resumé alone, doesn't always do that. -</p> - -<h2>What was the debate?</h2> -<p> - After posting that tweet, Norm, whose opinion I respect, quickly replied with: -</p> -<blockquote> - <p> - @philhawksworth Really? I never needed those when working at Yahoo and built a VERY sizeable team of world-class devs. - </p> - <a href="https://twitter.com/cackhanded/status/400323796978393088">@cackhanded, 13th Nov 2013</a> -</blockquote> - -<p><a href="https://twitter.com/philhawksworth/status/400319683372392448">...and some discussion ensued.</a> -</p> -<p> - Norm suggested that requiring any kind of online profile significantly limits the talent pool that you might recruit from. As he observed, "selecting only people who had an online profile would exclude some of the best I’ve ever worked with". -</p> -<p> - And I quite agree. As I say, this is not a prerequisite for a job. My problem though is simply this. -</p> -<p> - Resumés usually suck. -</p> -<p> - They just suck. Especially if they have been 'sanitised' by an intermediary recruiting consultancy who has tried to summarise it for you or make it conform to their standard format (which often happens). -</p> -<p> - In this industry, you often find resumés which are made up of a lot of snazzy technology buzzwords. A well-crafted summary of your experience which shows evidence of engagement, passion, and skill is tough to create, and rare to see. -</p> -<p> - I included having an active Github profile as a positive thing in my tweet. Simply put, it's a convenient place to see development activity, and being familiar with Git and Github is advantageous. I was not suggesting that candidates must show that they contribute to open source projects. Github is more than that. -</p> -<p> - Norm responded specifically to that, with an interesting article: -</p> -<blockquote> - <p> - @philhawksworth @rossbruniges @larister More on not needing a Github profile: <a href="http://ashedryden.com/blog/the-ethics-of-unpaid-labor-and-the-oss-community">http://ashedryden.com/blog/the-ethics-of-unpaid-labor-and-the-oss-community</a> - </p> - <a href="https://twitter.com/cackhanded/status/400731981698572288">@cackhanded, 13th Nov 2013</a> -</blockquote> -<p> - To which I reply: I do not consider contributing to an open source project, or having a Github profile as a prerequisite for landing a job. Perhaps I should just restate my advice without that pesky 140 character constraint. -</p> - -<h2>My advice to web development candidates</h2> -<p> - Dear front-end web developers who are seeking freelance or permanent employment. Landing a good job demands that you find a way to stand out from all the other candidates. Luckily you are good at what you do and have a platform to show it. May I suggest that you make it easier for people like me, who see lots and lots of resumés, to recruit you, by: -</p> -<ul> - <li>Keeping your resumé short enough to easily read in a batch of 5 or 10 others</li> - <li>Describing the kind of role you want to find, and what excites you</li> - <li>Share links to things you consider relevant to your work on the Web. They might include previous work (if publicly available), a portfolio site of your own, a blog, your twitter feed, a LinkedIn profile, a side project, a toy, an experiment, or a single landing page which has your name and an HTML version of your resumé. Love the Web? Great. Show me.</li> -</ul> -<p> - If you can't do any of that, I'll do my best to get enough information from your resumé to determine that we should talk. But without something to see on the Web, you'll be making me work harder to figure out how awesome you are than that other person who's online resumé let me see what I needed without spending lots of time in Microsoft Word. -</p> -<p> - Love, hugs, and good luck. -</p> -<p> - Phil -</p> -<p> - <em>At time of writing, <a href="http://rga.com">R/GA</a> are still looking for a senior front-end engineer to join the team in London. If that's you, then please do get in touch with me on phil.hawksworth@rga.com. No recruiters please. Just good candidates. Ideally with URLs.</em> -</p> -<p> - <em>If instead, you think I'm talking twaddle. Let me know what you think and why on <a href="http://twitter.com/philhawksworth">twitter</a></em> -</p> - - - - - - - http://hawksworx.com/blog/london-content-strategy-meetup - - London Content Strategy Meetup - 2013-06-18T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> -<p> - Last night I faced a bit of a fear of mine by giving a 5 minute lightning talk at The popular Content Strategy Meetup, hosted at <a href="http://www.wearetbc.com/">The Book Club</a> in London's startup-rich Shoreditch. -</p> -</div> -<figure><img src="/images/bookclub-bulbs.jpg" alt=""></figure> - -<!-- more --> - -<p> - The fear was less about speaking in public, which I enjoy (although it still gives me a certain amount of the heebie-jeebies) but more about the format. Speaking for five minutes with 20 slides which automatically advance every 15 seconds is, for me, bum-clenchingly terrifying. It strips me of all of my security mechanisms and forces a particular focus and rhythm. An interesting challenge. -</p> -<p> - I loved it. -</p> -<p> - The event, which is well organised by local agency, <a href="https://togetherlondon.com/">Together</a>, had a wonderfully warm and generous atmosphere. The line-up of <a href="http://www.meetup.com/content-strategy-london/events/116285272/">8 speakers</a> was well structured to give a good variety of topics. As the nerd in the room, I was most happy with the reception my talk got. -</p> -<p> - Feedback from longer versions of my I Can Smell Your CMS talk has often brought the question of how I was taking this topic to the ears of those who benefit most from its message. This was my first step towards that. -</p> -<p> - My talk argues for more consideration for the performance impact complex CMS can have on websites. Many developers appreciate the message already. The challenge is to convince decision makers outside of the dev community that expensive and popular platforms are not always suitable just by dint of their price-tag, brand, or popularity in the enterprise. -</p> -<p> - The evening ended with a chance to socialise with the 100 or so who had filled every nook and cranny of The Book Club's downstairs bar. -</p> -<h2>Slides and video</h2> -<script async class="speakerdeck-embed" data-id="e41ce0a0ba1c013092004a04c7dbb9d8" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script> - -<h2>A deeper look</h2> -<p> - Some may be interested in the longer version of my talk, which goes a bit deeper and has some real-life case-studies and battle scars. There is a <a href="http://vimeo.com/53317254">video of this talk at Fronteers conference</a> in Amsterdam and also a <a href="https://speakerdeck.com/u/philhawksworth/p/i-can-smell-your-cms">more extensive slide deck</a> available should you wish. -</p> -<p> - The Content Strategy lightening talks were all recorded. I hope to share a video of this 5 minute version here soon. -</p> -<p><a href="http://www.meetup.com/content-strategy-london/photos/15575102/">Photos from the evening</a></p> - - - - - http://hawksworx.com/blog/oakleys-moto-diet - - Oakley's Moto diet - 2013-06-05T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - I <a href="/blog/oakleys-monster-page-of-baubles/">recently blogged</a> some crticism about a site which had an 85MB home page. At the time of writing, <a href="http://moto.oakley.com">Oakley's Moto</a> site was the most dramatic example I had ever seen of an excessively enhanced, heavyweight single page site. Since then, the team at Oakley have responded by putting the site on a diet and dramatically improving its performance and footprint. Great stuff! - </p> -</div> -<figure><img src="/images/oakley-moto-2.jpeg" alt=""></figure> - -<!-- more --> - -<p> - My criticisms of the site provoked some conversation on Twitter. Many people echoed my surprise at such an excessive page weight, others argued that this was a great example of pushing the boundaries of the web. -</p> -<p> - Notably though, <a href="https://twitter.com/joshaustin/status/326735602424889345">Josh Austin</a>, a member of the team at Oakley contacted me to say thanks for bringing my concerns to his attention. I was impressed by this as it's not easy to hear criticisms of something you've worked hard on. Indeed, not everyone took the criticism with such good grace. Oh well. -</p> -<p> - And so I was delighted when Josh contacted me again to let me know that a number of optimisations had been implemented, and that I should take another look. -</p> - -<h3>Credit where credit is due</h3> -<p> - The result of the efforts at Oakley was that a new version of the page (which has the same aesthetic and functionality as far as I can tell) was deployed with a <em>drastically</em> reduced page weight. -</p> - - -<h3>Comparing the footprints</h3> -<p>The original site:</p> -<blockquote> - <ul> - <li>85.4MB page weight</li> - <li>471 HTTP requests</li> - </ul> -</blockquote> -<p>And now the recently revised site:</p> -<blockquote> - <ul> - <li>13.6MB page weight</li> - <li>285 HTTP requests</li> - </ul> -</blockquote> - -<p> - That's a saving of more than 70MB! That's huge! -</p> -<p> - I'm still not really a fan of this kind of site, and 13MB for a single page is still very large indeed, but this is a fantastic optimisation when you consider where the original version. Bravo to the Oakley team for revisiting this and making such good improvements. -</p> - - - - - - - - - - - - http://hawksworx.com/blog/data-viz-at-digital-dumbo - - Data viz at Digital Dumbo - 2013-05-29T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - This week, as the <a href="http://digitalshoreditch.com/">Digital Shoreditch</a> festival draws to a close, a few of us from <a href="http://rga.com">R/GA</a> got the chance to attend an evening to talk with other London agencies and start-ups about data visualisation. We couldn't resist the urge to build a little something to take along. - </p> -</div> - -<figure><img src="/images/dd-data-viz.gif" alt=""></figure> - -<p> - The evening event, which was a bit of a mixer following a one day conference hosted by <a href="http://www.digitaldumbo.com/">Digital Dumbo</a>, took place at the <a href="http://www.campuslondon.com/">CampusLondon</a> in Shoreditch. Local creative companies were invited to create a data visualisation about some aspect of their company. There were interesting graphics exhibited by Moo, Carrot Creative and several others. We, however took the chance to make something which people could interact with. -</p> - -<p> - The temptation was to engineer something very ambitious, but this was a quick project which we would need to pull together between other jobs, so we did our best to keep the idea simple. -</p> -<p> - The result was a rendering of the Instagram activity of R/GA-ers from offices around the world. <a href="http://anthonygalvin.com/">Anthony</a> built a simple web form which was circulated to all of the company asking for access to their Instagram photos. It also identified which of our offices they are based in and then went off to gather up the instagram content. A bit of harvesting later and we had a rich set of data which we could serve to a front-end via a simple API. -</p> -<p> - The front-end, built with HTML, JavaScript and Canvas by <a href="http://www.pedroduarte.me">Pedro</a> illustrated the geographical spread of the location of Instagram photos of people from each office. Plotting the distance between photo and office showed differing habits and characteristics at our different offices. It also made a fun slideshow of people's images. -</p> -<p> - Being able to touch the display to explore different offices and their photos brought people closer to the data, and it was interesting to watch them play. -</p> - -<h3>Just an ad agency</h3> - -<p> - I was a little surprised by a comment that I heard from several people. -</p> -<blockquote> - "How come you are writing code? I thought you were just an ad agency." -</blockquote> -<p> - It's nice to get a chance to dispel that myth and tell people about the products and platforms we build at R/GA. we create a lot with code, and sharing a tiny glimpse of that was lots of fun. -</p> - - - - - - - - - - http://hawksworx.com/blog/pathing-the-gimmicky-cowpaths - - Pathing the gimmicky cow-paths - 2013-05-09T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - I've ranted quite a bit about clumsy and excessive parallax scrolling effects on web sites recently. Following Adobe's announcement that they are making this kind of effect simple to do via a WYSIWYG authoring tool, I'm bracing for another glut of sites with this effect. Some might be beautiful. Many will not. - </p> -</div> -<figure><img src="/images/train-window.jpeg" alt=""></figure> - -<!-- more --> - -<p> - And so what? What's the problem with recognising the desire for this visual effect and providing a tool to help deliver it? Well first of all, I'm still <a href="https://speakerdeck.com/philhawksworth/i-can-smell-your-cms?slide=102">wary of WYSYWIG</a> authoring tools. I'm just not convinced that they capture the subtlety and nuance of crafting experiences in the browser that perform well everywhere, gracefully degrade and are <a href="http://futurefriend.ly/">future friendly</a>. -</p> -<p> - In Adobe's video <a href="http://tv.adobe.com/watch/creative-cloud-for-design/parallax-scrolling-with-adobe-muse-cc/">touting the feature</a>, Rufus Deuchler, Creative Cloud Evangelist for Design mentions that this provides: -</p> -<blockquote> - "a sophisticated effect that you can apply without writing any code" -</blockquote> -<p> - My fear is that this trendy effect has been popping up a lot and is rarely done in a way that shows care for page-weight, performance or perceived performance. Making it easier to do without knowing the code or the considerations seems like a storm brewing, to me. -</p> -<h2>What is parallax?</h2> -<p> - The term <em>parallax</em> is getting used for any visual effect triggered by scrolling. Of course, that's not the correct use of the term. Parallax is the effect you get when objects move at different speeds in different planes, giving the impression of depth. It's not parallax when objects <a href="http://www.flickr.com/photos/philhawksworth/8461804100/in/photostream">spin</a>, <a href="http://moto.oakley.com">explode</a> or <a href="http://www.milwaukeepolicenews.com/#menu=stats-page">woof</a> when you scroll. -</p> -<p> - But those often seem to go hand in hand on sites that use this to excess. -</p> -<h2>An early example</h2> -<p> - To be clear, I'm not apposed to this kind of visual effect. Only when it is delivered gratuitously or with no consideration to the experience of the user (and that includes their bandwidth costs). -</p> -<p> - Back in early 2008, <a href="http://blog.teamtreehouse.com/how-to-recreate-silverbacks-parallax-effect">Paul Annett blogged</a> about how <a href="http://clearleft.com">Clearleft</a> had implemented a beautiful example of a parallax effect on the <a href="http://silverbackapp.com">Silverback site</a>. This example got quite a bit of attention at the time and was done with care and attention, was not bloated or self indulgent, and degraded thoughtfully. -</p> -<p> - Let's hope that those using Adobe's new <em>auto-web-shizzle</em> tool give the same thought and consideration when they start churning out more of these. -</p> - -<p class="meta"> - Related: <a href="/blog/oakleys-monster-page-of-baubles/">Oakley's monster page of baubles</a>, <a href="https://speakerdeck.com/philhawksworth/excessive-enhancement-sxsw2012">Excessive Enhancement</a> -</p> - - - - - http://hawksworx.com/blog/talking-at-jsday-verona - - Talking at JSDay in Verona - 2013-05-07T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - In a few days I'll be speaking at <a href="http://2013.jsday.it/" title="JS Day, Verona, 2013">JSDay</a> in Verona. I'm lucky enough to have another chance to present a version of my Excessive Enhancement talk which I first gave in Brighton way back in November 2011. But isn't it out of date? - </p> -</div> -<figure><img src="/images/jsday-2013.gif" alt=""></figure> - -<!-- more --> - -<p> - Well, I don't think so. The message that I'm trying to convey in this talk is, sadly, still as pertinent as ever. I'll be updating it to keep it current, with new examples and case studies, but the trends that I'm hoping to encourage people to think about remains the same. -</p> -<p> - Here's the synopsis: -</p> -<blockquote> - <p> - We all love to see exciting and innovative "interface shizzle" driven by JavaScript and the ever increasing rendering capabilities of modern browsers, but are we getting these at the expense of the Web? - </p> - <p> - This talk will explore the good, the bad, and the fugly of rich interfaces, while examining how and why we should take care not to damage the Web. - </p> -</blockquote> -<p> - My main message is that of care and consideration for users and for the Web. -</p> -<p> - In the last year, the average page weight has grown 24%, according to the <a href="http://httparchive.org">HTTP Archive</a>, and this includes a growth in the amount of JavaScript which is delivered for interpreting in the browser. -</p> -<p> - In itself, that's not the end of the world, but there are a few examples of fashionable web site designs (often popular with big brands who employ agencies) which might suggest that this slope will get steeper if their practices and tastes are emulated and become popular. -</p> -<p> - This talk reflects on that while trying not to burst everyone's bubble. Let's see how we get on. -</p> - -<h3>Update - all done!</h3> -<p> - After giving this talk and speaking to people afterwards, it's nice to see that there are lots of people caring about the same issues and being mindful of them during their own development. Thanks to all for such a warm reception. -</p> -<script async class="speakerdeck-embed" data-id="130f2a70a04701307d256651934d0b34" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script> -<p> - One question I got a few times later in the day was: -</p> -<blockquote> - <p>I care about this kind of thing too, but how do I convince pushy clients or managers that it is important? </p> -</blockquote> -<p> - Certainly, I can relate to that. For me there is an on-going battle to convince clients and some of the more ambitious designers that there is a need for care and restraint (in tandem with striving for an exciting and engaging experience). -</p> -<p> - I wish I had the perfect answer to this. The truth is that some are more open to hearing arguments that others. I'd echo something that <a href="http://cedmax.com/">Marco</a> said in <a href="https://speakerdeck.com/cedmax/zombie-code">his talk</a> on a different topic: -</p> -<blockquote> - "Bring numbers, not theories" -</blockquote> -<p> - There are a lot of studies on how page performance and percieved performance impact user engagement and convesion rates. Often, the people we need to convince about these issues care a lot about conversion rates. I'd recommend taking a look at <a href="http://www.stevesouders.com/blog/2013/05/09/how-fast-are-we-going-now/">Steve Souders'</a> post about page performance and the impacts on results. -</p> -<p>A few key figures from that post which might help:</p> -<blockquote> - <ul> - <li>When Mozilla shaved 2.2 seconds off their landing page, <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/8523">Firefox downloads increased 15.4%</a>.</li> - <li>Shopzilla saw <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7709">conversion rates increase 7-12%</a> as a result of their web performance optimization efforts.</li> - <li>Making <a href="http://kylerush.net/blog/meet-the-obama-campaigns-250-million-fundraising-platform/">Barack Obama’s website</a> 60% faster increased donation conversions 14%.</li> - </ul> -</blockquote> - -<p> - There were many great talks at JSday and I enjoyed the event a great deal. It's worth keeping an eye on Lanyrd to see covereage of other talks. -</p> - - - - - - - - - - - - http://hawksworx.com/blog/oakleys-monster-page-of-baubles - - Oakley's monster page of baubles - 2013-04-22T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - The ridiculous trend of giant, bloated web pages crammed with every visual bauble and gimmick imaginable seems set to continue. This time thanks to a site by Oakley. - </p> -</div> - -<figure><img src="/images/airbrakemx.png" alt=""></figure> - -<p> - I have been gathering examples of this kind of site and using them as examples of what NOT to do in my talk "Excessive Enhancement" for some time. -</p> -<p> - When <a href="http://bradfrostweb.com">Brad Frost</a> <a href="https://twitter.com/brad_frost/status/326425797768388608">alerted me</a> to this example though, I thought it had to be a spoof. Nobody would consider this to be a good idea would they? Really? These types of site, which uses HTML5, CSS3 and emerging web development techniques to create a page with parallax effects and animations as you scroll are frequently bloated and terrible citizens of the Web. -</p> - -<h3>Vital statistics</h3> -<p> - Without a primed cache, over my home broadband (advertised by my provider as 16meg but usually peaking around 11meg) this was my experience: -</p> -<blockquote> - <ul> - <li>85.4MB page weight</li> - <li>471 HTTP requests</li> - <li>2 minutes 45 seconds until loading screen replaced with content</li> - <li>4 minutes 10 seconds minute onLoad event</li> - </ul> -</blockquote> -<p> - Astounding! -</p> -<p> - You can visit the page to take a look while it is still around at <a href="http://moto.oakley.com/">http://moto.oakley.com</a> (I predict it might not last forever) but you can see a video of it below at a cost of just 28.5MB (saving you almost 60MB of bandwidth and allowing you to skip 2 minutes 45 seconds ahead to see the site) -</p> - - -<div class='embed-container'><iframe src='http://player.vimeo.com/video/64598508' frameborder='0' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></div> - -<p> - Now, I want these things to stop emerging, but at the same time, I'd rather not let Brad beat me with this example. Does anyone have a better (worse) example out there to share? Send them my way on Twitter at <a href="http://twitter.com/philhawksworth">@philhawksworth</a> -</p> -<h3>Update</h3> -<p> - Oakley responded and have updated this site. Some of the particulars are in my follow-up post: <a href="/blog/oakleys-moto-diet/">Oakley's Moto diet</a> -</p> - - - - - - - - - - - - http://hawksworx.com/blog/reflecting-on-txjs - - Reflecting on Texas JavaScript 2013 - 2013-04-21T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - I recently <a href="/blog/excess-cms-and-stink-at-txjs/">blogged</a> that I'd be speaking at the annual <a href="http://2013.texasjavascript.com">Texas JavaScript</a> conference in Austin. After a few days to reflect, I'd have to say that it was not only a privilege to speak at TXJS, but also that it was a pretty special event to attend. - </p> -</div> -<figure><img src="/images/paramount-theatre.jpeg" alt=""></figure> - -<!-- more --> - -<p> - This was my first visit to TXJS, now in its fourth year. The event has steadily grown in size and popularity over the years, but <a href="http://alexsexton.com/">Alex Sexton</a>, who runs the event, has worked hard to retain its intimate and friendly atmosphere. - -</p> -<p> - I gave a version of my "I can smell your CMS talk" along with a few aspects borrowed from another talk of mine called "Excessive Enhancement". - The slides are below, and a video from the session is <del>due to be published sometime soon</del> <a href="https://vimeo.com/67841745">available on Vimeo</a>. - -</p> - -<script async class="speakerdeck-embed" data-id="23a6890089a80130a2c51231380faed3" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script> - -<h2>Impressions of the day</h2> -<p> - This year, TXJS was a single track event. I like that as it removes that nagging feeling of choosing to see one talk at the expensive of another. Talks were also just 25 minutes long which, as an attendee, I liked. It felt like we got to see a LOAD of great talks in a single day. My head was buzzing by the end of the day. -</p> -<p> - The quality of the talks was, I felt, very high. There was a suggestion on twitter that there was less deep JavaScript content than some people would like, but the Node.js section offered a bunch of JavaScript from some proper brain-boxes which seemed to satisfy most. The variety of topics was great, with a lot of thought-provoking and inspiring content. You can see the full line-up and a growing set of coverage from the event on <a href="http://lanyrd.com/2013/txjs/">Lanyrd</a>, but I've briefly picked out a few of my personal highlights below. (which was not easy) -</p> - -<h3>Harper Reed</h3> -<p>Entertaining and inspiring. <a href="https://harperreed.com/">Harper</a> spoke about his time as CTO of Threadless and as CTO of the Obama for America campaign. Some great stories and philosophies around building great teams and products.</p> - -<h3>Chris Coyer</h3> -<p> - Anyone who is still on the fence about using SASS should see <a href="https://twitter.com/chriscoyier">Chris</a> speak. His style of presentation has an infectious energy and he makes some great points about the value of SASS and ways to use it. -</p> - -<h3>Frances Berriman</h3> -<p> - I know <a href="http://fberriman.com/">Frances</a> from such places in London as "the pub", but had never seen her present a talk before. Frances' description of the <a href="http://www.bbc.co.uk/news/entertainment-arts-22164715">award winning</a> work going on at <a href="https://www.gov.uk/">GovUK</a> was both fascinating and inspiring. Real examples of truly valuable work being done to overhaul the UK government web sites, and some lessons for anyone working to produce thoughtful experiences on the web. -</p> - -<h3>Jed Schmidt</h3> -<p> - <a href="http://jed.is/">Jed</a> worked rapidly through an example of building an API with numerous server-side JavaScript utilities with Node. Jed's presentation style was fantastic. With humor, energy and a staggeringly high pun count. Dense with information, yet very funny. I enjoyed Jed's talk greatly, -</p> - -<h3>Charlie Robbins</h3> -<p> - As CEO of <a href="https://www.nodejitsu.com/">Nodejitsu</a>, <a href="https://twitter.com/indexzero">Charlie</a> had some nice insights into building a business which embraces and supports open source. As an advocate of open source myself, it was good to hear about how Nodejitsu protects its proprietary code while <a href="http://opsmezzo.com/">sharing</a> parts of its stack as open source projects for the greater good. -</p> - -<h3>Drew Wilson</h3> -<p> - Listening to <a href="http://drewwilson.com/">Drew</a> was both depressing and uplifting. Depressing because he reminds you of how much you procrastinate or fear failure. Uplifting because of the sheer volume of things that he has done and the message that you should just get on and pursue your ambitions. Like many of the other speakers, Drew is outrageously prolific and his talk followed the theme of his <a href="www.executebook.com">book</a> (written in 8 days!) - how and why to execute rapidly. -</p> - -<h2>Night watchman</h2> -<figure> - <img src="/images/phil-at-txjs.jpeg" alt="Speaking at TXJS"> -</figure> -<p>I was last to speak, and was a little nervous considering the high quality of the talks that I was to follow. Plus, I was pretty much all that stood between a few hundred people and their much anticipated beer. As I started, I quipped:</p> -<blockquote> - I've spent the day being thankful that I didn't have to follow the current, excellent speaker... but that feeling has continued all day... until there was nobody left to lower the bar for me. -</blockquote> -<p> - I meant it, but thankfully the audience gave a generous welcome and seemed entertained by my accent, if not my slides. As <a href="http://twitter.com/slexaxton">Alex Sexton</a> told me later: -</p> -<blockquote> - "It's funny because you sound like a prince" -</blockquote> -<p> - I'm adding that to my resume. -</p> - -<h3>Update</h3> -<p> - All the talks have now been published as videos on the <a href="https://vimeo.com/channels/txjs2013/videos/sort:date/format:thumbnail">TXJS2013 Vimeo channel</a> -</p> - - - - - - - - - - - - http://hawksworx.com/blog/excess-cms-and-stink-at-txjs - - Excess, CMS and Stink at Texas JavaScript - 2013-04-12T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - I'm rather excited to be speaking at Texas JavaScript in Austin this year. <a href="http://2013.texasjavascript.com">TXJS</a> takes place on Monday the 15th of April at Austin's rather beautiful <a href="http://www.austintheatre.org/site/PageNavigator/venues/paramount">Paramount Theatre</a>. This talk will take from my Smelly CMS talk and also touch on aspects of another talk of mine called Excessive Enahnacement. - </p> -</div> -<figure><img src="/images/txjs.jpeg" alt=""></figure> - -<!-- more --> - -<h3>Here's the synopsis:</h3> -<blockquote> - -<p> - You make web sites. Clients want them to include all of the latest exciting fads and "interface shizzle". You want them to render quickly and have a shelf-life longer than that hummus you bought the other day. Clients want to be able to maintain the site themselves, they know about content management systems and are going to invest big money in a real belter. You know that they'll be unleashing their 'creativity' and messing with your mojo. -</p> -<p> - This talk will explore the good, the bad, and the fugly of rich interfaces, and look at ways to champion what matters. We'll also look at examples of the damaging traces CMSs leave behind in the front-end and at ways to avoid the smell of your CMS wafting over to the user and sacrificing the all-important craftsmanship of good front-end engineering. -</p> -</blockquote> - -<div> - <p>This year, TXJS is a single track conference and is organised into topic sections. My talk falls into the rethink.js section with <a href="https://twitter.com/indexzero">Charlie Robbins</a> and <a href="https://twitter.com/drewwilson">Drew Wilson</a> which is set up like this:</p> -</div> - -<blockquote> - This set of speakers will be talking about thinking differently. These ideas will be framed for a technical audience but often have more to do with you than your computer. -</blockquote> - - - - - - - - - - - - http://hawksworx.com/blog/smelly-cms-at-html5devconf - - Smelly CMS at HTML5DevConf - 2013-03-28T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - On April 1st, I'll be speaking at the <a href="http://html5devconf.com">HTML5DevConf</a> at the Palace Hotel in San Francisco. I'll be giving a version of my "I can smell yor CMS" talk which looks at how content managment systems can adversily effect performance and experience in the front-end. - </p> -</div> -<figure><img src="/images/i-can-smell-your-cms.jpg" alt=""></figure> - -<!-- more --> - -<h3>Here's the synopsis:</h3> -<blockquote> -<p> - The word is getting out. Great web site experiences require careful development and crafty execution in the front end. Squeezing every drop of performance out of your user's browser is tough, but Steve Souders and friends have mobilized an army, and we are all having a bloody good go. -</p> -<p> - But there is a common threat to doing great work in the front-end. It lurks in the back-end and clients love it. It's the content management system, and more often than not, it stinks. -</p> - We'll look at examples of the damaging traces CMSs leave behind in the front-end and at how we might work to reduce them. We'll find ways to fight for what matters in a CMS, and ways to avoid the smell of your CMS wafting over to the user and sacrificing the craftsmanship of good front-end engineering. -</p> -</blockquote> - -<p> - I'll be presenting at 4pm on Monday 1st of April (no, really!) in the Twin Peaks room. Do come along and say hello. -</p> - - -<h3>Update:</h3> -<p> - Once again, this session was well received which is an encouraging sign. A number of people asked about getting a recording of the talk. Sadly the session was not recorded at this event, however you can find a <a href="http://vimeo.com/53317254">video of this talk from Fronteers</a> and also the <a href="https://speakerdeck.com/u/philhawksworth/p/i-can-smell-your-cms">slides</a> and some <a href="/blog/i-can-smell-your-cms-a-talk-at-fronteers/">Q&A from the Fronteers session</a> -</p> More info: <a href="http://html5devconf.com/venue.html">The Palace Hotel</a>, <a href="http://html5devconf.com/sessions.html#p_hawksworth">Session info</a>, <a href="http://lanyrd.com/2013/html5devconf-spring/scfqcr/">Session info and coverage on Lanyrd.</a> - - - - - - - - - - http://hawksworx.com/blog/simplicity-and-performance - - Simplicity and performance with static files - 2012-11-29T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - I've been beating a drum recently, and it has a lot to do with pursuing simplicity in technical architectures. I want to allow for optimizations where it matter most and avoid the kind of technical and functional bloat you can get through using some CMS platforms. So I was delighted when a colleague recently shared a link to <a href="http://kylerush.net/blog/meet-the-obama-campaigns-250-million-fundraising-platform/">Kyle Rush's post</a> which demonstrates some huge value in this approach on the Obama fund-rising campaign site. - </p> -</div> -<figure><img src="/images/contribute_obama.jpeg" alt=""></figure> - -<!-- more --> - -<p> - Kyle's article is well worth a read. In it, he talks at high level about some of the principles and approaches that were used to ensure high performance on the <a href="https://contribute.barackobama.com">contribute.barackobama.com</a> site. -</p> -<p> - Many of the techniques and technical architecture decisions map very closely to those that I have been championing recently, and I talked a little about this <a href="http://hawksworx.com/blog/i-can-smell-your-cms-a-talk-at-fronteers/">at Fronteers in Amsterdam</a> when I spoke about the complexity overhead from some Content Management Systems. -</p> -<p>Of particular interest to me, Kyle mentions some great stuff like:</p> -<ul> - <li>Generating a static site with <a href="http://jekyllrb.com/">Jekyll</a></li> - <li>Using <a href="http://github.com">Github</a> for version control</li> - <li>Abstracting the payment gateway off to a RESTful API and calling it from the client</li> - <li>Performing A/B testing with <a href="https://www.optimizely.com/">Optimizely</a> and iterating rapidly</li> -</ul> - - -<p>So much of this rings true to me, but it is great to read of the very tangible and financial benefits of ensuring that the site is well optimized and front-end development is not compromised by (what I call) CMS Stink.</p> - -<p>A couple of quotes from Kyle that gave me real, 'Amen brother!' moments:</p> - -<blockquote> - <p> - By using Jekyll we managed to avoid the complexity that comes with most CMS (databases, server configuration) and instead focus on things like optimizing the UI and providing a better user experience. - </p> -</blockquote> - -<p>and</p> - -<blockquote> - <p> - There is a lot to be said about simplicity. - </p> -</blockquote> - -<p>Can I get a 'hell yeah!'</p> - - - - - http://hawksworx.com/blog/i-can-smell-your-cms-a-talk-at-fronteers - - I can smell your CMS at Fronteers 2012 - 2012-10-09T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - This year, I was lucky enough to be invited to speak at <a href="http://fronteers.nl/congres/2012">Fronteers</a>, the very well regarded web development conference in Amsterdam. I was particular excited by this since the event had been high on my wishlist to attend for the last few years. I spoke about the negative impact that content management systems regularly have on the front-end development effort, and how we might try to combat this. - </p> -</div> -<figure><img src="/images/fronteers-theatre.jpg" alt=""></figure> - -<!-- more --> - -<p> - The format this year adopted a small but very positive change. The two days of the conference were MC'd by Christian Heilmann of Mozilla and Yahoo! fame, and rather than accepting questions from the floor at the end of each session, Christian interviewed the speaker and presented questions from the audience via Twitter. This worked beautifully, and he should be praised for doing a wonderful job of getting the best out of the speakers. -</p> -<p> - Sadly, not all of the questions could be addressed in the available time, but Christian captured the questions and has presented them via a nice <a href="http://christianheilmann.com/2012/10/08/fronteers12-qa-results-quick-reviews-and-impressions-from-the-stage/">summary of the sessions on his blog</a>. Below you can find not only the slides from my session, but also the answers to the questions that we didn't manage to get to on the day. -</p> - -<h3>I Can Smell Your CMS : synopsis</h3> -<p> - The word is getting out. Great web site experiences require careful development and crafty execution in the front end. Squeezing every drop of performance out of your user's browser is tough, but Steve Souders and friends have mobilized an army, and we are all having a bloody good go. -</p> -<p> - But there is a common threat to doing great work in the front-end. It lurks in the back-end and clients love it. It's the content management system, and more often than not, it stinks. -</p> - -<p> - We'll look at examples of the damaging traces CMSs leave behind in the front-end and at how we might work to reduce them. We'll find ways to fight for what matters in a CMS, and ways to avoid the smell of your CMS wafting over to the user and sacrificing the craftsmanship of good front-end engineering. -</p> -<h3>Slides</h3> - <script async class="speakerdeck-embed" data-slide="3" data-id="506eee244f4e120002096d94" data-ratio="1.3333333333333333" src="//speakerdeck.com/assets/embed.js"></script> - -<h3>Video</h3> - - - -<div class='embed-container'><iframe src='http://player.vimeo.com/video/53317254' frameborder='0' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></div> -<h3>Questions and answers</h3> - -<blockquote> - <p> - Alexander Griffioen ‏<a href="http://twitter.com/oscaralexander">@oscaralexander</a> - </p> - <p> - What degree of influence does the client have in the CMS choice? <a href="http://twitter.com/philhawksworth">@philhawksworth</a> #fqa #fron teers12 - </p> -</blockquote> -<div class="answer"> - <p> - This varies a lot in practice, Alexander. But ultimately the client needs to be totally on board with the decisions being made about this critical technology choice. I have found that the levels of expertise, opinions and influence vary dramatically from one client to another and some arrive with preconceptions about what CMS they want to use. In many cases this can be something which is already decided or in place in the client's infrastructure so you have very little chance to change that. Others are more willing to enter a discussion and allow you, as the domain expert, to provide some carefully considered recommendations. - </p> -</div> -<blockquote> - <p> - Robbert Broersma ‏<a href="http://twitter.com/RobbertAtWork">@RobbertAtWork</a> - </p> - <p> - #fronteers12 I suppose <a href="http://twitter.com/"></a><a href="http://twitter.com/philhawksworth">@philhawksworth</a> means free-form editing where he says WYSIWYG. #fqa - </p> -</blockquote> -<div class="answer"> -<p> - Good point, Robbert. In fact I mean both. Each type of input has different implications in terms of introducing CMS Stink, but both can be problematic. WYSIWYG tools which allow the user to edit the content while seeing the formatted output of their work are particularly bad as they introduce all manor of inefficient code artifacts without the user being aware of this.As they often include wide formatting options they also allow the content editor to deviate from the design which can rapidly degrade the designed experience of the site. -</p> -</div> - -<blockquote> - <p> - Martijn Saly ‏<a href="http://twitter.com/MartijnSaly">@MartijnSaly</a> - </p> - <p> - <a href="http://twitter.com/codepo8">@codepo8</a> The viewstate actually still exists and it cannot be turned off completely. You can only make it smaller. #fqa #fronteers12 - </p> -</blockquote> -<div class="answer"> -<p> - I wasn't aware of that, Martijn. I gather that this is something that is improving in .net but not all CMS platforms built with .net will adopt the improved pattern right, away so you may still find this kind of smelly code finding its way into your work. -</p> -</div> - -<blockquote> - <p> - MikeVierwind ‏<a href="http://twitter.com/mikevierwind">@mikevierwind</a> - </p> - <p> - #fqa #fronteers12 The new edition of Episerver is better!! You have no big form element!! They inline js is gone etc. A lot better! - </p> -</blockquote> -<div class="answer"> -<p> - Wonderful! They should update the implementation on their own site to make use of that. Enterprise platforms that I have encountered often bring a high level of technical debt or friction to migrating. I'm not sure what effort is required for EPiServer to upgrade their own site to use their own latest best practices, but I'd like to see that happen. -</p> -</div> - -<blockquote> - <p> - Darius Kruythoff ‏<a href="http://twitter.com/dkruythoff">@dkruythoff</a> - </p> - <p> - Are there any true CMS solutions out there that manage content and don't mess with design at all? #fronteers12 #fqa - </p> -</blockquote> -<blockquote> - <p> - Тихий Бес ‏<a href="http://twitter.com/SilentImp">@SilentImp</a> - </p> - <p> - <a href="http://twitter.com/"></a><a href="http://twitter.com/dkruythoff">@dkruythoff</a> is it possible at all? Content is tied with markup. Markup tied to representation of data — design. #Fronteers12 #fqa - </p> -</blockquote> -<div class="answer"> - <p> - Darius, I'm sure that there must be several, but there is only one I know of at the moment. <a href="http://grabaperch.com">Perch</a> sets itself up to be a "tiny CMS" but I think that it has a lovely and powerful approach. You begin by creating your site as static templates and then declare areas in those templates which should be dynamic and managed by an admin application. This action builds an appropriate administration area for you while leaving the output untainted by CMS Stink. This allows you to have complete control over the front-end development and enhance the site with various types managed content. -</p> -<p> - There will be limits to the projects where this is appropriate, but I'd argue that it is a viable solution more often than you might imagine. -</p> -<p> - SilentImp, Ideally it is good to separate content from style from behavior as we have learned with HTML, CSS and JavaScript respectively. You have a good point though, that with the ability to author or generate HTML, content editors can indeed influence the style of the content. This should really be limited to using defined styles though if we encourage them to adhere to structured markup rater than giving free reign over all. -</p> -<p> - For total separation of content from style, then systems that allow only plain text input into defined content areas might provide an answer, but I find that those can be just too restrictive at times and have very particular useful scenarios. -</p> -</div> - -<blockquote> - <p> - LBiNetherlands ‏<a href="http://twitter.com/LBiNetherlands">@LBiNetherlands</a> - </p> - <p> - WYSIWYG is danger, but customers demand it <a href="http://twitter.com/"></a>@Fronteers #fronteers12 #fqa - </p> -</blockquote> -<blockquote> - <p> - Wilfred Nas ‏<a href="http://twitter.com/wnas">@wnas</a> - </p> - <p> - <a href="http://twitter.com/jashaj">@jashaj</a>WYSIWYG is danger, but customers demand it #fronteers12 #smellcms #fqa - </p> -</blockquote> -<blockquote> - <p> - Rebecca Murphey ‏<a href="http://twitter.com/rmurphey">@rmurphey</a> - </p> - <p> - #fqa <a href="http://twitter.com/philhawksworth">@philhawksworth</a> how do you convince clients they don’t really want a wysiwyg editor? i’ve had this argument too many times :/ - </p> -</blockquote> -<div class="answer"> - <p> - Yes indeed. I think that one of our responsibilities in agency work, is to determine when WYSIWYG is beneficial and when it is detrimental. Projects are seldom the same and there are some cases when we can argue the point better than others. I believe that we can use examples of the effects of the use of WYSIWYG editors over time with case studies and examples to try to make the point. Presenting effective alternatives and demonstrating the different potential workflows and results can be helpful. -</p> -<p> - I have found it very hard to persuade clients who demand WYSIWYG to reconsider. Only in a few cases have I been successful. I'm hoping that the community as a whole can help to compile case studies and communicate the alternatives. -</p> -<p> - Halp! -</p></div> - -<blockquote> - <p> - Norbert de Langen ‏<a href="http://twitter.com/NorbertdeLangen">@NorbertdeLangen</a> - </p> - <p> - #fronteers12 #fqa <a href="http://twitter.com/codepo8">@codepo8</a> any other content editing tips besides markdown? Consider it WILL be the intern editing the site? - </p> -</blockquote> -<div class="answer"> - <p> - Norbert, I think that Markdown is well within reach of most people who you would be comfortable being responsible editing content on your site. Accompanying it with a simple guide to content strategy, style and markup syntax can be a huge help. -</p> -<p> - There are many wiki markups available out there, but I like the way that Markdown is so well understood and supported. -</p> -<p> - I have also had some good success with systems which are even more prescriptive in terms of what they allow people to enter as text. By using something like Django or other suitable MVC frameworks to build out a very structured input for content into templates, you can get the the point that you are just allowing people to enter text into the sections that you need. This allows for a complete separation of style and content but can be a little bit too rigorous for some projects. -</p></div> - -<blockquote> - <p> - Тихий Бес ‏<a href="http://twitter.com/SilentImp">@SilentImp</a> - </p> - <p> - #Fronteers12 #fqa what are you think about inplace content editors? - </p> -</blockquote> -<div class="answer"><p> - I have to say that I'm not a fan. I can see the temptation to allow users to navigate around the site as normal an then switch to a mode where they are able to edit the content that they see. This gives good context to the editor about how their content will appear but does a poor job of protecting the designed experience. This kind of interface always seem to add a lot of UI hooks and other CMS smells into your code which make optimising and being <a href="http://futurefriendly.org">future friendly</a> incredibly hard. -</p></div> - -<blockquote> - <p> - Norbert de Langen <a href="http://twitter.com/NorbertdeLangen">@NorbertdeLangen</a>‏ - </p> - <p> - #fqa <a href="http://twitter.com/codepo8">@codepo8</a> tips for agencies wanting to do a more agile work system? - </p> -</blockquote> -<div class="answer"><p> - Norbert, this is a tough one. I think the biggest key to success here is complete buy-in from the client. Unless they are totally on board with that approach to the project, then you can't run it in a truly Agile manor. I've been fortunate enough to work on a couple of projects where that has been the case, but it is very rare. The desire to define upfront the cost, scope and deadlines makes a true Agile approach impossible. -</p> -<p> - At <a href="http://rga.com">R/GA</a> we do borrow aspects of Agile development and tailor those practices to work within the constraints of a traditional waterfall engagement. Finding those aspects of Agile that work for you can be helpful but they tend to shift depending on how you work with each particular client. -</p> -</div> -<blockquote> - <p> - Wes Oudshoorn ‏<a href="http://twitter.com/wesoudshoorn">@wesoudshoorn</a> - </p> - <p> - #fqa Could you describe your ideal cms for responsive design? What challenges are we facing there? #fronteers12 - </p> -</blockquote> -<blockquote> - <p> - Randy ‏<a href="http://twitter.com/Randynamic_4">@Randynamic_4</a> - </p> - <p> - #fronteers12 #fqa CMS and responsive design (responsive content) is still a big problem any suggestions on that? - </p> -</blockquote> -<div class="answer"><p> -Wes, Randy, I think that a good CMS should be totally transparent in the front end. As such we should be able to adopt the kind of techniques that are emerging in front-end development to support a responsive design approach. Stripping out the UI hooks and other smells left by many CMS platforms can actually help to enable a responsive design. -</p> -<p> - One area of a responsive approach which gets a little overlooked does have a burden on the back-end however. Rather than delivering the same large image assets to all devices and then scaling them down in the browsers to fit the screen size, it can be important to have smaller versions of image assets and then 'upgrade' them to lager images where appropriate. Ideally the system would support the generation of different sizes of the automatically to support that. -</p></div> - -<blockquote> - <p> - Varya ‏<a href="http://twitter.com/toivonens">@toivonens</a> - </p> - <p> - #fqa <a href="http://twitter.com/philhawksworth">@phlhawksworth</a> Doesn't all what you are showing just mean that those CMS are bad coded? - </p> -</blockquote> -<div class="answer"><p> - Varya, Yes, but this is a tough problem and I think many large platforms try to serve many masters and provide solutions to each and every possible problem that they can imagine in this area. As a result they often focus on the capabilities without giving any consideration to front-end performance or the kind of challenges that front-end developers need to overcome. -</p> -<p> - I think that this is a symptom of front-end development not being given the respect that it deserves. Historically platform developers seem to have considered the front-end development work as the 'easy last step' in producing a system and so not given it the attention it needs.In recent years we have come to appreciate the complexity and craftsmanship involved in front-end engineering and I think that we need to highlight that realisation, which is one of the motives for me to give this talk. -</p> -</div> - -<blockquote> - <p> - Victor Zuydweg ‏<a href="http://twitter.com/VZuydweg">@VZuydweg</a> - </p> - <p> - The CSM stink seems a lot like framework stink, dontyouthink? <a href="http://twitter.com/philhawksworth">@philhawksworth </a>#fqa #fronteers12 - </p> -</blockquote> -<div class="answer"><p> - Yes Victor. There are many frameworks out there that can let you introduce your very own code smells into the work. Even with the best tools, we can always find ways to do a bad job - I've been guilty of that myself plenty of times in the past! The trick is in recognising the smells we should avoid! -</p> -</div> - -<blockquote> - <p> - Тихий Бес ‏<a href="http://twitter.com/SilentImp">@SilentImp</a> - </p> - <p> - <a href="http://twitter.com/philhawksworth">@philhawksworth</a> #smellcms May i have video or slides or some sing?! Talk is great!!! #Fronteers12 #fqa - </p> -</blockquote> -<div class="answer"><p> - Thanks SilentImp! -</p> -<p> - You can get to the <a href="https://speakerdeck.com/u/philhawksworth/p/i-can-smell-your-cms">slides on speakerdeck</a> where they are also available to download as a PDF. Other coverage from Fronteers 2012 is collecting nicely on the event <a href="http://lanyrd.com/2012/fronteers/coverage/">coverage page at Lanyrd</a>. A video will soon be available from the nice folks at Fronteers. -</p> -</div> - - - - - http://hawksworx.com/blog/bootrapping-front-end-development-with-yeoman - - Bootstrapping front-end development with Yeoman - 2012-07-25T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Recently Addy Osmani posted a sneak peek at <a href="http://yeoman.io/">Yeoman.io</a>, which is described as a client-side stack, comprised of tools and frameworks that can help developers build beautiful web applications. For me, this is incredibly timely as at <a href="http://rga.com">R/GA</a> we have been making some effort to build tools to help us streamline our front-end development efforts, and keep the quality high. - </p> -</div> -<figure><img src="/images/yeoman.png" alt=""></figure> - -<!-- more --> - -<p> - At the time of writing, Yeoman was not quite ready to be released, but the teaser video and description of its capabilities look bang on to me. It tackles things like: -</p> -<ul> - <li>Integrated package management</li> - <li>Unit testing</li> - <li>Boilerplates and scaffolding</li> - <li>Build processes</li> - <li>Linting and optimisation</li> - <li>Built-in preview web server</li> - <li>...and much more</li> -</ul> -<p> - Addy gives a nice overview of some of the basics that all good front-end developers should aim to have as part of their development workflow in <a href="http://addyosmani.com/blog/improved-developer-tooling-and-yeoman/">his blog post</a> to accompany the introduction to Yeoman. I also particularly like the slightly more involved talk on the same topic from <a href="http://www.youtube.com/watch?v=Mk-tFn2Ix6g">Paul Irish at Google IO</a>. -</p> -<p> - It is little wonder that front-end development practices are coming of age gieven the ever increasing complexity and sophistication in web development. Great stuff. -</p> - - - - http://hawksworx.com/blog/sketchjs-adds-convenient-canvas-rendering - - Sketch.js adds convenient canvas rendering - 2012-07-24T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - <a href="https://github.com/soulwire/sketch.js">Sketch.js</a> is an open source javascript library which offers some animation utilities. Aimed at making animating with canvas or webgl easier, sketch.js is a lightweight piece of boilerplate code which streamlines a number of common tasks. - </p> -</div> -<figure><img src="/images/sketchjs.png" alt=""></figure> - -<!-- more --> - -<p> - Sketch helps by augmenting things like the mouse, touch and keyboard events with often neded utilities. It also sets up your animation loop and helps to manage it with enriched math functions and other handy bits and pieces. -</p> -<p> - Check out the <a href="http://soulwire.github.com/sketch.js/">demo</a> or go and find out more on <a href="https://github.com/soulwire/sketch.js">Github</a> -</p> -<p> - The project site has good documentation of the <a href="https://github.com/soulwire/sketch.js/wiki/API">API in the project wiki</a>, and many of the conventions and patterns may look familiar to those used to using prototype. -</p> - - - - - http://hawksworx.com/blog/visiting-bbc-online-at-salford - - Visiting BBC Online at Salford - 2011-11-18T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Last week I travelled with some of my <a href="/blog/joining-rga.html">new R/GA colleagues</a> to Salford near Manchester to visit the BBC'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 BBC are keen to share their thinking and product plans for this and the event was kicked off by <a href="http://www.bbc.co.uk/blogs/bbcinternet/ralph_rivera/">Ralph Rivera</a>, Director, Future Media. - </p> -</div> -<figure><img src="/images/fmedia_city.jpg" alt=""></figure> - -<!-- more --> - -<p> - Rivera began the afternoon by talking about the ambition to unify the existing silos around the BBC into a cohesive online experience. The ten core online products of Home page, Search, News, Sport, Weather, Knowledge and Learning, TV, Radio, cBBC and Cbeebies are set to form the backbone of the online offering accross the various BBC estates. -</p> -<p> - The common theme throughout the day, was that of how best to deliver a simple, intuitive and accessible experience on "the four screens": -</p> -<ul> - <li>TV</li> - <li>Computer</li> - <li>Tablets</li> - <li>Smart phones</li> -</ul> -<p> - Also a hot topic was how we can leverage <i>the red button</i> as a bridge to a more connected and engaged experience with the content that the BBC has to offer. -</p> -<p> - Many parts of the BBC have been steadily rolling out all manor of innovations, not only through the <a href="http://www.bbc.co.uk/rd/" title="BBC R &amp; D">R &amp; D team</a>, but also through steady iterations and evolutions of existing products across the BBC 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 platforms. -</p> -<p> - It was interesting that Rivera observed that there was a gap between the official R &amp; 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 investment. -</p> - -<p> - Holly Goodier, Head of Audiences BBC Future Media then gave an excellent presentation describing the audiences and contexts that people consume BBC 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 BBC were clearly looking to fulfill that desire in their audience. -</p> -<p> - 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 IPTV capable. Personally, I have doubts about whether that is a good indicator of what capabilities that same audience has given how little of my TV's capabilities I, as a techie, geeky bloke, exploit. -</p> -<p> - 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 BBC 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 HTML5, and other web technologies for delivering game content seems, quite rightly, high on the radar for the producers of children's content on BBC on-line. -</p> -<p> - Ben Gollop, Head of F1, and Ciat O'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 scales. -</p> -<p> - Finally, Daniel Danker, General Manager, Programmes &amp; 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've found that my TV watching methods, even in the living room, have grown to include a 'workflow' 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 'standardisation'. Like many others, I'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 'app store silo' does the TV support. Give me a capable, but dumb display any day. -</p> - - - - http://hawksworx.com/blog/reflecting-on-fullfrontal-2011 - - Reflecting on Full Frontal 2011 - 2011-11-13T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - The third installment of Full Frontal, the JavaScript conference hosted each year in Brighton by <a href="http://leftlogic.com">LeftLogic</a>, 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 experience. - </p> -</div> -<figure><img src="/images/ph_excessive_enhancement.jpg" alt=""></figure> - -<!-- more --> - -<p> - 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 <a href="http://twitter.com/rem">Remy</a> 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 brains. -</p> -<p> - This all added to the sweat on my brow, and the shortness of my fingernails as my time on stage approached. -</p> -<p> - 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 'browser shizzle'. -</p> -<p> - 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 Web. -</p> -<p> - Everso slightly unfortunate, was the fact that almost every photo I've seen from my talk, features me standing in front of a giant sign saying "Sex Enhancements" (as you may have spotted above). I guess that's the price you pay for being a smart arse and/or channeling the chatter happening on Twitter! -</p> -<p> - The slides from my talk are available on <a href="http://speakerdeck.com/u/philhawksworth/p/excessive-enhancement">SpeakerDeck</a> -</p> -<p> - I was interested to hear what <a href="http://ashkenas.com/">Jeremy Ashkenas</a> had to say about CoffeeScript, as I had to admit to being a little hesitant to embrace it myself. In Jeremy'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'll give it a whirl. -</p> -<p> - Both <a href="http://marijnhaverbeke.nl/">Marijn Haverbeke</a> and <a href="">Rik Arends</a> 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 <a href="http://c9.io/" title="Cloud 9">Cloud 9 IDE</a>. This is evolving into a really compelling IDE 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 increasing. -</p> -<p> - I enjoyed every talk during the day, but the two which really entertained me and got me thinking most were <a href="http://www.glennjones.net/">Glenn Jones</a>, who demonstrated umpteen different examples of uses of emerging browser APIs, and <a href="http://www.aresluna.org/">Marcin Wichary</a> of Google who showed us a glimpse into the world of creating the Google Doodles we all love. -</p> -<p> - Glenn'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 <a href="http://glennjones.net/2011/11/beyond-the-page-fullfrontal-2011/">his blog</a>. -</p> -<p> - 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 <a href="http://www.google.com/pacman/">Pac Man</a> and <a href="http://www.aresluna.org/verne-ux">Jules Verne</a> 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 bugger! -</p> -<p> - Many reviews and blog posts of the day are popping up and many are nicely aggregated over on <a href="http://lanyrd.com/2011/full-frontal/writeups/">Lanyrd</a> -</p> -<p> - From the conversations I've had, Full Frontal is set to be popular again next year. Thankfully I've got a free ticket already in the bag as a reward for speaking this year (thanks again Remy!). Otherwise I'd certainly be monitoring the <a href="http://twitter.com/fullfrontalconf">@fullfrontalconf</a> twitter feed for news of when to grab a ticket next year before they get snapped up. -</p> - - - - - http://hawksworx.com/blog/excessive-enhancement-at-full-frontal - - Excessive Enhancement at Full Frontal - 2011-11-03T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - In a few days I will be speaking at <a href="http://2011.fullfrontal.com">Full Frontal</a> 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 developers. - </p> -</div> -<figure><img src="/images/full-frontal-conf.png" alt=""></figure> - -<!-- more --> - -<p> - I've attended Full Frontal each year so far and so I'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've managed to fight my way in and find myself on a list with some <a href="http://2011.full-frontal.org/schedule" title="FullFrontal Schedule 2011">awesome speakers</a>. -</p> -<p> - This is both nerve racking and genuinely exciting. -</p> -<p> - I'll be slightly running the risk of being the wet blanket of the conference as I'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 "ooh" and "ah" from the crowd. I'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 Web. -</p> -<p> - At least, that's the drum that I'm bringing to bang. -</p> -<p> - I'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 <a href="http://lanyrd.com/ccdfc" title="FullFrontal 2011 on Lanyrd">Lanyrd</a>. -</p> - - - - - http://hawksworx.com/blog/joining-rga-london - - Joining R/GA - 2011-11-02T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - While I was sad in my previous post to share that I was <a href="/blog/time-to-move-on-from-the-team" title="From the Hawksworx blog: Time to move on from The Team">leaving The Team</a>, I can now share with some excitement that I'll be moving on to join the considerable talent present at <a href="http://rga.com" title="R/GA">R/GA</a>. - </p> -</div> -<figure><img src="/images/rga.png" alt=""></figure> - -<!-- more --> - -<p> - As I mentioned before, the decision to leave was a difficult one, but the potential at R/GA provides a substantial pull and I can't wait to get stuck in. I'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/GA to push the boundaries of creativity and innovation in the work that they do for them. -</p> -<p> - 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'm hoping to apply many of the things I've learned along the way but do expect to be regularly surprised (and hopefully delighted) by fresh obstacles. -</p> -<p> - There is a buzz at R/GA 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 exciting. -</p> -<p> - I can't wait to be a part of it. -</p> - - - - - - - http://hawksworx.com/blog/time-to-move-on-from-the-team - - Time to move on from The Team - 2011-11-01T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - After a few great years at <a href="http://theteam.co.uk" title="The Team">The Team</a>, 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 case. - </p> -</div> -<figure><img src="/images/theteam-pub.jpg" alt=""></figure> - -<!-- more --> - -<p> - 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 bumps. -</p> -<p> - 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's work has steadily been improving and over the last couple of years the team has evolved into something really rather special. -</p> -<p> - During my time at The Team, I'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 <a href="http://osmosoft.com" title="Osmosoft">Osmosoft</a> 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. -</p> -<p> - I cherish heartfelt debate with smart people who disagree with me -</p> -<p> - During my time here, I've been incredibly lucky to work with some outrageous talent from all aspects of the web design and development fields. It'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's safe to say that I've made some great friends here as part of the experience. -</p> -<p> - I've also worked on the occasional stinker where I've done a less than stellar job and those projects yielded some of the biggest lessons for me. Tough, but true. -</p> -<p> - So, thanks for everything, you folks at The Team. You've been amazing and I'm sorry to be moving on. But now, a new challenge awaits. -</p> - - - - - http://hawksworx.com/blog/value-in-a-happy-hackday - - Value in a happy hack day - 2011-09-19T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - A few weeks ago at <a href="http://theteam.com">The Team</a>, inspired by the <a href="http://www.atlassian.com/" title="Atlassian - Software Development Tools and Collaboration Software">Atlassian</a> model of <a href="http://blogs.atlassian.com/news/2010/11/fedex_day_in_the_wild.html" title="FedEx Day in the wild - Atlassian News">FedEx days</a> 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 results. - </p> -</div> -<figure><img src="/images/scamp-python.jpg" alt=""></figure> - -<!-- more --> - - -<p> - The notion of creating <i>value</i> 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'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 <i>utilisation</i>, <i>opportunity cost</i> and <i>project resourcing</i>. -</p> -<p> - 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'd suggest that this is actually a vital activity in helping a development team to remain fulfilled, motivated, efficient and sharp. -</p> - -<p> - 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 NPR which involve wider disciplines and dubbed them <a href="http://www.niemanlab.org/2011/08/npr-tries-something-new-a-day-to-let-managers-step-away-and-developers-play/" title="NPR Serendipity days">Serendipity Days</a>. I rather like that. -</p> -<p> - 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 <a href="http://scampcat.com" title="Sampcat. Annotate and share your scamps and wireframes">Scamp Cat</a>. So named as a bit of a hat-tip to <a href="http://spritecow.com">Sprite Cow</a>, a little side project by <a href="http://jakearchibald.com">Jake Archibald</a> which we each had some fleeting involvement in, and also just because we needed a way to refer to this <i>thing</i>, 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 'customer'. -</p> -<p> - <b>Having a customer</b> 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 EA and Design departments. Building this thing would be of <i>value</i> to us right here at work. -</p> -<p> - 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 <a href="http://nvie.com/posts/a-successful-git-branching-model/" title="A successful Git branching model &raquo; nvie.com">Git Flow</a>, 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. Win! -</p> -<p> - We also started tuning our approach to provisioning our infrastructure using <a href="http://puppetlabs.com/" title="Puppet Labs: The Leading Open Source Data Center Automation Solution">Puppet</a> and normalising on virtualised development environments with <a href="http://vagrantup.com/" title="Vagrant">Vagrant</a>. 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 again! -</p> -<p> - 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 all. -</p> -<p> - But for those wanting to see an actual <i>thing</i> as an output from our day, <a href="http://scampcat.com" title="Sampcat. Annotate and share your scamps and wireframes">Scamp Cat</a> 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 "scamp" can be freely shared via a public URL. There are similar products out there already, but none quite ht the spot for us. -</p> -<p> - We've already got some great feedback and are planning several iterations to evolve the functionality. -</p> - - - - - http://hawksworx.com/blog/expectations-of-web-development-at-agencies - - Expectations of web development at agencies - 2011-09-09T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - 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 <i>just</i> an agency. Perhaps we're thought of us web development production lines who churn out web sites. That's not my view. - </p> -</div> -<figure><img src="/images/production-line.jpg" alt=""></figure> - -<!-- more --> - - -<p> - This isn't the first time that I'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 performance. -</p> -<p> - 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 entails. -</p> -<p> - 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't end with the branding or the design, but should, nay <i>must</i> extend through to the development and delivery of the 'product' on the web. Otherwise everything that came before delivery is for naught. -</p> -<p> - Where I work, we have gone to great lengths to instil robust software engineering practices because without them, frankly we'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 innovation. -</p> -<p> - 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'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 <a href="http://stevesouders.com/hpws/rules.php" title="High Performance Web Sites">care and attention</a>. This is huge (and common) missed opportunity to <a href="http://www.stevesouders.com/blog/2010/05/07/wpo-web-performance-optimization/" title="WPO &#8211; Web Performance Optimization | High Performance Web Sites">optimise where it really matters</a>. They exclaimed to us "oh, you treat JavaScript like a real, first-class language!". I'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 code. -</p> -<p> - 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'll often be creating a weaker user experience, and setting up a train-wreck for you to fix just around the corner. -</p> - - - - - - http://hawksworx.com/blog/social-media-did-not-cause-the-london-riots - - Social media did not cause the London riots - 2011-08-09T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - It seems to me that this is the time for some responsibility. In the face of the kind of <a href="http://www.bbc.co.uk/news/uk-england-london-14450248" title="BBC News - Further riots in London as violence spreads across England">civil unrest that we have witnessed</a> in the UK 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'm not just talking about the people turning to criminal acts, young and old, men and women, but also about, <em>specifically</em> about, the media. - </p> -</div> -<figure><img src="/images/london-cleanup.jpg" alt=""></figure> - -<!-- more --> - -<p> - It'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'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 facts. -</p> -<p> - 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 way. -</p> -<p> - But I'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 "<a href="http://wallblog.co.uk/files/2011/08/Suntwitterriots.jpg">Nail the Twitter rioters</a>" demonstrate an ignorance and a disregard for responsible journalism which is all too familiar. -</p> -<p> - I've noticed that a few people (on twitter, as it happens) are beginning to ask the important question of "why are these people rioting". Let'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 "they are a bunch of thugs". -</p> -<p> - I digress. The point I wanted to make is that these riots were not caused by the existence of social media. I watched the ITV news as it began demonising social media and casting it as that <em>thing that the hooded youths of today use to coordinate their shop lootings and happy-slappings</em>. 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. (ITV news went on to ask viewers to keep them in the loop via Twitter!) -</p> -<p> - 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 usage: -</p> -<ul> - <li>Raising awareness of countless charity and fundraising events with <a href="http://twitter.com/#!/search/justgiving" title="Mentions of JustGiving on Twitter">JustGiving via twitter</a></li> - <li>Spreading the awareness of official campaigns and charities such as <a href="http://twitter.com/#!/SavetheChildren" title="Save the Children on Twitter">Save the children</a></li> - <li><a href="http://twitter.com/#!/LAFD" title="LAFD on Twitter">Fire</a> <a href="http://twitter.com/#!/CALFIRESANDIEGO" title="CALFIRESANDIEGO on Twitter">departments</a> and <a href="http://www.wired.com/threatlevel/2007/10/firsthand-repor/" title="Firsthand Reports From California Wildfires Pour Through Twitter | Threat Level | Wired.com">individuals</a> in the US distributed updates to at risk communities during the California wild fires when other infrastructure failed</li> - <li> I also love this little idea that places some stock in people being basically decent. <a href="http://latimesblogs.latimes.com/technology/2011/08/starbucks-card-jonathan-stark.html" title="LA Times: Jonathan Stark wants you to use his Starbucks card">Jonathan Stark decided to share his Starbucks card</a> 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 <a href="http://jonathanstark.com/card/" title="Get a coffee, give a coffee - Jonathan's Card">his site</a> and <a href="http://twitter.com/#!/jonathanscard" title="@jonathanscard on Twitter">on twitter</a>, 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 cynical. </li> -</ul> -<p> - Indeed the overwhelming response from people coordinating on the likes of twitter to engage in an effort to <a href="http://wallblog.co.uk/2011/08/09/two-sides-to-social-networks-and-the-riots-sun-calls-to-nail-twitter-rioters-as-riotcleanup-trends/" title="Two sides to social networks: Sun calls to nail &lsquo;Twitter rioters&rsquo; as riotcleanup trends | The Wall Blog">clean up after the riot</a> should be an indication not only that there is a will and solidarity in the communities effected, but also that <a href="http://twitter.com/#%21/search?q=%23riotcleanup" title="#riotcleanup on Twitter">people are using</a> the tools available to them for good. -</p> -<p> - Let'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 us. -</p> - - - - - http://hawksworx.com/blog/getting-started-with-node-at-asyncjs - - Getting started with Node at AsyncJS - 2011-05-27T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Yesterday I had the pleasure of talking about <a href="http://nodejs.org">Node</a> at <a href="http://asyncjs.com/intro-nodejs/">AsyncJS</a><a></a>, a meetup of smart and motivated developers and tech enthusiasts in Brighton. - </p> -</div> -<figure><img src="/images/getting-started-with-node-at-asyncjs.jpg" alt=""></figure> - -<!-- more --> - -<p>Async, which is organised by <a href="http://twitter.com/premasagar">Premasagar Rose</a> of <a href="http://dharmafly.com">Dharmafly</a> fame meets every 2 weeks and is a regular haunt for members of Brighton's thriving technology community. My talk on Node is not the first on the topic at Async, which has already seen great sessions from <a href="http://asyncjs.com/nodejs/">Simon Willison</a> and <a href="http://asyncjs.com/express/">Alex Young</a>, but focused on getting started with Node.js and looked at some of the tools created by the Node community to help ease development.</p> -<p>The slides from my talk are available now on <a href="http://www.slideshare.net/philhawksworth/getting-started-with-developing-nodejs">Slideshare</a> or to download as a <a href="http://static.hawksworx.com/asyncjs-nodejs.pdf">PDF</a>. The complete <a href="http://static.hawksworx.com/asyncjs-nodejs.key">Keynote presentation</a> is available for download too, but weighs in at a hefty 182MB due to some animated screen-captures.</p> - - - - - http://hawksworx.com/blog/developing-a-side-project - - Developing a side project - 2011-05-09T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - 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 others. - </p> -</div> -<figure><img src="/images/include_beer.jpeg" alt=""></figure> - -<!-- more --> - -<p> - 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 overlooked.) - </p> -<p> - 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'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're all familiar with the maxim that ideas are cheap, and that the value lies in the execution. I'm a strong believer in that and indeed many of us are brimming with ideas for things that we'd like to make if only we had more time, money, development skills, design skills or what have you. -</p> -<p> - 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 "big ideas". Individually, we may not have the requisite skills to realise many of these fanciful ambitions. Together, we can take it on. -</p> -<p> - Our view was that a small, <a href="http://weavemadethis.com" title="Weave">carefully assembled group</a> 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 'make stuff'. -</p> -<p> - So that is what we are doing. We are just making things that we wish existed already. For now, it's just for fun. And boy, is it ever! -</p> -<p> - Our first project, which I promised, I'd return to, is very much in its infancy but starting to shape up nicely. We're entering an already crowded space, that of finding and reviewing pubs and bars, where we think we can do a better job. The UK, 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't think the experience of using them, or the quality of the data is good enough. -</p> -<p> - And so, we'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) things. -</p> -<p> - I'll be talking about this more as it progresses, but for now, I'm just loving getting my hands dirty with building something for the Web. I don't do as much hands on development these days as I used to, so it feels good. Working with <a href="http://djangoproject.com/">Django</a>, <a href="http://jquerymobile.com/">JQuerymobile</a>, <a href="http://docs.fabfile.org/">Fabric</a>, <a href="http://vagrantup.com/">Vagrant</a>, <a href="http://aws.amazon.com/">Amazon AWS</a>, <a href="http://www.pivotaltracker.com">PivotalTracker</a>, <a href="http://github.com">Github</a> and other things on our own terms, and to satisfy goals that we ourselves have set, is fun and exciting. -</p> -<p> - 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 target. -</p> - - - - - http://hawksworx.com/blog/the-next-generation-stack-is-nodejs-ready-to-go-mainstream - - The next generation stack. Is NodeJS ready to go mainstream? - 2010-09-10T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - I've been building things with web technologies professionally for a little more than 11 years now. In that time, I'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 NT servers with IIS and ASP. Later on I moved into using the LAMP stack, which after the initial shock to the system, was a revelation and I have never looked back. - </p> -</div> -<figure><img src="/images/the-next-generation-stack-is-nodejs-ready-to.png" alt=""></figure> - -<!-- more --> - - -<p>This combination of Linux, Apache, MySQL and PHP 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've seen a swing in the default technology stack from Windows over to LAMP and have become comfortable in the LAMP world with it's GUI free interfaces, consistent and repeatable operations through SSH and so on.</p> -<p>The stage is set though, I think, for a new stack to emerge. The amount of work taking place on <a href="http://nodejs.org" title="NodeJS">NodeJS</a>, 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 stuff.</p> -<p>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 <a href="http://github.com/visionmedia/ndistro/" title="nDistro">nDistro</a> distribution model) each publishing on its own port. We then proxy requests to those NodeJS servers through either <a href="http://http.apache.org">Apache</a> or <a href="http://nginx.net">Nginx</a>. This brings me to my point. A stack that I now commonly employ looks less like:</p> -<ul> - <li>Linux</li> - <li>Apache</li> - <li>mySQL</li> - <li>PHP</li> -</ul> -<p>and more like:</p> -<ul> - <li>Not Windows</li> - <li>Nginx</li> - <li>noSQL</li> - <li>NodeJs</li> -</ul> -<p>I'm not just trying to be antagonistic by stating "Not Windows". 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 OSX. Windows, less so. I'm going to be using this '4N' 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 common.</p> - - - - - - - - http://hawksworx.com/blog/hitched - - Hitched - 2010-07-27T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - After more than 14 wonderful years with my girlfriend, Verity, last weekend we finally tied the knot. - </p> -</div> -<figure><img src="/images/hitched-beam.jpeg" alt=""></figure> - -<!-- more --> - - -<p>It'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'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 highlights.</p> - -<p>Verity and I were married in the lovely little <a href="http://www.flickr.com/photos/psd/4804940489/in/set-72157624404129727/" title="St Leonard's on Flickr - Photo Sharing!">church</a> in Horringer near Bury St Edmunds before a reception at the <a href="http://www.ickworthwestwing.co.uk/" title="The West Wing at Ickworth">West Wing at Ickworth House</a>. I was surprised at how my nerves didn'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 begun.</p> - -<p>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'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 moment.</p> - -<p>Nothing, however, prepared me for the moment I saw Verity arrive at the church and make her way up the aisle towards me. Breathtaking.</p> - -<p>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. (...and I said I wouldn't gush!). We had memorable readings from Verity'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 I.</p> - -<figure><img alt="" src="/images/hitched-leaving.jpeg" /></figure> - -<p>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 <a href="http://www.flickr.com/photos/psd/4804975779/in/photostream/" title="Master of the Toast on Flickr">Toastmaster</a>, Colin. Colin really helped to keep things running roughly to schedule and looked like quite the bobby dazzler.</p> - -<p>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 <a href="http://www.icicletricycle.co.uk/" title="Icicle Tricycle">ice cream bike</a> 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 quickly.</p> - -<figure><img alt="" src="/images/hitched-groomsmen.jpeg" /></figure> - - -<p>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't find quite what we were looking for in the area and so widened the search a little. At the time of writing, we've only seen a few <a href="http://www.barriedownie.com/index.php/wedding-photography/verity-phils-wedding-at-ickworth-house-suffolk/" title="Verity &amp; Phil&rsquo;s wedding at Ickworth House Suffolk &raquo; wedding and portrait photographer London, Sussex, Surrey, Hampshire">sneaky peeks</a> at the photos, but the signs are really good. We couldn't have been happier with the friendly and talented <a href="http://www.barriedownie.com/" title="Barrie Downie photography">Barrie Downie</a> 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 us.</p> - -<p>While I'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 <a href="http://millsandbloom.com/" title="Mills and Bloom - Florists based in Diss, Norfolk, UK">Mills and Bloom</a>. Zoe was just fantastic and we'd eagerly recommend her. She seemed genuinely excited for us and about the details of the <a href="http://www.flickr.com/photos/psd/4805581012/in/set-72157624404129727/" title="Bouquet on Flickr">flowers</a> 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 Zoe!</p> - -<p>Castleton Brass, the <a href="http://www.icicletricycle.co.uk/" title="Icicle Tricycle">Icicle Tricycle</a> and the staff at Ickworth House were all wonderfully helpful and friendly.</p> - -<p>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. Awesome.</p> - -<p>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't get a warmer, more receptive audience than at your wedding and you can'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, legendary.</p> - -<p>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 <a href="http://www.clubsoulband.com/" title="Club Soul // London's hottest Funk / Soul / Jazz act for your event">Club Soul</a> who were absolutely amazing and packed the dance floor immediately and for the duration. Another hearty recommendation.</p> - -<figure><img alt="" src="/images/hitched-dancing.jpeg" /></figure> - -<p>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'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'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 <a href="http://www.artfullsplodgers.com/award-winning-creche.html" title="A totally stress free wedding with a creche from Artfull Splodgers">Artful Splodgers</a> 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 "over tired" 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 recommendation!</p> - -<p>All too soon, the night wound to an end and after saying some emotional goodbyes, we retired to the <a href="http://www.theangel.co.uk/" title="The Angel Hotel, Suffolk">Angel Hotel</a> 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 manage.</p> - -<figure><img alt="" src="/images/hitched-sunrise.jpeg" /></figure> - -<p>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' Abbey Gate excitedly recounting the day. I think that we'll be boring people with details, highlights and <a href="http://www.flickr.com/photos/tags/pvwed/" title="Flickr photos tagged 'pvwed'">photos</a> for a very, very long time to come.</p> - -<figure><img alt="" src="/images/hitched-pose.png" /></figure> - - - - - - - - - - - http://hawksworx.com/blog/nodejs-i-just-have-to-use-it-for-something - - Nodejs. I just have to use it for something - 2010-02-15T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - A little while ago, inspired by <a href="http://simonwillison.net/2009/Nov/23/node/">Simon Willison</a>'s demo of <a href="http://nodesjs.org">Nodejs</a> at the <a href="http://2009.full-frontal.org/">FullFrontal</a> conference, I felt the urge to make something, anything, using Nodejs. <a href="http://nodesjs.org">Nodejs</a> gives lightening fast, event driven IO with Javascript running server-side in the rather nippy <a href="http://code.google.com/p/v8/">V8</a> Javascript engine. Until <a href="http://nodesjs.org">Nodejs</a>, I hadn't seen much need to bring Javascript to the server other than for testing and as a bit of a novelty. <a href="http://nodesjs.org">Nodejs</a> changed all of that. - </p> -</div> -<figure><img src="/images/nodejs.png" alt=""></figure> - -<!-- more --> - - -<p> - Built by <a href="http://tinyclouds.org/">Ryah Dahl</a> 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 <a href="http://jquery.com">jQuery</a> will be familiar with the pattern of event handlers, callbacks and closures needed to build some really rather powerful things, quickly and easily with <a href="http://nodesjs.org">Nodejs</a>. For my part, I just wanted to make something to explore the ease in which <a href="http://nodesjs.org">Nodejs</a> could support comet-style long polling for some real-time, collaborative task. The Web is already getting flooded with examples of <a href="http://chat.nodejs.org/">chat rooms</a> and IRC servers built with <a href="http://nodesjs.org">Nodejs</a>, but I really wanted to make something that felt like a real web application, not an example. -</p> -<p> - 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 <a href="http://teafr.com">Teafr.com</a>, I piggybacked on the lists feature of <a href="http://twitter.com/philhawksworth/tea-buddies">Twitter</a> to allow people to create and manage their lists of potential tea-makers somewhere they are already comfortable. <a href="http://teafr.com">My app</a> 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 revealed. -</p> -<figure><img src="/images/teafr-tea-rotas-from-twitter-lists.jpg" /></figure> -<p> - I captured a couple of <a href="http://www.vimeo.com/8144420">videos</a> showing teafr.com doing its stuff, <a href="http://www.vimeo.com/8457609">one of them</a> 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. <a href="http://nodesjs.org">Nodejs</a> 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 HTTP, HTML, CSS and Javascript, it also runs pretty nicely on both my iPhone and Palm Pre. -</p> -<p> - 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'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'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 it. -</p> -<p> - I've been using <a href="http://www.dreamhost.com/r.cgi?381199">Dreamhost</a> for a while now and have to say that I'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 <a href="http://nodesjs.org">Nodejs</a>. The easiest and cheapest way that I found to host <a href="http://nodesjs.org">Nodejs</a> 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 <a href="http://www.linode.com/?r=afc3f1becba08eb0ab33f62818cc90f396979563">Linode</a> which is working out rather nicely for me, but equally, I could have plumped for a similar offering from <a href="http://www.slicehost.com/">Slicehost</a> or <a href="http://aws.amazon.com/">Amazon Web Services</a>. -</p> -<p> - I'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 <a href="http://nodesjs.org">Nodejs</a>, <a href="http://www.mongodb.org">MongoDB</a>, <a href="http://jquery.com">jQuery</a> and various other fun things which 'speak Javascript' that smart people on the Web keep on creating and selflessly sharing with the world for free. -</p> - - - - - - - - - http://hawksworx.com/blog/in-defense-of-ie6 - - In defense of IE6 - 2009-08-10T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - No really! Read that title again. I'm about to argue against placing so much blame for painful Web development at the door of Internet Explorer 6. I'm not going try and claim that IE6 isn't a huge pain in the arse of all good Web developers. Let's face it, Web developers <a href="http://twitter.com/#search?q=ie6" title="Twitter - search for IE6">love to bitch</a> about it, but I do think that it's time for some accountability. - </p> -</div> -<figure><img src="/images/defending-ie.jpg" alt=""></figure> - -<!-- more --> - - -<p> - The problem with IE6 is simple. It has poor support for <a href="http://www.webstandards.org/">Web standards</a>. It doesn't always correctly render valid HTML and CSS, and requires nudging, tweaking and finagling in order to display the content in the desired way. Its interpretation of Javascript and interactions with the DOM are also less than perfect. That's a pain, but does it really warrant such <a href="http://iedeathmarch.org/" title="IE Death March">massive hatred</a> from Web developers? As a Web developer, my first instinct would be to answer, 'well, yes'. The cost of developing for IE6 is <a href="http://ejohn.org/blog/the-browsers-of-2009/" title="John Resig - The Browsers of 2009">extraordinarily high</a>, even when compared to the benefit from its market share, because it is such a horrible and time consuming slog. -</p> -<p> - 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't this concept stretch to the browser too? Surely if IE6 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 <a href="http://www.microsoft.com/windows/internet-explorer/ie7/" title="Get Internet Explorer 7">IE7</a>, <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx" title="Internet Explorer 8: Home page">IE8</a>, <a href="http://www.mozilla.com/en-US/firefox" title="Firefox web browser | Faster, more secure, &amp; customizable">Firefox</a>, <a href="http://www.apple.com/safari/" title="Apple - Safari - Introducing Safari 4 - See the web in a whole new way">Safari</a>, <a href="http://www.opera.com/" title="Opera Browser | Faster &amp; safer Internet | Free Download">Opera</a>, <a href="http://www.google.com/chrome" title="Google Chrome - Download a new browser">Chrome</a> or something else. Let's be honest, it isn't hard to find a better browser than IE6 these days. But it isn'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 "The Internet" (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 IT department dictates. Often, this means IE6. Why is that? This is my beef. It's not that IE6 is <a href="http://iedeathmarch.org/category/things-younger-than-ie6/" title="Things Younger Than IE6 at IE Death March">out-dated</a> and <a href="http://iedeathmarch.org/category/things-you-cant-do-in-ie6/" title="Things You Can&rsquo;t Do In IE6 at IE Death March">substandard</a> (although it is), but that large organisations have needed to lock users in to using an approved Web browser. -</p> -<p> - Having worked in a few large organisations, I'm no stranger to that scenario, and it'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't future proof. As a result we have applications and systems which depend being viewed in IE6 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's little wonder that they force their employees to use IE6. -</p> -<p> - Remember that this isn't just the fault of IE6. There have been many poor browsers over the years, but thankfully, natural selection has let them disappear and allowed better browsers to take over. IE6 suffers from its own success. That is, it's market penetration. Combine that with bad habits from developers and you have a browser which despite being left behind by <a href="http://webaim.org/blog/user-agent-string-history/">evolution</a>, 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 peace. -</p> -<p> - Surely then, we Web developers have learned our lesson. We'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'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 <a href="http://www.quirksmode.org/js/support.html" title="Javascript - Object detection">object detection</a>, 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 IE8 can be <a href="http://www.microsoft.com/windows/internet-explorer/readiness/developers-new.aspx" title="Internet Explorer 8 Readiness Toolkit">set to render as if it were IE7</a>. With a meta tag to provide "Internet Explorer 7 Compatibility mode". -</p> -<p> - Why would this feature exist? Microsoft explain that it is so that developers can opt for "backwards compatibility with Internet Explorer 7 JavaScript and layout behavior". In other words, it exists to try and get around the fact that so many developers wrote code to satisfy the quirks of IE7 without a thinking about how their code would fail when the quality of the browser is improved (have better conformance with <a href="http://www.w3.org/" title="World Wide Web Consortium - Web Standards">W3C standards</a> for HTML and CSS). Microsoft didn't want people to be resistant to upgrading to IE8 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'm afraid I have to call "bull-shit" 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 them. -</p> -<p> - 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's time to make sure that we don't get into this situation ever again. So next time you are tempted to grumble about IE6, remember that you can help avoid a similar mess in future by developing with standards in mind. -</p> - - - - - http://hawksworx.com/blog/using-quicksilver-to-control-lastfm - - Using Quicksilver to control Last.fm - 2009-08-07T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - For a while, I've been using handy <a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver">Quicksilver</a> triggers to control iTunes. I like not needing to switch my attention from what I'm working on, in order to skip a track, pause the playback, set a rating or whatever. You can find out <a href="http://leafraker.com/2007/09/17/how-to-create-a-quicksilver-trigger/">how to create a trigger</a> from one of the many great Quicksilver tutorials out on the Web. - </p> -</div> -<figure><img src="/images/quicksilver_lastfm.jpg" alt=""></figure> - -<!-- more --> - -<p> - At the moment though, I find myself listening to <a href="http://last.fm" rel="org fn url">Last.fm</a> more and more, and have been looking for a similar way to control the Last.fm application. I couldn't find a plugin for Quicksilver to achieve this so I set about writing an Applescript which I could trigger with Quicksilver. I'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 application: -</p> - -<div class="highlight"><pre><code class="applescript"><span class="k">tell</span> <span class="nb">application</span> <span class="s2">&quot;Last.fm&quot;</span> <span class="k">to</span> <span class="nb">activate</span> -<span class="k">tell</span> <span class="nb">application</span> <span class="s2">&quot;System Events&quot;</span> - <span class="k">tell</span> <span class="nv">process</span> <span class="s2">&quot;Last.fm&quot;</span> - <span class="nv">click</span> <span class="na">menu</span> <span class="nb">item</span> <span class="s2">&quot;Skip&quot;</span> <span class="k">of</span> <span class="na">menu</span> <span class="s2">&quot;Controls&quot;</span> <span class="k">of</span> <span class="na">menu</span> <span class="nv">bar</span> <span class="mi">1</span> - <span class="k">end</span> <span class="k">tell</span> -<span class="k">end</span> <span class="k">tell</span></code></pre></div> - -<p> - 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 triggers. -</p> -<p> - 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't steal my attention, but it would be nice if I could get Applescript to execute the command without activating the application. I'd welcome suggestions from anyone with more Applescript fu than me. -</p> - - - - - http://hawksworx.com/blog/flash-v-web-behind-enemy-lines - - Flash v Web. Behind Enemy Lines - 2009-07-27T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - OK, I'm being over dramatic, but sometimes it does feel like I'm on a bit of a stealth mission. Pity that I forgot to bring any stealth! I've been working here at <a href="http://theteam.co.uk" rel="org url">The Team</a> 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'm a big advocate of using <a href="http://www.w3.org/" rel="org url">Open Web Technologies</a>. - </p> -</div> -<figure><img src="/images/flashvjs.png" alt=""></figure> - -<!-- more --> - -<p> - 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 <a href="http://theteam.co.uk/digital" rel="org url">digital</a> 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 problem. -</p> -<p> - 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't make it a Web site. (as I write this, I'm find myself hearing Wesley Snipes proclaiming: 'You can put a cat in the oven, but that don't make it a biscuit!' Perhaps I'll refrain from that level of <a href="http://en.wikiquote.org/wiki/White_Men_Can%27t_Jump">trash talking</a> 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 debates. -</p> -<p> - I was particularly chuffed to hear my colleague <a href="http://bruised-blood.livejournal.com/" rel="friend colleague met url">Stephen</a> playfully remark that I must be part of the "Anti Flash Mob". I've got news for you Steve. There are loads of us out here, and we're thinking of getting t-shirts! In truth I'm not anti-Flash. I'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 <a href="http://ted.com">TED</a> this year, <a href="http://www.w3.org/People/Berners-Lee/" rel="url">Tim Berners Lee</a> gave a <a href="http://www.ted.com/index.php/talks/tim_berners_lee_on_the_next_web.html">fascinating talk</a> where he touched on his vision of the future for The Web (which until HTML5 with its native <a href="http://dev.w3.org/html5/spec/Overview.html#video">video tag</a> comes along, you'll need Flash to watch online). That future was for an "Open Data Web" 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'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 <a href="http://microformats.org" rel="org url">Microformats</a>, and so on. -</p> -<p> - Usually during a conversation like this, someone will bang their fist and say "...but you can do that with Flash!", Well I'd be delighted to be proven wrong, so consider this a challenge. Show me. I'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'd love to see examples. The comments section below awaits your links. For the time being, I'll keep challenging any automatic choice of Flash over Web technologies on projects, but that's just common sense, right? Every technology choice should be justified. -</p> - - - - - - http://hawksworx.com/blog/moving-on-from-osmosoft - - Moving on from Osmosoft - 2009-04-23T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Last week was both sad and exciting for me. Exciting because I was gearing up to start my new job at <a href="http://theteam.co.uk">theTeam</a>, a London-based communications agency with a slightly silly name. Sad because it was my last week working at <a href="http://osmosoft.com">Osmosoft</a> (a company that created plenty of silly named things itself). - </p> -</div> -<figure><img src="/images/osmosoft.jpg" alt=""></figure> - -<!-- more --> - -<p> - I had been at Osmosoft since it grew from a <a href="http://jermolene.com/2007/05/29/i-for-one-welcome-my-new-bt-overlords/">one man band</a> into an open source innovations team at <a href="http://bt.com">BT</a>, 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 me. -</p> -<p> - 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 'View Source' experience to openness and data availability. I'm going to miss the raging debates and big opinions which regularly surfaced at Osmosoft. The people there are intelligent and articulate. -</p> -<p> - Osmonauts, I salute you! -</p> -<p> - But now I'm off to pastures new. <a href="http://theteam.co.uk">theTeam</a> has a young, but growing digital arm with an impressive client list. I'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 <a href="http://www.hawksworx.com/blog/unobtrusify-your-javascript">unobtrusive</a> 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'm looking forward to the challenge. -</p> -<p> - 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 <a href="http://upcoming.yahoo.com/event/2149675/">Open Source Show and Tell</a> revealed some common interests and enthusiasms. I'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 <a href="http://tiddlywiki.com">TiddlyWiki</a>. While I'll have to scale back my time on that, there is no reason for me to turn my back on it altogether. I'm keen to keep on contributing and building applications with TiddlyWiki. Besides, it's nice to bump into familiar friends in the <a href="irc://irc.freenode.net/#tiddlywiki">TiddlyWiki irc</a> room. -</p> -<p> - 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'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 use. -</p> -<p> - Thanks for everything Osmosoft. It's been a blast! -</p> - - - - - http://hawksworx.com/blog/leveraging-jquery-and-jquery-plugins-in-tiddlyWiki - - Leveraging jQuery and jQuery plugins in TiddlyWiki - 2009-03-13T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - The recent release of <a href="http://tiddlywiki.com/">TiddlyWiki v2.5</a> included something rather exciting for me: <a href="http://jquery.com">jQuery</a>, the popular Javascript library is now part of the TiddlyWiki core. - </p> -</div> -<figure><img src="/images/jquery-logo-large.jpg" alt=""></figure> - -<!-- more --> - -<p>This is exciting for a number of reasons.</p> -<ol> - <li>The TiddlyWiki core functions can now use jQuery to perform all manner of DOM inspection and DOM manipulation. We can refactor a ton of code to benefit from jQuery'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 maintain.</li> - <li>TiddlyWiki plugin developers will now be able to make use of jQuery in their plugins. That'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 developers.</li> - <li>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 'em on!</li> -</ol> -<p> - 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's take a look at an example. -</p> -<p> - <a href="http://fnd.lewcid.org/blog/" title="FND's Blag: Just Another Personal Wobsite">Fred</a>, my colleague at <a href="http://osmosoft.com/" title="osmosoft - open source applications from BT">Osmosoft</a> stumbled upon a plugin which creates a nice navigation structure from an HTML List element. The plugin has lots of <a href="http://www.ihwy.com/Labs/Demos/Current/jquery-listnav-plugin.aspx" title="ListNav plugin examples">examples</a> and <a href="http://www.ihwy.com/Labs/jquery-listnav-plugin.aspx" title="jQuery listnav plugin - Javascript list navigation control">documentation</a> and seemed like a good contender for bringing something useful into TiddlyWiki. -</p> -<p> - 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 use. -</p> -<figure><img alt="Plugin inclusion" src="/images/plugin_inclusion.jpg" /></figure> -<p> - With the jQuery plugin availble, we can use it to provide a snazzy UI for any UL or LI elements on the page. The Javascript syntax for that is nice and simple: -</p> - -``` js - // Turn the list element with an ID of 'myList' into a funky ListNav - $('#myList').listnav(); -``` - -<p> - 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's make a macro which turns the contents of a tiddler into a NavList like this: -</p> - - -<div class="highlight"><pre><code class="js"><span class="o">&gt;</span></code></pre></div> - - -<p> - 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 'ListNavPlugin' and once again tagged it with systemConfig so that it becomes code that TiddlyWiki knows to interpret. To start with, let's just create the macro and ensure that we can invoke it. -</p> - -<div class="highlight"><pre><code class="js"><span class="c1">// create macro object</span> - <span class="nx">config</span><span class="p">.</span><span class="nx">macros</span><span class="p">.</span><span class="nx">listnav</span> <span class="o">=</span> <span class="p">{</span> - <span class="c1">// Add a handler function to be invoked by &gt;</span> - <span class="nx">handler</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">place</span><span class="p">,</span> <span class="nx">macroName</span><span class="p">,</span> <span class="nx">params</span><span class="p">,</span> <span class="nx">wikifier</span><span class="p">,</span> <span class="nx">paramString</span><span class="p">,</span> <span class="nx">tiddler</span><span class="p">)</span> <span class="p">{</span> - <span class="c1">// do some magic...</span> - <span class="nx">alert</span><span class="p">(</span><span class="s2">&quot;I&#39;m gonna make a funky listnav!&quot;</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">};</span></code></pre></div> - -<p> - To see it working, I created two more new tiddlers. MyFruityList holds a list of items, and ExampleListNav holds a call to the new macro. -</p> -<figure><img alt="List amnd example call" src="/images/list-and-example-call.jpg" /></figure> -<p> - 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 this: -</p> -<figure><img alt="" src="/images/macro-called-1.jpg" /></figure> -<p> - All good, but not exciting yet. Let's flesh out our TiddlyWiki macro a bit. We'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 HTML elements (like createTiddlyElement), we can now use <a href="http://docs.jquery.com/Manipulation">jQuery's helper functions</a> to append elements to the document. -</p> - -<div class="highlight"><pre><code class="js"><span class="c1">// create macro object</span> - <span class="nx">config</span><span class="p">.</span><span class="nx">macros</span><span class="p">.</span><span class="nx">listnav</span> <span class="o">=</span> <span class="p">{</span> - - <span class="c1">// Add a handler function to be invoked by &gt;</span> - <span class="nx">handler</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">place</span><span class="p">,</span> <span class="nx">macroName</span><span class="p">,</span> <span class="nx">params</span><span class="p">,</span> <span class="nx">wikifier</span><span class="p">,</span> <span class="nx">paramString</span><span class="p">,</span> <span class="nx">tiddler</span><span class="p">)</span> <span class="p">{</span> - - <span class="c1">// target tiddler passed in as macro parameter</span> - <span class="kd">var</span> <span class="nx">title</span> <span class="o">=</span> <span class="nx">params</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> - - <span class="c1">// read list items from tiddler contents</span> - <span class="kd">var</span> <span class="nx">text</span> <span class="o">=</span> <span class="nx">store</span><span class="p">.</span><span class="nx">getTiddlerText</span><span class="p">(</span><span class="nx">title</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">text</span><span class="p">)</span> <span class="p">{</span> - - <span class="c1">// generate list</span> - <span class="kd">var</span> <span class="nx">items</span> <span class="o">=</span> <span class="nx">text</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">&#39;\n&#39;</span><span class="p">);</span> - <span class="kd">var</span> <span class="nx">list</span> <span class="o">=</span> <span class="nx">jQuery</span><span class="p">(</span><span class="s1">&#39;&lt;ul&gt;&lt;/ul&gt;&#39;</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;listnav&#39;</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">place</span><span class="p">);</span> - <span class="nx">jQuery</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">items</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="nx">itm</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">jQuery</span><span class="p">(</span><span class="s1">&#39;&lt;li&gt;&#39;</span><span class="p">).</span><span class="nx">text</span><span class="p">(</span><span class="nx">itm</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">list</span><span class="p">);</span> - <span class="p">});</span> - - <span class="p">}</span> - <span class="p">}</span> - <span class="p">};</span></code></pre></div> - -<p> - Now we're getting somewhere. We've grabbed each line from our MyFruityList tiddler and used jQuery to turn them into an unordered list. -</p> -<figure><img alt="" src="/images/example-list-created.jpg" /></figure> -<p> - We can now call the jQuery plugin to render our list as a NavList. The plugin requires a little extra HTML so we can create that, and then call the listnav plugin. -</p> - - -<div class="highlight"><pre><code class="js"><span class="c1">// create macro object</span> -<span class="nx">config</span><span class="p">.</span><span class="nx">macros</span><span class="p">.</span><span class="nx">listnav</span> <span class="o">=</span> <span class="p">{</span> - - <span class="c1">// Add a handler function to be invoked by &gt;</span> - <span class="nx">handler</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">place</span><span class="p">,</span> <span class="nx">macroName</span><span class="p">,</span> <span class="nx">params</span><span class="p">,</span> <span class="nx">wikifier</span><span class="p">,</span> <span class="nx">paramString</span><span class="p">,</span> <span class="nx">tiddler</span><span class="p">)</span> <span class="p">{</span> - - <span class="c1">// target tiddler passed in as macro parameter</span> - <span class="kd">var</span> <span class="nx">title</span> <span class="o">=</span> <span class="nx">params</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> - - <span class="c1">// read list items from tiddler contents</span> - <span class="kd">var</span> <span class="nx">text</span> <span class="o">=</span> <span class="nx">store</span><span class="p">.</span><span class="nx">getTiddlerText</span><span class="p">(</span><span class="nx">title</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">text</span><span class="p">)</span> <span class="p">{</span> - <span class="c1">// generate nav bar</span> - <span class="nx">jQuery</span><span class="p">(</span><span class="s1">&#39;&lt;p /&gt;&#39;</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;listnav-nav&#39;</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">place</span><span class="p">);</span> - - <span class="c1">// generate list</span> - <span class="kd">var</span> <span class="nx">items</span> <span class="o">=</span> <span class="nx">text</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">&#39;\n&#39;</span><span class="p">);</span> - <span class="kd">var</span> <span class="nx">list</span> <span class="o">=</span> <span class="nx">jQuery</span><span class="p">(</span><span class="s1">&#39;&lt;ul&gt;&lt;/ul&gt;&#39;</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;listnav&#39;</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">place</span><span class="p">);</span> - <span class="nx">jQuery</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">items</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="nx">itm</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">jQuery</span><span class="p">(</span><span class="s1">&#39;&lt;/li&gt;&lt;li&gt;&#39;</span><span class="p">).</span><span class="nx">text</span><span class="p">(</span><span class="nx">itm</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">list</span><span class="p">);</span> - <span class="p">});</span> - - <span class="c1">// apply listnav</span> - <span class="nx">list</span><span class="p">.</span><span class="nx">listnav</span><span class="p">();</span> - <span class="p">}</span> - <span class="p">}</span> -<span class="p">};</span></code></pre></div> - - - - -<p> - 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 CSS to style our new navlist. Easy enough, let's use our TiddlyWiki plugin to create a sylesheet for our new HTML by adding this: -</p> - -<div class="highlight"><pre><code class="js"><span class="c1">// add default styles (adapted from http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)</span> - <span class="nx">config</span><span class="p">.</span><span class="nx">shadowTiddlers</span><span class="p">.</span><span class="nx">StyleSheetListNav</span> <span class="o">=</span> <span class="s1">&#39; \n&#39;</span> <span class="o">+</span> - <span class="s1">&#39;#listnav-nav { margin: 20px 0 10px; }\n&#39;</span> <span class="o">+</span> - <span class="s1">&#39;.ln-letters { overflow: hidden; }\n&#39;</span> <span class="o">+</span> - <span class="s1">&#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&#39;</span><span class="o">+</span> - <span class="s1">&#39;.ln-letters a.ln-last { border-right: 1px solid #eee; }\n&#39;</span> <span class="o">+</span> - <span class="s1">&#39;.ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }\n&#39;</span> <span class="o">+</span> - <span class="s1">&#39;.ln-letters a.ln-disabled { color: #ccc; }\n&#39;</span> <span class="o">+</span> - <span class="s1">&#39;.ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }&#39;</span><span class="p">;</span> - <span class="nx">store</span><span class="p">.</span><span class="nx">addNotification</span><span class="p">(</span><span class="s1">&#39;StyleSheetListNav&#39;</span><span class="p">,</span> <span class="nx">refreshStyles</span><span class="p">);</span></code></pre></div> - -<p> - And we'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'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 <a href="http://docs.jquery.com/Plugins/Authoring#Custom_Alias_in_plugin_code" title="Plugins/Authoring - jQuery JavaScript Library">jQuery documentation</a> site). Then we can use whatever shortcut for jQuery in our code that we like. The final code looks like this: -</p> - -<div class="highlight"><pre><code class="js"><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// set up alias</span> - - <span class="c1">// create macro object</span> - <span class="nx">config</span><span class="p">.</span><span class="nx">macros</span><span class="p">.</span><span class="nx">listnav</span> <span class="o">=</span> <span class="p">{</span> - - <span class="c1">// Add a handler function to be invoked by &gt;;</span> - <span class="nx">handler</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">place</span><span class="p">,</span> <span class="nx">macroName</span><span class="p">,</span> <span class="nx">params</span><span class="p">,</span> <span class="nx">wikifier</span><span class="p">,</span> <span class="nx">paramString</span><span class="p">,</span> <span class="nx">tiddler</span><span class="p">)</span> <span class="p">{</span> - - <span class="c1">// target tiddler passed in as macro parameter</span> - <span class="kd">var</span> <span class="nx">title</span> <span class="o">=</span> <span class="nx">params</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> - - <span class="c1">// read list items from tiddler contents</span> - <span class="kd">var</span> <span class="nx">text</span> <span class="o">=</span> <span class="nx">store</span><span class="p">.</span><span class="nx">getTiddlerText</span><span class="p">(</span><span class="nx">title</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">text</span><span class="p">)</span> <span class="p">{</span> - - <span class="c1">// generate nav bar</span> - <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;&lt;p /&gt;&#39;</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;listnav-nav&#39;</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">place</span><span class="p">);</span> - - <span class="c1">// generate list</span> - <span class="kd">var</span> <span class="nx">items</span> <span class="o">=</span> <span class="nx">text</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">&#39;\n&#39;</span><span class="p">);</span> - <span class="kd">var</span> <span class="nx">list</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;&lt;ul&gt;&lt;/ul&gt;&#39;</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;listnav&#39;</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">place</span><span class="p">);</span> - <span class="nx">$</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">items</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="nx">itm</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;&lt;/li&gt;&lt;li&gt;&#39;</span><span class="p">).</span><span class="nx">text</span><span class="p">(</span><span class="nx">itm</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="nx">list</span><span class="p">);</span> - <span class="p">});</span> - - <span class="c1">// apply listnav</span> - <span class="nx">list</span><span class="p">.</span><span class="nx">listnav</span><span class="p">();</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="p">};</span> - - <span class="c1">// add default styles (adapted from &lt;a href=&quot;http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)&quot;&gt;http://www.ihwy.com/labs/downloads/jquery-listnav/2.0/listnav.css)&lt;/a&gt;</span> - <span class="nx">config</span><span class="p">.</span><span class="nx">shadowTiddlers</span><span class="p">.</span><span class="nx">StyleSheetListNav</span> <span class="o">=</span> <span class="s2">&quot;\n&quot;</span> <span class="o">+</span> - <span class="s2">&quot;#listnav-nav { margin: 20px 0 10px; }\n&quot;</span> <span class="o">+</span> - <span class="s2">&quot;.ln-letters { overflow: hidden; }\n&quot;</span> <span class="o">+</span> - <span class="s2">&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&quot;</span><span class="o">+</span> - <span class="s2">&quot;.ln-letters a.ln-last { border-right: 1px solid #eee; }\n&quot;</span> <span class="o">+</span> - <span class="s2">&quot;.ln-letters a:hover, .ln-letters a.ln-selected { background-color: #eaeaea; }\n&quot;</span> <span class="o">+</span> - <span class="s2">&quot;.ln-letters a.ln-disabled { color: #ccc; }\n&quot;</span> <span class="o">+</span> - <span class="s2">&quot;.ln-letter-count { text-align: center; font-size: 0.8em; line-height: 1; margin-bottom: 3px; color: #336699; }&quot;</span><span class="p">;</span> - <span class="nx">store</span><span class="p">.</span><span class="nx">addNotification</span><span class="p">(</span><span class="s2">&quot;StyleSheetListNav&quot;</span><span class="p">,</span> <span class="nx">refreshStyles</span><span class="p">);</span> - - <span class="p">})(</span><span class="nx">jQuery</span><span class="p">);</span></code></pre></div> - -<p> - You can explore the finished example in a <a href="http://static.hawksworx.com/listnavplugin.html" title="ListNavPlugin example TiddlyWiki"> TiddlyWiki</a>. -</p> - - - - - http://hawksworx.com/blog/mashing-up-flickr-in-the-client-with-jquery - - Mashing up flickr in the client with jQuery - 2009-02-15T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Recently I saw Tim Stevens <a href="http://twitter.com/san1t1/status/1193906661">post on Twitter</a> about a slide show he had built using his <a href="http://www.liveloom.com/">Liveloom</a> application. His slide show grabs some photos from Flickr tagged with 'Osmosoft' and then renders them with all manner of visual effects using Flex. While the visual effects available via Tim's app are impressive, I'm a big advocate of open web standards and enjoy making things from HTML and Javascript, rather than using tools like Flex. - </p> -</div> -<figure><img src="/images/polaroiderizer-a-slideshow-from-your-flickr-tags.jpg" alt=""></figure> - -<!-- more --> - -<p> - My first encounter with the slide show made by Liveloom was on an iPhone where it couldn'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's not pretend, that there aren'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'm forever going on about how good jQuery is at manipulating the DOM, so this seemed like a good chance to demonstrate that. I shared the result my efforts as the 'Poloaroiderizer' and after getting some great feedback, promoted it to its very own domain. -</p> -<p> - Check it out over at <a href="http://polaroiderizer.com">polaroiderizer.com</a> As it turns out, the task was incredibly simple and took just a few hours one evening. The interface is rendered with HTML and CSS. As such, it will work in any modern browser. I used jQuery to request <a href="http://ajaxian.com/archives/jsonp-json-with-padding">JSONP</a> from the Flickr API. JSPONP gets you around the cross domain scripting restrictions and delivers JSON 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 CSS and DOM manipulation, made simple by <a href="http://docs.jquery.com/Effects/animate">jQuery's animation functions</a>. The display needs Javascript to render, so without it Polaroiderizer is a bit toothless, but that doesn't mean we can forget about those without Javascript. If you submit a flickr tag while you don't have Javascript capabilities, the form will submit your tag to the standard flickr interface and you'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 <a href="http://unobtrusify.com">Unobtrusify</a>. -</p> -<p> - 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 <a href="http://softwareas.com/fun-with-fragment-identifiers">Michael Mahemoff explained recently</a>. 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 URI. Here are a few: -</p> -<ul> - <li><a href="http://polaroiderizer.com/#PhilHawksworth">http://polaroiderizer.com/#PhilHawksworth</a></li> - <li><a href="http://polaroiderizer.com/#TheWebIsAgreement">http://polaroiderizer.com/#TheWebIsAgreement</a></li> - <li><a href="http://polaroiderizer.com/#TED2009">http://polaroiderizer.com/#TED2009</a></li> -</ul> - - - - - - - http://hawksworx.com/blog/unobtrusify-your-javascript - - Unobtrusify your Javascript - 2009-01-05T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Recently <a href="http://jaybyjayfresh.com" title="jaybyjayfresh">Jon Lister</a>, a colleague of mine at <a href="http://www.osmosoft.com">Osmosoft</a> showed me a website made by his friend <a href="http://joshuabradley.co.uk/" title="Joshua Bradley">Joshua Bradley</a>. The site, used some of the Javscript code from <a href="http://tiddlywiki.com" title="TiddlyWiki">TiddlyWiki</a>'s animation engine to create some nice visual effects. I loved the design, but could see some room for improvement in the implementation. I'm a big advocate of <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript" title="Unobtrusive JavaScript">Unobtrusive Javascript</a> and <a href="http://en.wikipedia.org/wiki/Progressive_enhancement" title="Progressive enhancement">Progressive Enhancement</a> 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 <a href="http://jquery.com" title="jQuery">jQuery</a> for the behaviors. - </p> -</div> -<figure><img src="/images/unobtrusive.jpg" alt=""></figure> - -<!-- more --> - -<p> - The result has been published as <a href="http://unobtrusify.com" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement">Unobtrusify.com</a>. -</p> - -<h3>The aim.</h3> -<ul> - <li>Create a similar effect to that on Josh's site, but make sure that the page is readable without Javascript.</li> - <li>Use images to make the headings look snazzy, but make sure that they are not required in order for the content to make sense.</li> - <li>Use only unobtrusive Javascript and keep the HTML as clean as possible.</li> - <li>Reduce the number of http requests required to as few as possible in order to improve performance.</li> -</ul> - -<h4>The approach.</h4> -<p> - 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 expanded. -</p> -<p> - Then I used the simplest HTML markup I could to logically represent the content with its various headings. <a href="http://unobtrusify.com/justhtml.html" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement (HTML only)">This is how the page would look</a> to text-only browsers search engines, web-crawlers and screen-readers. -</p> -<p> - I then used a well-known CSS 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 <code>overflow:hidden</code> and then scoot the text out of the way with <code>text-indent</code>. Now that the way is clear, you can display an image with <code>background-image</code>. Be sure to specify the dimensions of your desired image as the <code>background-image</code> property will not resize your element to the correct size automatically. The CSS would look something like this: -</p> - -<div class="highlight"><pre><code class="css"><span class="nf">#myHeading</span> <span class="p">{</span> - <span class="k">text-indent</span><span class="o">:</span> <span class="m">-9999px</span><span class="p">;</span> - <span class="k">overflow</span><span class="o">:</span> <span class="k">hidden</span><span class="p">;</span> - <span class="k">background-image</span><span class="o">:</span> <span class="sx">url(myImage.gif)</span><span class="p">;</span> - <span class="k">width</span><span class="o">:</span> <span class="m">380px</span><span class="p">;</span> - <span class="k">height</span><span class="o">:</span> <span class="m">123px</span><span class="p">;</span> -<span class="p">}</span></code></pre></div> - -<p> - 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 HTTP 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 HTTP requests so when it comes to performance, the fewer the better. This method cuts out 11 HTTP 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 bonus. -</p> -<p> - In order to use this 'image sprite' for each and every heading, I just needed to specify the <code>background-position </code>for each one. Some attributes would be common to each one so I could save some code like this: -</p> - -<div class="highlight"><pre><code class="css"><span class="nt">h1</span> <span class="p">{</span> - <span class="k">text-indent</span><span class="o">:</span> <span class="m">-9999px</span><span class="p">;</span> - <span class="k">overflow</span><span class="o">:</span> <span class="k">hidden</span><span class="p">;</span> - <span class="k">background-image</span><span class="o">:</span> <span class="sx">url(images/unobtrusive_sprite.gif)</span><span class="p">;</span> - <span class="k">width</span><span class="o">:</span> <span class="m">380px</span><span class="p">;</span> -<span class="p">}</span> - -<span class="nt">h1</span><span class="nf">#uj</span> <span class="p">{</span> - <span class="k">background-position</span><span class="o">:</span> <span class="m">0</span> <span class="m">0</span><span class="p">;</span> - <span class="k">height</span><span class="o">:</span> <span class="m">123px</span><span class="p">;</span> -<span class="p">}</span> - -<span class="nt">h1</span><span class="nf">#cmh</span> <span class="p">{</span> - <span class="k">background-position</span><span class="o">:</span> <span class="m">0</span> <span class="m">-123px</span><span class="p">;</span> - <span class="k">height</span><span class="o">:</span> <span class="m">150px</span><span class="p">;</span> -<span class="p">}</span> -<span class="o">...</span></code></pre></div> - -<p> - At this point our <a href="http://unobtrusify.com/withcss.html" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement (with CSS)">page looks like this</a>. 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 <a href="http://en.wikipedia.org/wiki/Progressive_enhancement" title="Progressive enhancement">Progressive Enhancement</a>. We have a perfectly serviceable web page (albeit a simple one) which we can now enhance for those with Javascript enabled. -</p> -<p> - 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 this: -</p> - -<div class="highlight"><pre><code class="js"><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#wrapper &gt; div&#39;</span><span class="p">).</span><span class="nx">hide</span><span class="p">();</span></code></pre></div> - - -<p> - This hides all of the div elements which are a direct descendent of the element with an ID of wrapper. (my chosen HTML structure). -</p> -<p> - 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 this: -</p> -<div class="highlight"><pre><code class="js"><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#wrapper h1&#39;</span><span class="p">).</span><span class="nx">addClass</span><span class="p">(</span><span class="s1">&#39;clickable&#39;</span><span class="p">);</span></code></pre></div> - - -<p> - A CSS class of 'clickable' specifies the cursor with <code>cursor: pointer;</code> -</p> -<p> - 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 available. -</p> - -<figure><img alt="" src="/images/unobtrusifycom.jpg" /> </figure> - -<p> - I also use an additional trick to prevent a flash of unstyled content or FOUC (gratifyingly pronounced 'FOOOOOOK' by <a href="http://hicksdesign.co.uk/" title="hicksdesign: design for print and new-fangled media">John Hicks</a>) while the Javascript is being downloaded. This trick is <a href="http://www.learningjquery.com/2008/10/1-awesome-way-to-avoid-the-not-so-excellent-flash-of-amazing-unstyled-content" title="1 (Awesome) Way To Avoid the (Not So Excellent) Flash of (Amazing) Unstyled Content &raquo; Learning jQuery - Tips, Techniques, Tutorials">very well explained</a> by <a href="http://www.englishrules.com/" title="English Rules">Karl Swedberg</a> on the excellent <a href="http://www.learningjquery.com/" title="Learning jQuery - Tips, Techniques, Tutorials">learningjquery.com</a> site. -</p> -<p> - For a better picture of exactly what is going on, why not swing by <a href="http://Unobtrusify.com" title="Unobtrusify.com - Unobtrusive Javascript for Progressive Enhancement">Unobtrusify.com</a> 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 dirty! -</p> - - - - - - - http://hawksworx.com/blog/enthusiasm-and-good-food-at-tiddlyparis - - Enthusiasm and Good Food at TiddlyParis - 2008-08-27T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Yesterday I was fortunate to be able to make the quick trip over to Paris to attend a meeting of <a href="http://tiddlywiki.com" title="TiddlyWiki - a reusable non-linear personal web notebook">TiddlyWiki</a> enthusiasts at <a href="http://upcoming.yahoo.com/event/1028826/" title="TiddlyParis (TiddlyWiki get together) at Culture Biere (Tuesday August 26, 2008) - Upcoming">TiddlyParis</a>. Arranged by long time TiddlyWiki community member and <a href="http://unamesa.org">Una Mesa</a> stalwart <a href="http://lewcid.org">Saq Imtiaz</a>, 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 time. - </p> -</div> -<figure><img src="http://farm4.static.flickr.com/3131/2803239794_6a48afbdc3.jpg" alt=""></figure> - -<!-- more --> - - -<p>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 better.</p> - -<p>The spectrum of TiddlyWiki experience was pleasingly broad.</p> - -<p>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 <a href="http://getteamtasks.com">TeamTasks</a> 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 them.</p> - -<p>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 PIM on his 4 year old tablet PC. The file was well over 3MB 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'll need to speak French though as he had also carried out extensive translation.</p> - -<figure><img alt="" src="http://farm4.static.flickr.com/3013/2802391393_d939f28c9a.jpg" /> </figure> - -<p>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 animations!)</p> - -<p>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 <a href="http://tiddlywikicp.dachary.org/">TiddlyWiki_CP</a> 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 TiddlyWikis.</p> - -<figure><img alt="" src="http://farm4.static.flickr.com/3209/2802391055_ca4fe53d4e.jpg" /> </figure> - - -<p>I was very keen to meet BidiX who has quietly been producing great TiddlyWiki assets for some time. Recent work includes <a href="http://itw.bidix.info/">iTW</a>, the best iPhone TiddlyWiki that I know of. The <a href="http://itw.bidix.info/tiddlyparis/">TiddlyParis edition</a> 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 <a href="http://tiddlyhome.bidix.info">TiddlyHome</a>, a lovely and seemingly simple hosted TiddlyWiki resource which he recently deployed to Google App Engine for its <a href="http://th2.bidix.info/">next release</a> (which we got to play with, but he insists isn't quite ready for prime time yet).</p> - -<p>For my part I spoke about <a href="http://getteamtasks.com">TeamTasks</a>, which I was happy to learn was being used to some degree by several people around the table. I also answered questions about <a href="http://bt.com">BTs</a> interest in TiddlyWiki and motives for being involved in such a project and community. I'll not go over that again here, as it has already been well articulated by several of my colleagues on <a href="http://jermolene.com/2008/08/13/what-is-the-point-of-osmosoft/">their</a> <a href="http://philwhitehouse.blogspot.com/2008/01/managing-open-source-projects.html">blogs</a>.</p> - -<p>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 'j'. Marvelous!) <a href="/blog/announcing-jigglywiki-a-tiddlywiki-experiment-with-jquery">JigglyWiki deserves a blog post of its own</a>. For now, through, let'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 approach. </p> - -<p>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'm sure I will be discussing more in a later post.</p> - -<p>My thanks go out to all of the folks I encountered at TiddlyParis. 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's worth, my French stretched far enough for me to order my meal (which was bloomin' great) and a few drinks without totally shaming myself. Big thanks also to Saq Imtiaz for putting it all together. When's the next one?!</p> - -<p>A bient&ocirc;to!</p> - - - - - - http://hawksworx.com/blog/announcing-jigglywiki-a-tiddlywiki-experiment - - Announcing JigglyWiki. A TiddlyWiki experiment with jQuery - 2008-08-27T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - 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't like the idea of relying on someone else's code which I couldn't easily inspect. Secondly, at the time there weren't really any libraries. Then there were a few, but they were all, well, to be blunt, a bit pants. - </p> -</div> -<figure><img src="/images/jigglywiki.jpg" alt=""></figure> - -<!-- more --> - - -<p> - That all changed for me when <a href="http://jquery.com">jQuery</a> came along. <a href="http://jquery.com">jQuery</a> is a lightweight, elegant but powerful Javascript library originally developed by <a href="http://ejohn.org">John Resig</a>. <a href="http://jquery.com">jQuery</a> provides fast and efficient interrogation and manipulation of the DOM and borrows conventions from CSS and <a>XPATH</a> to provide concise and expressive queries to be constructed. It's worth checking out if you haven't already. <a href="http://tiddlyWiki.com">TiddlyWiki</a> has been around since before the existence of Javascript libraries and long before <a href="http://jquery.com">jQuery</a> 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 TiddlyWiki. -</p> -<p> - Recently I have been longing to experiment with replacing a lot of the TiddlyWiki core with code built to take advantage of <a href="http://jquery.com">jQuery</a>. 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 <a href="http://jquery.com">jQuery</a> at its core. I settled on a number of objectives: -</p> -<ol> - <li>To use <a href="http://jquery.com">jQuery</a> to provide the core TiddlyWiki functions.</li> - <li>To make the code modular such that the core could be very small and additional functionality could easily be included via bespoke <a href="http://jquery.com">jQuery</a> plugins.</li> - <li>To use <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">unobtrusive Javascript</a></li> - <li>For the document to be sensibly parsed by screen readers and web crawlers.</li> - <li>To allow navigation of the document even without Javascript</li> - <li>To use HTML and CSS which is valid according to the <a href="http://www.w3.org/">W3C</a></li> - <li>To conform to the TiddlyWiki naming convention and adopt a suitably ridiculous working title for the project</li> -</ol> -<p> - 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 groups! -</p> -<p> - 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 CSS or Javascript are not available. Below are a few different build which demonstrate those scenarios. -</p> -<ol> - <li><a href="http://static.hawksworx.com/playground/jigglywiki/html_only.html">Just the HTML</a>. I've not included CSS or any of the Javascript here. The data store is visible and you can navigate the document via the tiddler links.</li> - <li><a href="http://static.hawksworx.com/playground/jigglywiki/html_css.html">The HTML and CSS</a>. 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 in.</li> - <li><a href="http://static.hawksworx.com/playground/jigglywiki/html_css_js.html">HTML, CSS and Javascript</a>. Now the data store is hidden and the default content is displayed with additional, Javascript dependent functionality included.</li> -</ol> -<p> - I'd love to get comments on this approach. I'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'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 <a href="http://svn.tiddlywiki.org/Trunk/contributors/PhilHawksworth/experimental/jigglywiki/proto/">TiddlyWiki subversion repository</a> More to come! -</p> - - - - - http://hawksworx.com/blog/get-your-task-management-wiki - - Get your Task Management wiki - 2008-07-16T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - After a bit of a hiatus, I've recently been concentrating on developing my pet project, <a href="http://getteamtasks.com" title="getteamtasks - get your flexible task management wiki here.">teamtasks</a> again. Teamtasks is a simple application built using Tiddlywik. - </p> -</div> -<figure><img src="http://farm4.static.flickr.com/3182/2674867706_0397fca6e0.jpg" alt=""></figure> - -<!-- more --> - -<p> - 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 <a href="http://getteamtasks.com">teamtasks</a> has had to sit patiently in the corner and wait for me to get back to working on it. -</p> -<p> - Rather gratifyingly, quite a few people had seen the early work on <a href="http://getteamtasks.com">teamtasks</a> and expressed interest in using it for all manor of purposes. The attention made me realise that it was time to promote <a href="http://getteamtasks.com">teamtasks</a> from its place in my playground (version 0.3 can <a href="http://static.hawksworx.com/playground/teamtasks/index.html">still be found there</a> for those keen on glancing in the rear view mirror) to the big time! Or at least, a place of its own. And so <a href="http://getteamtasks.com">getteamtasks.com</a> was born. From there you can download the latest version (v0.4 at time of writing) and configure it to fit your task management habits. -</p> -<p> - This is an open source project and I'm doing my best to resist the urge to tinker with it until I think that it's perfect before letting it out into the wild, so you may find things about teamtasks that don't work perfectly or you just don't like. If that's the case, then please let me know, or better yet, fix it and then show me. I'm living by the old "Release early. Release often" mantra here and welcome contributions, in the form of suggestions, bug reports, bug fixes, enhancements, criticism, praise, sticky buns, pats on the back, or hugs. -</p> -<p> - 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 <a href="http://twitter.com/teamtasks">follow teamtasks on Twitter</a>. You'd get to hear about teamtasks developments if you just <a href="http://twitter.com/philhawksworth">followed me on Twitter</a> too of course, but then you'd also be subject to <a href="http://twitter.com/philhawksworth/statuses/857888010">other</a> <a href="http://twitter.com/philhawksworth/statuses/853655405">random</a> <a href="http://twitter.com/philhawksworth/statuses/852759376">utterances</a>. -</p> -<p> - After just a few hours of launching <a href="http://getteamtasks.com">getteamtasks.com</a>, 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've spent some time here at <a href="http://www.osmosoft.com">Osmosoft</a> today planning the next set of enhancements for <a href="http://getteamtasks.com">teamtasks</a> which will soon be listed on the site for you to inspect. -</p> -<p>Roll on version 0.5!</p> - - - - - - - http://hawksworx.com/blog/nba-updates-on-twitter - - NBA updates on Twitter - 2008-05-19T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Just in time for the 2008 NBA playoffs, and heavily influenced by <a href="http://blog.iclutton.com">Robbie Clutton's</a> marvellous <a href="http://code.google.com/p/latestscorestwitter/">UK football scores</a> service, I have created <a href="http://twitter.com/NBA_Results">NBA Results</a> - </p> -</div> -<figure><img src="/images/nba_results.jpg" alt=""></figure> - -<!-- more --> - - -<p>This simple service monitors results published as RSS feeds from <a href="http://www.totallyscored.com/">TotallyScores</a> and then sends updates to twitter. By following <a href="http://twitter.com/NBA_Results">NBA Results</a> on Twitter, you can get alerts of all NBA match results. Only interested in updates for your team? That's fine, you can choose instead to follow your team. There are currently accounts for:</p> -<ul> - <li><a href="http://twitter.com/celtics_results">http://twitter.com/celtics_results</a> </li> - <li><a href="http://twitter.com/cavs_results">http://twitter.com/cavs_results</a> </li> - <li><a href="http://twitter.com/hornets_results">http://twitter.com/hornets_results</a> </li> - <li><a href="http://twitter.com/jazz_results">http://twitter.com/jazz_results</a> </li> - <li><a href="http://twitter.com/lakers_results">http://twitter.com/lakers_results</a></li> - <li><a href="http://twitter.com/magic_results">http://twitter.com/magic_results</a></li> - <li><a href="http://twitter.com/pistons_results">http://twitter.com/pistons_results</a></li> - <li><a href="http://twitter.com/spurs_results">http://twitter.com/spurs_results</a></li> -</ul> - -<p>I'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's results, feel free to email me (phawksworth [at] gmail [dot] com) and push your team to the top of my todo list.</p> -<p>I'm also readying <a href="http://twitter.com/mlb_results">MLB Results</a> to provide Major League Baseball results. <a href="http://twitter.com/mlb_results">MLB Results</a> will be active very soon. As with the NBA teams, please poke me if you want to get updates for your team and I'll be sure to create their account.</p> -<p>The code which drives this, is my first outing into the world of Python. You can <a href="http://static.hawksworx.com/playground/tweet_results/tweet_results.py.txt">find the code here</a>. 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 Python.</p> -<p>Many thanks to the nice folks at <a href="http://www.carsonified.com">Carsonified</a> for permission to use their site's background image on <a href="http://twitter.com/NBA_Results">NBA Results</a>. -Thanks also to <a href="http://www.flickr.com/photos/balakov">Balakov</a> who published <a href="http://www.flickr.com/photos/balakov/502470343/">the image used</a> for each NBA team twitter account icon under a Creative Commons license on flickr.</p> - - - - - - http://hawksworx.com/blog/jsspec-bundle-for-textmate-helps-with-writing - - JSSpec bundle for Textmate helps with writing tests - 2008-04-18T00:00:00+01:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Recently, we at <a href="http://www.osmosoft.com">Osmosoft</a> have been trying to make good on one of our pledges: To introduce a unit testing framework to <a href="http://www.tiddlywiki.com">Tiddlywiki</a> development. - </p> -</div> - -<!-- more --> - -<p>Along the way we examined several Javascript testing frameworks and found that JSSpec suited our needs quite nicely. JSSpec resembles the popular <a href="http://rspec.info/">RSpec</a> testing framework popularly used by Ruby developers. -</p> -<p>As a result, I have been dabbling away at writing tests in my favoured text editor - the rather lovely <a href="http://www.macromates.com/">Textmate</a>. 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 <a href="http://www.hawksworx.com/resources/JSSpec.tmbundle.zip">download this bundle</a> and just double-click it to make it available for use in Textmate.</p> - - -<p><a href="http://static.hawksworx.com/JSSpec.tmbundle.zip">Download the bundle</a></p> - -<p>I won't go into the workings of testing with JSSpec here, rather, you can learn about that at the <a href="http://code.google.com/p/jsspec/">official site</a>.</p> - -<p>Feel free to take this bundle and modify it to fit your purpose. Enjoy.</p> - - - - - - http://hawksworx.com/blog/how-to-create-and-distribute-lovely-screencasts - - How to create and distribute lovely screencasts - 2008-03-28T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - 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 text. - </p> -</div> -<figure><img src="http://farm4.static.flickr.com/3182/2674867706_0397fca6e0.jpg" alt=""></figure> - -<!-- more --> - - -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 time. - -In this post, I'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'm just writing about what I know. - - -Here is an example screencast. <a href="http://vimeo.com/833608" target="_blank">The best view is in HD over here.</a> - -<figure><object data="http://www.vimeo.com/moogaloop.swf?clip_id=833608&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF" type="application/x-shockwave-flash" height="250" width="400"> - <param name="quality" value="best" /> <param name="allowfullscreen" value="true" /> <param name="scale" value="showAll" /> <param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=833608&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF" /> -</object> </figure> - - -<p>I think that in order to create a good screencasts you need to think about the following things:</p> -<ol> - <li>Good content. Know what you're going to say/show and prepare yourself in advance.</li> - <li>Have a clean environment on screen.</li> - <li>Capture your content with the optimal settings.</li> - <li>Compress your content correctly.</li> - <li>Host and distribute your content in the most effective way.</li> -</ol> -<p>Let's take a look at those in more detail.</p> -<h2>1 - Good content</h2> -<p> - I think that it is worth practicing what you are going to show and getting everything ready in advance so that you don't waste any time. As far as having something compelling to show, I'm afraid that you're on your own on this one. -</p> -<h2>2 - Have a clean environment on screen.</h2> -<p>Removing clutter which can be distracting and untidy is a good way to help communicate you message more effectively. Since I don'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 Options.</p> -<figure><img class="free" src="/images/finder-prefs.jpeg" alt="Finder preferences" /></figure> -<p>There is also value in having a simple, clean wallpaper displayed. Again, the aim is to reduce noise and distractions. People don't all need to see the photos of your kids learning to ride a bike while they are trying to absorb what you are demonstrating.</p> -<h2>3 - Capture your content with the optimal settings.</h2> -<p>I chose to use <a href="http://www.ambrosiasw.com/utilities/snapzprox/" target="_blank">SnapzPro</a> 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. <a href="http://www.ambrosiasw.com/utilities/snapzprox/">SnapzPro</a> 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't scale it down at all. </p> -<p>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 size.</p> - -<figure><img alt="Capture settings" class="free" src="/images/snaps-capture-settings.jpg" /></figure> - -<p>I also like to let the viewer see what keys I am pressing during demonstrations. For this I used the rather handy <a href="http://www.boinx.com/mousepose/" target="_blank">Mousepose</a> application. This also allows you to highlight the location of the mouse pointer. </p> - -<h2>4 - Compress your content correctly.</h2> -<p>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 below.</p> - -<figure><img alt="Compression settings" src="/images/compression-settings.jpg" /></figure> - -<h2>5 - Host and distribute your content in the most effective way.</h2> -<p>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'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. <a href="http://www.vimeo.com">Vimeo.com</a> will host HD content and stream content to your site. A bit of a sticking point at the moment is that they don't yet allow HD 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. <a href="http://www.vimeo.com">Vimeo.</a> 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 content.</p> - - - - http://hawksworx.com/blog/observing-twitter-behaviours - - Observing Twitter behaviours - 2008-01-07T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - It seems that the <a href="http://twitter.com">Twitterverse</a> is all of a flutter following recent blog posts from Phillie Casablanca and Paul Downey. I'm watching this with keen interest and it has been the subject of much impassioned discussion in our office. - </p> -</div> - -<!-- more --> - - -<p>Frustrated by the noisy habits of <a href="http://twitter.com/gapingvoid">some</a> <a href="http://twitter.com/scobleizer">twitterers</a>, <a href="http://philwhitehouse.blogspot.com/" title="The Casablanca Weblog">Phil</a> <a href="http://philwhitehouse.blogspot.com/2008/01/tweetaholics.html" title="The Casablanca Weblog: Tweetaholics">opened a discussion</a> on good Twitter practices that led to him posting the <a href="http://philwhitehouse.blogspot.com/2008/01/ten-commandments-of-twitter.html" title="The Casablanca Weblog: The Ten Commandments of Twitter">10 Commandments of Twitter</a>, an attempt to articulate some of the good, and highlight some of the annoying, practices when posting tweets. For the record, I'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 suggestions.</p> - -<p>Many people, <a href="http://www.evilgeniuschronicles.org/wordpress/2008/01/06/in-my-second-month-on-twitter-i-reject-your-commandments/">object</a> to being told how they should use Twitter, and that's fair enough. It isn'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 <a href="http://twitter.com/10commandements">10 Commandments of Twitter</a>. I also think that Phil will be the first to admit that the use of the word 'commandment' may be a bit strong, but it was used to elicit a response. <a href="http://terraminds.com/twitter/query?query=10commandments+&amp;submit=search+in+updates">Job done!</a></p> - -<p>Sharing similar frustrations, <a href="http://blog.whatfettle.com/2008/01/05/are-you-a-twitter-twit-or-a-twerp" title="Whatfettle - Paul Downey (psd)">Paul Downey</a> took things a step further on his blog describing two different camps of Twitter users: <a href="http://blog.whatfettle.com/2008/01/05/are-you-a-twitter-twit-or-a-twerp/#Twit" title="Whatfettle - Paul Downey (psd)">Twits</a> and <a href="http://blog.whatfettle.com/2008/01/05/are-you-a-twitter-twit-or-a-twerp/#Twit" title="Whatfettle - Paul Downey (psd)">Twerps</a>. 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 <a href="http://twitter.com/psd/statuses/571252882">in a tweet</a>) I personally find the terms merely playful and see that I am a Twit who sometimes displays Twerpish tendencies(!).</p> - -<p>One worry that I do have though, and this was <a href="http://confusedofcalcutta.com/2008/01/06/freewheeling-about-social-media/">articulated by JP Rangaswami on his blog</a> 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 <a href="http://microformats.org/wiki/twitter-nanoformats">nanoformats</a> 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 IRC and the like for years by the seemingly ferocious users who knew the conventions inside and out, but didn't appear to tolerate newcomers. I'd hate for twitter to end up like that. We should use things like the <a href="http://twitter.com/tencommandments">10 Commandments of Twitter</a> as useful tips for people, rather than an iron rod with which to force people to use Twitter 'our way.'</p> - - - - - - http://hawksworx.com/blog/osmosoft-return-from-leweb3-intact - - Osmosoft return from LeWeb3 intact - 2007-12-17T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - Last week the entire <a href="http://www.osmosoft.com">Osmosoft</a> team visited Paris to attend the <a href="http://www.leweb3.com">LeWeb3</a> 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 too. - </p> -</div> -<figure><img src="/images/le-web-3.jpg" alt=""></figure> - -<!-- more --> - - -<p>And so, <a href="http://ripplerap.com">RippeRap</a> (then dubbed 'TiddleLeWeb') was conceived. We considered that building a tool based on <a href="http://www.tiddlywiki.com">TiddlyWiki</a> 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 it.</p> - -<figure> - <img src="/images/ripplerap.jpg" class="free"> - <figcaption><a href="http://ripplerap.com">Ripplerap</a></figcaption> -</figure> - -<p>We found that getting up-to-date and accurate information about the agenda from the <a href="http://www.leweb3.com">LeWeb3 website</a>, 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 <a href="http://www.microformats.org">Microformats</a> to markup the agenda so that you could export the sessions to your calendar and so on.</p> -<p>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 <a href="http://bt.com">BT</a> shared a stand which was busy throughout. I think that having <a href="http://blog.whatfettle.com">Paul Downey</a> around to talk people through his excellent, and popular uber-doodle, '<a href="http://map.whatfettle.com">The Web Is Agreement</a>' (more than 60 thousand views <a href="http://www.flickr.com/photos/psd/1805709102/">on flickr</a> at time of writing) helped draw people to the stand. I rather think that the retro-chic <a href="http://www.flickr.com/photos/philliecasablanca/2070476239/">bat phone</a> 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 <a href="http://mojo.bt.com">Mojo</a>, BT's <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a> exposure to its <a href="http://sdk.bt.com">21cSDK</a>.</p> - -<figure><img src="/images/paul-explains-twia-to-yossi-vardi.jpg" alt="Paul explains TWIA to Yossi Vardi"> - <figcaption> - Paul explains <a href="http://www.flickr.com/photos/psd/sets/72157602805227511/">TWIA</a> to Yossi Vardi - </figcaption> -</figure> - -<p>RippleRap was distributed with the mantra 'release early, release often' ringing in our ears. There is no arguing with the suggestion that this is an application in it's early days. Releasing software in this way has been something of a revelation to me. I'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 'release early, release often' 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 suggested.</p> -<p>The LeWeb3 conference was, on the whole, pretty good. Some of the speakers where really interesting, and I found some unexpected gems. <a href="http://en.wikipedia.org/wiki/Yossi_Vardi">Yossi Vardi</a> and <a href="http://www.philippe-starck.com/">Philippe Starck</a> were really entertaining, although I gather that some of these talks were already available on YouTube. Listening to BT's <a href="http://www.confusedofcalcutta.com">JP Rangaswami</a> was as ever, rather inspiring. I was also lucky enough to listen in on several ad hoc discussions that JP had around the conference, and noted that you rarely saw JP talking, without a small crowd gathering around him. I unexpectedly found myself on stage with JP and am now enjoying the glory of photos on flickr described "JP Rangaswami takes the stage at Le Web, supported by Phil Hawksworth". Brilliant! (just don't tell anyone that I was up there in nothing more than a 'helper-monkey' capacity!)</p> -<figure> - <img src="/images/jp-presenting.jpg" alt="JP presenting"> - <figcaption><a href="http://www.flickr.com/photos/psd/2104675535/">JP presenting</a></figcaption> -</figure> -<p>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 <a href="http://loiclemeur.com/">Loic Le Meur</a> (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, <a href="http://www.searls.com/">Doc Searls</a>, who I was particularly looking forward to listening to, had to rush through his presentation at lightening speed and was told that he didn't have time to take questions. Booo.</p> -<p>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 not.</p> -<p>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's what you get at conferences, and why a tool like RippleRap might be a handy thing to have at your fingertips.</p> -<p>Check out the photos that Osmosoft took at LeWeb3. Several Osmosoftians <a href="http://www.flickr.com/photos/psd/sets/72157603456702447/">more</a> <a href="http://www.flickr.com/photos/philliecasablanca/sets/72157603435510986/">talented</a> <a href="http://www.flickr.com/photos/carrierdetect/sets/72157603197236730">than</a> <a href="http://www.flickr.com/photos/philhawksworth/sets/72157603446183588">I</a> have posted pictures at flickr.</p> - - - - http://hawksworx.com/blog/opening-a-finder-window-from-the-terminal - - Opening a Finder window from the Terminal - 2007-11-04T00:00:00+00:00 - - Phil Hawksworth - http://hawksworx.com/ - - <div class="grab"> - <p> - 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 time. - </p> -</div> - -<!-- more --> - -<p>To set things up so that it is easy to use whenever you need it, you just need to follow these two steps:</p> -<p>First, using your <a href="http://www.macromates.com">preferred text editor</a> create a file which contains this command:</p> - -<div class="highlight"><pre><code class="bash">!/bin/bash -open /System/Library/CoreServices/Finder.app <span class="nv">$PWD</span></code></pre></div> - -<p>You should name this file with whatever you want to use to call it later. I named it <code>fndr</code>.</p> -<p>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 <code>Utils</code> which I added to my path to make all of its contents easily accessible.</p> -<p>Now you can simply type <code>fndr</code> in your Terminal window to open a Finder at your present directory.</p> -<p>If you need help adding something to your path, I recommend creating a file in your home directory (it may even already exist) called <code>.bash_profile</code>. This file gets invoked whenever you enter the Terminal environment. </p> -<p>Add an item to your path by entering a line something like this to your <code>.bash_profile</code> file:</p> - -<div class="highlight"><pre><code class="bash"><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span><span class="s1">&#39;$PATH:/Users/PhilH/Utils&#39;</span></code></pre></div> - -<p>I'm always on the look out for bits and pieces like this to help make my life easier in Mac OSX. Not that I think that things are difficult in this excellent OS, 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 OSX world, it would be great if you could post them in the comments. Thanks!</p> -<h3>Update:</h3> - -<p>This can simple be done with a single command already as it turns out. Just use this:</p> - -<div class="highlight"><pre><code class="bash">open .</code></pre></div> - - - - - - \ No newline at end of file diff --git a/dist/humans.txt b/dist/humans.txt deleted file mode 100644 index cb851c44..00000000 --- a/dist/humans.txt +++ /dev/null @@ -1,13 +0,0 @@ ------------------------------------------ - -http://hawksworx.com - ------------------------------------------ -Built by Phil Hawksworth using Jekyll and -served up by http://pages.github.com - -Contact http://twitter.com/philhawksworth ------------------------------------------ - - - diff --git a/dist/images/airbrakemx.png b/dist/images/airbrakemx.png deleted file mode 100755 index 35636712..00000000 Binary files a/dist/images/airbrakemx.png and /dev/null differ diff --git a/dist/images/bg.jpeg b/dist/images/bg.jpeg deleted file mode 100755 index f2f557e9..00000000 Binary files a/dist/images/bg.jpeg and /dev/null differ diff --git a/dist/images/bookclub-bulbs.jpg b/dist/images/bookclub-bulbs.jpg deleted file mode 100755 index 7cca250f..00000000 Binary files a/dist/images/bookclub-bulbs.jpg and /dev/null differ diff --git a/dist/images/compression-settings.jpg b/dist/images/compression-settings.jpg deleted file mode 100755 index b4ed55d3..00000000 Binary files a/dist/images/compression-settings.jpg and /dev/null differ diff --git a/dist/images/contribute_obama.jpeg b/dist/images/contribute_obama.jpeg deleted file mode 100755 index 38f6a9a1..00000000 Binary files a/dist/images/contribute_obama.jpeg and /dev/null differ diff --git a/dist/images/dconstruct2011-don-norman.jpg b/dist/images/dconstruct2011-don-norman.jpg deleted file mode 100755 index 6d06f6da..00000000 Binary files a/dist/images/dconstruct2011-don-norman.jpg and /dev/null differ diff --git a/dist/images/dconstruct2011.jpg b/dist/images/dconstruct2011.jpg deleted file mode 100755 index c8cd8ad3..00000000 Binary files a/dist/images/dconstruct2011.jpg and /dev/null differ diff --git a/dist/images/dd-data-viz.gif b/dist/images/dd-data-viz.gif deleted file mode 100755 index 28909a61..00000000 Binary files a/dist/images/dd-data-viz.gif and /dev/null differ diff --git a/dist/images/defending-ie.jpg b/dist/images/defending-ie.jpg deleted file mode 100755 index 79d90d13..00000000 Binary files a/dist/images/defending-ie.jpg and /dev/null differ diff --git a/dist/images/example-list-created.jpg b/dist/images/example-list-created.jpg deleted file mode 100755 index eedf14f5..00000000 Binary files a/dist/images/example-list-created.jpg and /dev/null differ diff --git a/dist/images/finder-prefs.jpeg b/dist/images/finder-prefs.jpeg deleted file mode 100755 index a71684d9..00000000 Binary files a/dist/images/finder-prefs.jpeg and /dev/null differ diff --git a/dist/images/flashvjs.png b/dist/images/flashvjs.png deleted file mode 100755 index 57e9a4f5..00000000 Binary files a/dist/images/flashvjs.png and /dev/null differ diff --git a/dist/images/fronteers-theatre.jpg b/dist/images/fronteers-theatre.jpg deleted file mode 100755 index 8ebe781d..00000000 Binary files a/dist/images/fronteers-theatre.jpg and /dev/null differ diff --git a/dist/images/full-frontal-conf.png b/dist/images/full-frontal-conf.png deleted file mode 100755 index 62c0fddd..00000000 Binary files a/dist/images/full-frontal-conf.png and /dev/null differ diff --git a/dist/images/funk.jpg b/dist/images/funk.jpg deleted file mode 100644 index 529fb729..00000000 Binary files a/dist/images/funk.jpg and /dev/null differ diff --git a/dist/images/getting-started-with-node-at-asyncjs.jpg b/dist/images/getting-started-with-node-at-asyncjs.jpg deleted file mode 100755 index feea5d72..00000000 Binary files a/dist/images/getting-started-with-node-at-asyncjs.jpg and /dev/null differ diff --git a/dist/images/hitched-beam.jpeg b/dist/images/hitched-beam.jpeg deleted file mode 100755 index 022c23b7..00000000 Binary files a/dist/images/hitched-beam.jpeg and /dev/null differ diff --git a/dist/images/hitched-dancing.jpeg b/dist/images/hitched-dancing.jpeg deleted file mode 100755 index aae1f1cf..00000000 Binary files a/dist/images/hitched-dancing.jpeg and /dev/null differ diff --git a/dist/images/hitched-groomsmen.jpeg b/dist/images/hitched-groomsmen.jpeg deleted file mode 100755 index 64102c9b..00000000 Binary files a/dist/images/hitched-groomsmen.jpeg and /dev/null differ diff --git a/dist/images/hitched-leaving.jpeg b/dist/images/hitched-leaving.jpeg deleted file mode 100755 index 85316f5d..00000000 Binary files a/dist/images/hitched-leaving.jpeg and /dev/null differ diff --git a/dist/images/hitched-pose.png b/dist/images/hitched-pose.png deleted file mode 100755 index b6c39d81..00000000 Binary files a/dist/images/hitched-pose.png and /dev/null differ diff --git a/dist/images/hitched-sunrise.jpeg b/dist/images/hitched-sunrise.jpeg deleted file mode 100755 index 3d94fcad..00000000 Binary files a/dist/images/hitched-sunrise.jpeg and /dev/null differ diff --git a/dist/images/hitched-us.jpeg b/dist/images/hitched-us.jpeg deleted file mode 100755 index aae1f1cf..00000000 Binary files a/dist/images/hitched-us.jpeg and /dev/null differ diff --git a/dist/images/i-can-smell-your-cms.jpg b/dist/images/i-can-smell-your-cms.jpg deleted file mode 100755 index 1b06014d..00000000 Binary files a/dist/images/i-can-smell-your-cms.jpg and /dev/null differ diff --git a/dist/images/include_beer.jpeg b/dist/images/include_beer.jpeg deleted file mode 100755 index d49ab9e5..00000000 Binary files a/dist/images/include_beer.jpeg and /dev/null differ diff --git a/dist/images/jake-with-wiimote.jpg b/dist/images/jake-with-wiimote.jpg deleted file mode 100644 index afe4073d..00000000 Binary files a/dist/images/jake-with-wiimote.jpg and /dev/null differ diff --git a/dist/images/jigglywiki.jpg b/dist/images/jigglywiki.jpg deleted file mode 100755 index 056939b3..00000000 Binary files a/dist/images/jigglywiki.jpg and /dev/null differ diff --git a/dist/images/jp-presenting.jpg b/dist/images/jp-presenting.jpg deleted file mode 100755 index 90350811..00000000 Binary files a/dist/images/jp-presenting.jpg and /dev/null differ diff --git a/dist/images/jquery-logo-large.jpg b/dist/images/jquery-logo-large.jpg deleted file mode 100755 index 663a7004..00000000 Binary files a/dist/images/jquery-logo-large.jpg and /dev/null differ diff --git a/dist/images/jsday-2013.gif b/dist/images/jsday-2013.gif deleted file mode 100755 index 4518e690..00000000 Binary files a/dist/images/jsday-2013.gif and /dev/null differ diff --git a/dist/images/jsspecbundle.png b/dist/images/jsspecbundle.png deleted file mode 100755 index 7739af0a..00000000 Binary files a/dist/images/jsspecbundle.png and /dev/null differ diff --git a/dist/images/le-web-3.jpg b/dist/images/le-web-3.jpg deleted file mode 100755 index 12ec7265..00000000 Binary files a/dist/images/le-web-3.jpg and /dev/null differ diff --git a/dist/images/list-and-example-call.jpg b/dist/images/list-and-example-call.jpg deleted file mode 100755 index 79de2c93..00000000 Binary files a/dist/images/list-and-example-call.jpg and /dev/null differ diff --git a/dist/images/london-cleanup.jpg b/dist/images/london-cleanup.jpg deleted file mode 100755 index 18ba5854..00000000 Binary files a/dist/images/london-cleanup.jpg and /dev/null differ diff --git a/dist/images/macro-called-1.jpg b/dist/images/macro-called-1.jpg deleted file mode 100755 index add7a11f..00000000 Binary files a/dist/images/macro-called-1.jpg and /dev/null differ diff --git a/dist/images/media_city.jpg b/dist/images/media_city.jpg deleted file mode 100755 index 2b4eeef8..00000000 Binary files a/dist/images/media_city.jpg and /dev/null differ diff --git a/dist/images/nba_results.jpg b/dist/images/nba_results.jpg deleted file mode 100755 index 3d144f6e..00000000 Binary files a/dist/images/nba_results.jpg and /dev/null differ diff --git a/dist/images/nodejs.png b/dist/images/nodejs.png deleted file mode 100755 index 79ded2ba..00000000 Binary files a/dist/images/nodejs.png and /dev/null differ diff --git a/dist/images/oakley-moto-2.jpeg b/dist/images/oakley-moto-2.jpeg deleted file mode 100755 index 68eb6a85..00000000 Binary files a/dist/images/oakley-moto-2.jpeg and /dev/null differ diff --git a/dist/images/oakley-vimeo.jpg b/dist/images/oakley-vimeo.jpg deleted file mode 100755 index ba02d0c2..00000000 Binary files a/dist/images/oakley-vimeo.jpg and /dev/null differ diff --git a/dist/images/osmosoft.jpg b/dist/images/osmosoft.jpg deleted file mode 100755 index e0be0b2c..00000000 Binary files a/dist/images/osmosoft.jpg and /dev/null differ diff --git a/dist/images/paramount-theatre.jpeg b/dist/images/paramount-theatre.jpeg deleted file mode 100755 index 1d356955..00000000 Binary files a/dist/images/paramount-theatre.jpeg and /dev/null differ diff --git a/dist/images/paul-explains-twia-to-yossi-vardi.jpg b/dist/images/paul-explains-twia-to-yossi-vardi.jpg deleted file mode 100755 index 971e33f7..00000000 Binary files a/dist/images/paul-explains-twia-to-yossi-vardi.jpg and /dev/null differ diff --git a/dist/images/ph_excessive_enhancement.jpg b/dist/images/ph_excessive_enhancement.jpg deleted file mode 100755 index 037642fb..00000000 Binary files a/dist/images/ph_excessive_enhancement.jpg and /dev/null differ diff --git a/dist/images/phil-at-txjs.jpeg b/dist/images/phil-at-txjs.jpeg deleted file mode 100755 index c7a8d94f..00000000 Binary files a/dist/images/phil-at-txjs.jpeg and /dev/null differ diff --git a/dist/images/phil-with-wiimote.jpg b/dist/images/phil-with-wiimote.jpg deleted file mode 100644 index 082fadfe..00000000 Binary files a/dist/images/phil-with-wiimote.jpg and /dev/null differ diff --git a/dist/images/philhawksworth-montage.jpg b/dist/images/philhawksworth-montage.jpg deleted file mode 100755 index 406adcfd..00000000 Binary files a/dist/images/philhawksworth-montage.jpg and /dev/null differ diff --git a/dist/images/philhawksworth-txjs.jpg b/dist/images/philhawksworth-txjs.jpg deleted file mode 100755 index b4443132..00000000 Binary files a/dist/images/philhawksworth-txjs.jpg and /dev/null differ diff --git a/dist/images/philhawksworth.jpg b/dist/images/philhawksworth.jpg deleted file mode 100644 index 697e02f5..00000000 Binary files a/dist/images/philhawksworth.jpg and /dev/null differ diff --git a/dist/images/plugin_inclusion.jpg b/dist/images/plugin_inclusion.jpg deleted file mode 100755 index 1912dea3..00000000 Binary files a/dist/images/plugin_inclusion.jpg and /dev/null differ diff --git a/dist/images/polaroiderizer-a-slideshow-from-your-flickr-tags.jpg b/dist/images/polaroiderizer-a-slideshow-from-your-flickr-tags.jpg deleted file mode 100755 index 49bcdc16..00000000 Binary files a/dist/images/polaroiderizer-a-slideshow-from-your-flickr-tags.jpg and /dev/null differ diff --git a/dist/images/production-line.jpg b/dist/images/production-line.jpg deleted file mode 100755 index bb33d146..00000000 Binary files a/dist/images/production-line.jpg and /dev/null differ diff --git a/dist/images/quicksilver_lastfm.jpg b/dist/images/quicksilver_lastfm.jpg deleted file mode 100755 index 93207cc0..00000000 Binary files a/dist/images/quicksilver_lastfm.jpg and /dev/null differ diff --git a/dist/images/quicksilver_lastfm.png b/dist/images/quicksilver_lastfm.png deleted file mode 100755 index b023c93c..00000000 Binary files a/dist/images/quicksilver_lastfm.png and /dev/null differ diff --git a/dist/images/resume.jpg b/dist/images/resume.jpg deleted file mode 100644 index b82f4140..00000000 Binary files a/dist/images/resume.jpg and /dev/null differ diff --git a/dist/images/rga.png b/dist/images/rga.png deleted file mode 100755 index 800e9492..00000000 Binary files a/dist/images/rga.png and /dev/null differ diff --git a/dist/images/ripplerap.jpg b/dist/images/ripplerap.jpg deleted file mode 100755 index 92c781f2..00000000 Binary files a/dist/images/ripplerap.jpg and /dev/null differ diff --git a/dist/images/scamp-python.jpg b/dist/images/scamp-python.jpg deleted file mode 100755 index c0d93a01..00000000 Binary files a/dist/images/scamp-python.jpg and /dev/null differ diff --git a/dist/images/sketchjs.png b/dist/images/sketchjs.png deleted file mode 100755 index 5befbce9..00000000 Binary files a/dist/images/sketchjs.png and /dev/null differ diff --git a/dist/images/snaps-capture-settings.jpg b/dist/images/snaps-capture-settings.jpg deleted file mode 100755 index bd14c199..00000000 Binary files a/dist/images/snaps-capture-settings.jpg and /dev/null differ diff --git a/dist/images/teafr-tea-rotas-from-twitter-lists.jpg b/dist/images/teafr-tea-rotas-from-twitter-lists.jpg deleted file mode 100755 index 30f36b01..00000000 Binary files a/dist/images/teafr-tea-rotas-from-twitter-lists.jpg and /dev/null differ diff --git a/dist/images/teafr-tea-rotas-from-twitter-lists.png b/dist/images/teafr-tea-rotas-from-twitter-lists.png deleted file mode 100755 index 69bf4eda..00000000 Binary files a/dist/images/teafr-tea-rotas-from-twitter-lists.png and /dev/null differ diff --git a/dist/images/the-next-generation-stack-is-nodejs-ready-to.png b/dist/images/the-next-generation-stack-is-nodejs-ready-to.png deleted file mode 100755 index d0916bab..00000000 Binary files a/dist/images/the-next-generation-stack-is-nodejs-ready-to.png and /dev/null differ diff --git a/dist/images/theteam-pub.jpg b/dist/images/theteam-pub.jpg deleted file mode 100755 index b95fcd14..00000000 Binary files a/dist/images/theteam-pub.jpg and /dev/null differ diff --git a/dist/images/train-window.jpeg b/dist/images/train-window.jpeg deleted file mode 100755 index ce02102d..00000000 Binary files a/dist/images/train-window.jpeg and /dev/null differ diff --git a/dist/images/txjs.jpeg b/dist/images/txjs.jpeg deleted file mode 100755 index 63f5d727..00000000 Binary files a/dist/images/txjs.jpeg and /dev/null differ diff --git a/dist/images/unobtrusifycom.jpg b/dist/images/unobtrusifycom.jpg deleted file mode 100755 index 9f2333b0..00000000 Binary files a/dist/images/unobtrusifycom.jpg and /dev/null differ diff --git a/dist/images/unobtrusive.jpg b/dist/images/unobtrusive.jpg deleted file mode 100755 index 0936c7de..00000000 Binary files a/dist/images/unobtrusive.jpg and /dev/null differ diff --git a/dist/images/yeoman.png b/dist/images/yeoman.png deleted file mode 100755 index 35ff7f7c..00000000 Binary files a/dist/images/yeoman.png and /dev/null differ diff --git a/dist/index.html b/dist/index.html deleted file mode 100644 index cfc4334f..00000000 --- a/dist/index.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - hawksworx - - - - -
                                                                                                                                                                              -
                                                                                                                                                                              - -
                                                                                                                                                                              -
                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                hawksworx

                                                                                                                                                                                - -
                                                                                                                                                                                -
                                                                                                                                                                                - -
                                                                                                                                                                                -
                                                                                                                                                                                - - -
                                                                                                                                                                                -

                                                                                                                                                                                TF;DR - Too funky; Didn't read.

                                                                                                                                                                                -
                                                                                                                                                                                - - Tagged - - - observations - - - web - - - and - - excess - -
                                                                                                                                                                                -
                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                - The trend for 'parallax' or 'scrolljacking' web sites has long had me grumbling about their large page weight, slow rendering times and general accessibility black spots, but some are better than others. That got me thinking, do they ever do a good job? -

                                                                                                                                                                                -
                                                                                                                                                                                -
                                                                                                                                                                                - - - continue reading this post -
                                                                                                                                                                                -
                                                                                                                                                                                - - - - - - -
                                                                                                                                                                                -
                                                                                                                                                                                - - - - - - - - - - - - - - - diff --git a/dist/journal/index.html b/dist/journal/index.html deleted file mode 100755 index 4757070a..00000000 --- a/dist/journal/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Hawksworx - Journal - - - -

                                                                                                                                                                                This page has moved to a - hawksworx.com/blog.

                                                                                                                                                                                - - \ No newline at end of file diff --git a/dist/js/hawksworx.js b/dist/js/hawksworx.js deleted file mode 100755 index a3b8b128..00000000 --- a/dist/js/hawksworx.js +++ /dev/null @@ -1 +0,0 @@ -var hx={};hx.posts=null,hx.loadSearchData=function(){$.getJSON("/search.json",function(s){hx.posts=s.posts;for(var e=hx.posts.length-1;e>=0;e--)hx.posts[e].ref=hx.posts[e].title.toLowerCase()+" "+hx.posts[e].words.toLowerCase()})},hx.search=function(s){var e,h=[];if(hx.clearResults(),s.length){for(e=hx.posts.length-1;e>=0;e--)-1!==hx.posts[e].ref.indexOf(s)&&h.push(hx.posts[e]);for($(".search-results").show(),e=h.length-1;e>=0;e--)$(".search-results ul").append("
                                                                                                                                                                              • "+h[e].title+"
                                                                                                                                                                              • ")}},hx.hideSearch=function(){hx.clearResults(),$("#searchform").hide(),$("li.search a").show()},hx.clearResults=function(){$(".search-results ul").empty(),$(".search-results").hide()},hx.addEventHandlers=function(){$("#searchstr").keyup(function(s){if(27===s.which)hx.hideSearch();else{var e=$(this).val().trim();hx.search(e)}}),$("li.search a").click(function(s){return s.preventDefault(),hx.loadSearchData(),hx.clearResults(),$("#searchform").css({display:"inline-block"}),$("li.search a").hide(),$("#searchstr").val(""),$("#searchstr").focus(),!1})},$(function(){hx.addEventHandlers()}); \ No newline at end of file diff --git a/dist/js/jquery.min.js b/dist/js/jquery.min.js deleted file mode 100644 index e961dc9a..00000000 --- a/dist/js/jquery.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
                                                                                                                                                                                ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f -}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
                                                                                                                                                                                a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
                                                                                                                                                                                ","
                                                                                                                                                                                "],area:[1,"",""],param:[1,"",""],thead:[1,"","
                                                                                                                                                                                "],tr:[2,"","
                                                                                                                                                                                "],col:[2,"","
                                                                                                                                                                                "],td:[3,"","
                                                                                                                                                                                "],_default:l.htmlSerialize?[0,"",""]:[1,"X
                                                                                                                                                                                ","
                                                                                                                                                                                "]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n(" -

                                                                                                                                                                                - -

                                                                                                                                                                                The plan

                                                                                                                                                                                -

                                                                                                                                                                                - My plan is to give a talk which: -

                                                                                                                                                                                -
                                                                                                                                                                                  -
                                                                                                                                                                                • Gives detail, by looking into the structure of the hypertext link inlcuding some aspects that some might not know;
                                                                                                                                                                                • -
                                                                                                                                                                                • Is entertaining, by including stories from the history of the Web and the Link;
                                                                                                                                                                                • -
                                                                                                                                                                                • Gives background and context, and is a thought provoking call to arms for people who care about the Web.
                                                                                                                                                                                • -
                                                                                                                                                                                -

                                                                                                                                                                                Links and supporting material

                                                                                                                                                                                -
                                                                                                                                                                                  -
                                                                                                                                                                                • - Links for other conferences I have spoken at available on my Speaking page. -
                                                                                                                                                                                • -
                                                                                                                                                                                • More coverage and conferece details available via my Lanyrd profile
                                                                                                                                                                                • -
                                                                                                                                                                                • Slides from other events on my Speakerdeck page.
                                                                                                                                                                                • -
                                                                                                                                                                                -

                                                                                                                                                                                Bragging

                                                                                                                                                                                -

                                                                                                                                                                                - A couple of comments on my talks which made my head swell: -

                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                - I Can Smell Your CMS by @philhawksworth. One of the best talks I've ever seen, and I'm hearing it live at #bdconf -

                                                                                                                                                                                -

                                                                                                                                                                                - @brad_frost -

                                                                                                                                                                                -
                                                                                                                                                                                - -
                                                                                                                                                                                -

                                                                                                                                                                                -Phil seems to be a clone of Jake Archibald who went to design school. Very funny, very quick, with beautiful slides and examples and tales from the trenches he knows how to engage and to give out good info to boot. To me one of the best talks I’ve seen lately. -

                                                                                                                                                                                -

                                                                                                                                                                                - Christian Heilmann -

                                                                                                                                                                                -
                                                                                                                                                                                - - -
                                                                                                                                                                                - - - - - - - - - - - - - - - - - -