Archive for March, 2009
Our good friend Chris Bignell, over at XL Communications, has written a great article about the use of the mobile phone for visitors to events.
Visitors to events are an ideal audience for the mobile as they are nowhere near the usual forms of net access such as a PC or laptop, yet they need information on the event they are at, to make the best use of their visit.
The full article can be found at the Major Events International site (free registration required, unfortunately), but here are some useful snippets:
“According to leading fact-based mobile insight company Mediacells, 92% of mobile phones that were sold in Europe during the last quarter of 2008 were capable of at last some kind of internet access. By the end of 2009 this will be ubiquitous – every phone in everyone’s pocket will be able to access the internet.”
“Up until now, event websites have served as information portals for people before and after an event – not necessarily during. For people at an event, their primary source of information has not been digital, but through announcements, leaflets, screens and other media.”
“Consider for example a major music festival. Rather than relying on providing static information to people either before or during the event, organisers will be able to provide realtime information: which artists are playing where and when; the best route to get to the venue; updates on the weather; even where to pitch your tent. Rather than sending an endless number of irrelevant text message updates, information can be accessed by festival goers at will. They could also add pictures to Facebook and updates to Twitter in real time, creating a sense of community and publicising the event in realtime to the real world.”
This article is very timely as we have just finished a new version of our demonstration festival site which is based on an imaginary music festival, bemokofest. The site is available at http://bemoko.com/b and demonstrates some of the key features Chris mentions in his article.
Hope you enjoy looking at the demo, I wish it was a real festival as the line-up is pretty good!
19 days a go I tagged a twitter message with #badux to indicate a bad user experience between google reader and link through sites. A few days later I thought about this tagging again and decided to see if other people have used that tag – I searched on http://search.twitter.com. To my pleasant surprise two other people had decided to tag tweets in the same way before I had – so I though neat, this twitter tagging has immediately connected me to other people who are interested in the recording of bad (and good) user experience.
I started to do this #badux tagging purely from a personal point of view – it allowed me to record bad user experiences whilst on the move (I do most of my twittering from a mobile). I thought that over a period of months I could see patterns in my reports and then see how I could go about fixing them. I’m really pleased to see how an organic tag naming that popped out of my head on the bus one day, popped into other peoples heads around the same time, even to the point now where Web Biz Strategy have blogged about the initiative – Let’s kick-start the user experience movement on Twitter with #goodux and #badux.
Now if we keep up the moment, soon “real” users will start doing this. It’s a lot less painful than trying to contact a call center or send an email letter in to the ether, it’s so easy to record (since it fits in with twitter habit) and it’s all open for the world to see. Soon service providers who are ready will start listening to this valuable stream of feedback. Another fine example of how twitter can change societies interactions.
Well we finally got around to upgrade all our unit tests to new features. About time really!
We use maven and the maven-surefire-plugin for running our unit tests during our build process. Let’s look at the steps I did to get migrate.
- All our test cases extend from a single abstract test case class called AbstractLiveTestCase that in our Junit 3 integration extended from junit.framework.TestCase. For Junit 4, tests are described with annotations so we don’t need to extend this class anymore – so I (1) removed the “extends TestCase” from our AbstractLiveTestCase
- The Junit 3 TestClass class used to provide all the handy assert functions. These are now provided as org.junit.Assert static methods so I went through each of our tests and (2) added “import static org.junit.Assert.*;” to the top of each class. With the handing auto source code formatting in Eclipse enabled, Eclipse automatically expanded the “org.junit.Assert.*” imports to the explicit ones needed for that class when I saved it.
- And finally (3) Added @Test to each test method so that Junit would know what tests to run.
Basically that was it – surefire/maven/junit picked up the test cases in the new style – and in most cases that’s job done. However we wanted to go a little further.
We had also implemented in Junit 3 a handy feature that outputted a quick ERROR message in the system out of a test run so we could quickly see the failure. By default maven’s surefire simply tells you there was a failure, but you have to look at a file to see what it was. Bit of pain that, so in our Junit 3 extension we would provide more info on the screen when a failure occurred, for example we might see something like:
Running com.bemoko.live.platform.mwc.sites.LiveSiteTestCase
ERROR : *** Test Failure *** Site home not correct expected: but was: @ line 17 of com.bemoko.live.platform.mwc.sites.LiveSiteTestCase (com.bemoko.live.platform.BemokoTestListener)
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.01 sec <<< FAILURE!
In Junit 3 we did this by overriding the runTest method of the TestCase class. In Junit 4 we can use runners and listeners. To start with we set the @RunWith annotation on our AbstractLiveTestCase to indicate that all of our tests should run with a specified runner …
@RunWith(BemokoTestRunner.class) public abstract class AbstractLiveTestCase {
The runner was defined to register a listener …
1 2 3 4 5 6 7 8 9 10 | public class BemokoTestRunner extends BlockJUnit4ClassRunner { public BemokoTestRunner(Class<?> clazz) throws InitializationError { super(clazz); } @Override public void run(final RunNotifier notifier) { notifier.addListener(new BemokoTestListener()); super.run(notifier); } } |
and the listener was defined to listen for failures …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class BemokoTestListener extends RunListener { private static Log log = LogFactory.getLog(BemokoTestListener.class); @Override public void testFailure(Failure failure) { Throwable t = failure.getException(); if (t instanceof Exception) { log.error("*** Test Failure *** " + t.getMessage(), t); } else { if (t.getMessage() != null) { log.error("*** Test Failure *** " + t.getMessage() + " @ " + getErrorLocation(t.getStackTrace())); } else { log.error("*** Test Failure *** ", t); } } } @Override public void testIgnored(Description description) { if (log.isWarnEnabled()) { log.warn("+++ Test ignored +++ " + description.getDisplayName()); } } private String getErrorLocation(StackTraceElement[] st) { for (StackTraceElement ste : st) { if (ste.getClassName().startsWith("com.bemoko") && !ste.getClassName().contains("AbstractLiveTestCase")) { return "line " + ste.getLineNumber() + " of " + ste.getClassName(); } } return "(line number and class not known)"; } } |
in this way I can handle events from my tests in any way I see fit and much more elegant that the Junit 3 implementation I previously had.
Job done and we’re all sorted for our unit test framework for the foreseeable future.
Great new service on web access stats including mobile browser segmentation from StatCounter. See Launch of Free Global Stats Tool for more info on the launch, leading with the headline iPhone Takes Global Lead in Mobile Browser Wars – StatCounter Research.
We commented with “Thanks for providing this stats service – a great service especially on the mobile browser segmentation. There’s an interesting thread going on over at on the momolondon yahoo group – you’ll have to sign up to see the thread, but if you’re into mobile then it’s a very active group and well worth joining. It is essentially discussing mobile access stats between StatCounter / AdMob and Bango. iPhone / iTouch play very high on StatCounter and pretty high on AdMob, but is way down on the list for Bango. This is due to iPhone devices accessing PC sites (a.k.a non-mobile-ready sites) as well as mobile-ready sites, but it shows a great trend on how the iPhone has impacted the way that people accessing the web from their mobile.”
In response to Why iPhone users won’t flock to the Palm Pre come June
“I fancy my bets on Blackberry and Symbian enterprise users defecting to the Palm Pre. That’s where the big delta in user experience lies and if Palm get their marketing and partnerships right the Palm will go down a storm. I got my hands on a Palm Pre at Barcelona MWC and I was sold, but I don’t have an iPhone and I suspect iPhone users won’t see it as anything better if they already know and love their iPhone.”
In response to the utter death of the “mobile web” …
“An interesting point of view and, there are clear current benefits for local apps at the current time, that does not mean the mobile web is over. I’m looking forward to evolutions in the mobile browser – especially with the innovations coming in from the likes Fennec, Opera and Chrome – where deeper device functionality will be made available via the browser. Just think how tools likes Google Gears and AJAX toolkits are changing the way we can build sophisticated web applications on the PC. On the PC, for the majority of my applications, I much prefer a decent web application delivered through a standard browser than having to download an application. I see no reason why the mobile browser cannot achieve the same thing, allowing people to deliver cross-device applications in standard way that one (1) we know and love (2) has already demonstrated it’s value on the large screen. Neither mobile native apps nor mobile web app will conquer all and both will most definitely survive with both providing incredible value in the ultimate goal of delivering great mobile user experiences.”
(Note – as of March 8th this comment has not yet been accepted by rhomobile)
In response to Palm Pre announced …
“We love the palm pre. Got our hands onto it at MWC barcelona the other week. It’s going to make the world of difference. For palm the challenge is going to be around distribution (they need high profile exclusivity operator deals in Europe to benefit from the marketing clout of the operators) and consumer brand awareness (palm has a low presence over hear and those who do know the name often think of it as a has been). I pray that palm get this sorted as they have the tech and UX sorted and it technically deserves to be big.”

It’s great to see the G1 and Google’s Android make such an impression, in the UK in 2008 it accounted for 20% of all contract sales for T-Mobile and mobile broadband revenues were up 250% over the previous year. This is inspite of the fact that the HTC G1 hardware was not all that great.
Having seen the G2 or more commonly called the HTC Magic at MWC recently this is a far superior device, all touch, great capacitive screen, Android OS, I’d say the second best device at the show behind the Palm Pre. This all bodes well for further increases in uptake by the masses of mobile internet, especially when looking at the Palm Pre and even the Garmin Asus Nuvifone G60! However, it’s a shame that the more experienced and mainstream phone manufacurers just can’t get it together and produce phones that will really give users great internet experiences now that operators are starting to provide decent tarrifs, for example Virgin Mobile offer internet access for £0.30 per day.






