Internet iOS

Offline apps

I recently saw a tweet to an old (2007) crudely named post by DHH on offline access:

“The idea of offline web applications is getting an undue amount of attention. Which is bizarre when you look at how availability of connectivity is ever increasing. EVDO cards, city-wide wifis, iPhones, Blackberry’s. There are so many ways to get online these days that the excitement for offline is truly puzzling.”

Six and a half years later this post was written by Team Hoodie about the idea of Offline First:

“Frequently not having any data connection in even the wealthiest and most developed cities of the world has led us to conclude that no, the mobile connectivity/bandwidth issue isn’t just going to solve itself on a global level anywhere in the near future.”

“We can’t keep building apps with the desktop mindset of permanent, fast connectivity, where a temporary disconnection or slow service is regarded as a problem and communicated as an error.”

I agree with Team Hoodie that offline is an often overlooked requirement: especially here in geographically sparse Australia where we get patchy mobile access, and lose all data connectivity as soon as we travel abroad (due to exorbitant roaming charges).

One of the biggest benefits I see in native mobile apps over HTML5 applications is their offline capabilities. For example, I love the TripAdvisor City Guides app which allows me to cache an entire copy of TripAdvisor for a city on my mobile device so I can use it when roaming abroad without any data connectivity or charges. To implement the same thing on their web site would not be trivial and/or may not even be possible. Offmaps is another hugely popular app that removes reliance to being online.

It’s easy to assume that the plane is the only place we don’t have connectivity (when in fact these days we probably do have some on there anyway), and I personally would love to embrace the offline first development philosophy.


Review: Fishpond SmartSell [AU and NZ only]

We recently realized how many books we had accumulated over the years that we didn’t read anymore and were sitting on our bookshelves gathering dust.

I was looking for a way to sell these books without requiring a lot of effort on my behalf. Sure, I could list them on eBay, but there’s a huge amount of time required to list them, and limited timeframes to sell them which means wasted time for every unsold book.

Then I found Fishpond SmartSell. Fishpond is an Australian and New Zealand website that sells a lot of things, primarily focused on books and DVDs. Their SmartSell service is a way for people to quickly list hundreds of items for sale with minimal effort. Here’s how it works:


After Google Reader

It’s been a few months since I moved on from Google Reader to read my RSS feeds (after it was announced they were shutting the service down).

My first, short lived, stop was feedly but I was after a simple RSS reader, not a ‘magazine’ style one, so I continued the hunt.

I came across and began to use The Old Reader, for its simple interface, and fairly decent mobile web support. A few weeks in the app began having intermittent outages followed by a recent prolonged outage of a few days (apparently the server hard drives crashed).

I waited patiently for it to resume and was then told it would be made private and I had two weeks to find something else to use, only to be told the next day they actually were to continue.

By then I was sick of being messed around so I came across Digg Reader. Simple interface: check. Ultra reliable: check. Simple iOS app: check. I’m loving it. Check it out.


Touch Driven Computer Human Interfaces

Our third child, Winston, was born last week. He came bearing gifts for our other two sons in the form of a second-hand MacBook Pro I purchased for a couple of hundred dollars through an auction at work (our three year old son is still trying to work out how the MacBook fit in Mama’s tummy!).

I bought an external Apple mouse (I thought it would be easier than the trackpad) and have started to teach my older children (aged 1 & 3) how to use the mouse, but it’s much harder than I thought. They are both very proficient at using iOS (they both own iPod touches and use my wife’s iPad mini rather frequently), but struggle to use the mouse. They also try to touch the MacBook screen thinking it’ll do something even though it doesn’t.

Whilst I want them to learn the mouse (and trackpad eventually) I have started to ask myself whether we should even bother, since the future is clearly touch.

Different Computer Human Interfaces

The computer human interface on my first computer was a mouse driven graphical interface known as Windows 95 (yes I got a computer late, and yes I am that young).

To this day, I am often the odd one out in software development as I prefer a graphical interface to a command line (textual) interface. That’s probably because most people who work in software development today had their first experience with a textual interface (before GUIs were invented).

My two son’s first experience is with a touch driven graphical interface which is well and truly the most intuitive to them. By the time they enter the workforce I can’t imagine them using anything else, just as a large majority of workers today, bar people in software development, don’t use a textual interfaces. I’ve witnessed first hand usability issues that younger Generation Y staff have using ‘green screens’ on mainframes as they much prefer a click driven drag and drop user interface.

The other day I had to visit an Australian Government shopfront and the first thing that happened when I walked in the door was I was greeted by a staff member with an iPad who bought up my details and guided me to a lounge area where I waited for another staff member who welcomed me by my name. That wasn’t the Apple Store I was visiting, it was an Australian Government shopfront. The future of business technology is well and truly past using mice.

And it’s not just business where touch makes sense. My sixty-something mother has never used a computer in her life, although we did try teaching her a few years ago but it was just too hard (you double click a file, but single click a web link?!?). I took a risk early last year and bought her an iPad for her birthday. The moment she picked it up she could use it immediately without help, and since she’s retired she now doesn’t go a day without using it to send friends emails, skype grandchildren and play ‘words with friends’ with my brothers. She has since upgraded her old Nokia to an iPhone which she was again able to use immediately without training.

Children born now are getting seriously used to intuitive touch driven interfaces so we need to ensure that business progresses sufficiently to support this whole new generation that is growing up as we speak. Just as it is hard now to support ‘green screens’ with Generation Ys, it will be difficult to support older mouse interfaces with generations being born, and using iPads, as we speak.



One of the reasons why myself, and many others, still refer to Selenium 2 as WebDriver, I suspect, is it’s googleable. If you’re trying to find information about Selenium 2 through Google, it constantly brings up results for Selenium RC or Selenium IDE, which are vastly different from Selenium 2. When you Google ‘Webdriver’ you know you’re getting Selenium 2 and that only.

That’s why googleability is so important. Many open source projects have short hipsterish names such as grape, gatling, bacon and hoe which aren’t googleable. Watir is very googleable as watir will return watir results, and even watir webdriver is pretty good for Googleability too. This blog’s name is very googleable.

It applies for people too. It should be no surprise that the first thing someone hiring does when looking at a CV is Google the candidate’s name. If the person has a generic name, eg Ben Smith, it’s going to be very hard to find that person quickly. Since I have a fairly generic last name, Scott, we have purposely chosen to give our children interesting first names (Finley, Orson) to increase their Googleability (yes I Google my yet to be born children’s names).

So next time you’re naming an open source project, or baby, think of googleability.

Internet Software

Take screenshots on Windows? Use the snipping tool

I’ve never been that keen on Snagit, so I was delighted to discover (from a fellow paradev) that Windows Vista, 7 and 8 has an inbuilt screen capture tool called the Snipping Tool.

Snipping Tool

You can launch it via the the Start Menu and it allows you to snip an area of the screen to capture. Neat.


Is one time web pricing sustainable?

I’ve noticed that 37signals, the web design company who have traditionally charged monthly subscription fees are releasing new products as one time pricing.

Early this year they announced Breeze email lists, a simple way to manage emailing a group of people for a once off fee of $10 for per group email address.

“A Breeze email address for your group only cost $10, one time. Pay once, and use it with your group of up to 50 people without ever having to pay again.”

— Jason Fried

Soon after launch, they quietly doubled the pricing to $20 (despite Google still caching $10):

Breeze Lists Promo

I signed up for a list when it was $10 and I believe it was money well spent. We had a couple of problems with the list: namely inline images being corrupted when viewed on Outlook clients, and Gmail blocking an attachment which meant our entire list (silently) failed. The second problem was much worse than the first, but it took 37signals about 2 weeks to respond to either. Perhaps they could have devoted more resources to it if we had paid them more than $10 as a once off payment? These two support incidents would have cost 37signals more than $10 in time, so they essentially lost money on our email address.

Is one time web pricing sustainable?

Web companies cost money to run. Staff need to be paid, servers need to be powered. Electricity companies don’t offer one time pricing. Neither do employees offer one time wages. Why should web companies be any different?

Breeze Retires

Recently I got an email from 37signals stating Breeze is shutting down on August 1st due to lack of uptake. My email list that was sold to me as being able to use with up to 50 members forever lasted less than 6 months. They did refund my money, but I would have preferred to keep the email list instead (and oddly the signup page is still active as of writing this).

Did Breeze support cost more than $10 per email address and they decided to pull the plug to stop losing money? That’s my guess.

But 37signals one time pricing continues

37signals latest product Know Your Company continues with 37signals insistence on one time pricing, set at $100 per employee.

“You’re willing to invest just $100 per employee. This is a one-time investment, not an ongoing expense. For example, if you have 27 employees, you’d invest $2700 in the product, one time. No monthly or annual fees.”

I think it’s a case of once bitten, twice shy for me. I would be very reluctant to pay for any one time 37signals product knowing that if they don’t get sufficient uptake, or change their mind, they’ll simply pull the plug and make me move onto something else. I just wish they would stop this silliness that is one time pricing, and move back towards sustainable pricing models.

Internet Other

Leanpub pricing analysis

I am nearly at the point of publishing my eBook on Leanpub which has raised the question about how much I will price it at (it will be available free online in HTML form). There are two price points on Leanpub (minimum and suggested) and since I don’t go into these decisions lightly I thought I would do some analysis around existing titles to see what they set the price-points at.

One caveat is that I completely understand that it’s just as important to have a good product as worrying about its pricing as pricing alone doesn’t make a book good.

I wrote a quick watir-webdriver script (at the end of this post and online) to scrape the top 100 all time grossing and best-selling (volume) books off Leanpub and some data about each. One data point I would have loved to have seen on each book page was page count so I could correlate page count to price, but sadly it’s missing.

I put this into a google spreadsheet and did some analysis

Leanpub pricing analysis

What I can read about Leanpub pricing is:

  • Obviously, higher selling books are more likely to be available for free
  • The number of books with the same minimum and suggested prices are the roughly the same across the lists at about one quarter
  • The average non-free minimum price is slightly less for higher selling books, but roughly $12-$14
  • The average non-free suggested price is much higher for higher grossing books at roughly $19-$22, compared to $12-$14 for higher selling books

I did some further analysis of the raw data and a particular title stood out to me: ‘How to Do What You Love & Earn What You’re Worth as a Programmer‘. What made this stand out was it’s ranking at number 2 on number of copies sold (8191 copies), but just number 28 on gross revenue. Based upon the minimum price of $9.99, this translates into minimum revenue of $81,828.09. But this book is at number 28 on the earnings list, meaning that possibly 27 other books each earned more than $81,828.09. But there’s no a single book that has earned more than this book that has a minimum price times copies (or suggested price times copies for that matter), that is higher than this book. Which is very odd.

I know of two possible explanations, but I don’t know if either is true.

One is that this book once was free, or a lot cheaper than it’s current minimum price, which explains why it has sold many copies but (comparatively) grossed so little.

The second is that people who buy books on Leanpub pay a lot more than minimum or even suggested prices.

I think the first explanation is true but hope that it’s the second.

Here’s my script:

$: << File.dirname(__FILE__)+'/lib'

require 'book_list'
require 'watir-webdriver'

profile =
profile['permissions.default.image'] = 2 #no images
browser = :firefox, :profile => profile

book_list = 'bestsellers', ''

browser.goto book_list.url
browser.links(:class => 'book-link').each_with_index do |link, index|
  book_list.add_book link.text, link.href, index + 1

book_list.books.each do |book|
  browser.goto book.url
  book.min_price = browser.element(:css => 'span[itemprop="lowPrice"]').text
  book.suggested_price =  browser.element(:css => 'span[itemprop="highPrice"]').text
  if browser.strong(:text => /^This book has (\d+) readers!$/).exists?
    book.copies_sold = browser.strong(:text => /^This book has (\d+) readers!$/).text.match(/^This book has (\d+) readers!$/).captures.first

book_list.to_csv 'copies.csv'

require 'book'

class BookList

  attr_reader :name, :books, :url

  def initialize name, url
    @name = name
    @url = url
    @books = []

  def add_book name, url, rank
    @books <<, url, rank)

  def to_csv filename, 'w') do |file|
      @books.each do |book|
        file.puts book.to_csv_string
class Book

  attr_reader :name, :url, :rank
  attr_accessor :min_price, :suggested_price, :copies_sold

  def initialize name, url, rank
    @name = name
    @url = url
    @rank = rank

  def to_csv_string

Charging the minority to benefit the majority

I’ve recently noticed quite a few software services on the Internet charging the minority to benefit the majority.

Trello recently added Business Class (paid) features: Joel Spolsky explains why:

“What we really wanted to do was make a free product that helps millions of people, and then find some way to get paid by the 1% of those people who get the most value out of it. The 1% are delighted to pay.”
~ Joel Spolsky on Trello

It’s not the first time I have seen this kind of thing.

Automattic has been providing, a free, high quality, reliable blogging platform to anyone to write a blog for free for a number of years. They make this available by offering premium features that appeal most to professional users: domain mapping, custom layouts and premium themes to name a few. These paid features are probably used by more than just the 1% of users Joel is aiming for, but I can’t imagine it being more than 20% of users that pay.

Google provides incredibly awesome free email (Gmail) for all personal users, but charges businesses $50/user/year to use this as part of Google Apps for Business. Again, an example of charging the minority to benefit the majority.

I think these examples, and especially Joel’s intent with Trello, is very noble and worth modelling.

Now to work out what service I can build to charge the minority to benefit the majority.


Why your web app should be responsive

Responsive web design involves making your web application optimized to the screen of the device it is running on. In the past, most web applications would use user agent strings, which are sent by the user’s browser, to determine whether to display a mobile formatted version of the application, most often a completely reformatted and often cut down version.

Historically it was easier to differentiate between what is a mobile device and what is a desktop device, but we’re now in a situation where it’s no longer black and white: just a continuous scale between a small screen and a large one. Mobile phone tablets (phablets) such as the Samsung Galaxy 8 raise questions about what actually is a mobile device; it is a phone, but at 8 inches is also a high res tablet.

Previously you would have had to make a decision about what version of your web app to show on a Galaxy 8 phablet – which would most probably have been the mobile optimized one: which isn’t ideal on such a high resolution screen.

With responsive web design, CSS3 media queries enable you to determine actual device width and dynamically provide a version of your web application appropriate to the device: whether it’s a 27″ iMac or a 3.5″ phone. For example, this blog is responsive: if you’re reading in a desktop browser, resize it down to a typical phone width and you will see what I mean.

This blog in a narrow screen width
This blog in a narrow screen width

Whilst at first it may appear to be more complicated to design a responsive web application, it is future proofing your web application against an ever increasing range of devices and screen sizes, and provides simplicity in not having to use user agent strings to determine to switch views. Most importantly, it provides the best user experience, now and in the future.