Best file system for your USB external drive

USB driveIt’s not unusual these days to have computers, consoles and tablets in the house, all running different operating systems. If you want your external drive to be interoperable between them, you’ll need to think carefully about your choice of file system. I’ve broken down some popular options here so you can make the best choice for your drive. (Note – many Android phones support USB On The Go, which means you can plug USB drives right in via an adapter.)

Windows Mac Linux Android Chrome OS iPad Xbox 360 PS3
FAT32 Yes Yes Yes Yes Yes Sort of [1] Yes Yes
exFAT Yes [2] Yes No [3] Yes No No No No
ext3 Sort of [4] Sort of [5] Yes No [6] Yes No No No
NTFS Yes Sort of [7] Yes Sort of [8] Yes No No [9] No
HFS+ No [10] Yes Sort of [11] Sort of [8] Sort of [12] Sort of [1] No No

  1. iPads (not iPhones) can read FAT and HFS drives via the Camera Connection Kit, but only photos and some videos. If you’re looking to access an MP3 or a Word document, you’re out of luck.
  2. exFAT works on Vista / Windows 7 / Windows 8, but XP needs this update first.
  3. Not by default, but you can add FUSE and read and write as usual.
  4. Windows can read ext2 / ext3 / ext4 drives, but only using 3rd party software like explore2fs, Ext2Fsd or Ext2IFS.
  5. Not by default, but you can enable read/write using OSXFUSE with fuse-ext2, or buying Paragon.
  6. Not on a stock Galaxy S3, but some custom ROMs do support this.
  7. Macs can read NTFS drives by default. You can enable writing to NTFS using OSXFUSE with NTFS-3G, or buying software like Paragon or Tuxera.
  8. On Android, the Paragon app will enable access to NTFS and HFS.
  9. This might seem odd, but it’s true – NTFS is not supported on the Xbox 360.
  10. Not by default, but you can buy extra software to enable it.
  11. Works for every flavour except journaled HFS+, which is read only. (Unfortunately, journaled HFS+ is the default for drives formatted with a Mac.)
  12. Works, but read only for journaled HFS+.

FAT32

If you buy a smaller drive or USB stick, it’s probably formatted by default as FAT32 because it is the most compatible – pop a FAT32 disk into pretty much anything, and it will just work, including devices not listed here like TVs or cars. However, there are some important limitations which mean that it’s not always the best answer.

  • The volume has to be smaller than 2TB. If your drive is larger, e.g. 3TB, it will need to be split into two volumes before the full size can be accessed.
  • Files on the drive can only be 2GB or smaller. (Hence, large video files or databases are a problem.)
  • It is the least fault tolerant of these file systems, so not a great option for storing important data over a longer term.
  • FAT32 is not open source (if that matters to you).

exFAT

exFAT is made for external drives, just like FAT32. It’s a newer standard, so it’s not as widely compatible, and it’s also Microsoft proprietary. However, it can deal with volumes bigger than 4GB and files sizes larger than 2GB.

ext2, ext3 and ext4

These three file systems are closely related and native to Linux and the open source world. If you’re an Ubuntu or Chrome OS user, these are the best options for you – Ubuntu formats drives by default in ext4.

NTFS

NTFS has been the default file system on Windows machines for many years, and Linux based systems can work very well with them – however, it’s still tough to use on a Mac.

HFS and HFS+

Journaled HFS+ is the default format for drives on OS X, but it’s hard to use on other systems.

What is the best solution?

Most people will still use FAT32. If you buy a smaller USB data key, that’s probably what it’s formatted as by default, simply because it works with so many systems. However, it’s not ideal, and the demands of bigger drives or better security may leave you looking elsewhere.

First, there are two alternatives to using an external drive. One – upload your files to cloud storage like Google Drive / Dropbox / Skydrive, and use their app on Mac / Windows / Xbox or wherever you need. Two – keep your files in the house on a NAS and access this via DLNA, Samba or even a specialised application like Plex.

Given how many different systems many of us use at the same time, choosing a file system should be easy, but it’s surprisingly tricky. It’ll get easier – as our internet connections get faster and more ubiquitous, cloud storage access will become the best solution for more and more of us.

How to acquire customers for your mobile app

As an EIR, I spend a lot of time talking to startups about their problems and how to solve them. I sat down recently with one of the Oxygen Accelerator teams to discuss the the biggest problem by far for any startup – customer acquisition.

Here’s an example flow of users for a generic mobile application:

We get an email address from a mailing list, send an email with a link, that link goes to a landing page, the user clicks a download link, doesn’t uninstall straight away, and does something that brings revenue. That’s an ideal scenario. The reality is that at each step, you get some percentage of people who convert to the next step, and some percentage that drop off. For example, if we email an app download link out, and 95% ignore the email while 5% get to the next stage and download, then this stage has a 5% conversion rate. Putting all the stages together forms a funnel. Our objective is to drive as much revenue add possible, and we do that in two ways:

  • Improve the conversion rate at every stage
  • Put more items into the funnel

Improving conversion rates

Your most dangerous weapon as a non-coder is a spreadsheet, so let’s unsheathe and wave it around. Here’s some sample data for the flow above:

Nothing radical, but it’s very important to keep and maintain your understanding of this funnel – edit it up as things change over time. A common question – how do you choose which events to put in the funnel?

  • You have to be able to actually measure them. For example, you can’t measure views on your app’s page on iTunes, even though you might dearly love to.
  • You should measure events where you have the ability to improve the conversion rates between them. Sometimes the conversion is out of your control.
  • Pick the right level of detail for you. If you can handle email send -> email open -> images downloaded -> link clicked -> landing page opened, go for it – or you can keep it simple.

More users into the funnel

Ideally, users would just appear at the left side of the funnel, waiting to be sucked into your engine of revenue. This does happen – it’s called organic traffic. You put up a website – people search, find you, and pop on. You put up a mobile app – people search on the app store, find you, and ping! Users. There’s a bunch of things you can do to help (e.g. SEO) but we’ll leave that for another post.

Your other option is to pay to get users in.

There are hundreds of companies out there waiting to sell you ways to do this – your job is to pick the one that gives you the best return. How do you do that?

  • First, calculate your customer LifeTime Value (LTV). The simple way to think about it is – what will an average paying customer actually pay me? If you are selling an app for $0.99, it’s $0.99. If you have subscription model, say $5 per month and you estimate your customers will stick around for one year, it’s $5 x 12 = $60. (For you pedants out there, I am ignoring the time value of money.)
  • Second – and this is the fun bit – work backwards through your funnel to understand the value of a customer at each stage.

So let’s say your LTV is $60. It looks like you should be paying a maximum of $ for a download. But wait! There’s a rule of thumb here, which is that your marketing costs should be less than 50% of this figure. Therefore, you should aim for these as your marketing costs – 60 cents for a download, 1.5 cents for an email, and so on. Remember these are maximum costs – you should aim for the lowest cost possible that converts well.

Speaking of which …

This model is not perfect

One pretty model that solves the biggest problem your startup has? Not so fast! There are some problems to bear in mind which relegate this from “manna from heaven” to “useful tool” status.

Firstly, there is actually more than one funnel, because not all users are the same. Practically, this means that your conversion rates will differ for different types of campaigns. I’ll illustrate.

Let’s say you run a CPI campaign, where you are paying some amount (let’s say $1) for an actual install of your app. Think about the flow for those users – perhaps they’re in the middle of playing Dungeon Keeper, and the app asked them to install an app so they can get a free powerup in the game. Fact is, they’re not interested in the app, they are interested in the powerup so they can slay all sorts of grisly monsters. So the chance of them converting from a download to revenue is pretty slim.

Now let’s say you run another campaign where you go to a club for people who are all about the service your app provides, and install the app for them. (I know it sounds theoretical, but amazingly it’s not.) The chance of them converting from download to revenue is very high.

You can handle this by thinking hard about how similar your users are to each other for any particular campaign. If they are wildly different, you need to construct a new funnel for them and calculate using your new figures.

Second piece of bad news – in reality you’ll discover that the funnel isn’t exactly linear. For example, you can go from app download to revenue straight away, depending on how you are measuring retention. There’s no great solution to this – just try to keep your funnel as close to your understanding of the flow of real users as possible.

Finally, the funnel doesn’t take into account how things change over time. Many businesses are started by paying way over the odds for content or conversions (Yelp being a great example), with the understanding that acquisition costs decrease as the value of the service increases with scale.

Keeping an eye on your funnel is a critical activity for your business. Keep in mind the rough edges and you’ll find it essential for visibility of your business.

(Thanks to Jade at Sorted for a great discussion!)

Google Drive vs Google+ Photos vs Picasa Web

After the launch of Google Drive, I was excited to use it as a photo backup & sharing service. Unfortunately, the features for what I consider a good photo viewer are spread out over different Google products (Drive, Google+ photos, Picasa Web.)

I want to back up my photos online

This is easiest in Drive – drop your photos into the Drive folder, and you’re done.

You can’t do it on Google+. Yes, you can upload photos (including the neat Instant Upload function from your phone) but it won’t be an archive, because photos over 2048 pixels get resized from the original.

Picasa MacYou can’t do it easily on Picasa Web. You can let you upload your photos and preserve the size at least. However, if you want to download your photos again, you’ll need to install Picasa – you can’t do it from the web. The Picasa client application is a mess.

Let me qualify that last statement. Picasa is a mess because:

  • If you connect to Picasa Web, it doesn’t synchronise your online photos with the local store.
  • There’s no way to stop it scanning a bunch of areas on your hard drive on install.
  • The interface styling doesn’t follow either Google or Apple’s interface guidelines.
  • The “Import from Google+ photos” option is fairly confusing as this will be almost the same as Picasa Web, but not quite.
  • The “Back Up Pictures” is unnecessary – uploading to the cloud is the backup.
  • You can synchronise name tags with Google+ … which implies that name tag data in Picasa and Google+ are actually different.
  • Old features, like those for creating gift CDs, should now be removed.

I want to be able to view them online and on mobile in a decent interface

All three products have different photo viewers.

Google+ photos
Google+ photos
Picasa
Picasa
Google Drive photos
Google Drive

Google+ has the best viewer – there’s a grid of photos on the web and the Google+ mobile app, and a useful fan / zoom animation. Also, the background colour around the photo is black, which helps the photo itself be the focus.

Picasa is similar, but uses a white border, no animations, dated styling, and frames the photo in a smaller area.

Drive’s photo viewer doesn’t even resize a photo to fit into the browser height.

I want to be able to share photos easily

Google Drive sharing
Google Drive sharing
Picasa Web sharing
Picasa Web sharing
Google+ sharing
Google+ sharing

This is easiest in Drive. Click Share, click “anyone with the link can view”, and paste into an email / IM. You know for sure that they will be able to view it without being pestered to sign in or sign up to any services. You can also share to individuals by adding their email address.

In Picasa, you can’t share individual photos in this way without changing the visibility of the whole album. (You can share entire albums no problem.)

In Google+, you can share using Circles. Given that the only people I know who use Google+ are Google employees, I don’t want to share photos like this. Can I put an email address in that input box? Will it nag the target to sign up to Google+ before they can view the photo?

Making sense of it

Comparisons like this are a little convolved, because Google+ evolved from Picasa and the old service hasn’t been integrated properly yet, and Drive evolved from Docs which had a pretty different target segment. That said, it’s important that the offerings as they stand to the consumer today make sense, and right now they don’t.

How to use pagination on your website

Splitting content up into pages is pretty common on the web – you might see it in articles, comments, search results, or other lists of data. Want to use pagination? Let’s take a look at the options available to you.

Option one: links to new page

Having separate web pages for each page of content is original flavour.

  • Pros: Gives you N pageviews instead on one (if you’re worried about that metric), works on non-JS browsers
  • Cons: Slow, as a whole new pageload is required

Here’s an example from Tom’s Hardware. This shows how many pages exist, and also what’s on each (so you can just skip to the conclusions page, for example.)

Option two: one page, AJAX changes the view

Here, all of the content is loaded in the initial pageview, but the pagination buttons switch what’s displayed to the user.

  • Pros: Faster than a new pageview
  • Cons: More complex to code (if you’re rolling your own)

Here’s an example from YouTube, but you’ll also find this all over the web on most large sites. Start watching the video, and click the page numbers at the bottom to get more comments. You don’t get another pageload – not only would that be slow, it would interrupt the 80s goodness you’re hearing.

Comments on YouTube

When designing these, there’s a problem. If your list of stuff is kinda short – great. But if you have a long list, you scroll down to the bottom, click the page 2 button … and you’re at the bottom of the second page, not the top. To put it another way, you’re reading item 1, item 2 … item 10, then click Page 2, and instead of looking at item 11, you’re looking at item 20.

There are some solutions to this – Disqus, which powers sites like Engadget, collapses the whole comments section and re-expands it so you’re looking at the top. Steam does some batshit-crazy scrolling of the page and list to get you back to the top.

Option three: Don’t use pagination

If you’re feeling bold, you can just let the whole page load with every list item.

  • Pros: Easy to code, easy to understand
  • Cons: Unworkably large pageloads for very long lists (e.g. user generated comments)

A hybrid solution is using a MORE link that appends the next page to the current one. The nice part is that the list now goes from item 1 to item 10, then item 11 to item 20, and so on – the list order is easy to interpret.

  • Pros: Easy to understand
  • Cons: Harder to create references to data (e.g. item X is on page N is now an invalid reference), your list can look weirdly long compared to the rest of the page

Quora pagination

You can see examples of this on Quora and other sites.

Which one should I use?

First – if you don’t need pagination, don’t use it. Nothing is as easy as having the whole page in front of you. Consider what your pageload times will be without it, both on desktop and mobile. If it’s too heavy – either right now, or in the future when a thousand people have created comments – consider the hybrid solution. Can you append items to the current list? Remember that from the user’s point of view, they are reading down a page of text – make it as easy as possible for them to continue that reading.

Implementation models vs mental models IRL

If you’ve read “About Face” (Cooper, Reimann, Cronin) you’ll recognise this diagram. It’s a great description of how a product can be closely related to the way it was built (the implementation model), or the way a user relates to it (the mental model).

Implementation models vs mental models

Here are some products that are close to the implementation model:

  • The command line
  • IRC
  • Opening files with VLC

Here are some ideas that pull implementation closer to a mental model:

  • An email inbox
  • A desktop in your operating system
  • Folder icons in Explorer / Finder / GNOME

It never occurred to me that the same could happen in real life, but here it is, from a gym in Birmingham, UK. This is a sheet that members use to refer their friends (presumably in return for a discount).

Making interface animation useful

Many interfaces on the web contain some kind of animation. We’ve had Flash for a long time, and with jQuery and HTML5 it’s become even easier to add animation.

Should we do it?

Just because we can do a thing, it does not necessarily follow that we must do that thing.

People hold these two views about interface animations:

  1. Take the animations off! They are slow and I want to concentrate on function – this crap just gets in the way!
  2. I will put in animations because I can. L33t

There is a third way, which is this – make your animations useful. I’ll explain by showing an example of a site that lights the way, and a site that ballsed it up.

This site lights the way

bandize.com

Behold, Bandize.

As you click through the navigation links – Show / Tours, Accounting, Contacts and so on – the content in the lower box sweeps linearly. If you go from link 1 to link 3, you see the content from link 2 sweeping by quickly. The list of links is your map, and the content box below is your zoom into that map.

The animations directly describe how your control is related to what you’re seeing, and that’s good.

This site ballsed it up

widgetbox.com

Behold, widgetbox.

This is a really similar content discovery style – a set of links (the four grey panels to the right) that control a panel (content to the left).

But this time, there are a few errors.

  • Firstly, path from navigation links to content doesn’t match the animations. The content animation sweeps linearly along to the right, same as Bandize – but the navigation links are actually arranged in a zigzag. Try it – it’s confusing as heck.
  • The grey panels activate on hover rather than click, which makes it too easy to navigate by mistake rather than intention.
  • There are two more ways of navigating through content (I circled these in orange above). One, a play / pause control that’s almost invisible, and second, iPhone style dots (that actually do map correctly with the content animation – they’re in a line.) Both of these elements are clutter.

Conclusion

Using animations is easier than ever, but be careful. Don’t add them for their own sake – make sure they are helping the user understand what’s happening and why.

T-Mobile’s image compression

I’ve been using a T-Mobile UK connection through a Nexus One to stay online in Blighty. It turns out that they employ some shenanigans to keep their bandwidth costs down.

A few tricks seem to be happening:

  • A transparent proxy loads your requested images, but sends you a more compressed version of your image instead.
  • On every pageload, a script tag to insert this javascript file is injected into the page header. This file allows a user to request the full quality images with a keyboard shortcut after pageload. Instructions are given with a tooltip on every image.
  • All unnecessary formatting is removed from the page source, i.e. spacing, tabs and so on from the HTML.

Here’s what the compressed image looked like:

Here’s what the original image looked like:

How much bandwidth did this save?

Here’s what we know.

  • In my very non-scientific testing, the extra compression seemed to approximately halve the size of the image delivered.
  • According to the YUI people, average image pageweight is around 50% due to images.

Therefore, T-Mobile should be saving around 25% on every pageload. This comes at the cost of a slightly diminished user experience for users, maintenance costs for the proxy and script files (albeit minimal), and potential subtle brand damage (a user might perceive T-Mobile delivered internet as worse quality).

Update: You can disable the image compression by visiting http://accelerator.t-mobile.co.uk/ while connected via t-mobile.

Web coding on a mac

If you’re developing for the web, the chances are good that you have a server out there somewhere running a LAMP stack. If you’re doing a lot of iteration – which is probably a good idea – you’ll want to find a quick way of changing code on your server rather than downloading & uploading all the time.

Option one: Use vi

The cleanest way to develop code on that box is to SSH directly in there, and use vi, but it’s not all roses.

Advantages:

  • Great syntax highlighting
  • vi is frighteningly fast if you know how to use it
  • You can use the same environment from any laptop running os x or linux, and it’s instantly familiar
  • You don’t even need to install any software locally

Mannequin coverDisadvantages:

  • vi’s learning curve

For newbies like me, watching someone who’s familiar with vi makes me feel like Emmy from Mannequin. (“Where did they hide all the musicians?”)

So, you could spend a long time learning vi, or try something else.

Option two: Use something else

If you’ve ever used Dropbox, you’ll know that having a remote filesystem mounted in Finder makes working with files super easy. Luckily, there’s some great OSS around to help you do just that. Here’s how to get started:

  1. Download and install MacFuse from here
  2. Download and install MacFusion from here

After restarting your mac, you’ll be able to mount both SSH and FTP servers right into your filesystem. Now, you can use your text editor of choice on the mac, directly working on the files you want to play with.

Advantages:

  • Use any text editor you want (I use TextWrangler because I’m cheap)
  • Use all your mac’s keyboard shortcuts

Disadvantages:

  • You need to install some software locally, so you’re screwed if you have to move between laptops

Being a vi numpty, I chose this second path, and so far it’s working a treat. However, there is a bug in the current version of MacFusion (v2 final).

Macfusion Bug on sshnodelay.so

When connecting over SSH, you’ll note that the connection can’t be made. You’ll see a “remote host disconnected” error, and on examining the log in MacFusion, you’ll see this:

dyld: could not load inserted library: /Applications/Macfusion.app/Contents/PlugIns/sshfs.mfplugin/Contents/Resources/sshnodelay.so

sshnodelay.so error

The solution is to rename the file to something else. Head into Terminal, and type this:

cd /Applications/Macfusion.app/Contents/PlugIns/sshfs.mfplugin/Contents/Resources/
mv sshnodelay.so MOVED_sshnodelay.so

… and voila, you can now mount over SSH no problem! (source)

How To Be A Successful Blogger

279-days-logo-201x300Some of you may have come across Chris Guillebeau’s 279 day guide to success as a blogger. For those of you who don’t have time to read it, here’s the short short version.

First the obvious parts:

  • Being a successful blogger takes a long time and is a lot of hard work.
  • Even doing that won’t make you boat loads of cash.
  • You need to stay disciplined in your posting.
  • Get other sites interested in you through reviews, guest posts & media connections.
  • Use primary market research.

Now the interesting parts. Chris’s position is that Adsense ads suck, because you’re trusting Google to figure out what’s contextual. If your site links out to stuff, you’re telling your visitors that if they trust you, they should trust this ad, and that link is being driven by an algorithm that could well be wrong.

I would argue that most people understand the weak trust link when they see Adsense embeds, but it follows that a weak trust link means that the advert is going to suck at being effective anyway. I’d not thought about this before, and it’s definitely worth considering.

Chris’s solution for monetisation is the freemium model – a blogger’s product is information, so why now charge for some of it. It’s not going to work for everyone, but Chris has made it work for a non-targeted blog, so that’s encouraging.

In reading it, a few quotations stuck out:

  • “I work harder than most people I know, and the other unconventional success stories mentioned in this report do the same.”
  • “I derive too much emotional validation from the daily state of my network. When lots of people are subscribing, the comments are up, and the links are rolling in, I feel great. When the numbers are down, I feel bad.”

Right there is the real reason Chris’s blog has been so successful – he clearly works his ass off.

The worrying parts

googleadInteresting fact: a lot of the most popular blog content is about how to become a popular blogger. The whole hook of Chris’s report is on how to be just a successful as Chris. I’m not disputing his incentives at all, but when you strip away the excellent graphic design and verbiage, that’s what it boils down to.

Here’s the problem. Folks read his report because they want what he has, but for whatever reason (family, the day job and so on) they can’t invest the time needed to actually DO it. If they did, thousands of super successful blogs would start to spring up. It never happens. Even if it did, since global web attention is a stretchy-but-limited commodity, as supply increases, price goes down and folk spend less time with one individual blog.

I’m not saying it’s a pyramid scheme – Chris isn’t charging, isn’t benefitting, and in fact, licensed this report with CC-BY. But some elements are there – one successful guy at the top and a lot of people who want but can’t attain the same success.

UI Design Principles from Mozilla Labs

labslogoAs part of the Labs concept series, I attended an online talk by Alex Faaborg from Mozilla UX, presenting Jakob Nielsen’s 10 principles for software usability design. They are simple and useful, so here they are.

  • Keep system status visible: Is there a web page loading right now? Am I in private browsing mode? The user should be kept aware of the current status, and feeback on modes should be timely. When a user doesn’t know which mode we’re in, this is called a mode error.
  • Systems should mirror the real world: Engineers want to implement whatever the technology makes easy to implement – but users want to use something that mirrors the world as they see it. Some technology elements are still confusing (e.g. Fx asking if you want to resend POSTDATA) but some are now commonplace (404 errors or the http:// prefix). Real world elements can appear in icons (padlocks, floppy drives, gold stars) or replicating a real life method (e.g. having a desktop).
  • User control & freedom: Don’t prevent users from doing certain things. For example, in Fx3 it’s impossible to bring back the Most Visited folder on the Firefox bookmarks toolbar if you delete it.
  • Consistency & standards: Be consistent internally with the way you’re always represented things inside your application, and be consistent externally with the wider OS or peer applications. These could conflict – Fx changed the bookmarks icon in v3 from a bookmark to a gold (or blue) star to fit with other browsers.
  • Recognition not recall: The command line requires you to remember everything, which is why most users find it too tough to use. Ubiquity suffers from this in a way – although it does a lot to help you, it can’t do anything unless you type something.
  • Flexibility & user efficiency: Toolbars that are malleable are flexible, but it’s tough to create complete flexibility, as very flexible UI systems (like Ubiquity) require some skill to use completely.
  • Minimalist design: Visual clarity is good. Reduce redundant elements (e.g. the address bar URL, the window title and the tab title). Combine elements logically – the iPod wheel combines a set of functions into one element while keeping it easy to use.
  • Error prevention: fix common user errors like commas in URLs.
  • Help users recover from errors: proactively provide contextual help, like the internet connection wizard in Safari.
  • Help and documentation: ensure users know where it is and can access it.

Balancing things out

The keen ones amongst you will have spotted that not all of these things are achievable – balances are needed between these elements, and the correct position depends on the user and the application. Here are the contradictions – and the balances – that I can identify.

  • More user control and freedom can mean less minimalism, less error prevention and less consistency. The user can reconfigure away from standards.
  • More recognition can mean less minimalism. The command line is an awesome interface for the right kinds of people.
  • More system statuses can mean less minimalism. Where do you put the throbber in a chromeless browser?

Creating an awesome design – it seems – is about finding ways of winning on both sides of these balances so that compromise becomes less necessary. At the same time, we must recognise that no system is going to be perfect for everyone – as the market becomes more diverse, the interface must understand and trade off different requirements in that market.