Tag Archives: mac

Bundlefox review

I have been using bundles and 1-day sales as a useful way to increase the exposure for my visual planning software. I have had positive experiences with BitsDuJour, Macupdate and BundleHunt. Once you put your software in one bundle you inevitably get approached by people who run other bundle promotions. I was approached by Bundlefox and agreed to put Hyper Plan in their Mac software bundle. I wish I hadn’t. It has been a pretty miserable experience from start to finish. In brief:

  • I never knew when the promotion was going to start or end. I was told it was going to start on 27th February, but it eventually started on 20th April. It was supposed to run for 3 weeks, but actually ran for 6 weeks. This is a problem, because it means you can’t put your software in other sale or bundle that require an exclusive discount.
  • Communication was poor. They generally took several days to reply to emails.
  • The number of licenses sold was very low, especially compared with sales of Hyper Plan on BundleHunt.
  • Worst of all, they only paid me 60% of what I was expecting per license. When I queried this they emailed me back “It’s **% revenue share after fees, most of the sales came in through affiliates and we had to pay them off before sharing the revenue”. I went back through their emails and their ‘Vendor Manual’ and there is no mention of affiliate fees being subtracted. It just says “You would receive a percentage of the total payments received for the bundle minus PayPal fees”. In fact I had emailed them “So if you sell 2000 bundles for $12 of which 500 choose Hyper Plan, I get **% of $12×500 = $***?” and they replied “Your calculation is correct”. I feel deceived.
  • The low number of licenses sold and the low payout per license means that it wasn’t worth the effort to setup.

I don’t know what Bundlefox are like to deal with as buyer, but I recommend vendors give them a wide berth.

Promoting your software through 1-day sales and bundles

Hyper Plan, my visual planning software for Windows and Mac, has now been for sale for a bit less than 2 years. Given that I am (by choice) doing all the development, marketing and support for both Hyper Plan and my other product, PerfectTablePlan, I have had a limited amount of time to promote Hyper Plan. But Hyper Plan is in a  competitive market, where it is hard to get noticed using traditional promotional techniques such as SEO and PPC. So I have been experimenting with promotion via 1-day sales sites and bundles.

I did several promotions through both bitsdujour.com and macupdate.com promo. These were 50%-off sales for 1 day (sometimes extended for another day). The site takes 50% commission on the sale, so I only got $10 of my normal $40 ticket price. But I also got exposure to a whole new audience I wouldn’t normally reach.

I also included Hyper Plan in bundlehunt.com and macupdate.com software bundles. In these bundles customers purchased some 10 items of software at a big discount. The promotions lasted for a few weeks each. I am not at liberty to divulge how much I got for each licence, but a quick calculation based on the price of the bundles and the number of items in the bundle tells you that it was a lot less than $10!

My hopes related to sales sites and bundles were:

  1. A worthwhile amount additional sales revenue.
  2. Increased feedback, giving me more insight for improving the product.
  3. Making money further down the line from major upgrades (e.g. v1 to v2).
  4. That I wouldn’t be swamped in support emails from people who were paying me a lot less than the standard price.
  5. More word-of-mouth sales after the discount has finished.

On analysing the results, the first 4 turned out to be true.

I had previously tried promoting my PerfectTablePlan table planning software on bitsdujour.com, but the results were disappointing. It just wasn’t a good match for their audience. However Hyper Plan is a more general tool and it did a lot better. The bundles also sold in impressive volumes. The source of Hyper Plan sales revenues to date after commission (but not including upgrades) is show below.

sales-revenue-source

So the extra sales were certainly significant from a revenue point of view, bearing in mind that Hyper Plan is a relatively young and unknown product.

I also got some very useful feedback from the bitsdujour comments section.

I released v2 of Hyper Plan in March 2016. I have crunched the numbers to see how many v1 customers to date have paid for upgrades to v2.

percentage upgrades

I expected that the 1-day sale customers who had paid $20 for the initial licence would be less likely to pay $16 to upgrade to v2 than those who had hadn’t purchased at a heavy discount. I was surprised that the opposite turned out to be true. I don’t have a good theory why.

I don’t have any figures for bundle customer upgrades, as the bundles happened after v2 was released. Given that bundle purchasers probably only wanted a subset of the software in the bundle, I expect the upgrade percentages to be a lot lower than above.

I wasn’t swamped in support emails. In fact things were surprisingly quiet during the bundles, which makes me wonder how many people who purchased the bundle were interested in Hyper Plan.

There were no sustained jumps in traffic or sales after the 1-day sales or bundles ended.

Best of all, the 1-day sales and bundles don’t cost anything, apart from a modest amount of time to set-up.

I know some vendors promote these 1-day sales and bundles to existing customers. But I don’t understand why you would do that. The whole point of these channels is to reach new audiences. Also you risk annoying customers who have paid list price. If you already have an audience you can promote a sale to, then you don’t need 1-day sales sites or bundles. Just email them a discount voucher.

I had one complaint from an existing customer on a forum who had paid full price and then saw Hyper Plan in a 1-day sale. I offered to refund the difference back to them, but they didn’t take me up on it.

In conclusion, the sales and bundle sites brought in useful spikes of additional sales (especially when you include upgrades later on) and feedback, without a big jump in support burden. But they didn’t lead to a noticeable long-term increase in traffic or sales. Obviously every product is different. But if you have a product that needs exposure, isn’t too niche and doesn’t require a lot of support, it may be worth giving 1-day sales and bundles a try.

Hammer For Mac static website generator

I prefer static websites to a CMS for simple product websites because:

  • Static websites are fast.
  • I have more low-level control over the HTML/CSS.
  • I don’t have to worry about the very-real threat of a CMS being hacked.

Obviously writing every page separately in raw HTML/CSS would go against one of the cardinal rules of development, Don’t Repeat Yourself. But you can avoid this using a static website generator such as Hammer for Mac.

hammer

Hammer uses a simple syntax embedded in HTML comments to ‘compile’ a website from source files. I have now used Hammer to create several static HTML/CSS websites, including my perfecttableplan.com and hyperplan.com websites.

I like the simple syntax of Hammer. For example:

I can put the HTML for a page header in an _header.html file and then each page just needs to start with:

<!-- @include _header.html -->

I can define and use variables:

<!-- $current_year 2016 -->
..
<p>Copyright <!-- $current_year -->.</p>

And I can let Hammer work out relative paths:

<img src="@path image.png" />

If Hammer can’t make sense of a source file (e.g. it can’t find the image file), it generates a compilation error.

Because everything is text based I can easily manage all the source in a version control system. Also, if I have to move away from Hammer, it should be relatively straightforward to change the syntax to another static generator (or even write a replacement for Hammer!).

Overall I like Hammer. But it does have a number of shortcomings:

1. The user interface is very limited. Hammer shows you a list of source files and you can click on a source file to see the compiled version or edit the source. But the source files are listed in the order they were edited and you can’t filter or sort the list. This seems such a simple and basic feature, that I can’t understand why the developers have omitted it.

2. Hammer takes a dumb, brute force approach to compilation. If you change any file in a source folder, it recompiles *everything*, without checking if other source files include that file. This is a pain if you have 100+ source files. Surely it wouldn’t be that hard to work out which files depend on which and only recompile the files that need recompiling?

3. You can’t nest variables. For example you can’t do this:

<!-- $current_year 2016 -->
<!-- $copyright_message Copyright <!-- $current_year --> -->

This might sound minor. But it limits the expressiveness of variables significantly.

4. The vendor doesn’t do email support. If you want to communicate with them you have to use Slack or Twitter. I am old fashioned, I like email.

5. It only runs on Mac OS X (the clue is in the name).

At one point Hammer looked like abandonware, but owner riothq.com sold it to beach.io and active development has resumed.

Currently Hammer is priced at £15.39 (and presumably some round number of US dollars). That seems way too cheap. I wish they would price it a bit higher and fix some of the issues above.

** Update Jan-2022 **

Hammer4mac doesn’t run on recent versions of macOS and seems to have been quietly abandoned by the developer for some time.

South West Bootstrappers meetup

I am organizing a regular meetup in Swindon (UK) for people who are running (or are interested in running) their own bootstrapped (i.e. not VC funded) software product business. Come along and talk shop with other aspiring and experienced bootstrappers. It doesn’t matter if you are developing for web, Windows, Mac or mobile.

The first meetup is on the evening of Tuesday 16th June 2015. You can find out more and RSVP at meetup.com/South-West-Bootstrappers/.

swindon meetup

Signing Qt applications for Mac OS X 10.9.5 and 10.10

I have written previously about signing Qt applications for Mac OS X. It all worked fine until I upgraded to Mac OS X 10.9.5, which broke my signing script. Those Apple chaps do love to break stuff. Grrr.

The problem appears to be that the directory structure of the app bundle has changed and the Qt4 macdeployqt command does not conform to the new layout (I believe this is also the case for Qt5). Oh joy. I managed to work out how to get it working again after a bit of digging around. The good news is that Apple have also made the codesign command easier with a --deep option to traverse and sign the whole bundle in a single command. About time.

So here is the basic process to build and sign your Qt .app on the latest versions of Mac OS X:

# deploy Qt frameworks into .app bundle
$QTDIR/bin/macdeployqt <your_app>.app -verbose=1
# optionally delete unwanted framework and plugin folders, e.g.:
# rm -f -r <your_app>.app/Contents/Frameworks/QtDeclarative.framework
# rm -f -r <your_app>.app/Contents/PlugIns/sqldrivers
# correct .app bundle structure
python rebundle.py $QTDIR <your_app>.app
# sign .app bundle (including frameworks and plugins)
codesign --deep --force --verify --verbose --sign "Developer ID Application: <your developer id>" <your_app>.app
# the 2 lines below are just for verification/diagnostics
otool -L <your_app>.app/Contents/MacOS/<your_app>
codesign --verify --verbose=4 <your_app>.app

(Sorry about the small font, but I wanted to avoid confusing line wraps).

I then invoke DropDmg to create a .dmg image file complete with licence and background image. This is all stuck it all in a bash script, which I can pretty much forget about it (until Apple break something else).

In the above rebundle.py is a Python script  written by some public spirited individual that can be downloaded from github (thank you, ‘kingcheez’). Note that you can just find and replace all the ‘5’ characters in the script by ‘4’ if you are still using Qt4.

The first time I ran my script I ended up with a whopping 50MB .app file. It turns out that the cp -r commands in my script don’t preserve symbolic links. So you end up with 3 copies of each framework library. You can avoid this by using cp -R instead.

On the subject of signing for Mac, Apple recently sent out an email stating:

Signatures created with OS X Mountain Lion 10.8.5 or earlier (v1 signatures) will be obsoleted and Gatekeeper will no longer recognize them. Users may receive a Gatekeeper warning and will need to exempt your app to continue using it. To ensure your apps will run without warning on updated versions of OS X, they must be signed on OS X Mavericks 10.9 or later (v2 signatures). … Apps signed with v2 signatures will work on older versions of OS X.

So you are going to have to start signing using 10.9, whether you like it or not.

Exploit the long tail of Adwords PPC with Keyword Funnel

Adwords Keyword FunnelI released my new product Keyword Funnel today. It is a tool to help Adwords advertisers improve the profitability of their Adwords campaigns.

I have found the best way to get a decent volume of affordable conversions from Google Adwords is to use a ‘long tail’ strategy. For my Perfect Table Plan product there are a few ‘head’ keyword phrases that have high search volumes, such as “table plan” and “seating arrangement”. But these aren’t very well targeted (“table plan” might have been typed in by someone who wants drawing plans to make their own dining room table). Also lots of other people are bidding on these head phrases, pushing the bid prices up. This combination of poor targeting and high click prices makes it hard to make a profit on head keywords.

So I prefer to concentrate on ‘tail’ terms such as “table plan software mac” and “wedding seating arrangements program”. These are much better targeted, so convert a lot better. The clicks are also cheaper because less people are bidding on them. However the search volumes are much lower, so you need a lot of these tail terms to get a reasonable amount of traffic. At least hundreds, and preferably thousands. Hence ‘long tail’.

the long tail of Adwords PPCThe good news is that you can mine lots of different sources of data for these long tail keywords. For example you can extract keywords from your web logs, Google Analytics and Google Webmaster Tools accounts. Even though many searches are now listed with the keywords ‘not provided’ by Google, it still isn’t hard to come up with thousands of candidate keyword phrases. The bad news is that they aren’t in a usable form. Before you can import them into Adwords you need to:

  • Sort out duplicate phrases, foreign characters, capitalization and other noise.
  • Remove unwanted and negative keywords.
  • Group keyword phrases into tightly focussed adgroups.
  • Put the results in a form Adwords understands.

I tried to use Excel for this. But, marvellous tool though it is, it really wasn’t up to the job. So I wrote my own tool. This worked very well, but it wasn’t a commercial quality product. So I started again, from scratch 6 months ago. Keyword Funnel is the result.

Keyword Funnel allows you to add hundreds of keywords to new or existing Adwords campaigns in minutes, rather than hours. This makes long tail Adwords campaigns with hundreds or thousands of keywords a much more realistic proposition. It also allows you to set up new campaigns in a fraction of the time.

Keyword Funnel is available for Windows and Mac. It is priced at a one-time fee of just $49 (up to 2 Adwords accounts) or $99 (unlimited Adwords accounts). You can download a free trial from the website and it comes with a 60-day money back guarantee. The website is currently a little unpolished, but the software is well tested and robust. Any feedback is welcome.

Try Keyword Funnel now!

How to build Qt 4.8.5 on Mac OS X 10.9

I prefer to build Qt from source. I have been trying to build Qt 4.8.5 on Mac OS X 10.9 (Mavericks). I managed in the end, but it took a few tweaks. Online information about how to do this was fragmentary, so I am documenting it here in case it is useful to someone else.

1. Webkit doesn’t build. I don’t need it so I disabled it using configure option:

-no-webkit

2. The corewlan plugin doesn’t build. I don’t need it (I think, I’ve never heard of it before) so I disabled it using this fix from stackoverflow.

3. The TIFF image format plugin doesn’t build. I don’t need it so I disabled it using configure option:

-no-libtiff

My final configure command was:

./configure -nomake demos -nomake examples -debug-and-release -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-gif -no-openssl -no-webkit -no-libtiff

There will be lots of warnings that Qt 4.8.5 isn’t compatible with Mac OS X 10.9. But you can ignore these (or comment out the warning in the appropriate Qt header file).

I have done some brief experiments and it seems to work ok. Hopefully there will be a Qt 4.8.6 that fixes these issues. Note that you also need to make some tweaks to your application code. See:

Fixing Qt 4 for Mac OS X 10.9

** UPDATE April-2014 **

Qt 4.8.6 has been released. This appears to build fine on Mac OS X 10.9.

Is desktop software dead?

desktop vs webIt’s rare that I chat to other software developers without someone asking me when I am going to do a web version of my seating planner software. Because the market for desktop is dead, right? SAAS apps is where all the action is!

I think the web is a great platform for some products, not so much for others. Let’s look at the advantages of web apps over desktop apps.

Web advantage 1: No installation

You can access a web app from any device that has a browser. No need to install. There is no doubt this is a major convenience. However most desktop utilities can be downloaded and installed in 1-2 minutes with a decent broadband connection. Also you don’t have to keep logging in to most desktop apps, once they are installed.

Web advantage 2: No upgrades

End-users are always using the latest version. This is definitely an advantage for technical support. But it does take away some choice from the user. Perhaps they weren’t ready to upgrade or preferred the old version?

Web advantage 3: Better user insights

You can analyse how users are using your software. This allows you to improve usability and send out tailored lifecycle emails. It is possible to gather similar information for desktop software, but it involves a lot of extra work.

Web advantage 4: Distributed architecture

If you are writing web apps, you get a distributed architecture for free. No need to do socket programming.

Web advantage 5: Less piracy

Cracks and keygens are a fact of life for desktop software vendors. It is easier to protect against piracy with a web app.

Web advantage 6: Cross platform

In theory web apps are cross-platform. Write them once and they can run on any device with a browser. But browser compatibility issues mean it isn’t that easy in practice, especially if you are still forced to support the dreaded IE6. Also there are solutions (such as Qt) that allow you to deploy to multiple desktop devices from a single code base.

Web advantage 7: Subscriptions

Web apps lend themselves to subscription based payment. This is great because you get a more predictable monthly income and potentially get more money from each customer over the lifetime of the product.

So what about the advantages of desktop apps over web apps?

Desktop advantage 1: Responsiveness

Native apps are more responsive than web apps, partly due to lower level access to the machine and partly due to not having to talk to a remote server. However this advantage is eroding as bandwidth and JavaScript performance improves and more work is carried out by the client in web apps (e.g. using Ajax).

Desktop advantage 2: Reduced hosting costs

The costs of hosting a website for a desktop app is minimal. Typically you just need to serve a few pages and a download file to each visitor. They then won’t need to come back until there is an upgrade. But hosting costs can be significant for a web app, particularly if the app requires large amounts of bandwidth or compute power.

Desktop advantage 3: Better access to hardware

Desktop apps can make better use of the hardware available. For example, you can generally do printing a lot better from a desktop app.

Desktop advantage 4: Better development tools

The old joke is that JavaScript is to Java as the Taj Mahal curry restaurant is to the Taj Mahal. As a C++ developer I am used to working with a fully fledged IDE, debugger, profiler, static analyser and runtime coverage analyser. I tried some JavaScript development recently. Ugh. The development tools seemed very primitive and  JavaScript is a language so hideous that surely even it’s mother couldn’t love it. No classes, no strong typing, no templates and broken scoping. However frameworks such as jQuery have made JavaScript much more accessible over recent years.

Desktop advantage 5: Psychological

Many people feel that anything web-based should be free. Psychologically customers seem more ready to pay for desktop software. Perhaps they feel a greater sense of ownership. This perception is gradually changing for B2B, but I think it is still prevalent for B2C.

Desktop advantage 6: Privacy

Many customers don’t feel confident storing important and confidential information on third-party servers.

Desktop advantage 7: Availability

You can’t use a web app unless the server is up and you have an Internet connection. A desktop app installed on your local machine is always available. You can continue to use it, even if the vendor goes out of business.

Desktop advantage 8: Up-front payment

Desktop apps lend themselves to a single, up-front payment. This is great because you get all the money straight away, improving your cash flow.

So I have come up with similar number of advantages for web apps and for desktop apps. Which is better? It depends, of course. For my particular application, I think a desktop app still has significant advantages:

  • My software can render and zoom in and out of large floor plans better than my web based competitors.
  • I use a genetic algorithm to assign guests to seats. It makes more sense to use under-utilised desktop CPUs for this, rather than me having to pay for a beefy compute server. The thought of writing a genetic algorithm in JavaScript is too awful to contemplate (although Atwood’s law dictates that someone will, if they haven’t already).
  • I can do printing better than my web-based competitors.
  • Most of my web-based competitors seem very feature-poor. I am sure that is at least partly due to poor tooling for web development compared to desktop development.
  • Most of my web-based competitors give their product away for free in the hope of making some money back on ads. I charge for mine.
  • Seating plans can contain sensitive information, particularly for events with celebrities, royalty and heads of state. Some of my customers don’t want this information transmitted to and stored on third-party servers.
  • If my server goes down then I lose sales. But my customers can continue to use my software. Imagine if they were dependent on my server and it went down (or I went out of business) the day before their big event. It brings me out in a cold sweat to think about it.

But other products are a better fit for the web. If I was writing a collaborative CRUD app, I would almost certainly do it as a web app. I have recently been working on a couple of new products. One is a web app and the other is a desktop app. Horses for courses.

A lot of the money I have spent on software over the last few years has been for desktop software. When I had to choose bookkeeping software, I chose a desktop package because I didn’t want to:

  • pay every month
  • store sensitive financial information on a third-party server
  • risk losing all my data if the vendor went out of business

If I look through the list of useful tools and services on this site I see that 51 of them are web-based and 35 are desktop based. Peldi of Balsamiq reported in 2009 that 77% of their revenue comes from the desktop versions of their software. I asked him if that had changed much and he was kind enough to send me the following graph (myBalsamiq is the web version). You can see that it is still nearly 70% 4 years later.

desktop vs web

The line between desktop and web apps is also becoming more blurred. Many desktop apps now use web protocols and embed web browsers. For example, the Qt toolkit allows you to easily create applications that are hybrids of desktop and web. It is also possible to sell a web app that companies host on their own servers. This adds some of the advantages and disadvantages of a desktop app compared to a web app installed on the vendor’s server (SAAS). Perhaps desktop and web apps will converge to the point where there the whole desktop vs web debate becomes meaningless.

So I think reports of the death of desktop software have been greatly exaggerated. There is no doubt that long-term trends ( e.g. increasing bandwidth and attitude to paying for web apps, for B2B at least) have been changing the balance in favour of web apps for some types of product. Particular those where collaboration is more important than graphics or computer power. But I think there will continue to be plenty of markets where a desktop app is a better choice than a web app for the foreseeable future. In the final analysis, customers care a lot more about how well your software solves their problem, than how it happens to be deployed (if they even understand the difference).

Fixing Qt 4 for Mac OS X 10.9

Mac OS X 10.9 (Mavericks) was released yesterday. And those nice people at Apple made it free, so you can be sure lots of people are downloading it. However Qt 4 apps look at bit strange on the new OS. Look at the text alignment in these buttons:

buttons1The text isn’t centre aligned. It doesn’t look like much of an issue out of context. But it looks wrong when you look at a whole UI. The good news is that there is a simple fix:

#ifdef Q_OS_MACX
    if ( QSysInfo::MacintoshVersion > QSysInfo::MV_10_8 )
    {
        // fix Mac OS X 10.9 (mavericks) font issue
        // https://bugreports.qt-project.org/browse/QTBUG-32789
        QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande");
    }
#endif

You need to place this code in your main() before creating your QApplication. For more details see this bug report.

With the fix the buttons look like this:

buttons2Much better! There are some console warnings:

CoreText performance note: Client called CTFontCreateWithName() using
name "Lucida Grande" and got font with PostScript name "LucidaGrande". 
For best performance, only use PostScript names when calling this API.

I am not sure how how significant these are.

I have also found that updating to Qt 4.8.5 fixes a printing crash bug in my table plan software. This crash happened when rotated pixmaps were printed from Mac OS X 10.8.

I have seen on forums that Qt 5 is completely broken on 10.9. But I don’t know if that is true.

80 useful tools and services for software businesses

tools and servicesSome of the most useful nuggets of information I come across in blogs and podcasts are mentions of tools and services used by other people to better run their software businesses. So I have put together my own list of useful tools and services to run a software business.

Feel free to recommend your own favourites in the comments below. Please include your relationship to the tool/service (e.g. customer, user, employee or owner). You can also comment below about your experiences (positive or negative) with any of the tools and services listed. Anonymous comments will be treated with suspicion and may be deleted