September 6, 2023
by Matt Raines

Looking back to 2011

« 2009 | 2010 | 2011 | 2012 | 2013 »

Computer Engineer Barbie at the Prater Raines stand

We had to end support for Internet Explorer 6 this year. It had been out of support for nearly 3 years and had 24 known unpatched vulnerabilities. Believe it or not this caused some consternation from customers whose work environments didn’t allow them to upgrade so we provided a direct download of Firefox Portable from the website backend to anyone using IE6. I hope nobody got in trouble with their IT departments.

Alliance Party website in 2011Our rebrand of the Alliance Party of Northern Ireland’s website portfolio to also run on our political Content Management System might possibly be the Foci site I was most proud of at time of launch. Its clean lines, easy navigation, integration with social media, and clear calls to action would still appeal today. The Welsh Lib Dems site comes a close second. The rebuild of Foci had been designed with internationalisation baked in so after a fresh batch of translations and the integration of a new design we were able to put live a distinctive site that still remained consistent with the party style guidelines.

Poster about the EU cookie lawOur ongoing work with Seymour Transport allowed them to sell ex-hire vans directly from their website and we released a revamped design for London Lib Dems as well.

At Sheffield we hosted our first ever fringe, where a panel of experts including Martin Tod gave their suggestions on how best to convert website visits into votes at the May election ballot box. In Birmingham Peter Carroll and Neil Fawcett discussed their experiences getting the most out of online petitions. Meanwhile Computer Engineer Barbie joined us on stand to advertise that our sites were 45 times faster than our slowest competitor in benchmark tests. The Lib Dem sites got automated broadcasting to Facebook and Twitter, link shortening with our new lib.dm domain, integration with member data from EARS and MDO, and new mobile and accessible views.

The EU’s “cookie” directive came into force and we advertised free checks that your website complied with directive 2009/136/EU at conference. Spoiler: we’d already made sure our portfolio was above board. Some of our MEPs had been instrumental in voting the law in, so we didn’t really have a lot of choice in the matter.

Prater Raines website in 2011Nominet had a busy year. They released all the previously unregisterable two letter .uk domains in an auction. We entered the auction for pr.co.uk but we didn’t quite have the cash on hand to win the bid. One day, maybe. There was a prize draw for domain registrants in which our customers won — absolutely nothing. And Sir Tim Berners-Lee was the keynote speaker at the W3C UK & Ireland Office launch event in Oxford to which all registrars were invited. It is a genuine shame that his speech, detailing how the web was being taken over by corporate interests and needed open standards to flourish, remains just as resonant today.

Radical Middle Way websiteFor reasons that are still unclear to me, I decided to do Movember this year. To this day an unrepeated experiment that we do not talk about. It was around the same time we worked with community interest company Radical Middle Way to transform their existing Symfony website and make better use of their large library of audio, image and video content. I was proud of the result of that at least: a dynamic and highly interactive website with strong built-in search hosted on the client’s own infrastructure. Our experience on our Lib Dem platform helped us make the admin area much more usable and significantly speed up the site too.

Tools of the trade

Location, location, location

The year in tech

Sample code

<?php

class disqusComponents extends sfComponents
{
  public function executeHot()
  {
    $this->loadFavouriteObjects("Hot");
  }
  
  public function executePopular()
  {
    $this->loadFavouriteObjects("Popular");
  }
  
  private function loadFavouriteObjects($type)
  {
    $limit = sfConfig::get("app_disqus_number_of_favourites");
    $method = "get$type";
    $threads = DisqusThreadPeer::$method();
    $this->objects = array();
    foreach ($threads as $thread) {
      $object = $thread->getObject();
      if ($object->getActive()) {
        $this->objects[] = $object;
        if (count($this->objects) == $limit) {
          break;
        }
      }
    }
    // If there aren't enough hot/popular Disqus threads, fill in with the most
    // recently added articles, events, or media files.
    $missing = $limit - count($this->objects);
    if ($missing > 0) {
      $additional = array();
      foreach (array("Article", "Event", "Media") as $type) {
        $peer = $type . "Peer";
        $c = new Criteria();
        $c->add(constant("$peer::ACTIVE"), true)
          ->addDescendingOrderByColumn(constant("$peer::CREATED_AT"))
          ->setLimit($limit);
        foreach (call_user_func(array($peer, "doSelect"), $c) as $object) {
          $additional[$object->getCreatedAt() . "-$type-" . $object->getId()] = $object;
        }
      }
      krsort($additional);
      foreach ($additional as $object) {
        // Don't put the same object in twice (this is also why the limit above
        // is set to $limit, not $limit - count($this->objects)).
        foreach ($this->objects as $existing) {
          if (get_class($existing) == get_class($object) && $existing->getId() == $object->getId()) {
            continue 2;
          }
        }
        $this->objects[] = $object;
        if (count($this->objects) == $limit) {
          break;
        }
      }
    }
  }
}