Archive for January, 2009

Putting Team Rubber on the (a)Map

Ian Ochiltree - January 28th, 2009

Our ‘viral product’ aMap has created quite a stir. 700 arguments have been mapped across the globe since the giant Web 2.0 news gatekeepers TechCrunch and Mashable (amongst others) featured the widget on Monday. Kudos to Erick Schonfield for taking the time to slot smaller start-ups such as ourselves into a news feed which puts us in the company of Google, Microsoft and Apple:

picture 9 Putting Team Rubber on the (a)Map

Book report: Attention and Interest Factors in Advertising

Lisa Rex - January 27th, 2009

dsc 0002 Book report: Attention and Interest Factors in Advertising…And the question is, ‘What is actually new in usability?’

First impression? I thought this book would have zero relevance to web usability because it was published in 1947. There is also a huge usability fail because the book doesn’t have a title on the cover (missing dust cover, perhaps?), though the title is on the spine. However, I did really enjoy reading the book because I love old things and it was quite interesting. As a bonus, I now have a good grasp of what makes for a successful print advertisement in 1940s America.

The results featured in Attention and Interest Factors in Advertising were compiled from 2,500 pieces of advertising that were carefully analysed to determine the public viewer’s attention and interest to individual printed advertisements, thereby determining what actually makes an advertisement effective.

So, as it happens, there are similarities between analysing web usability and analysing effective print advertising:

  • Those participating in the analysis are carefully selected to meet certain criteria but…
    In the advertising study, participants were trained to judge the adverts using a consistent approach, whereas today we choose usability test participants based on our various criteria, but generally are aiming to get a cross-section of people who represent actual users.
  • In the 1940’s and today, we both use technology to compile the results of the analysis, but..Back then, the researchers calculated the results using an IBM 80-column tabulating card, with each card are representing a participant’s response to a single ad. Each card usually ended up with about 50 holes punched into it. Today we use computer applications like Silverback or simply videotape participants. We can create complicated spreadsheets and graphs to show the percentage of people who failed to see the key message on the home page.
  • Eye tracking studies have been around since 1900 or so, when “psychology experiments” showed that people favored the left page. Later, (well, 1937-1941) eye tracking studies also found a slight preference to the left page when this was tested with coupons and newspaper ads.

Since you are twitching to know what makes a print ad effective, here it is (and we can try to apply most of these to web usability!)

  • Volume: The more material within the publication that competed for attention showed a steady decrease in attention.
  • Size: Half pages are relatively more effective than full pages.
  • Colour: There was little difference in attention levels between black-and-white and two colors, but four-color showed a massive increase in effectiveness. Four-color full-page ads cost 44% more than black and white in 1947 (and probably still do). Aren’t you glad you work on the Interweb?
  • Headline mechanics: Shorter headlines that fit on a single line have the highest readership.
  • Illustrations: The larger the illustration, the more effective it is in gaining initial attention.
  • Tone: Did this ad make you feel pleasant, neutral or unpleasant? The unpleasant feeling tone attracted a higher attention Index therefore it’s not a surprise why upsetting/shocking advertisements are still used today.
  • Weak versus strong entertainment appeal: A no brainer … strong entertainment appeal attracts higher readership.
  • Motion: “A moving display in a store window is always a ‘sure bet’ to stop people. The same is true of lighted advertising signs with moving letters and figures. One need only watch the throngs as they stand enthralled before Broadway’s neon wonders to realize the power of moving figures to attract and hold attention.” And that is why Flash is so popular on the web, but…Moving images rarely makes websites more usable unless it’s drawing attention to a single thing that users need to do next.

What is new in usability? Today there are more usability specialists at usability firms, their usability skills backed by HCI courses or degrees in psychology. There are specialist software applications like that can capture and play back usability testing sessions (i.e. Silverback or Morae), make Google Analytics even prettier (i.e. CrazyEgg) and create wireframes and prototypes (i.e. Axure). There’s also about a zillion usability blogs. The specifics of web usability are new, but they were built on established methods.

Lisa Rex

P.S. I wonder how a similar advertising study conducted today would compare? Modern Westerners face information bombardment every day. Have human preferences changed much since 1947? I somehow doubt that 1940s advertising styles would work as well today, but I’d like to think that the basics remain the same.

Hear no viral, see no viral

Ian Ochiltree - January 27th, 2009

I love aphorisms.

In emails and blog posts me and Tim have been trying to come up with the most succinct viral definition.

The results:

“If the number of people who are passed the message in one iterative step is greater than the total number of people in the previous step for some period of the campaign then it’s viral”
Tim

“Hear no viral, see no viral.”
Me

One from blogs afar:

“Viral is a thing that happens, not a thing that is.”
Faris Yakob

I concede to Tim’s description even if it isn’t awesomely aphoristic. It opens up a sense of timescales and an idea of measurement, both of which are the scurge of shorter, more hollywood-wit phrasing around “viral” – such as mine and the others doing the rounds..

What is “Viral Marketing”? (and language->semantic effects)

Tim Wintle - January 24th, 2009

Reading through the RubberRepublic blog, I thought I’d point the whole of team rubber at the article on the semantics of the word “viral” when applied to marketing.

This is a very interesting topic to me. With my leniency towards very specific definitions, I’m going to start right from the start, and explain that I’m certainly not a believer in Wittgenstein’s views on natural language.

To me, it’s not unreasonable to define a strict subset of natural language with a single, well defined, 1-1 semantic value function for discussing technical matters (and I believe the definition of “viral” should fit into such a subset), in the same way that we define mathematical terms in first order logic (I’m not going to get into provability here).

i.e. I think that it’s possible, and reasonable, to define the meaning of individual words which are indisputable and fixed when talking in technical language.

For this reason, it really drives me up the wall when two people talk about something, use the same word, but are actually discussing different things.

An example is how we have recently changed the naming for our “Syndicated Ad Units” (Previously “Content Units”).

When we define terms for such a large system, we are effectively defining our own language (or at least the non-common alphabet – technically the set from which words are taken rather than set from which letters are taken). By changing the naming for the system, we have effectively created a second language.

These languages are technically as distinguishable as programming languages are – and switching between requires the same work as switching between programming languages.

Obviously we don’t want too much redundancy in our alphabet, or we end up

  • Having to remember a much larger set of nouns
  • diverging strongly from a 1-1 semantic value function, which is indistinguishable from the effect of losing orthogonality of the semantic values of individual nouns

To explain the second point, if we mark the semantic value function of a language “I” (for “interpretation”), and we have an alphabet that consists only of the words “abc”, “def” and “ghi”, then if we have orthogonality in semantic values of the nouns, we would have that changing the meaning of “abc” – marked I(“abc”) (though adding functionality to the thing we call “abc”) changes I(“abc def”) in the same way as I(“abc ghi”) changes. It also implies that I(“zyx…wv”) does not change  unless “abc” is part of “zyx…wv”.

We did a very interesting thing while we changed the language used for syndication – we changed which objects have their own names. This changes the set of concepts that can be described with a single word – {I(a) for a in the alphabet}, rather than simply changing the strings used for the objects in the alphabet.

This fundamentally changes the language, and changes the effort required when semantic value functions change (as they always will on a long term software project).

For example, let’s take some of the objects that have changed names (you can see what the semantic values of these names are here):

Old Name New Name
Med. Rect. Gadget Content Unit Med. Rect. Fun Unit (Gadget)*
Med. Rect. Text Link Content Unit Med. Rect. Text Link Fun Links
Med. Rect. Text/Image Link Content Unit Med. Rect. Text and Image Link Fun Links
Fun Link of the day Text Link Content Unit Fun Link of the day Fun Links

* “(gadget)” is added internally for this type of Fun Unit.

By enforcing these changes, several changes to the alphabet are implied – firstly the fact that we do not use “gadget” externally creates two alphabets, and hence two new languages – but the aim is to keep one language a subset of the other one.

Previous alphabet:

“Med. Rect.”, “Gadget”, “Content Unit”, “Text Link”, “Text/Image Link”, “Fun Link of the Day”

New alphabet (internal):

“Med. Rect.”, “Fun unit”, “Gadget”, “Text Link”, “Fun Links”, “Text and Image Link”, “Fun Link of the Day”

New alphabet (external):

“Med. Rect.”, “Fun unit”, “Text Link”, “Fun Links”, “Text and Image Link”, “Fun Link of the Day”

Now let’s look at how orthogonal the meanings of these are…

if we suddenly decided to break years of internet tradition and say that a “Med. Rect”  was actually 1024 pixels wide and one pixel high – that would effect all names with “med. rect.” in them equally. In fact, the meaning has not changed at all between the two languages – it defines the size that the syndicated placement will take up on your website.

similarly, the meaning of “Text Link” has not changed (and although we changed the string “Text/Image Link to “Text and Image Link”, the actual interpretation of these strings has not changed).

If you are looking closely though, you will have noticed that “Fun Link of the day Text Link Content Unit” has changed to “Fun Link of the day Fun Links” – this is an important change, since they have the same interpretation, the meaning of “Text Link” has not changed, and yet “Text Link” is not in the new name. This means that this semantic value must be associated with the phrase “Fun Link of the Day” – and so it is. But “Fun Link of the day” is also associated with a size (this is more obvious in the origional naming conventions) This is a many-1 mapping between the old language and the new one, and as such it changes the implied syntax quite dramatically.

Now for the most interesting strings – “Content Unit” has been changed to either “Fun Unit”, or “Fun Links”. This is very clearly a 1-many mapping during the changeover, which again changes the syntax of the language dramatically.

For example, let’s imagine (and this is purely imaginary), we decided to add a feature that (describing the semantic change in the old language) allowed you to “place your content unit in an RSS feed”.

In the old language, we have just updated the semantic value of “content unit”, however in the new language we have updated the semantic value of “Fun Unit” and “Fun Links”. Thus they are non-orthogonal (in fact, in terms of this change they would be parallel!).

For a user (of the language) who understands the new semantic value of “Fun Unit”, they cannot know that the semantic value of “Fun Links” has changed unless they have some prior knowledge about the language.

But how do we describe this intra-linguistical knowledge in the language itself? We cannot say “All content units have …”, because “content unit” is not in the new language. Rather, we would have to state that “Fun Units and Fun Links have …” – but this requires updated semantic values to two strings from the alphabet. This might not seem like much, but by talking in a specific language we actually train parts of our brains to translate from this language into semantics (this was explained by Derek Smith at the Bristol Knowledge Unconference much better than I could explain it). This is an actual change to our brain that we are requiring – and we are requiring two changes in the new language.

To avoid this, we have added another string to the alphabet of our new language – “Ad Unit”. An “Ad Unit” can be a “Fun Unit” or “Fun Links” – but not both – so the interpretation of “Ad Unit” is the common interpretation between a”Fun Unit” and “Fun Links”.

But then if the semantics have remained the same between the two languages, the interpretation of “Ad Unit” must be the same interpretation as “Content Unit” was before…

That would mean that “Fun Unit” and “Fun Links” (both new words) are completely irrelevant words – since they don’t add any semantic information to the language!

Well, to explain this one we have to go back to the reason that we actually replaced the language in the first place. The first language  was defined by myself and Andy as we were thinking over the technical requirements, for use in implementing the systems. The second language came about after our sales and network teams mentioned that they thought users would get confused over the meanings of phrases.

We took this as a sign that we actually had two languages in use already – since there was obviously some concept that was essential to how this second group of people viewed the system that was not a concept to the technical team.

After some very long discussions, this concept had still not appeared to me, but the non-technical users described something that resembled the new language as describing their concepts better. This is a very interesting point to have come to in development terms – since it appeared to be a sign of what the users want to use the system to which is far better than anything that could be got out of a simple user-interview.

After hammering this out for several days, we finalised the new language. The above examples are only a small sub-section, but they are the section that cause the largest change in the allowed syntax of the language.

What was the difference?

Firstly let me quote the definition that the non-technical users decided on for “Fun Units” and “Fun Links” (I would have been far more strict over the definition, but if you’ve read this far then there’s a good chance that you would have as well; we may re-visit this definition):

  • “A Fun Link is an Ad Unit into which the Viral Ad Network can place a link to site hosting an asset”
  • “A Fun Unit is an Ad Unit into which the Viral Ad Network can insert actual content”

And that seems to be the difference – to me as a developer, there is a difference between the A,IMG,OBJECT,SCRIPT tags etc, – but that difference is contained in the selection between “Text Link”, “Text/Image Link”, “Video Player” (not mentioned previously) and “Gadget” (“Text” can only contain A tags, “Text/Image” can contain A and IMG tags, “Video Player” can only contain an actual video file, and “Gadget” can contain whatever you want).

For a non-technical user, really focusing on “this could be content” is more important – even though you could say that that information is already contained in the language, it’s so important that they want to say it twice.

Hence we’ve got the “old” and the “new” languages describing these things – the old language is cognitively simpler to learn, contains less vocabulary to learn, requires less mental work when new features are implemented, contains a single induced syntactic structure (at least over the vocabulary mentioned here) due to the orthogonality of semantic values, and does not require intra-linguistical “meta-knowledge” to talk about subsets of the language. It also has very low redundancy due to the

The new language has enforced redundancy, non-static syntactical structure, a larger vocabulary, non-orthogonal nouns, and thus has no strict subsets (when talking about Ad Units) that are languages capable of describing semantic updates in themselves. On the other hand, it focuses the mind on what the non-technical users found most important by repeating itself.

As you may have guessed, developers will continue to use the “old” language, and not just because switching over to the new language would require thousands of lines of code to be re-worked.

Tim Wintle

(oh, BTW, My definition of “viral” was brought here)

How to win arguments and influence people

Chris Quigley - January 21st, 2009

“Logic is the anatomy of thought” – John Locke

Formal logic holds that a good argument is a “sound” argument – i.e. an argument in which the truth of the propositions logically guarantees the truth of the conclusion.

By using formal logic, it is possible to infer (via deduction or induction) whether an argument is sound or not by testing whether the conclusion is made true by the supporting propositions.
A classic example of an argument based on formal logic is:
Proposition 1: “All humans are mortal”
Proposition 2:  “David Beckham is human”
Conclusion: “David Beckham is mortal”

In every day life most people use “informal logic” in their reasoning and arguments.  This is a much less strict version of logic that doesn’t accord to the strict rules of inference that formal logic – e.g. mathematical logic -  does.

Informal logic is not so much about “truth” but more to do with “persuasion”.  And as the at the core of persuasion is the idea of making it easy for your audience to “understand” you, it is of the utmost importance to ensure arguments are “well structured” and each part of the argument can easily be picked apart.

A classic format of “Informal logic” is based around a 4-tiered structure:
- Your position (I think . . .) – what you think overall
- Propositions (Because . . .) – reasons that support your position
- Arguments (As . . .) – supporting arguments that back up each of your propositions (this is also referred to as a minor “proposition”)
- Evidence (Supported by . . .) – supporting evidence to back up your arguments

So using this structure, an argument may look like this:
- Position: Liverpool are better than Everton
- Proposition: Because Liverpool are more successful on the pitch
- Argument: As Liverpool have won more cups and are higher in the league
- Evidence: Which is supported by the fact that Liverpool have won the Champions League 5 times, Everton have never won it.

Acknowledging this tiered informal logic structuring means it’s easy to formulate an argument – and equally easy for the audience to pick it apart, and judge for themselves whether they believe in the truth of each of the premises of the overall argument – i.e. the propositions, supporting arguments and supporting evidence.

Additional to the informal logic structure, influential arguers should also takes into account two further components of persuasive argument proposed in Aristotelian rhetoric:
- pathos (the convictions of the audience to whom an argument is addressed)
- ethos (the character of the arguer)

(N.B. Aristotle’s third component was logos – the logic of the argument)

Classic uses of pathos in persuasive arguments include the use of “metaphor” or “story telling”.  By anchoring your propositions in your audience’s world makes them much easier to engage with.

The core to ensuring an arguer establishes ethos, is to show “moral competence” and high levels of knowledge.  This can be done implicitly by the cogency and stature of your argument, or explicitly by ensuring your arguments are well supported by weighty evidence.

So to recap, borrowing off and updating Aristotle’s ancient (and ever prescient) wisdom, there are 3 rules to follow if you’re going to win arguments and influence people:
- Logos – structure your argument well, and make sure it holds true (even if it’s not true make your position at least seem true)
- Pathos – back up your position with propositions which use stories and language that chime with your audience.
- Ethos – make sure your arguments are well founded, and backed up with some juicy (believable) evidence.

The World’s Strongest Truck

Andy Parkhouse - January 21st, 2009

Ally sent me a game about the Volvo FH16 truck because he knows of my big love for big trucks.

It’s a one dimensional game with fake three dimensional graphics. It didn’t hold my attention for more than about 90 seconds, but I did enjoy those 90 seconds. I like the bouncy game physics, and the snowy alpine graphics are nice. I also like how the truck looks like a toy, not a flawed attempt at photo-realism.

I wonder:

  • how well it works as an ad?
  • how they’re seeding it to truckers? My favourite blog hasn’t featured it (so far).
  • if Volvo are going to sell any trucks this year?

TR Take a Break for Obama’s Inauguration

Laura Wotherspoon - January 21st, 2009

It was a busy day yesterday in Rubber Towers, but we all found the time to take a break and squeeze ourselves into the blue room (as you can see, we’re full to bursting at the Towers!) to watch the inauguration of the 44th US President.

It felt like history in the making, and it was. Obama’s speech was pretty stirring, and we’ve high hopes that he’ll put his money where his mouth is, so to speak.

(Just a shame that our American contingent (Lisa) was sadly lacking as she was busy at the vets getting her cats immunised so that they could become American citizens!)

president no44 11 TR Take a Break for Obamas Inauguration

Say hello to aMap

Chris Quigley - January 21st, 2009

Drum roll . . .
I’m pleased to announce to everyone in TeamRubber that aMap has now officially launched!
Huge thanks for everyone who’s been involved with aMap (you know who you are, and if you don’t you’re mentioned here!) + also, a big thank you for all those in the team who are now helping out with the launch.

Most of you won’t really know what aMap’s about – other than seeing copies scattered around the office – and seeing people frantically packing them up. To help understand the background to aMap you should check out the aMap site. Over the next week or so, I will also be posting up blog posts relating to the theory behind aMap – touching on the concepts of informal logic and argument theory – so you can all indulge in some faux philosophical musings.

+ finally, over the next week I’d like you all to help Jake and Helen in getting aMaps out to the world. As part of this we’d like each of you to list 3 or more of your family / friends who you’d think would like aMap and then send them a few copies. We’ve written up some standard letters to help – and Jake and Helen are there to help . . .

We’d also like you all to each create your own customised online argument (using our widget maker) and send these to friends / embed them in your blogs / online communities to get the internet buzzing with arguments . . .

+ finally finally – the next step for aMap is to get it stocked in shops – so if you know of anyone who works for a bookshop / gift shop / publisher or if you’ve got ideas of shops that could stock them do send in ideas to either me or Helen.

Huge thanks + happy arguing . . .

Life is for sharing

Ben Witnall - January 19th, 2009

This is great advertising — so good, in fact, that you don’t have to worry about evaluating the quality of the advertising and can just sit back and enjoy.  I defy you to not have a big smile on your face, even on Monday morning, when watching this:

0 Life is for sharing

Basic Eyetracking using Python – overview

Tim Wintle - January 18th, 2009

Mis-using this blog to write up a personal projects again, I thought I’d explain the basics behind a simple eye-tracker I hacked together a while back (this video from August 08 shows my first version):

0 Basic Eyetracking using Python   overview

I’ve had quite a few questions about how to implement this in Python, so I thought I would explain the general process:

Detecting the Face

The first stage is to take the image from the webcam and estimate where the face is. There are good tutorials on using the haar classifiers that come with open cv to detect faces, and I would recommend reading a few of those.

The important thing is that this stage has to be really fast and give a low false positive rate – so I tweaked the parameters so that the false positive rate was low, and it accurately detected a face position on average about one in ten frames. Since the face isn’t going to be moving much, I used the previous face positions if I had not detected a new one. I did not care too much about accuracy for this stage, though.

Detecting the Eye positions

This is (again) very important, but this step has to be done with a very high level of accuracy for the simple method I used. Since the eyes are expected to be in a certain position on the head, I ran the haar classifier for eyes over the top 2/3 of the “face” detected before, which massively reduces the processing time for this stage.

I also found that I regularly had several suggested regions where the eyes were (possibly because I used a low-quality classifier), so I enforced some hard-coded rules to try to reduce the number of regions to two, while ensuring that they were in fact eyes being detected.

For example, I checked that the two regions didn’t intersect, and that they were roughly the same size. I also checked the probability that they were in that position based on the previous recorded position etc.

Analysing the pupils

Once we have the eye positions, we only look at properties of the image around the eyes. (you can see an example image of an eye region being shown in the video – I analysed both, but I only displayed one)

I really did take a very basic technique here – rather than relying on having a light in front to reflect a white dot in the pupils (which is the standard trick), I simply analyse the normalised moments of the pixelvalues.

(I just realised that sentence doesn’t sound like “simply” should be included, so here’s a bit more background). Basically, when you’re looking a distribution (like the distribution of values along the x-axis of an image), the “first moment” of the distribution is the average position, the second moment is the variance, and the third moment is the skew.

The variance does not tell us anything about the direction of the pupils, so I used the first and third moments in the X and Y axis as inputs to decide where the eyes are looking.

Feeding this into a simple linear learning algorithm worked very well. I did try a few more complicated algorithms, but my quick tests did show that I got almost linear behavior between the moments measured and the (true) pupil position on-screen (probably due to the wonderful accuracy of small angle approximations).

Question: Open Source Eye Tracking

What astounded me was the simplicity of the project -  I think it took me about two evenings to do as much as I had done. Why then does all quality eye-tracking software cost an arm and a leg? Sure, there are algorithms and bits of code out there as part of thesis’, but they all have to be made from source and none of them really have a nice interface.

In my opinion, it would be a massive boost to the FOSS community if someone would focus on building such a system. Something that integrates screen capture, a key/mouse logger, and eyetracking. Unfortunately my code for this was really a quick hack – and I think it would be better to start from scratch than to re-factor the code (which is why I haven’t made it available yet).