All Your Base 2012: a DB conference for web devs

 

The success of jQuery UK 2012 in February inspired us to organise our next conference; All Your Base, on Friday 23rd November in the Saïd Business School in Oxford.

We’re inviting over 300 developers for a day of exploring a selection of the new database technologies that have become available.

Deciding on the best way to store data for a web project can prove difficult, considering the recent explosion of database technologies.

Whereas in the past, we might have stuck to relational databases, the growth of noSQL and graph databases has opened the door to a whole new range of options for web developers.

To help developers make the right choice for their projects, Our Technical Director, John Wards, has arranged a speaker line-up that includes Monty Widenius, Founder of MySQL, and Lisa Phillips, Senior MySQL DBA for Twitter.

“With the split in the MySQL community, the new features of Postgres and the rise of NoSQL, the database world has become an exciting space. Throw in Browser based datastores, and you have a recipe for a great conference!”

“We’ve hand picked the speakers to try and provide voices that are not often heard in the UK, and add in new tech like OrientDB and PouchDB. Therefore, the content of these talks should mean that every developer goes away wanting to try out something new or change the way they develop.”

At White October we pride ourselves on experimenting with the latest web technologies, and sharing our enthusiasm with others has become part of what we do.

Following the overwhelmingly positive feedback from jQuery 2012, we’re certain All Your Base will create yet another huge buzz amongst web developers, as well as helping to cement Oxford on the tech map of the UK.

Why usability testing makes business sense

With any web project, there always comes a point where it’s difficult to see and experience a website or app as a first-time user does.

User testing allows it to be placed in the hands of real-life users, who then work through realistic scenarios.

This helps identify any aspects of the layout, flow and copy that may confuse users.

Here, we share some reasons why we believe user testing is money well spent.

1) Increase revenue

One of the main aims of user testing is to increase site conversions.

The process can highlight why checkout conversions are low, and where abandonment rates in the checkout process are particularly high.

2) Save money

User testing helps to remove risks involved in web projects – problems can be discovered when it’s easy and cheap to fix them.

This is why it should be conducted as early and as regularly as possible, to quickly identify and solve issues as soon as they appear.

3) Craft better copy

User testing will pinpoint the labels and general language on a website that visitors struggle with.

Making changes to the microcopy (words and short phrases that guide users through processes such as filling out forms, registering for an account, etc) means they know where to click to perform certain actions, or what to expect when they navigate to another area of the site.

4) Meet expectations

Employing the ‘Think Out Loud’ method during user testing, where each user is asked what they are expecting to see when they click something, can be extremely revealing.

If their response is completely different to what the action will actually do, then some tweaks need to be made.

5) Avoid the assumption trap

It’s easy to make assumptions about how customers will use a particular website or app.

When the project is presented to real people who work in the industry it’s aimed at, there’s a good chance they will take a different view on what is being offered.

Product owners are often surprised by the reactions of people during user testing – they use the interface in unexpected ways, or may express strong opinions that impact the perception of the product.

6) Invest in a good concept

The first question to ask as soon as the user sees the website or app is: ‘what is this?’.

If they are unable to explain straight away what they are looking at, then the website’s concept is not being communicated effectively. This needs to be fixed before proceeding with further development.

7) Balance design with functionality

Providing users with scenarios helps to identify issues with the information architecture – are users struggling to find a key area or tool?

To get the best information possible from users during testing, the designer should stay neutral and not provide them with too much information.

This means minimal testing and careful observation of their body language.

For e-commerce sites, user testing can also provide insight into different shopping behaviours. This can reveal how critical information and calls to action should be positioned within a page hierarchy.

Gourmet Burger Kitchen loyalty app on iOS, Android, Windows & Blackberry

The challenge

Gourmet Burger Kitchen is all about the burger and they are spreading their love of food around the UK in over 50 locations from Brighton to Edinburgh. They have a simple rule: “always serve the best burgers and have fun”. So when we got the opportunity to work with them and build their customer loyalty app, we were made up.

The plan was to build upon the success of their existing paper-based loyalty system and provide customers with a fun and engaging way to take challenges and collect rewards.

For GBK it is a perfect way to depend brand engagement, drive repeat custom and increase customer lifetime value.

Along with challenges and rewards the app also features a store locater, up-to-date menus and leaderboards where users can compete against their friends.

Excitingly, unlike its paper based predecessor, the app extends the ability for GBK to deliver timely, targeted marketing messages.

This can be done via ‘in app’ challenges and rewards, but also by simply growing their email marketing list using the (opted in) email address collected when people sign up.

Our technical solution

No strangers to a challenge, GBK wanted to hit 4 major platforms simultaneously: iOS, Android, Blackberry and Windows, so we decided the best answer was to build the app with a nifty Adobe framework for creating native apps using web technologies.

Of course it doesn’t stop there – the app integrates with GBK’s IBS EPOS tills so it can track customer purchases, and is deployed on cloud hosting solutions, which scale at times of peak use (evenings and weekends).

Through the admin system GBK can carry out tasks such as add challenges and issue vouchers, which are then communicated back to the front-end of the app.

They can also track usage and profile customers which allows GBK to make sure the challenges are pitched at the right level to drive engagement.

Finally as customer data and EPOS integration are handled by the solution we also conducted 3rd party penetration testing to ensure the security of the transactional data.

The results

  • An easy and fun way of delivering value for GBK customers which rewards their loyalty
  • Installed over 10,000 times within the first week of its launch
  • Reached number 2 in the Apple AppStore Food & Drink chart
  • Optin email marketing list growing alongside app signups

Don’t just take our word for it

With hundreds of sign ups every day, Nick Wong, Group Finance Director and Company Secretary at GBK Restaurants, says:

“The GBK app has been an exciting next step for us in adding value for customers and enhancing their experience at GBK.  Customers are looking for  value and the new app allows us to take a more personal approach, rewarding the most frequent customers with extra benefits including instant rewards and fun challenges. It enables us to engage with our customers and also to drive longer term loyalty.”

“We took the brave decision to launch on 4 mobile platforms and White October guided us through the mindfield and supported us all the way through the process. We are looking forward to continue working with White October on the next phase of development.”

And last but not least…

It’s not that often when a project comes along where everyone wants to help in testing!

GBK food on a table

Behat TableNodes – the missing manual

We’ve been using Behat for Behaviour-Driven Development for some time now, and it’s been a fantastic tool.  If you don’t know it, it uses Gherkin to allow you to create tests that describe user behaviour in (almost) natural language.

If you have come across Behat before, you probably know that one particularly useful feature is tabular data.  This allows you to write scenarios which include lines like the following:

Scenario:
  Given the following people exist:
    | name  | email           | phone |
    | Aslak | [email protected] | 123   |
    | Joe   | [email protected]   | 234   |

An overview of how to use tabular data is given in the Behat docs.  As those show, the table data is available to your supporting PHP code as a TableNode object.

The TableNode class is described in more detail in the Gherkin API.  However, the Gherkin API for TableNode is sparse, giving each method a single sentence of description.  I recently spent some time working with the gory details of TableNodes, so this blog post is the manual I wish I’d had!  I was working on a method to add a column of data to a TableNode, so I’ll show that as well.

I’m not going to document every method of the TableNode, just those to do with extracting and adding data.  In the examples below, I’m assuming I’ve got the table of data shown above.

First up – hash methods

The most important thing to bear in mind is the difference between TableNode’s getXXX and getXXXHash methods.  The standard getXXX methods treat every row/col as the same, including the header, giving everything numeric keys.  The getXXXHash methods use the first row/col as the header and thus as the array keys too.

addRow(string|array row, null|integer line)

This one is pretty self-explanatory, but a word of warning up-front:  Remember that TableNodes are designed to hold representations of table strings.  Don’t make the mistake I did of using this method to add an array which contains objects!  You won’t get an error when adding, but your code will fail silently when you try and use the resulting object…

getRows()

Returns an array of arrays, one per row.  Each row array contains one element per “cell” in that row.  All indexes are numeric.

var_dump shows that this function returns the following for the sample table at the start of this blog:

array(3) {
  [0]=>
  array(3) {
    [0]=>
    string(4) "name"
    [1]=>
    string(5) "email"
    [2]=>
    string(5) "phone"
  }
  [1]=>
  array(3) {
    [0]=>
    string(5) "Aslak"
    [1]=>
    string(15) "[email protected]"
    [2]=>
    string(3) "123"
  }
  [2]=>
  array(3) {
    [0]=>
    string(3) "Joe"
    [1]=>
    string(13) "[email protected]"
    [2]=>
    string(3) "234"
  }
}

Use getRow(n) to extract a single row instead.

getRowAsString(integer rowNum)

Returns the row in the string format used to create it above.  E.g.

| Joe   | [email protected]   | 234   |

 

getHash()

Assumes the the first row of your data is a header and returns an array of arrays, one per “table body” row.  These row arrays have keys based on the header and values from the row in question.

For example:

array(2) {
  [0]=>
  array(3) {
    ["name"]=>
    string(5) "Aslak"
    ["email"]=>
    string(15) "[email protected]"
    ["phone"]=>
    string(3) "123"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(3) "Joe"
    ["email"]=>
    string(13) "[email protected]"
    ["phone"]=>
    string(3) "234"
  }
}

getRowsHash()

Like getHash, but assumes that your data has a heading column rather than a heading row.  Since that’s not true of the data above, the output is a bit odd:

array(3) {
  ["name"]=>
  string(5) "email"
  ["Aslak"]=>
  string(15) "[email protected]"
  ["Joe"]=>
  string(13) "[email protected]"
}

You’ll notice also that it only considers the first column apart from the header column.  Not sure why there’s this inconsistency between getRowsHash and getHash!

The methods in the rest of this document are a relatively recent addition to Gherkin, so you won’t be able to use them if you’re running an older version of behat.

getNumeratedRows()

This is identical to getRows, with one exception:  Rather than the array keys being 0-indexed, they instead correspond to the line number of the feature’s source-code on which that table row was written.  Sample output from the scenario in my feature:

array(3) {
  [7]=>
  array(3) {
    [0]=>
    string(4) "name"
    [1]=>
    string(5) "email"
    [2]=>
    string(5) "phone"
  }
  [8]=>
  array(3) {
    [0]=>
    string(5) "Aslak"
    [1]=>
    string(15) "[email protected]"
    [2]=>
    string(3) "123"
  }
  [9]=>
  array(3) {
    [0]=>
    string(3) "Joe"
    [1]=>
    string(13) "[email protected]"
    [2]=>
    string(3) "234"
  }
}

Notice the keys of 7, 8 and 9.  Blank lines are included in the count, so it matches what your editor would tell you about line numbers.

getRowLines()

Similar to getNumeratedRows, but only returns the line numbers and not the data.  For example:

array(3) {
  [0]=>
  int(6)
  [1]=>
  int(7)
  [2]=>
  int(8)
}

getLine()

Returns a number corresponding to the line number of the feature’s source code on which the TableNode’s first line is written.  Continuing the example above, this would return 6.

Adding a column

What about the reason I started digging into TableNodes in the first place?  It was all because I wanted to write some code to dynamically add a column.

Well, here’s the source code of what I went for in the end.  Hopefully reading it will help you better understand some of the methods explained earlier:

   public function addTableNodeColumn(TableNode $table, $colName, $colValue)
    {
        $extendedTable = new TableNode();
        $rowNum = 0;

        foreach ($table->getRows() as $row) {
            if ($rowNum == 0) { // header row
                $row[] = $colName;
            }
            else { // body
                $row[] = strval($colValue);
            }
            $extendedTable->addRow($row);
            $rowNum++;
        }

        return $extendedTable;
    }

Happy BDDing!

A “Multiplayer” platform game, built with HTML5, PubNub and Twitter.

TL;DR

As part of our new conference website, http://allyourbaseconf.com/, we wanted to add something different.

We decided to make a game from Crafty.js and use PubNub.com to replicate your moves to others playing the game.

It’s like a “multiplayer” game but with shadows rather than real players. We used @Anywhere from Twitter to handle user authentication, and because of that, not one line of server-side code was written.

Multiplayer is hard to do right, especially on a fluid designed website where the game area could be radically different. Read on to find out how we tackled these issues.

Multiplay will be easy. Right?

I’m sure I said that.

Oh – silly me.

After my first experiments of sending X Y positions to other devices, packets landing out of order, juddering and the guy randomly walking off screen in a huff, I headed to the internet.

I ended up with links and links from people smarter than me saying how hard it was, giving very complex solutions and talking about Physics.

Oh.

The first thing I needed to do was get the information to the clients as fast as possible, so I looked for a hosted message passing system with a nice JavaScript API.

Ben, one of my fellow developers, recommended PubNub.com. It totally ticks all the boxes, the api is as simple as ‘send message’ and ‘listen for message’. And it’s fast…super fast.

In my first implementation I decided to send the local player key ups and downs to PubNub and not move the local player until you receive the move back from PubNub.

This worked really well and hardly any noticeable lag.

However, when things went wrong…like key presses landing out of order…the guy would usually go out of control. The reason I did this initially was because I tried to make sure that everyone got the moves roughly at the same time, making it feel more realtime.

To try and counteract these random moves I decided to keep the local moves local, and send them to the other clients.

This kept the man under control locally, but still not perfect remotely, mostly due to the fact that the screen sizes could be radically different in width and in height.

My solution to this was to send each player game area height and width, along with the X position of when the key down and up was pressed.

With a little percentage magic I was able to roughly reset the remote clients position and he appeared roughly were he should be.

I soon discovered I would have to use the same percentage magic to change the players speed, too – bigger remote clients have bigger run areas, so need to run slower to prevent them falling off the smaller local platforms.

The last problem I had to solve was making sure they were on the same platform.

I couldn’t use the percentage trick for the Y Coord because that could end up placing a player inside a platform.

I eventually figured this out by sending the platform the player was standing on when the key up/down was received.

Yes, the game is glitchy and players randomly disappear and reappear on other platforms, however it still feels like someone else is playing in the same world as you.

I have to say thanks to Pete and Ben in the office for the tips and ideas that helped point me in the right direction.

I wasn’t trying to build a true multiplayer game here, because that would be hard….. Right?

Oh, and if you would like to hear the creator of MySQL and other world database experts talk in Oxford…tickets are on sale now!

The Windy City! php|tek ’12 conference

Back towards the end of May, I flew out to Chicago to attend the php|tek’12 conference, organised by Blue Parabola (home of php|architect magazine amongst others). This was the first overseas PHP conference I’d been to, and I was looking forward to meeting people from the other side of the pond as well as spending 4 days hearing the wide variety of talks listed on the schedule. Oh, and enjoying the sights and sounds of Chicago naturally…

Be warned however – this conference was pretty jam-packed with awesome talks so the following may end up being slightly lengthy ;-)

Tuesday

The tutorial day pre-conference was on the Tuesday, and the two sessions were on mock/integration testing (via Laura Beth Denker, Etsy) and API development (via Rob Richards, Mashery). Both sessions went into much detail about their various topics – I particularly enjoyed LB’s talk which covered some of the more esoteric parts of PHPUnit as well as tips on how to speed up running your test suite (including disabling foreign keys, tagging ‘slow’ tests as such and so on). Rob’s presentation covered the various aspects that need to be considered when developing an API – it’s not just “throw up a URL” funnily enough…

Wednesday

Wednesday kicked off the conference properly. And we got issued our badge strip – a novel way to encourage delegate participation and engagement. You get issued badges for basically taking part in the conference rather than just sitting there – so asking questions, speaking to sponsors and so on. Great idea!

Cal Evans delivered a rousing and inspirational keynote, which was particularly enthusiastic for 9am! The title was “!normal === awesome!” – covering how as developers we’re outside of the bracket of “normal” in many ways, but actually that’s OK! He talked about getting involved in the community however you can – speaking, teaching, blogging, being members of or running user groups. This, coupled with Michelangelo’s talk on Friday (see later) has inspired me to attempt to kickstart BrightonPHP – a new PHP user group in Brighton. Thanks Cal! :-)

Following the keynote, I attended Ed Finkler‘s talk on “The MicroPHP Manifesto”. This was great and Ed’s speaking style is definitely inimitable (and engaging!). Ed covered the major micro-PHP frameworks, and general concepts about keeping your code manageable by keeping the codebase small. He also talked about being responsible for ownership of code – including a library in a project makes you then directly responsible for updating and keeping abreast of changes.

Mark Brown, community manager for Windows Azure was next up, speaking about “moving the cloud beyond hype to reality”. This detailed the various cloud offerings in the PaaS, SaaS and IaaS areas. I went with perhaps a slightly unfair assumption that Mark would be pushing Azure but it was a well balanced talk detailing features to look for. I felt the talk lacked some detail on the implications for legacy applications, as detailed in the talk summary, but it was interesting nonetheless.

After lunch, I went to Ian Barber‘s talk on “Taking Sites Mobile”. Ian covered loads of aspects of kicking off mobile-friendly development such as CSS media queries, using HTML5 form types (shouldn’t we be using them anyway?!), being aware of bandwidth considerations and small things like using the tel:// prefix in <a> tags for telephone numbers. A great talk with tons to take away.

The final talk I went to on the Wednesday was “Continuous Deployment at dealnews” by Brian Moon. Unfortunately I had a seat nearer the back, and the lack of microphones in the smaller rooms meant it was pretty tricky to hear :-( Brian spoke about how dealnews carry out continuous deployment and the various options they use for monitoring and alerts. I was expecting a bit more detail on the actual deployment setup and how this was configured, but the amount of tools Brian mentioned such as Loggly, Gomez and so on that seemed pretty useful made up somewhat for this.

The unconferences kicked off in the evening. I really enjoy uncons at conferences as it gives anyone a chance to speak about their passion or a specific topic. I was intending to sign up and present but unfortunately was feeling a bit ill so I just attended a few instead. Elizabeth Naramore spoke about dealing with difficult people – her speaking style is great, and really friendly. She talked about how best to work with people who you may perceive as being “difficult”, ending with “perhaps that person is you”. Which I guess a lot of us always forget!

I also attended the Mashery API building uncon, but again the lack of microphone made this hard to follow, and there didn’t seem to be much support from the speakers themselves in terms of their speaking volume.

Thursday

Keith Casey from Twilio kicked off Thursday with a keynote about being OK to fail. Point being, if you don’t fail, you don’t learn and develop. I agree – as an example, I’d rather have code bite me on the ass to make me learn as a developer what not to do, than to coast through based on copy-paste tutorials from the web :-) There was no chilled start to the day today as I went onto the “mod_rewrite and friends talk” by Rich Bowen. Lots of nifty Apache rewrite tips and tricks to be found here, along with some useful real-world examples; a good talk. I then went to Joshua Thijssen‘s presentation “Rediscovering the SPL”. The SPL seems to be a very underused set of tools in PHP, possibly down to the lack of good documentation for them. There was some very useful detail in this talk, and I really like Joshua’s presentation style.

The next couple of talks I went to were chosen as my Javascript skills are not my strongest skill and I was eager to learn more about best practices and some of the various “hip”(!) offerings out there to aid JS development. Ed Finkler’s talk was first, about fattening your JS in exchange for slimming your PHP down server-side. The main point I drew from this was that rendering server-side makes no sense – it’s not your target environment, whereas rendering in the client is. Therefore it makes more sense to render here using whatever is appropriate for the client (mobile browser, desktop browser etc), based on raw data from the server. Some interesting points here – I’m traditionally a server-side guy, but I can see the benefits here. Following on from this was Ryan Weaver‘s JS Best Practices presentation. This was easily the most entertaining and informative talk for me at the conference as a whole, particularly for Ryan’s use of the Super Mario theme throughout his slides! The concept of Javascript objects vs functions clicked for me about 10 minutes in, which is something I’ve not really grasped properly before. Thank you! Ryan also touched briefly on the use of backbone.js and introducing it into a project.

The final talk of the day was Mike Ho’s “iOS Development Primer for PHP developers”. I was interested to attend this as I’m currently working on a mobile app using Phonegap, but am keen to investigate native app development after experimenting with Objective-C a bit. Mike’s presentation was very good – comparing Obj-C code with equivalents in PHP, which really helped to illustrate the similarities and differences, and dispel some of the myths about Obj-C being a nightmare to develop with. Side note: I’m looking for the slides for this but am failing…

Going into the evening, the Engine Yard hackathon kicked off which was great fun. Lots of beer and food available, and some good swag to take home as well ;-) The atmosphere was really good in the hackathon room, and I spent my time investigating and experimenting with the feasibility of a cross-platform Symfony2 bundle for sending push messages/notifications to mobile devices.

And then it was…

Friday

The last day! Boo! Michelangelo van Dam started us off with a presentation entitled “Community Works!”, where he spoke about getting involved and contributing to the community, “giving back” to it as he nicely put it. The PHP community seems to be unique I think in its openness and friendliness – a big family, and it’s good to be part of that. Even more of a drive for BrightonPHP!

I then went to Joshua Thijssen’s presentation about Public Key Cryptography 101. I should have drunk a lot more coffee before attending this talk – Joshua dived straight into explaning cryptography basics and how public/private key pairs work. This was fascinating and I made plenty of notes, but my brain was not in gear at 10am to comprehend it all! Really enjoyed the meat of this talk though.

The final talk I went to was Mike Ho’s talk on native mobile app development. Mike spoke about the various options available for “apps” for mobile devices and knowing which approach would be best – whether you skip the app part and develop a mobile-friendly site, take the hybrid approach with Cordova/Phonegap, or go down the full-blown native app route – you need to understand where your skillsets and performance requirements lie. A very useful talk for presenting all options without a bias towards one or the other.

And sadly that was it for presentations! Luckily Engine Yard were on hand to provide a very special end-of-conference social event in the evening, which consisted of a fantastic amount of awesomely tasty pizza, followed by a trip up to the Skydeck at the Willis Tower in Chicago itself, followed by much merriment in an “English pub” (which I found amusing, being from this side of the pond!), and it was great to meet some of the people that presented, and also some of those who are well-known in the PHP scene but who I wouldn’t normally come across.

And then home! Some slides from the various talks are available over on Lanyrd. A great conference – so much to take away and so much learnt, plus some great people met. The venue was pretty good as well – based at the airport so free shuttle bus, the rooms were all suites, the wireless worked flawlessly and the food was great. Thanks to Blue Parabola and the whole of the tek12 team – if I can, I’ll be back next year :-)

The Legend of White October

How Dave’s Gran inspired the birth of one of the UK’s leading digital agencies

You may not be able to imagine it, but White October owes its existence to Dave’s Gran.

(Dave is White October’s CEO and founder)

When White October was a twinkle in Dave’s eye

Back in 2003 there was just Dave, recently left university and working a regular job for a big educational IT company.

And his Gran, nearing the end of a life that she transformed in one defining moment in 1928.

Dave had only been working for two years. He had a solid day job and good prospects. White October was just a dream he had about setting up his own web development business. And that’s all it might have remained.

Dave’s Gran dies and becomes a Kickstarter

Then that spring, after a long and fruitful life, Dave’s Gran died and an amazing story emerged.

Growing up without a mother in a small 1920s mining village in South Wales, Dave’s Gran was cared for by her older sister and often absent father. Aged just 14 she made a life-defining decision and boarded a train to London with the intention of striking out on her own.

Her intention was to make a better life for herself and the family she would one day have. She succeeded. In London she got a job as a house maid, hung out with some of the day’s leading left wing thinkers and created an exciting and heroic life that sustained her for over 70 years until she died in 2003.

At the funeral Dave’s brother showed him their Gran’s last letter. She had heard of Dave’s desire to set up his own web development business. She urged him to follow his dreams and go for it.

Dave’s defining moment

This was Dave’s own defining moment. The very next day, on a wave of certainty driven by his Gran’s inspiration he handed in his notice on his job and declared his intention to build a business making websites and digital products.

Just like his Gran’s decision to get on the train, Dave had decided to change the direction of his life and go for his dreams. Talking about it now, Dave recalls his excitement and feelings of pure resolution that this was what he wanted to do.

However, that doesn’t mean it was all straightforward.

The early days weren’t easy

To begin with no one took him seriously. His ex-managers questioned his decision, cautioning him about the pitfalls of starting your own enterprise.

As the seriously junior member at local business networking events Dave was looked down upon.

Living in a shared house he relied on his Dad for financial advice and spent his first summer working from his bedroom in sweltering 30+ degrees conditions with a window that refused to open. The next year his first employee spent six months working out of the kitchen. It was tough.

The spirit of Dave’s Gran lives on

Dave didn’t know how to build a business. He just did it. It’s taken him nine years to get White October to where it is today, with 15 employees and a portfolio of top branded customers like Hitachi, Gourmet Burger Kitchen, and Pearson Education. A lot of that has been slow steady progress but along the way Dave and his team have taken a few more Gran-inspired big leaps.

Two years ago they quintupled their rent in exchange for the energizing and growth-inducing offices they now hold in The Gallery, East Oxford. In February this year they staked a significant investment and showed their determination to explore digital technology by holding Europe’s first jQuery conference.

Deciding to do it felt like handing in my notice again” says Dave. “But it fits with our philosophy at White October. We prefer to take calculated risks on emerging pieces of technology rather than sticking with the standard stuff that we already know inside out. We’re about taking the newest technology and making it work to our purpose so that we can deliver even more amazing results for our customers”.

The next big leap

In November this year Dave and White October will be taking their biggest leap yet when they run the All Your Base [http://allyourbaseconf.com/] conference, a database conference for web developers that aims to help them get up to speed and improve their ability to take advantage of the latest changes in database technologies.

 

About the Author

Joe Roberson uses words and tech to help organisations do more social good. He works with charities and for-profit organisations to create and fund trusted, user centred and digitally savvy services and products. Get more from Joe at www.workingwithjoe.co.uk and on twitter.

 

We are currently looking for a Web Developer

We are looking for a talented web developer to join our innovative web development agency. You need to be a solid developer with a passion for new web technology – this position is ideal for a recent computer science graduate (with plenty of extracurricular projects), or someone who has been in a career for a few years.

Our team of 15 designers and developers create web software and mobile applications following an agile development methodology.  We have a passion for exploration, and you’ll join a team where hacking around with new tech is valued, and where there’s an open forum for sharing your ideas.   We host the UK jQuery conference once a year, and have just launched a database conference called All Your Base in November this year – the conferences are an outward expression of our ambition to lead the UK in the application of web technology.  It’s a flat structure with everyone’s opinion counting, and developers expected to take ownership of their projects.

We work with Symfony2 for PHP, node.js, jQuery, MySQL and MongoDB to name a few technologies, but we are happy to speak to any developers who can show a talent for coding, particularly with MVC framework experience in any language.

We are looking for passionate, engaged and collaborative people.

Email [email protected] with CV/Github if you’re interested in applying.

Note: we do not deal with recruitment consultants – only independent applications will be accepted