Recently we’ve had a flurry of customers wanting the ability to compare the code coverage of their application.
This sounded like a good idea so we asked these customers why they wanted to be able to compare different code coverage runs. The answers were varied:
I want to be able to take a known good baseline and compare it to a run with a regression in it.
I’ve inherited a legacy application and we want to understand the code paths for each given test.
I’ve inherited a legacy application and we know nothing about it. We’re testing it with appropriate input data and want to see which code executes.
For these customers being able to compare their code coverage runs is a big deal. Being able to compare your code coverage visually rather than just know that Session A is better than Session B allows you to quickly and easily identify exactly the area to focus on. It was such a compelling idea we’ve implemented code coverage comparison for all versions of Coverage Validator. This results in changes to the Session Manager and some new user interfaces.
Session Manager Dialog
The Session Manager has an additional Compare… button which will display the Session Comparison dialog.
Session Comparison Dialog
The Session Comparison allows you to choose two sessions and then view the comparisons. Clicking the Compare… button will display the Code Coverage Comparison viewer.
Code Coverage Comparison Viewer
The code coverage comparison viewer is split into two parts, separated by a splitter control. The top part lists each file that is in each session being compared. The bottom part displays the source code coverage for the baseline session and for the comparison session. You can choose to view all code coverage data for these files or to only view the files that are different between baseline and comparison sessions.
You can compare different executables if that makes sense – for people testing related unit tests this can be a valid thing to do.
The display automatically selects the first file that contains code coverage differences and displays the baseline and comparison files in the bottom window at the location of the first difference in the file. As with our other code coverage displays the source code is highlighted to indicate which lines are visited/not visited and annotated so that you can determine line numbers and visit counts.
We recently had some feedback from customers telling us that they were dealing with legacy applications that were configured using large numbers of environment variables and that starting configuring such large number of environment variables via our environment variable dialog was unwieldy.
When I asked “How many environment variables?” I was told “Up to 161, depending on the application”. Ouch. Entering that lot by hand will be tiresome.
To improve the situation for environment variable usage we’ve added three new buttons to the dialog to allow you to acquire environment variables from the Operating System, to import environment variables from an ASCII text file and to export environment variables to an ASCII text file.
Of course once you’ve acquired or imported your environment variables you can edit them as you see fit them either export them or click OK use this configuration on the Launch dialog/wizard. Any environment variables used in a given launch configuration will be used again if you re-use a particular configuration.
On the 1st January 2013 I purchased a Microsoft Surface RT. I purchased the 64GB version that comes with the touch cover. I didn’t purchase the expensive type cover. For those of you that are familiar with my experience with and comments regarding Windows 8 this should come as something of a surprise.
On the Windows 8 blog, on this blog and on the @softwareverify twitter feed I’ve been very critical of Windows 8, the lack of the start menu and how appalling the Metro user interface is on a desktop machine.
Ok, so given that I think Windows 8 desktop is a huge step backwards and I don’t like Metro on the desktop why would I spend money purchasing a Microsoft Surface RT tablet?
The reason I purchased a Surface RT is because I’d seen an early Microsoft tablet just after the Microsoft developer conference where they announced the Metro direction. I liked the tablet but I doubted they could make it work on the desktop. I was an early adopter of the Asus Transformer (a tablet that has a keyboard dock) and I thought it would be daft to miss the Surface experience. I don’t have an iPad, but I’ve seen plenty. My partner also has an iPad.
This won’t be an exhaustive review because that isn’t what I set out to do. I wanted to see if the Surface works for me. Many things that other people want from a tablet I probably don’t care about and I probably care about things that others don’t.
The build quality is superb. I much prefer it to my partner’s iPad (4th generation). The case is tough, light and not flimsy at all. The 22′ tilt provided by the kick stand works well. It’s not going to be perfect for all uses, but works well on a desk, which it was probably intended for.
The USB port is great for plugging peripherals in. I tried a USB powered DVD drive which I normally use with my x86 netbook. The Surface recognised it instantly and allowed me to read the DVD with no problems at all, from both Metro and the Desktop.
The screen is fantastic. Yes, I know it doesn’t have the resolution of the latest iPad. Frankly, if you’re looking at it you can’t tell. The screen construction techniques mean the screen is better than the iPad screen and combine that with Microsoft’s font rendering technology and you’ve got an excellent experience. Couple that with viewing angles to die for and you’ve got a really nice experience. You can watch video from really oblique angles and still see the action with no colour distortion, unlike any other computer (any OS, any vendor) I’ve seen.
The keyboard attaches to the Surface via single magnetic connector. The magnetic keyboard attachment is solid and clunks into place with a firm snap, first time, every time. Fold the keyboard under the Surface and the screen keyboard takes over. The keyboard, although thin and part of the cover works just fine. I prefer it to the keyboard on my Asus Transformer.
When you type, either on the keyboard or the screen keyboard each key has it’s own audio sound played via the speakers. The keys are divided into groups, so letters have one sound, navigation keys another, delete and return another etc. This is very useful and adds to the UX. You very quickly get useful feedback for how your typing is going. The sounds are not unique though so someone can’t audibly eavesdrop on your typing.
The built in mousepad works well enough. Surprisingly good considering the size of it and the form factor.
Battery life is excellent. On standby it seems to last forever, unlike my Asus Transformer. In use I seem to get a day or more out of it between charges. Can’t fault it. Does what it says on the tin.
I don’t like the power adapter. Microsoft have been too clever here. It’s a magnetic power adapter. It can be attached either way around. It would have been good if the manual had said that. The first time I went to charge the Surface I had to search the web to check it was safe to plug in either way around. The last thing you want to do is throw £559 away just because you plugged it in the wrong way around.
Plugging it in can be awkward. Most times it just attaches and starts charging but occasionally it can be finicky and just won’t connect. And no matter how hard you push it won’t connect. You have to disconnect and then try again. Doesn’t happen often but when it does it can be very annoying and waste a bit of time. I’m not fat fingered. I play mandolin and bagpipe. I am dextrous. This isn’t a problem of a clumsy user. It’s a problem of a not quite right power adapter.
And once you have it plugged in how do you tell if it’s charging? Well the obvious place would be a charging led on the Surface itself. This is standard convention on mobile phones, all other tablets, laptops, netbooks, etc. Typically two or three colours (low, medium, full charge). The Surface? Not a chance. No leds on the Surface. The charging led is on the end of the power adapter next to the magnetic attachment. Which means until you notice it you won’t see it, especially if you’ve oriented the power adapter to face down (if you have it on the kickstand when you are charging). In my case, I again resorted to the web to check if there was a charging led, finally found it. Multi-colour? Nope. Just white.
I also don’t like that the charging led is not on the Surface because what if there is a problem with the attachment such that the led illuminates but it doesn’t charge the Surface? If the led was on the Surface you’d know for sure that power was getting through. As it is you just have to trust that the cable is OK and that the Surface is charging.
Summary: Fiddly attachment. Led in wrong place. Led should be bi-colour or tri-colour. Far too clever for their own good.
User Experience, Metro
The Metro user experience is superb. Metro with a touch screen just works. The various slide in from the side operations and left-right-left to reveal the running tasks is so easy to learn. It seems very natural when you do it with touch. I much prefer this to Android or iOS. You can also kill any running Metro application by simply sliding from the top to the bottom of the screen. Simple, easy, efficient.
I also like that when you swipe from the right it displays the charms bar on the right (search, settings, etc) and also the time and battery life on the left. Any running application keeps running. So you can do this in the middle of a live streaming broadcast to get a quick idea of the time then swipe to the right to dismiss it. Two swipes with a minor pause between and you’ve just seen the time. Really simple and easy.
When you drop out of a Metro app it effectively stops running. Go back to it and it’s running. This works brilliantly with applications such as Netflix which instantly restart. Even if you put it into standby then bring it out of standby, it restarts, which in the case of Netflix is a brilliant user experience.
Internet explorer is a great user experience with Metro, the various swipes/slides working together really well. I particularly like the ability to pin a web page to the Start Screen. I’ve pinned BBC iPlayer, The Times, The Guardian, The Economist, various technology blogs, Business of Software video page, etc to the Start Screen and then moved all the pinned tiles into logical groups. Very, very nice touch.
I didn’t even bother using the Desktop version of Internet Explorer. Why would I bother when the Metro experience is so good?
I think putting the “go forward” navigation button on the right handside of the display is a blunder. I always look to the left to locate this. It should be on the left of the navigation bar, to the right of the “go backward” button. Just like in every other browser. The fact it’s a tablet doesn’t change this. I lose more time looking for the button that I would possibly save by having it under my right thumb. Yeah, people navigate by thinking which thumb a button is under? Really?
Flash support is better than for say the iPad but not as good as the Asus Transformer (an Android tablet), in that some websites can display Flash content (for example WordPress and YouTube), but others cannot (Channel Five television – a UK channel). Why not? Who knows. This is just sheer stupidity on Microsoft’s part. There is no value to be gained and much to be lost by banning support Flash from arbitrary websites. So if I want to catch up with something Channel 5 show I have to use my PC or my Android tablet. How daft is that? I’m going to watch it anyway, so let me watch it on my Surface.
Mail, People, Skydrive
I haven’t really had a need for these, so can’t comment on them.
I found the Maps application to be useful. It seems to match Google Maps for the tasks I need.
The app store works. People complain that there are only 25,000 applications in the store. Do you really have time to choose from that many applications? The fact that iOS/Android have more is simply an I’m bigger than you contest. It’s meaningless. What matters is are there apps you can use and are they of good enough quality? So far I’ve been able to find apps to do what I want and yes they’ve been OK, some have been excellent. This can only get better over time.
I downloaded apps from Amazon, Kindle, Ebay, Netflix, TeamViewer, RemoteDesktop, MetroTwit, The Economist, etc. No problem with these.
When downloading an application rather than having an “it’s working” indicator it would be useful and sensible to have a progress bar so you can see how long it is taking to download the software. Both Android and iOS have this. Surface doesn’t.
I also found that the Store would often fail to download an application, or would say it had lost it’s connection to the Internet far too easily (when you checked the ‘net was always there). This marred the store experience on occasion.
Occasionally you’ll find an application is misbehaving. This is easy to solve. Simply swipe from top of screen to bottom. The app is killed. Simply restart from the start screen.
On two occasions, once after configuring the WiFi and once after some software updates I found the networking would not work. Simply rebooting (or powering down then back on) resolved the problem. Interestingly you find the power button is under settings. In Windows 8 on a desktop this seems (and is) nonsensical. However for a tablet this works nicely – keeping a dangerous action like this hidden away from accidental triggering.
User Experience, Desktop
The desktop experience, as with Windows 8, is still appalling. It doesn’t work well with touch. And without a Start Menu you are lost as you can’t find anything with a mouse. So then you are stuck with the Start Screen, which for working with the desktop is a waste of space. You lose your context when you switch to the start screen from the desktop. Search results are gone when you go back to it from the desktop. It’s broken.
And worse than that because you can’t load your own ARM compiled applications you are stuck to doing whatever you can do with the version of Microsoft Office that comes pre-installed. I don’t have a use for office. For me I’d like to install a couple of my own applications compiled for ARM and possibly a non-Metro email client (Thunderbird, again compiled for ARM).
Frankly without a start menu to get quick and easy access to the programs I want it’s too hard to use. The Start Screen is just a hopeless way to work with the desktop:
Go to search, then find Apps, then scroll right, then hunt around until you find the icon, if you are lucky enough to have that program listed.
Type the name of the program, assuming you know the proper name of the program.
The first method is painfully slow. The second method requires me to remember the names of lots of programs I don’t know the names of. I just know the human readable name and the desktop icon. Trivially easy from the desktop and start menu. Slow, tedious, error prone or impossible using Metro.
The good folks over at XDA-Developers have worked out a hack that will allow you to load and run ARM compiled binaries on the Surface RT.
The main problem is I don’t want (or need) to learn a new desktop working behaviour when I already have one that is very efficient. The Windows 8 method is really slow, labourious and actively gets in my way. This will never work. Microsoft would do better to realise that the Desktop and Metro are two separate ways of working and they should modify things to allow Desktop users to work in ways that are effective for the desktop without imposing Metro on them. And vice-versa for Metro users.
Do I like the Surface RT?
Yes. Very much. Despite my criticisms this is an excellent tablet. Microsoft have made some stupid decisions, mainly for ill advised market segmentation reasons, to do with the desktop. But I didn’t buy it for the desktop. I expected the desktop to be unusable without the start menu and I was right. I bought it for the tablet experience, which is excellent.
I’ve had my Asus Transformer since it was launched. I use it occasionally, but the not so good standby time and the dreadfully short charging cable meant that I pretty much left it in one place in the house. My Surface RT however gets carried all over the place, it’s thinner, lighter, better screen, better UX.
Should I have purchased an iPad 4th gen? No, I don’t think so. My partner has one of those and she is happy with it. But I prefer the UX on the Surface RT (if we put the desktop abomination to one side, seeing as the iPad doesn’t have that anyway).
So there you have it. I still hate the Windows 8 Desktop experience that forces me fight Metro. But when using the Surface as tablet I love Metro. Metro just does not and never will work well with a mouse. Just don’t even waste your time trying.
This is a wasted opportunity for Microsoft. Great hardware marred by stupid software decisions.
People want a full day battery life tablet. The Surface RT is that.
Microsoft should stop with the stupid marketing tricks and allow side loading of ARM compiled Desktop applications on the Surface RT. Then business customers could have a full day tablet that can do their work. The Surface Pro doesn’t provide this.
Microsoft need to sort out their marketing. So far it’s been so bad it’s been invisible.
If my experience with the Surface RT is anything to go by the Surface Pro will be a hit. Shame about the battery life.
Things to fix:
Start menu on the desktop.
Allow ARM compiled applications on the desktop.
Flash support for all websites.
Stop trying to shoehorn desktop users into the same paradigm as Metro (for any version of Windows 8, Surface or PC). It doesn’t work.
There is a problem with recent versions of our software released prior to 5 December 2012.
The problem is that some people will experience a delay when the software tool shuts down. You may think the software has hung. It hasn’t, if you wait it will shutdown. A similar problem may happen when you go to install the latest release from 5 December 2012 – this time the install happens OK but when you enter the license details the dialog takes a very long time to close. You may think the software has hung. It hasn’t, if you wait it will close.
Both of these problems are caused by a bug which causes two registry entries to grow in size. The fix is to install the new versions released on 5 December 2012 (or any subsequent version), or to do a registry hack.
To fix the problem by editing the registry start the registry editor regedit.exe.
Navigate to HKEY_CURRENT_USER\Software\SoftwareVerification\Product-Name
For example HKEY_CURRENT_USER\Software\SoftwareVerification\C++MemoryValidator
Now delete all subkeys that start with “uiGlobalHook”.
This change will stop the problem for a while. However at some point these registry entries will grow to a point where they slow the software down. When that happens you will need to repeat this process. We recommend that you update to the most recent version of the software. If you have purchased our software you will have been sent a link to the latest version of the software. Please check your inbox for 5 December 2012.
Please accept our apologies for allowing this bug to get into released software.
Friday 26 October 2012 was Ogilvy Lab Day, held at Ravensbourne next to the O2 Arena, London, UK.
I apologise if any details are incorrect (please notify me) as I am writing these notes from my hand written notes on the day. I can’t always read my own writing!
Ogilvy Lab Day has been running for 10 years (I think) and this was the first time they have held the event outside of Ogilvy. Another first, they allowed members of the public to attend . You had to apply and if they thought you matched their criteria you could attend.
The audience was comprised of media creatives, advertising people, marketing people and another group which they referred to as “coders”. Thanks but I’ll keep my software engineer title. Coder implies I don’t think, just do as I’m told. The reality is if you want anyone any good, you want a creative person, a software engineer/developer. Whether the use of the word “coder” is ignorance or deliberate I don’t know. Based on continued reference to coders through the day by various speakers I think they see the creativity completely on the media/advertising/marketing side and software people as merely people to do their bidding. I hope that isn’t the case. Given the increasing reliance on interactive marketing having good software people is and will increasingly become a must, even in the advertising industry.
The day starts with an introduction about education, DMIC (Digital Media Innovation Consultancy) and the relationship with Ogilvy and the future of the ERDF (European Regional Development Fund). Ogilvy and Ravensbourne have had a relationship for the past several years, which has benefited both parties, with Ogilvy hiring some talented graduates from Ravensbourne.
The room contained 3 large screens. One large screen at the front and smaller screens at each side. The event was filmed. Video clips were interspersed with the talks. The title of the day was “Storytelling”. As such, the day covered various topics and contained stories from two women during the day.
More people attended than could fit in the main room. Apparently these people could watch from monitors in another room. Many extra people crammed into the room and stood around the edges or sat on the floor. An A4 ring bound white paper (40 pages) was available on each seat – “Making magic, using logic”. This file described some of Ogilvy’s methods for creating their work. I was lucky enough to get a chair and white paper.
A couple of animated clips of points from Rory Sutherland’s Wiki Man book were shown on the screens.
This talk was given by Doug Scott and Cody Hogarth.
Ideas can come from anywhere.
They demonstrated several examples from the 60s, 70s and 80s. One such example was a Flintstones cartoon promoting Winston’s Cigarettes from the 1960s. How times change!
This is called Brand Equity.
Fast forward to 2010 and it’s all about co-created content. This is Collaboration Equity.
77% of TV viewers watch with another device at the same time.
40% of viewers watch and surf the web at the same time.
68 million on mobile.
248 million on tablets by 2015.
The “Fear of Missing Out” (FoME) is driving all this.
2011/2012 is the tipping point. Content must work on multiple platforms. An example given is Coca Cola’s “content 2020″ program.
The speakers observe that “creative excellence is going to be superceded by content excellence” and that “VC funds are redirected from tech to content”. This is a $1.8 trillion market.
Types of program
Digital – downloadable or streamed, Broadcast – traditional TV broadcasting, Event – related to an event (for example the Olympics), Property – or related to a property of some sort.
Example: Make It Possible (I have note next to this indicating Coke 2020). Entertainment first, advert second. It’s not even a balance.
Example: Red Bull content for brands. Started by paying for the content to be shown on networks. Now the content is so high quality and there is a demand from the networks for extreme sporting content Red Bull can charge for their content. There is never an explicit advert for their product, but the branding is all over it. Red Bull’s work is produced by their own in-house media company, Red Bull Media House. Red Bull also release their work on a dedicated You Tube channel.
We were shown an excellent extreme snowboarding video promo which I later found on the Red Bull Media House website. It doesn’t appear to be available anymore, but this page contains videos of similar quality for other sports.
Example:Carling Lager. Carling Black label football campaign.
Example:Intel. The “vice magazine” creative project.
Example:Canon: “Project imagination”. This improved Canon’s marketshare.
Example:Mont Blanc watches. This was a compilation of 1 second videos to celebrate the beauty of a second.
Example:American Express. The Hidden Talent program. Sorry I couldn’t find any examples of this work.
The barrier for participants in these types of programs must be as low as possible and must be social and/or viral.
Branded Entertainment Assessment Model
Content strategy leads to brand wealth.
Story about IBM’s Watson computer which featured on the US TV show Jeopardy. By the end of this unusual appearance of a computer on a TV game show, the results were 21x revenue with 3x profit. An estimated $50m marketing value.
The talk now moves on to discuss BEAM, the Branded Entertainment Assessment Model, which is described in detail in the white paper.
This story is told by Pat Cadigan, a female American science fiction author. Pat’s story is hilarious and involves nearly dying from anaphylactic shock (twice), once from prescribed drugs and the second from a contraceptive vaginal sponge that failed to work properly.
Two quotes from this story stood out.
“Children are wonderful, where do all the mediocre adults come from?”
“Make a difference, don’t hate your life.”
Case Study #2, Ford and Channel 4
This case study is presented by Cody Hogarth and Rob Romsay.
The case study is about “The Endless Winter (A very British surf movie)”. The movie is about surfing in the UK and features two surfers spending a year (I think) travelling the UK in search of surf, travelling, sleeping and living in the Ford S-Max on the days they are away from their families surfing.
The Ford S-MAX is an SAV (Sports Activity Vehicle), not SUV and is aimed at people in their early 30s who have a family but are still active with sports. Surfing seemed an ideal vehicle for this, sorry I didn’t intend that pun. It’s a crowded market so they used content marketing to penetrate the market.
The aspriational product placement film was re-scripted to make it more like a “Channel 4″ production. More graphics were added to the film to make it appeal more to non-surfers. This is known as surf-porn.
The film was 90 minutes in length. This was then edited into 3 films of 30 minutes so that it could be shown as a film or as three separate shows depending on the channel or time of day it was being shown.
2.7 million digital viewers.
14 million broadcast viewers.
167 million watches.
They also held 8 events (2 at beaches and 6 in cinemas).
The film won an award at a film festival.
The £3 million price was paid by Ford.
Case Study #3, Transmedia Skins
This case study talked about the TV series Skins and how different media were used in the creation of Skins and the overall strategy. Skins is not just a TV series.
The creation of Skins as well as involving the traditional TV script writers, actors, production crew etc, also involved a content design company, games and adverts.
The main problem is how to deal with multiple series of a TV show when sometimes the characters are different from series to series.
50% of views are not from broadcast TV. 4oD is also available as an app. Viewing also happens on iPad and XBox. Much of the viewing is time-shifted from the original broadcast time. Demographics are 16 to 34.
There are two timelines. The first timeline is the video/casting timeline. The second timeline is the offline timeline where they make the characters “live” using Facebook posts, tweets and interviews. This second timeline is independent of the video, although it has to be in sync and cannot reveal any spoilers for the video. To do this they hired extra staff to play the offline part of the characters and develop plot/storyline for the offline periods (between each series). They developed a custom software tool to do the job – a beats and stories tool.
Panel Discussion – The Virtuous Cirle of Transmedia Storytelling
The panel comprised Doug Scott (Ogilvy), Bruce Daisley (Twitter), Danielle Style (Tumblr), Ian Forrester (BBC R&D), Cait O’Riordan (BBC Olympics).
I only have rough notes for this.
BBC Olympics had:
57 million unique users
111 million streams of video
12 million video streams to mobile devices
Did not exceed BBC’s capacity planning despite the planning being guesswork (no baseline to work with – previous Olympics and Commonwealth games with less people having broadband, no reference point). All it all worked just fine! Result.
“Binders full of women” Obama campaign produces Romney misstep.
“Tidal wave of crap that comes at us”.
Tracking sentiment via social media during Olympics.
Viral is a dirty word
The speaker is Olivia Rzepczynski.
The talk starts with some examples of what constitute a hit. “overnight successes” to organised events to completely unplanned successes.
The Gangnam style hit by “PSY” is not an overnight hit. This is his 6th album.
Red Bull Stratos.
8 million view live.
60 million views.
490 million people viewed Charlie Bit My Finger. $500K earned by the family. Now pursuing a collaboration with Ragu.
Four percent of YouTube videos get over 100,000 views.
YouTube is the second biggest search engine in the world.
5 Step Plan
Have a plan of action
Creative in context
Distribute and promote
Measure what matters
1) Have a plan
You need to identify a trigger event for your video. What will cause this to be interesting?
You need to account for different screen sizes. 20% of YouTube video is watched on mobile devices.
Define your “post-play” interaction (PPI). This is the conversion. Examples might be signing up, watching a movie, downloading a white paper, etc.
2) Creative in context
What is the job to be done? (Clay Christensen will love that )
Make lives easier
Sources of video:
Work out the script beforehand.
All dialogue, stunts etc.
Tags, metadata, etc.
Channel naming (video SEO – VSEO)
4) Distribute and Promote
You need to careful how you do this. This advert for Liquid Plumr went viral and even ended up on porn sites.
5) Measure what matters
Measure conversions as well as likes/plays
Case Study/Panel Discussion
There was a case study but nothing I felt worthy of noting, followed by a panel discussion for which I have no notes. Can’t have been that interesting
Story Telling – Incredible Edible
The next speaker was an amazing lady from Todmorden Incredible Edible. She told the incredible story of how Todmorden went from an ordinary slightly run down town to a place covered in vibrant planters, disused land turned into viable allotments, crime reduced. And all of this done by volunteers spending time tending to plant beds, replacing weeds and flowers with edible food.
The talk was wild, funny and informative. The speaker (I think may be Pam Warhurst) was mad, passionate and crazy (in a good way). Brilliant. Talk about audience engagement. A great speaker at any event and a superb inspiration for what can be achieved in a community.
Food, creating a revolution.
“If you eat, you’re in”.
Every egg matters.
Green Route Map.
The power of small actions.
The subtitle is “How to grow your business using data you already have”.
You can also use free data. Free data is available in product reviews. For example look on Amazon at any product then look at the product reviews for that product. For me, I always read the best AND the worst reviews and include those as data points along with everything else I already know about a product.
Data Visualization, referencing Ed Tufte (giant in this field, Google him).
Data Ink (amount of ink must correspond to size of data)
Chart junk (don’t add stuff to a graphic that is decoration, that has no value)
Apparently a talent crunch is coming. There are not enough people with good, relevant statistics training. As such getting good analytics in the future may be hard.
“Everyone has got a plan until they get punched in the face”, Mike Tyson.
Agility. OODA loop, created by man that designed the F16 fighter.
Sense -> Orient -> Create -> Intent -> Sense -> Orient ->…
Data is used in the basement, but not in the boardroom. This needs to change.
Double Hub blog (sorry, I couldn’t find this) attentionwizard.com
At the end of the day Dmitri signed and gave away a large pile of his books. I haven’t yet had time to read Dmitri’s book. When I do I’ll write it up. It looks really interesting.
Rory was the last speaker of the day. He had been unwell prior to the talk but decided he was well enough to attend. He was talking about behavioural economics.
People are influenced by:
What I do
What others do
When and where I do
Market research, problems.
Sunk cost bias. Innovators dilemma.
Things need to be consistent.
The framing of student loans in the UK.
If you call it a loan people feel like their is a nose around their neck for the rest of their life. This is wrong because you only pay the money back if your income exceeds a certain threshold and even then you pay it back as a small increase on your income tax. There is no penalty for late payment and no bank to foreclose on you. If you reframe the student loan as simply a small increase in your income tax until the money is repaid it is clear for any student from any background, wealthy or poor to see that they don’t have a noose around their neck and the offer is a good one.
Start with theories then use the data to validator or invalidate it.
Reference to Peter Drucker (he gets into so many talks!)
I have an MP3 of this talk, but at this time I don’t have permission to post it. When I do I’ll make the MP3 available. When I get more time I’ll provide detailed notes of Rory’s talk from the MP3.
As usual Rory’s talk was very funny and entertaining.
I’m very pleased I could attend Ogilvy Lab Day and delighted that I was allowed to attend. I’m not exactly a media type, whatever one of those is. I don’t use that term as an insult. It’s simply that I don’t know what jobs most of the other people in the room do. I guess most were marketing, sales, media creation (design, graphics, video, audio), etc. There were some software people there as well.
It was an interesting experience being there. At first I wondered why I had attended. I was watching these lovely videos (some of which I’ve managed to include here and others which I could not find to show you) and listening to these interesting talks about an industry I know nothing about. And I was thinking “this is great, really interesting, but why am I here? What can I learn? And can I help anyone else that is here”. Anyway as the day progressed the topics turned more towards things relevant to the software industry and I started to understand more of what is involved in the transmedia industry. I have a much better understanding and respect for the work these people do than I did before I arrived. It’s clear the people in this industry are there for the same reasons people enter the software industry. They enjoy it. They thrive on being creative and having a challenge.
It’s the same and it’s totally different. If that makes sense.
I really enjoyed it. It was a blast.
And I got to see the Millenium Dome, now christened the O2 Arena. Much smaller than I expected. I just don’t understand where the money went. A billion pounds (1.6 billion dollars) for that? You’ve got to be kidding.
Software is great isn’t it? Configurable, flexible, modifiable, bend it to any shape you want. In short it’s very very useful. It also causes you to tear your hair out from time to time, but that seems to be par for the course.
But the way we produce software generally involves a lot of sitting down. A few folks have gone for standing desks, but I’m not convinced that is good for you either (your body is designed for movement, not standing in one place for any length of time). Sitting in one place is also not brilliant, but it can and should be less damaging than standing.
So if I’m sitting down a lot of the time there are some consequences.
The first is that you are not doing any activity that will keep you physically fit.
The second is a lack of activity, so you won’t burn as many calories as someone with a more active job.
The third is that if you’re desk, chair and monitor are not setup correctly you run the very real risk of physical injury and pain, in the form of Repetitve Strain Injury (RSI).
To counter your lack of physical fitness due to the nature of software engineering being a desk bound activitiy you’ll need to do some physical exercise. Due to my history with RSI I have injuries that I need to work out, I’ve adapted my swimming style to emphasize stretching (which means I don’t have to do all the physiotherapy exercises for 20 mins 3 times a day).
But if swimming isn’t your thing, you can run, cycle, go to the gym, badminton, tennis, squash, fencing. There are lots of sports to choose from, although I think the raquet sports are probably not a good idea as if you’ve got any wrist related RSI problems (carpal tunnel etc) then you’ll want exercise that doesn’t involve hitting things and the strain going through your wrist.
As a general rule I recommend exercise in the evening. All sporting world records are set in the late afternoon or evening. The thinking behind why this is so is that the body has warmed up and relaxed when you’ve been awake that long, whereas in the morning your body is not so ready to perform. Now I’m not expecting you to be trying to set world records, but it seems to me if it’s true for top atheletes then a simmilar affect will also be in place for anyone else working out.
I know some people recommend exercise in the morning and they say it wakes them up and envigorates them for the day. I find that incredible, I’d expect to be worn out and sleepy, certainly by the afternoon if I’d burnt a lot of energy first thing. But hey, everyone’s physiology is different, so experiment, find out if you prefer morning or evening and go with it (don’t fight your body’s natural rhythms).
Lack of Activity
To counter the lack of activity you can exercise before and after work.
What about at work? Well you can choose to take the stairs rather than the elevator. I made this choice every day (to go up and down 3 floors) for the nearly 3 years I worked at SolidWorks R&D in Cambridge. I could never understand anyone using the lift, and when you did see people using the lift, almost invariably they were severely overweight and unfit. It seems a no-brainer to me, but clearly not their priority.
You can also choose to cycle to work rather than drive (easier said than done depending where you live). Or park some distance from work and walk the rest (I used to park 1 mile from SolidWorks and walk the rest – mainly because in town parking was £10/day ($15)).
You can also get a device to help you monitor your exercise level. This year at Business of Software 2012Noah Kagan asked the audience if anyone had a FitBit. Quite a few hands went up. I confess I don’t have one but I’d been out for a meal with Trevor Lohrbeer and Levi Kovacs on Saturday evening before the conference they had both sung the praises of FitBit and both were wearing theirs.
You can also set timers to ensure you get out of your chair on a regular basis. Maybe walk the long way to the kitchen/vending machine. I seem to remember Noah Kagan talking about the games he plays at his office to get his FitBit count up. Sorry I don’t have a reference for this.
Repetetive Strain Injury
Repetetive Strain Injury is also known as Work Related Upper Limb Disorder (WRULD) in the USA. WRULD incorrectly characterises any injuries as being work related and also upper limb only, neither of which is correct. Repetetive Strain Injury is the correct term.
RSI is a very real risk to you if you type a lot (if you’re a software developer, yes you do type a lot). I’m not going to go into detail about RSI here as I’ve already written about this subject on the Object Media website.
Living your life
You can also choose to deliberately do some activities that business and money gurus such as James Caan and Ramit Sethi would advise you to spend money on (because your time is more valuable than the money). An example would be mowing the lawn, or taking garden waste to the recycling centre (or landfill, as the case may be).
They are of course right, your time as an entreprenuer is more valuable than the money it would cost to hire someone to cut your grass or take the waste to the rubbish tip. But spending money can’t make you physically fit or burn calories for you. Only exercise can. I’ve found that often the things like gardening tasks exercise different muscle groups than your chosen exercise regime. So you get a double bonus because you are improving what was being ignored.
I also happen to hate being physically unfit. When you’re unfit it’s harder to do things. Everything seems like a chore or is impossible. But when you are fit they are easy or actually attainable. As such I occasionally like to do manual labout tasks such as these.
I also happen to feel that you have a better idea of what people doing manual labour for (when you do hire them) are going through if you do it yourself sometimes. Very easy to forget what it’s like. Once you’ve lost touch with that you can be rather unreasonable with people. That isn’t nice.
Today I’ve been loading my car with all the garden waste from the front garden and the Cherry tree I cut prior to Business of Software. It took two trips, I got filthy, I did a load of exercise. And spent some time outside. Not thinking about software. Sometimes you are better to be away from the screen. Did the business keep running? Of course
I often find that cutting the grass is one of those occasions when I zone out and the next thing I know I’ve solved some important problem and amazing the grass has also been cut. And particularly aware of doing either activity.
Just to be clear I’m not saying you should do every task, I’m just saying why not choose to do some of them rather than always pay people to do them for you. You can can’t buy fitness.
Anyway, something for you to think about. Sure you can outsource all your manual labour tasks if you want, but you’ll just have to spend more time doing exercise later.
Yesterday I had the honour to play with the Business of Software big band at the conference party in the Julep Bar, Boston, MA.
The band members are delegates at the conference. I think it’s fair to say that if you are a marketing monster, a sales superstar, a software geek or a data nerd you probably don’t have time or energy to also be a professional musician. So I’ll make a guess and assume that everyone else is, like me, an amateur musician, playing for fun and pleasure.
The true test of a band is when they are playing how many people stay in the room continuing to do what they were doing before? If you’re doing badly you interfere with their conversation and they leave. That didn’t happen. Result! The band passed the “radio listening” test.
On Sunday I attended the practice in the afternoon but had to leave early because I was too tired. I found out later they practised until 8pm (about 6 hours total). Respect.
The band played some rock tunes then asked me to play some folks tunes on my border bagpipes. I chose to play three traditional French folk dance tunes (a 3 time waltz, a 3/8 bourree and a Schottische) followed by a Mazurka that I composed. I was accompanied by Patrick Foley on violin and Alexander Yumashev. Patrick free formed around the tune I was playing adding whatever counter melody he thought fitted. Alex, well Alex is Mr FunkMeister. His bass playing added lots to our performance. The sound was rounded out by the very capable Mr Unknown Guitarist. I never did get his name.
In the UK I play these bagpipes to provide music for other people to do traditional French dancing. I also dance. I may play unaccompanied or with others playing Hurdy Gurdy, Melodeon, Accordion, Violin, Clarinet and so on. All unamplified. I travel a wide area to play in sessions where I like the musicians. I’ve never played with an amplified band before. Surprised how well it worked.
Playing tunes live is a strange thing. You can practice and practice and practice and then on the day some thought about something trivial gets in your head and you’re unsettled, nervous and tense and you just can’t play fluidly. You play badly. Other days you have this “I don’t care attitude” in your head and you’re relaxed and play awesomely. And other days it goes to plan. You can’t tell. Although I had volunteered for this I was a bit apprehensive about how things would pan out. If I could actually deliver the goods.
I am stunned at how relaxed I was. I only sway side to side when it all just works. And we’d never played before. The others hadn’t even heard the last tune before I started it. They did a great job making me sound better than I am.
So thank you guys for letting me play with you. Thank you Jeff Gibson for doing the hard work and herding all the cats into one place to make some music.
If anyone has any photos of this event please let me know.
The main reason for this release was to make the tools more usable and make using them more satisfying. This work was inspired by some user experience research we commissioned with Think UI.
We’re so happy with these improvements we thought we’d share them so that you can learn from our improvements. We’re not finished with the Coverage Validator tools. This is just the start of changes to come.
I’m specifically going to talk about C++ Coverage Validator, but these improvements cut across all our Coverage Validator tools. Some of the improvements cut across all our development tools.
The first thing a user of Coverage Validator sees is the summary dashboard.
The previous version of this dashboard was a grid with sparse use of graphics and lots of text. You had to read the text to understand what was happening with the code coverage for the test application. Additional comments and filter status information was displayed in right hand columns.
The new version of this dashboard is split into two areas. The top area contains a dial for each metric reported. Each dial displays three items of information: Number of Items, Number of Items visited. How many items are 100% visited. This is done by means of an angular display for one value and a radial display for another value. A couple of the dials are pie charts.
The bottom area of the dashboard displays information that is relevant to the recorded session. Any value that can be viewed or edited is easily reachable via a hyperlink.
The result of these changes are that the top area makes it easy to glance at a coverage report and instantly know which session has better coverage than another session. You don’t need to read the text to work it out. The bottom area draws attention to instrumentation failures (missing debug information, etc) and which filters are enabled etc. By exposing this information in this way more functionality of Coverage Validator is exposed to the user of the software.
We developed a custom control to display each coverage dial.
A coverage dial displays both the amount of data that has been visited, the amount of data that is unvisited and the amount that has been completely visited. For metrics that do not have a partial/complete status the dial just displays as a two part pie chart. An additional version displays data as a three part pie chart. This last version is used for displaying Unit Test results (success, failure, error).
The difference between unvisited coverage and visited coverage is displayed using an angular value. Items that have been completely visited (100% coverage) are displayed using a radial value emanating from the centre of the dial. Additional information is displayed by a graded colour change between the 100% coverage area and the circumference of the circle to indicate the level of coverage in partially covered areas.
The coverage dial provides tooltips and hyperlinks for each section of the coverage dial.
The dashboard status area shows informational messages about the status of code instrumentation, a filter summary, unit test status and session merging status. Most items are either viewable or editable by clicking a hyperlink.
To implement the hyperlink we created a custom control that supported hyperlinks with support for email hyper links, web hyper links and C++ callbacks. This provides maximal functionality. The hyperlinks are now used in many places in our tools – About box, evaluation feedback box, error report boxes, data export confirmation boxes, etc.
We’ve also made high level overview data available on all the main displays (Coverage, Functions, Branches, Unit Tests, Files and Lines) so that you can get an overview of the coverage of each file/function/branch/etc without the need to scroll the view.
We thought of drawing the coverage data onto the scrollbar. Unfortunately this means that you would need an ownerdrawn scrollbar, but Windows does not provide such a thing. An option was to use a custom scroll bar implementation. But doing that would mean having to cater to every different type of Windows scrollbar implementation. We didn’t think that was a good idea. As such we’ve chosen to draw the coverage overview next to the scroll bar.
Similarly to the overview for each type of data we also provide a high level overview for the source code editor.
Coverage Validator provides the ability to filter data on a variety of attributes. One of these is the directory in which a file is found. For example if the file was e:\om\c\svlWebAPI\webapi\ProductVersion\action.cpp the filter directory would be e:\om\c\svlWebAPI\webapi\ProductVersion\.
This is useful functionality but Coverage Validator allows you to filter on any directory. In complex software applications it’s quite possible that you would want to filter on a parent directory or a root directory. That would give the following directories for the example above.
The solution to this problem is to create the context menu dynamically rather than use a preformed context menu stored in application resources. Additionally it is more likely that the current directory will be filtered rather than the parent, so it makes sense to reverse the order of the directories, going from leaf to root.
The instrumentation preferences dialog is displayed to the user the first time that Coverage Validator starts. The purpose of this dialog is to configure the initial way coverage data is collected. This provides a range of performance levels from fast to slow and incomplete visit counts to complete visit counts. Both options affect the speed of execution of the software. Given that time to complete is an important cost for this is an option that should be chosen carefully.
Previous versions of the software displayed a wordy dialog containing two questions. Each question had two choices.
The new version of the instrumentation preference dialog has replaced the questions with a sliding scale. Two questions with two choices is effectively four combinations. The instrumentation level sliding scale has four values. As the slider value changes the text below the slider changes to provide a brief explanation of the instrumentation level chosen.
An additional benefit is that the previous version only implied the recommended values (we preset them). The new version also implies the recommended value (also preset) but also explicitly indicates the recommended instrumentation level.
This new design has less words, less visual clutter, is easier to use and presents less cognitive load on the user.
Coverage Validator provides options to export data to HTML and XML. A common desire after exporting is to view the exported data. Previous versions of Coverage Validator overlooked this desire, no doubt causing frustrating for some users. We’ve rectified this with a confirmation dialog displayed after exporting data. The options are to view the exported file or to view the contents of the folder holding the exported data. An option to never display the dialog again is also provided.
The previous version of the debug information dialog was displayed to the user at the end of instrumentation. After the user dismissed the dialog there was no way to view the data again. The dialog was simply a warning of which DLLs had no debug information. The purpose of this was to alert the user as to why a given DLL had no code coverage (debug information is required to provide code coverage).
The new version of debug information dialog is available from the dashboard. The new dialog displays all DLLs and their status. Status information indicates if debug information was found or not found and if Coverage Validator is interested in that DLL, and if not interested, why it is not interested. This allows you to easily determine if a DLL filter is causing the DLL to be ignored for code coverage.
When the dialog is displayed a Learn More… link is available. This presents a simple dialog providing some information about debug information for debug and release builds. We’ve used a modified static control on these dialogs to provide useful bold text in dialogs (something that you can’t do with plain MFC applications). It’s a small thing but improves structure of the dialog. This text was displayed as part of the previous debug information dialog. Removing this text to a separate dialog chunks the information making it more accessible.
There is more to be done with this part of the software but this is an improvement compared to previous versions.
Coverage Validator has always had a “Tip of the day” dialog. This is something of a holdover from earlier forms of application development. We’d never really paid much attention to it, to how it functioned, how it behaved and what it communicated.
We’re planning to completely overhaul this dialog but that is a longer term activity. As such in this revision we’ve just made some smaller scale changes that still have quite an impact.
The first change is that the previous “Tip of the day” dialog was displayed at application startup but with the new version the “Tips” dialog is no longer displayed at application startup. The tips dialog is now displayed when you launch an application and are waiting for instrumentation to complete. This means you get displayed tips during “dead time” that you can’t really use effectively – you’re waiting for the tool. The tips dialog is still available from the Help menu as was the previous Tip of the day dialog.
The second change is that the new Tips dialog is modeless. The previous Tip of the day dialog was modal. This means you can leave the dialog displayed and move it out of the way. You don’t have to dismiss it.
We’ve done away with the icon and replaced it with a tip number so you know which tip you are viewing. Tips are no longer viewed sequentially (Next Tip) but in a random order. At first this seems like a crazy thing to do. But when you try it, it actually increases your engagement. You’re wondering how many tips there are and which one you’ll get next. Hipmunk was an inspiration for this – they do something similar when calculating your plane flights (I hadn’t seen this when I used Hipmunk but Roger from ThinkUI had seen it).
There is more to be done with this part of the software but this is a useful improvement until our completely reworked Tips dialog is ready for release.
All of the changes have been made to improve and simplify the way information is communicated to the user of Coverage Validator. Improved graphics displays, interactive dashboards, better data dialogs, hyperlinks and occasional use of bold text all improve the user experience.
We’re not finished improving Coverage Validator. These are just our initial round of improvements.
I’ve just tried building a Visual Studio 2010 helper DLL on Windows 7 x64.
The build failed with “cannot open type library file vsmso.olb : No such file or directory”.
A quick search found them in c:\program files (x86)\microsoft shared\MSEnv. This is the folder for 32 bit applications (Visual Studio is a 32 bit application).
OK, so if the files are present on the machine why does the build fail for this line?
//The following #import imports VS Command Bars
#import <vsmso.olb> raw_interfaces_only named_guids
The reason is the Visual Studio project include directories are setup for c:\program files\microsoft shared\MSEnv. You need to edit the properties for Debug and Release for each processor type (in my case Win32 and x64) and change the include directory (or add another include directory) c:\program files (x86)\microsoft shared\MSEnv then rebuild.
This is a potential non-obvious timewaster. Hope I’ve saved you some time.
When Microsoft ported MFC to 64 bits they also changed the return type for the GetSize() and GetCount() methods in the collection classes. They changed the return type from the 32 bit DWORD to the 64 bit DWORD_PTR on x64. This has implications if you write your own collection serialization methods. For example if you use a CMap<> to map a thread id to an object you will want to write your own serialization code.
For example (error checking removed for simplification), consider the serialization of this collection.
CSingleLock lock(&threadObjectStatisticsSect, TRUE);
ar << threadObjectStatistics.GetCount();
pos = threadObjectStatistics.GetStartPosition();
while(pos != NULL)
runningObjectManager *rom = NULL;
threadObjectStatistics.GetNextAssoc(pos, threadID, rom);
ar << threadID;
CSingleLock lock(&threadObjectStatisticsSect, TRUE);
DWORD i, count;
ar >> count;
for(i = 0; i < count; i++)
runningObjectManager *rom = new runningObjectManager();
ar >> threadID;
In the above code the first item saved/loaded is the number of objects in the CMap. After that the thread id and the complex object associated with the type is saved/loaded for each pair of objects in the CMap. The code above uses a DWORD to load the size. This won’t work for x64 because the count of objects is taken directly from the GetCount() method (or GetSize() for some collection types).
ar << threadObjectStatistics.GetCount();
x86, return type is DWORD, count is saved as DWORD (32 bit)
x64, return type is DWORD_PTR, count is saved as DWORD_PTR (64 bit)
This is a problem because the loading code is expecting a DWORD.
DWORD i, count;
ar >> count;
Update (23/4/2012): Turns out the same issue affects the STL collections as well. If you are directly serializing the result from the size() method in an STL collection you will be faced with the same problem as I describe for MFC.
One solution is simply to change the type being loaded from a DWORD to a DWORD_PTR.
DWORD_PTR i, count;
ar >> count;
An alternative solution is to always save the size as a DWORD.
count = (DWORD)threadObjectStatistics.GetCount();
ar << count;
You may think this is a trivial issue and why write a blog post about it? I agree the actual problem is trivial and the fix for it is also trivial. However the fact that you have a mismatch in datatypes being serialized because you directly serialized the return value from GetCount() is not so obvious. So much so that this particular issue escaped our attention (and got past a static analyser) until today.
So yes, its a trivial problem but its a hidden problem and it will cause all sorts of issues during serialization and when you go looking for it you'll probably look straight past it for a while. Hopefully I've just saved you a few hours of banging your head on a brick wall, or more likely your desk.