Text

I’m working on an iOS app which, while very immature, has caused me to think about app pricing. I have these constraints:

  1. I believe in the “release early, release often” maxim, and that software is never finished
  2. I believe that rewarding early-adopters, and settings realistic expectations from the start, would be a good strategy for getting early positive reviews
  3. I believe that an application has a natural price-point
  4. I believe that most applications in the app store are under-priced
  5. I believe that app development is an iterative process, and the deployment of the app should be iterative too

On the pricing front, I have these concerns:

  1. I may price to high initially, gain no users (or worse, gain users who complain about the price and rate the app poorly)
  2. If I price the app aggressively for a while, as an introductory offer, I’ll get a lot of customers paying very little, sales would likely drop off when the price is increased
  3. I dislike ads and vowed to not use in-app advertising

So here’s a proposal which may address these constraints:

  1. When the app has bare functionality, set realistic expectations about the limited functionality in the release notes. Release the app at no cost. That way, users are unlikely to complain about its lack of features
  2. Include this pricing policy in the release notes, so purchasers know what to expect in the future
  3. Add more features, release updates
  4. At some point, when I think that I would pay a minimal amount for the app, start charging for it. (£0.59 or $0.99)
  5. Gradually (carefully) increase the price as more features are added
  6. Updates are always free to existing users

I’d be interested to hear any comments or thoughts!

    Comments
    Text

    UISpec is a great tool for unit-testing the UI of your iOS app, but (unless you use something like Frank) you’ll be running all tests every time, and watching your console for failures.

    Frank allows you to selectively run tests, but it’s driven from outside the app using Cucumber, and I needed something which runs from inside (so I can set expectations on mocks).

    Announcing RVUITests, which runs UISpec tests from your device or simulator, in a UI similar to GHUnit:

    RVUITests at GitHub.

    Comments
    Text

    This is my method of enhancing the GNU Screen window titles… it relies on my interactive shell being /bin/bash.

    These scripts will:

    • show a plain $ or # when just the shell (or root shell) is running in that window
    • show the name of a running command (so if you run “nice top -d 10” it will show “top”)
    • prepend the title with # if the user is root, or the command is running with “sudo”
    • show, for selected commands, a filename in braces instead of the command. So running “sudo vi /etc/fstab” would show a title “#{fstab}

    I’m sure there will be bugs, and I’d be happy to receive patches ;-)

    Edit: this script is now hosted at GitHub :-)

    Read More

    Comments
    Text

    Hope this is more reliable.

    Comments

    "Never trust a test you haven’t seen fail"

    - Martin Fowler, 10th November 2010

    Comments
    Text

    Over the past few weeks, I’ve come across a few useful bookmarklets which work great in Mobile Safari on the iPhone. I can’t take any credit for writing these, but hope to be helpful by listing them in one place.

    How to install

    Open this page with mobile Safari and tap-and-hold on the bookmarklet hyperlinks below. Select “Copy” when the menu appears. Then bookmark a page (any page will do), giving it a name like “Scroll to bottom”. After storing the bookmark, edit it - the URL will now be editable where it wasn’t previously. Delete the original URL and paste in the bookmarklet code. Finally, remove the “http://” from the front. Save!

    Scroll to bottom

    How many times have you been reading a long webpage and accidentally hit the top bar in mobile Safari? Yes, it takes you to the top, but there’s no “go to bottom” shortcut. This will do just that. Copy me

    Find in page

    This provides a “find text in this webpage” feature. Copy me

    View source

    Yeah baby! Copy me

    Comments
    Text

    I’ve been using the Nortel branch of vpnc for a while with great success, but it’s a command-line tool, and a drag to use now that Ubuntu 9.04 is so swish. So here’s a 30-minute Python/Tkinter UI hack which wraps the vpnc and vpnc-disconnect tools. Notes:

    1. you’ll need to edit the CONNECT and DISCONNECT command paths at the top of the file
    2. this assumes that you, like me, use a private PIN and a SecurID password
    3. it also assumes that your /etc/vpnc/default.conf file is configured with everything except your password
    4. it’s probably best run with gksudo
    5. I’m no Python guru, so don’t take this code as being ‘best practice’ ;-)

    Read More

    Comments
    Text

    I’m doing regular nightly backups to rsync.net, and recently made changes to the way that backups are done. I now keep the last seven daily snapshots (labelled “d-1″ to “d-7″) and another snapshot every fortnight. But that fortnightly snapshot needed a fortnightly cron job.

    Here’s the entry in my crontab:

     #Mins   Hours   Days    Months  Day of the week
     30      02      *       *       0       expr `date +\%W` \% 2 > /dev/null || /home/matthew/scripts/fortnightly.sh

    This was inspired by this post on the interweb, with a slight necessary modification: the two percent signs need to be escaped for the job to run properly with Vixie cron, Ubuntu Gutsy’s default cron.

    The original Wordpress post had one comment:

    Vin Says:

    This is OK until you need to say, run something every 1st & 3rd Monday of the month.
    However hows about this..
    You cron your script to run every day, then your script’s logic determins when stuff happens.
    Such as..

    echo $(echo $(cal|cut -c 4-5)|cut -dM -f2)|read first second third forth
    if (( $(echo $(date +%e)) == $first || $(echo $(date +%e)) == $third ))
    then
    do some stuff
    fi

    The first line gets the day of the month for all Mondays in the current month from cal and assigns them to four variables $first $second $third and $forth.
    Then the if statement only does stuff if today’s “day of the month” matches the values of $first or $third.

    Enjoy.

    Comments