Rss Feed
Tweeter button
Facebook button
Technorati button
Reddit button
Myspace button
Linkedin button
Webonews button
Delicious button
Digg button
Flickr button
Stumbleupon button
Newsvine button

Download problems, an apology

By , June 5, 2014 11:23 am

The last two software releases have not been as smooth as usual. To put it mildly there have been problems.

I’d like to apologise for the inconvenience we may have caused you. I’d also like to explain why these problems happened and what we are doing to put it right.

With the previous software release we supplied the correct binaries but the licence information was incorrect. With the current release the problem reversed itself – wrong binaries, correct licence information. Neither helps. Both problems were caused by different issues.

Problem 1 – case (in)sensitivity

We develop on Microsoft Windows, which has a case-insensitive filesystem. Our webserver runs Linux, which has a case-sensitive filesystem. This can cause problems. Especially when a file with incorrect case is uploaded to the webserver by mistake. The result is two files with similar names rather than one file. Consider a file memoryValidator.inf. If we upload memoryvalidator.inf to the server it won’t replace memoryValidator.inf (as it would on a Windows machine) but will co-exist in the same directory as memoryValidator.inf. When this happens out of date version information (which is stored in memoryValidator.inf) is read because the new version information is in memoryvalidator.inf (incorrect casing).

The above has caused problems with incorrect (out of date) version information being supplied alongside correct binaries.

Problem 2 – a tale of two installers

Our x64/x86 installer actually installs two installers – one for the 32 bit binary and one for the 64 bit binary. As such there is an order dependency – build 32 bit installer, build 64 bit installer, build the x64/x86 installer that installs the 32 bit and 64 bit installers. You must build the x64/x86 installer last. If this happens out of order for any reason you can have problems as the 32 bit installer or 64 bit installer may be out of date.

Why have these problems only surfaced just now?

2014 has been a rather unusual year for us. We’ve had numerous hardware failures, lost two months of email due to a disk encryption issue and had these software release issues. The hardware failures meant we had to move the email and software release systems over to new machines. The software release system has been moved twice. Prior to moving the software release system we’d ironed out all the problems by carefully arranging everything. The problem with that is that it requires human memory to adjust the special case issues every time you change things. We’ve now changed our release procedure to include additional software rule-based checks to ensure the process of doing a release is less error prone.


If you have been affected by this problem please login to your account and download the new binary that is available. Please ensure your browser doesn’t cache the file download and provide you with the previous version of the binary.

We’ve updated our software release controller software to include additional rules to check for incorrect build order. The webserver will be getting additional rules for case sensitive file name checking.


I sincerely hope the problems of the last two weeks are the last we’ll have to do with software releases. They cause inconvenience for you and cause me a lot of stress. I look forward to a return to our usual release process.


An End to Unwanted UAC prompts

By , May 25, 2014 7:29 am

We have just updated all of our software tools so that they no longer require administrator privileges to run. No more unwanted User Account Control prompts!

I’m going to explain why we used to require administrator privileges, why we’ve removed that requirement and what impacts that has for you the user of the software.

The past: Our software tools up until 24 May 2014


If you’ve ever used our tools on Windows Vista, Windows 7 or Windows 8 you’ll know that our tools required Administrator privileges to run.

Because of this each time you start the software you are faced with a User Account Control dialog. There is a pause, the screen darkens and then the User Account Control dialog is displayed. You can’t do anything other than interact with this dialog. It’s a “Yes I want to run this. No I don’t want to run this.” deal. But of course you want to run this software, you just started it. Hal really should open the pod bay doors.

This gets even more frustrating if you’ve used our command line interface to automate your testing or if you need the software under test to run without administrator privileges.


The ideal scenario would be for the software to run without requiring administrator privileges, just like most applications on your computer. This would improve the usability of the software, make automated testing smoother and just be better all around.

Reasons for change

When our tools require administrator rights to run there are multiple consequences of that requirement:


  1. A User Account Control dialog is displayed, interrupting the user’s flow.
  2. Automated tests require someone present to approve each tests’s run because a User Account Control dialog is displayed. This either partially or completely defeats the purpose of automating the tests.
  3. The software under test is now run with Administrator privileges. For most applications that isn’t an issue but for some applications this is not the correct privilege level for that application to run at.

The first issue isn’t ideal and adds frustration to the user’s life.

The second issue is horrible.

The third issue is a deal breaker for the few people that must test their application’s at a specific privilege level.

As you can see we had to change this state of affairs.

Working without Administrator Privileges

When running the software without administrator privileges the only thing you’ll notice is no administrator privileges. You can launch and monitor applications without administrator privileges. You can also monitor services that are linked to the NT Service API associated with the tool without administrator privileges. Only the Inject into Application and Wait For Application functionality (C++ tools only) prompt you for administrator privileges. Other than that the software works the same as usual.


If you run the software without administrator privileges the software will communicate with SVLAdminServiceX86 or SVLAdminServiceX64 as appropriate. The service will do the work required.

The C++ tools now work with desktop application, services running on LocalSystem account and services running on LocalService account.


You can still right click the software and run the software with administrator privileges. If you choose this the software will behave exactly as it did in the previous release, it will do all the actions itself and not ask the SVL Admin Service to do the work.

If you want to Inject into a running process or Wait for an application to start we can still do that with the C++ tools but you will need to run with administrator privileges to do that. This is principally because CreateRemoteThread from a service doesn’t work when the target application is not running in the same Windows session. This is a Windows security improvement. Until we can provide a workaround for this these two activities require administrator privileges. The software will automatically prompt you for this process elevation.

Similarly if you launch an application using CreateProcess (the recommended method) you don’t need administrator privileges. But if you choose any of the other options you will be prompted for administrator privileges.

Why did we require administrator privileges?

Our software tools are dynamic analysis tools that analyse the behaviour of software at runtime. As such our tools use a variety of techniques to invade the user space of the software under test and to communicate the collected data back to the user interface. If the software is a desktop application then different security environments are in force compared to if the software is a service. When dealing with a service such as Internet Information Server then you are dealing with a very locked down process. Some of these processes are very hard to interact with. You may be able to inject into the process but then not communicate with the user interface.

To cope with this early versions of our software simply used global shared memory (prefix the shared memory name with \Global) and ran with appropriate debug security privileges. This worked really well. Then came Vista with the new security regime. I’m sorry to say that our initial response was lazy. We simply put admin privileges on everything as a temporary workaround until we could get around to fixing things so they’d work without admin privileges.

So what happened? We got side tracked. We spent a lot of time focussing on other things, supporting different operating systems, different Visual Studio, porting the software to 64 bit, floating licences, improving the UX of tools like C++ Coverage Validator. And because we were at the time developing on Windows XP x64 we didn’t feel the pain of using the new security regime all the time. We’d use Windows 7 for our email machines, personal laptops and for testing but not for daily development.

Why were we using Windows XP x64? The answer is simple. The compressed start menu on Windows 7 is harder to use than the flyout menu on Windows XP. The search functionality on Windows XP is so much easier to use than that built into Windows 7, especially if you are searching for words inside a document (think Visual Studio project, manifest, source code, etc). Yes I know Windows 7 search has great power built into it, but it’s slow, hard to use as it’s crammed into one tiny window and in my experience often doesn’t work. Whereas the Windows XP search experience is simple, easy, reliable and fast (three fields, file name, content to search for, where to search). Sadly Microsoft has made search on Windows 8 even worse (right click on a search result and if you open the location you lose the search results – how is that useful?). And of course the start menu has gone.

Anyway, as the end date for Windows XP support, April 8th, loomed we started getting queries about our software that we’d never fielded before. Most were related to the User Account Control issues already described. People who had been using Windows XP and Windows XP x64 for development were abandoning ship, moving to Windows 7 or Windows 8. By the time we got to the start of March I knew we had to drop everything we were doing, annoy some of our existing customers by putting certain work on hold, and make our software run without administrator privileges. No User Account Dialogs!

Usually we issue one or two software releases per week. Or maybe one every two weeks. Our last software release was March 19th, over 10 weeks ago. This has been the longest break between software releases we’ve ever had. The scope of the work has been huge. We’ve had to write a service that the software talks to to do anything that would normally require administrator privileges. Then we had to identify every area that was impacted by the change in privilege levels. This meant some areas of the software had to be completely re-written. For example our Registry handling software now also has to be able to write to files and memory so that we can pass that data to the service so that the service can populate certains parts of the Registry on behalf of the software tool. Another area that has changed is shared memory. You can no longer just prefix everything with \Global and expect it to work. As such shared memory handling has had to change. This is particularly important if you are working with services. Copying files to certain locations is no longer possible. Writing files to certain locations is no longer possible. All these things we’ve had to address. We’ve had to update the installers to correctly install the service (and uninstall it first if we’re replacing it with an updated version). We’ve had to test on Windows XP, Windows x64 (to ensure our XP customers still get the experience they expect) and on Windows 7 and Windows 7 x64, Windows 8 to ensure everything works correctly. The different security handling for services between XP and Windows 7/8 causes some interesting problems to be worked around. We’ve tested everything to bits.

And along the way we’ve re-factored some of our software and also exposed and fixed some low level bugs in our hooking software (some of which are a side effect of recent optimisations in the way Microsoft build their operating system DLLs). Error reporting on the Diagnostic tab has improved.

Weren’t we dog-fooding?

You might think we weren’t dog-fooding. That is, using our own software to test our software. Yes, we do use our own tools.

But we were not using our tools in an environment that would cause these issues to be apparent to us. We had chosen to eat at our favourite restaurant rather than at the best restaurant in town. Having just spent two weeks on a cruise ship this analogy is sound, we quickly concluded that we preferred the Bistro over the fancy restaurant.

In fact we had deliberately chosen Windows XP x64 because we found it easier to use for the reasons already stated. In hindsight, although this was a good choice for ease of development it was a poor choice from the point of view of experiencing what the bleeding edge of our customers use.

Our new development environment

Our current development environment is Windows 7 but we’ll be moving to Windows 8 as soon as the new machines arrive. For Windows 8 we’ll be adding the Stardock Start8 Start menu. We’ve also written some search tools that although crude, allow us to search files more easily than using Windows 8 built in search functionality. We’re writing more tools to make our development work easier, even as Microsoft’s own UX efforts make what we want to do harder.


The move from administrator privileges required has been a time consuming, challenging experience. We’ve learned a lot along the way and had to change how our software works. However the result is that you, our customers, the users of our software now have an easier time using the software. I hope you agree the effort was worth it.


When things go wrong

By , January 16, 2014 1:10 pm

Sometimes you do things with the best of intentions and it all goes wrong. This week has been like that.


It all started out with the simple idea that we’d like to try to create a bit more business by contacting past customers that didn’t renew their software maintenance and see if they wanted to renew.

We’d had some feedback from some customers that they had missed the renewal notices that are included with their software updates and that they would appreciate a separate email from us to inform them. We took this feedback and created some appropriate emails that are sent 90, 60, 30 days in advance of the renewal date. We also send some email after the renewal date for a short period.

So far so good. Nothing wrong with keeping existing customers in the loop.


The problem occurred when we thought about the customers that had not renewed. Was it an error, an oversight or deliberate? Well of course we don’t know. I think the initial idea may have been to contact customers whose maintenance had expired just over 1 year ago. That’s borderline OK. CRM solutions such Hubspot, Act-On etc all recommend 1 year as the cut off threshold for contacting customers. Anyone over a year, you don’t contact. The reason we were going just over a year was to do with when we’d first introduced paid software maintenance. It fell just over a year.

We also thought that contacting these customers would be a good opportunity to get some feedback about why they hadn’t renewed. Where we doing something wrong? Or had their career changed? etc.

I produced lists of customers, organised by software product whose maintenance expired. The lists included their name, email address and maintenance expiry date. The intention was that customers would receive a personalised email that identified the product they used and did they know their maintenance had expired?

What actually happened

Normally we email customers evaluating our software in HTML email via our Hubspot account.

Customers that have purchased our software received email in plain text or very simply HTML email.

But customers receiving the maintenance renewal email received a HTML email in a different format to our normal Hubspot format, not sent via our Hubspot account, sent from an email account our customers have never heard of, with an incorrect email address in the body of the email. The emails were not personalised, not were they specific to the software tool the customer had purchased. In addition some of the email addresses in the list shouldn’t have been in the list. As a final nail in the coffin of getting this wrong, the emails were sent to customers well outside of the time boundaries initially specified.

I don’t think we could get it much more wrong if we tried. Well, I suppose we could have included some Not Safe For Work or some malware, but short of doing that we got this as wrong as we could have done. Very embarrassing. I’ve been writing email apologies to people left right and centre the last few days.

The Result

Some people unsubscribed. No problem. We expected that some people would. Turns out some people were using different languages or made larger changes in their career and no longer needed our tools.

Some people emailed asking if it was a phishing scam (mainly due to the format, incorrect email address, unusual sending email address, etc).

Some people complained that we were horrible unscrupulous people. Ouch.

In summary, we annoyed some people by being inept at this particular task. We could have done this so much better. And I’m embarrassed by it all.

If you have received one of these emails I humbly apologise. It won’t happen again.


As a result of this unintended email episode I’ve created some basic rules. We’ll probably extend these rules as we go.

  • If you can’t personalise it, don’t sent it.
  • If you can’t specify which product you are emailing about, don’t sent it.
  • Don’t send generic, catch-all emails. See previous two points.
  • Ensure all emails are within the date range you intend. Double check them.
  • Don’t accept excuses from marketing for why things are being done a particular way.

The whole purpose of this task was that apart from generating the lists it wouldn’t involve me and I could get on with the technical side of running the business. It hasn’t worked out that way. I’ve had to spend time reviewing other’s work, accepting their reasons for why this way or that way. I’ve paid for their labour and now I’m writing an article about what went wrong.

Email Addresses

All email addresses used were sourced from our own customer lists.

We don’t buy email lists. We don’t sell them either. We regard buying or selling email addresses as Bad for Business.


64 bit C++ software tool Beta Tests are complete.

By , January 9, 2014 1:33 pm

We recently closed the beta tests for the 64 bit versions of C++ Coverage Validator, C++ Memory Validator, C++ Performance Validator and C++ Thread Validator.

We launched the software on 2nd January 2014. A soft launch, no fanfare, no publicity. We just wanted to make the software available and then contact all the beta testers so that we could honour our commitments made at the start of the beta test.

Those commitments were to provide a free single user licence to any beta tester that provided feedback, usage reports, bugs reports, etc about the software. This doesn’t include anyone that couldn’t install the software because they used the wrong licence key!

We’ve written a special app here that we can use to identify all email from beta test participants and allow us to evaluate that email for beta test feedback criteria. It’s saved us a ton of time and drudge work even though writing this extension to the licence manager software took a few days. It was interesting using the tool and seeing who provided feedback and how much.

We’ve just sent out the licence keys and download instructions to all those beta testers that were kind enough to take the time to provide feedback, bug reports etc. to us. A few people went the extra mile. These people bombarded us with email containing huge bugs, trivial items and everything in between. Two of them, we were on the verge of flying out to their offices when we found some useful software that allowed to us to remotely debug their software. Special mentions go to:

Bengt Gunne (
Ciro Ettorre (
Kevin Ernst (

We’re very grateful for everyone taking part in the beta test. Thank you very much.

Why didn’t I get a free licence?

If you didn’t receive a free licence and you think you did provide feedback, please contact us. It’s always possible that a few people slipped through our process of identifying people.

Dang! I knew I should’ve provided feedback

If you didn’t provide us with any feedback, check your inbox. You’ll find a 50% off coupon for the tool that you tested.


The Curve. A talk by Nicholas Lovell at the Business Leaders Network

By , December 11, 2013 5:44 pm

On 22nd November Nicholas Lovell TheCurveBookgave a talk at the Business Leaders Network meeting held at the premises of Taylor Wessing, London. The talk was preceded by lunch and networking. After the talk there was more networking, a few nibbles and some wine. As usual Mark Littlewood and the wonderful team at BLN hosted a great event. Taylor Wessing’s building provides wonderful views over London and for a change it was the middle of the day so I could see it all (rather than witness London lit up in the evening).

Nicholas Lovell used to be an investment banker. But for the past 10 years he has been studying businesses that work by giving stuff away. He has also released a book, called The Curve which describes how you can make a business around giving stuff away for free. Not all of your stuff. But some of it. It has to have value to the person using it. So you are not giving away rubbish. It must have value of some sort. What value is determined by who your customers are and what they are doing with it.

I recorded the talk. Here are my notes from the talk.


Some people think they have a right to be paid for their work. Nicholas disagrees. You have to earn the right to be paid for your work. By this he means your work needs to be good enough to be worth paying for in a world where (in many arenas) the produce the customer is consuming is provided for free (think apps on mobile phones).

Candy Crush

225 million people played Candy Crush in the last 30 days. candy-crush
Its phenomenally successful. It’s free. 70% of people that have completed all 450 levels haven’t spent a penny to do so. It’s very popular, consistently in the most gross revenue and most played apps in the app store. It’s compelling evidence that you can make money from free.

Another example: Clash of Clans. It’s a free game but you can purchase items in game. Apparently there are people spending up to $10,000 on a single game.

Of the top grossing 30 applications on the app-store 25 of them are free. 20 games are free, five other apps are not free. Of the top 30, 22 are games, 20 of the games are free. Because something is free that does not mean you can’t make any money.


So how do you make money by giving stuff away for free?

The starting point is you need to flip your thinking. When people who are stuck in the product mindset the first thing they say is “oh dear on the web people expect to get stuff for free” and the reason they expect to get stuff for free is because it’s so easy to share stuff for free on the web. If we look at the app-store there are no hosting costs, no billing costs, no download bandwidth costs (Apple suck this up) if you list your app for free then it costs you nothing per extra user/customer to service that customer (not quite true, but marginal cost tends to zero) and as a result the price of apps fell from $10 to $5 to $1 to in many cases free.

That’s the bad news. You can’t make money that way.

The good news is that this enables you to engage in 1 to 1 relationships with many people for very little cost.

This wasn’t possible before. So you can turn this pricing disadvantage into a cost advantage for communicating with your customers. Sometimes this is actual conversations but more often it’s data about what your customers are doing. Using data to understand your customers.

So when you flip your thinking you get a curve like this:


This curve demonstrates that where the price is low or free there are many people that may be interested in what you have. As the price increases there are less people that will be willing to pay. But also note at the extreme left of the graph there are a few people that will pay incredible amounts for what you offer. We can split the graph into two – shown by the grey line. Below the line there is a marketing opportunity. Above the line there is an opportunity for the business to generate income.

Before the web and mass connectivity there was no way to identify who was interested in what you did and who was not. Everyone was offered the same produce at the same price. £12 for a CD for example. But now you can provide music to download for free (to try to entice people to listen who are not hard core fans) but also offer special limited edition CD packs and other promotional material to dedicated fans for much higher prices. Nine Inch Nails is a classic example of this (they ditched their record company years ago).

The people that are not willing to spend money are a marketing opportunity.

The people that are willing to spend money are a revenue opportunity.

What you need to do is work out how to take advantage of these two things rather than think “oh this is so unfair I have to give all my work away”.

How to use this

  • Find an audience.
  • Use technology to figure out what they like.
  • Talk to the audience.
  • You need to earn the right to talk to your audience.
  • You have to enable super-fans.

Easiest way to find an audience is with a free product. You can do it with a paid product. It’s just harder to do. Helps if you have a massive marketing budget if you are going with a paid product.

This applies for digital content and for real world physical content.


Looking at the curve you can see there are some people that will never value what you produce enough to pay for it. That doesn’t mean these people are not valuable to you. There are at least four different ways these people can provide value.

  • Advertising and lead generation. This is a numbers game. You need a volume of customers using your product to make money from showing them adverts or using them for lead generation.
  • Word of mouth. Free users are powerful word of mouth influencers. This doesn’t just mean talking, it may mean shares, likes, retweets, etc. These will attract other customers, some of whom may become paying customers.
  • Potential converts. At present the marketing cost of acquiring one free customer is $3. Yes, it costs money to get free users. Ouch! This is a function of many competing claims for a given person’s limited attention span. Given that it costs money to get a free customer, a freeloader, it’s a good idea not to kick them out. Don’t say “Pay up or piss off”!
  • Gawkers. These people are important. Things we value: How stuff makes us feel, How stuff reflects on who we are as a person, How other people see us as a person. For example Ferrari could make quieter cars, but that is self defeating because people who own Ferraris want everyone else to know they own a Ferrari. Part of owning a Ferrari is making other people’s heads turn. You buy products for many reasons. One of those reasons is social context. Social context isn’t necessarily about showing off, but it can be. Social context is in the physical world but also in the digital world. Things created in the digital world can have as much (emotional and financial) value as those in the physical world.


What types of technology might you use understand what your customers value?

What do your customers value? You can ask them but they generally don’t know or they will lie to you (conciously or unconciously). Or you can observe them to figure out what it is that they really value.

You can run A/B tests to see which idea people are interested in. Some people think this is amoral because you may be advertising two products neither of which exist and only one of which will be built.

The job of the technology is to enable you to talk to your customers again. Various methods shown below. New methods will be invented in the future. Your job is to identify and use these methods as appropriate.

  • Facebook.
  • Email.
  • Slideshare.
  • YouTube.
  • PInterest.
  • Tumblr.
  • Twitter.
  • Snapchat.
  • Instagram.
  • Video.
  • Content marketing only works as an enabler for the above. Must have a Call To Action. Content marketing is great but it’s the wrong thing to use service an army of freeloaders.

Super Fans

Super fans are the people that really like your product. They are the people that will consume not only the free version but also pay for all the additional goodies and offers that you have. There are people playing some of the free games on the net that are spending up to $10,000 in a game. OK these people are not commonly occurring but they do enable a different way of pricing.

Think of it as in the past everyone paid $10 for a CD. Now most people pay nothing or very little. But a few people value the music on the CD so highly they’ll pay $100 or $1000 or more for it. The income is the same but the distribution is very different.

One of they important things to understand is that if you game your customer by using psychological tricks (that some people advocate using on the web) and the next day the customer regrets their purchase. Then in that case you have not built a relationship with that customer. You’ve just burned it. These people will not be advocates for your product or company. They won’t tell their friends how great you are – maybe the opposite. So be careful. Do your marketing sensibly. Do not game or take advantage of your customers or force their hand. Offer great value and make the choice theirs.


This section is to show the viability of different tiers. Kickstarter data is freely available. Kickstarter are transparent with their data so it’s a good place to start for data to demonstrate this.

Kickstarter is a crowdfunding platform. Campaigns allow many levels of reward from a few dollars to tens of thousands of dollars. Some campaigns have completely outstripped their intended target. Others fail. It’s worth taking a look around Kickstarter and Indiegogo to see what type of projects get funded (and which are in your industry). (Personal note. I’ve backed projects on both Kickstarter and Indiegogo).

Tim Schafer. Double Fine Adventure project. Funding goal $400,000. Raised $3,336,371 in 30 days from 87142 people. How did he do this? Well first he is well known for his previous adventure game work and has a lot of fans. People choosing to back this project on kickstarter could spend between $15 and $10,000 and receive different reward levels. Four people opted for the $10,000 option (sold out) and 47946 people opted for the $15 level and many other people opted for the levels between. Some statistics:

  • On average people spent $38.29. This doesn’t tell you much.
  • Split the prices by pricing tier. $15 entry price. More than half the customers paid this price.
  • 24,000 people purchase the $30 (2nd) tier.
  • 12,000 people purchase at the $100 (4th) tier which was pretty good value (lots of goodies on this tier – see kickstarter page linked above).

But if you break the tiers down by revenue you get a different picture. The $100 (4th) tier with 12,000 people provides 33% of the revenue. The $15 tier (half the customers) is only 20% of the revenue. This demonstrates the viability of tiers. If everyone paid $15 the total revenue would have been 40% of the total with variable pricing and variable rewards.
People that spent $1000 or more are 0.1% of the audience, but 6% of the revenue. People that spent $250 or more are 1% of the audience, but 15% of the revenue. People that spent $100 or more are 15% of the audience, but 50% of the revenue.

This pattern is repeated again and again in successful kickstarters.

Physical Goods

Not only is it possible to promote and sell digital goods using free stuff it’s also possible to do this with real tangible physical goods. The type of things that gravity affects – they thump onto the floor when you drop them.

It’s also possible to copy physical products using 3D printers. This is coming. People will make models of the thing they desire but cannot afford (or which they cannot obtain in the precise shade of obsidian blue) and then print them on their 3D printer. This will be causal piracy. Often not too precise, but good enough. This is because they love your product not because they are cheapskates.

If we return to physical goods it would be useful to have an example. One such example is King Arthur Flour, Vermont, USA. They have grown from the 5th largest miller of flour in the USA to the 2nd largest. They used a Curve strategy to do this.


The curve starts at the free end (right) and moves to the paid end (left). Here is how it works:

  • YouTube videos showing you how to basic tasks such as measure a cup of flour. If your measure a cup of flour the wrong way you get 20% too much flour. So clearly useful for some people.
  • Website full of How Tos and Tips.
  • Free telephone helpline.
  • Sell flour in shops.
  • Sell Recipe books.
  • Sell Rolling Pins (twice as much as a recipe book).
  • Courses in how to make the perfect choux pastry at their headquarters in Vermont. It’s a $400 to $500 per day course. After which of course the happy customer then waxes lyrical to their friends about how fantastic King Arthur Flour company is. Word of Mouth! These super fans are paying to be turned into marketing bombs.


But TheCurveBjorkthis doesn’t always work.

The popstar Bjork had a kickstarter which failed. She had an album biophilia which was a success. She then tried to crowd fund an app called biophilia, porting it from iOS to Android. She asked for $375,000 to fund the port. Seems like a lot of money for a port and also porting from iOS to Android is kind of backwards because iOS people are used to paying for expensive things and Android customers are not necessarily. She had 2.6 million likes on Facebook, 800,000 twitter followers. After 10 days she had only raised $15,000 dollars and the campaign never reached it’s target.

So she had better starting numbers than Tim Shafer but dismal performance compare to him.

Why? Well if you examine her Tweet stream it’s clear she is not engaged with her fans. There is no two way communication. For her it’s effectively a broadcast medium and she doesn’t care what anyone has to say to her. So why should anyone care about what she is trying to start on kickstarter? Exactly. To illustrate the point here is snapshot of Bjork’s twitter stream as of 11 December 2013.

(Personal comment: Her management team do not appear to be very media savvy. Time for replacement. I note also that her twitter follower count has decreased by over 300,000).


You need to care about the people on The Curve.

Love your Freeloaders.

Love your superfans.

Love everyone in between.

More information at The Curve Online.


After the talk there was a panel discussion but these don’t tend to turn into interesting essays and it’s impossible to track which speaker is saying what to attribute it to anyone so I’m not going to try.


64 bit tools leaving beta this month

By , December 5, 2013 1:14 pm

For those of you keeping a keen eye on the version numbers of the various C++ 64 bit betas we have will have noticed that the betas now have the same version number as their 32 bit counterparts. The reason for this is that we are getting ready for these tools to leave beta and to be released. We expect this to be during December 2013, if all goes well in the next week or so.

Before we can do this we need to make some modifications to the website, the shopping cart, test it all still works correctly, etc.

Once released the 32 bit and 64 bit C++ tools will have the same version number.

The 32 bit tools will continue to work with 32 bit executables on both 32 bit and 64 bit operating systems.

The 64 bit tools will only work with 64 bit executables on 64 bit operating systems.

The 64 bit tools will come bundled with the 32 bit version of the tool so that you can work with 32 bit or 64 bit executables on 32 bit and 64 bit operating systems. We anticipate a future version of the 64 bit tools that can launch and monitor 32 bit executables. This will allow you to collect more data and examine much larger datasets when testing 32 bit executables. We have prototypes of these tools now, but they are not ready for public release yet.

Why so long?

I know its been a very long time for these tools to have been in beta. We could have released some of them some time ago but we wanted to release all four at the same time so that we could also offer suites of tools and the also the combined 32+64 bundles. The problem was that C++ Memory Validator x64 had some problems with a few products being beta tested and C++ Performance Validator x64 also had some problems with SolidWorks 64 bit. We fixed the C++ Performance Validator x64 problem a few months ago and have been working on nailing all the remaining C++ Memory Validator x64 bugs.

Two beta testers in particular deserve a special mention for really helping us with these last bugs. Ciro Ettorre and Kevin Ernst. Ciro provided many logs of data for me to stare at and Kevin provided us with a machine that we could use to repeatedly try new fixes on.

I guess I didn’t really follow the advice I give to many people: “Get your product out there”. But that’s because these are new versions of existing products and I wanted them to be as good as the existing 32 bit tools. I hope we do not disappoint you.


I’d also like to recommend TeamViewer as a very useful product for remote working. We couldn’t have done the work with Kevin without this excellent tool. Best used with a headset microphone with the Voice over IP part of TeamViewer turned on.

What next?

As always we’ll keep you updated with what is happening with the betas via the email address associated with your beta test account.


DbgHelp search path

By , June 26, 2013 9:54 am

The problem

One of the problems using DbgHelp.dll to read the symbols for your Visual Studio application is that sometimes your symbols do not load.

There are typically three broad classes of failure when trying to load symbols from a PDB file:

  1. Missing PDB file.
  2. PDB file located in the wrong place. You think the PDB is present but DbgHelp.dll can’t find it.
  3. An incorrect PDB file. You think the PDB is correct but it’s actually from a different build.

You think you have the symbols in the right place but the symbols don’t load. You double check, you may even move some files around in desperation, and still the symbols do not load. This is a source of great frustration and a waste of time. What can you do about that?

The solution

With the latest release of our C++ software tools we’ve update the Diagnostic tab to include a combo box that allows you to choose what to display on the diagnostic tab. You can view everything (the default) or just specific types of information. One of those types is DbgHelp debug. When this is selected the diagnostic tab will only show you information which is the debugging output from the DbgHelp.dll. You can see every message that DbgHelp.dll issued, including each path that DbgHelp.dll looked into to find a PDB file and whether it found a PDB, or the PDB was mismatched or the PDB was found but only with COFF symbols or if the PDB was found with public/private symbols and lines.

We display the output for each module in alternating colours. This makes it easier to identify messages for one DLL compared to another DLL.

Here are some examples of symbol load success and failure:

Correct symbol file

DbgHelp.dll search path correct symbols found

DbgHelp searches in various places looking for mvExample.pdb.
Eventually mvExample.pdb is found in e:\om\c\memory32\mvExample\DebugNonLink6_0\mvExample.pdb.
DbgHelp loads private symbols and lines. (The alternate outcome is that DbgHelp loads public symbols).

Outcome: Success. Symbols are loaded.

Missing symbol file

DbgHelp.dll search path no symbols found

DbgHelp has the search path set then searches in various places looking for mvExample.pdb.
mvExample.pdb never gets found on the search path. SymSrv then looks for additional locations for mvExample.pdb. None are found.
DbgHelp does find some COFF symbols in the executable. Unfortunately COFF symbols do not contain filename or line number information.

Outcome: Failure. The PDB file could not be found. Some default symbols are loaded but are not of much use.

When a PDB file can’t be found you can examine the search path used by DbgHelp.dll and then check where your PDB file is to ensure that your PDB file is on the DbgHelp search path. You can either move your PDB file onto the search path or you can update the File Locations part of the settings dialog to include a path to your PDB file.

Mismatched symbol file

DbgHelp.dll search path mismatched symbols found

DbgHelp searches in various places looking for mvExample.pdb.
Eventually mvExample.pdb is found in e:\om\c\memory32\mvExample\DebugNonLink6_0\mvExample.pdb.
DbgHelp attempts to load the symbols but fails because the symbols are for a different build of the software. The checksum inside the PDB file does not match the module.

DbgHelp does find some COFF symbols in the executable. Unfortunately COFF symbols do not contain filename or line number information.

Outcome: Failure. A PDB file was found but it was not the correct PDB file. Some default symbols are loaded but are not of much use,

When an incorrect PDB file is found you can examine the search path used by DbgHelp.dll and then either update the PDB file to be the correct PDB file or if the PDB file is being found because the search path is incorrect you can update the search path in the File Locations part of the settings dialog to prevent the wrong PDB file being found.

Things to check

  • Ensure the PDB file found is the correct PDB file for the build. If you are copying builds from a build server be sure to copy the correct PDB files as well.
  • Check the File Locations PDB paths to ensure that all the possible paths for PDB files are listed in the correct order so that if multiple paths have a PDB file with the same name that the correct PDB file is found first.

Code coverage comparison

By , May 9, 2013 3:19 pm

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

Session Manager Dialog

The Session Manager has an additional Compare… button which will display the Session Comparison dialog.

Session Comparison Dialog

Session Compare 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

Session 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.


New environment variable dialog

By , May 9, 2013 2:57 pm

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.

Environment Variable Dialog

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.


Microsoft Surface RT, my first month

By , February 1, 2013 6:16 pm


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.

If you want a more in-depth review, try this another I’ve had a Surface for a month review. All of which I pretty much agree with.


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.

Power adapter

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.

Killing Apps

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.

  • Power led.

  • Power adapter.

  • 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.

  • Share

Panorama Theme by Themocracy