Solving one of smartphones’ most annoying user interface and experience problems

You know how you sometimes go to select something on your phone (or other touchscreen device for that matter), and either the application layout changes, or something like a notification appears just in time for you to tap on the wrong thing? I call that “UI Crossfire,” and I’m proposing a solution I call “Intent Buffering.” Take a look at the prototype.

The iPhone, fixed.

Merriam-Webster defines an appliance as:

  1. A piece of equipment for adapting a tool or machine to a special purpose.
  2. An instrument or device designed for a particular use or function.

Wiktionary’s definition is similar:

An implement, an instrument or apparatus designed (or at least used) as a means to a specific end (often specified).

In terms of hardware, the iPhone is nearly perfect. But iOS makes it feel more like an Apple appliance than a flexible and versatile computer.

So I decided to fix it.

Become a master of public radio with NPR Ninja

Being both a news junkie, and a big fan of NPR, I decided to put together a little utility that I call NPR Ninja to help me track topics that interest me, and search for stories on specific topics. It’s a client-side (JavaScript) application that leverages NPR’s open APIs.

Now that there’s also an NPR One API, I might just add some hooks into it one of these days, as well.

Controlling Web Based Music Players with Global Keyboard Shortcuts

Ever since I switched from iTunes to using web-based music players (Google Music, Amazon Cloud Player, and Pandora), I’ve wanted the ability to control them with global keyboard shortcuts. The other day, I finally took the time to set it up, and I’m very happy with the results:

If you’re interested in setting this up for yourself (or simply learning about how it works), download the project files here, then follow these instructions:

  1. Unzip the project files. You should see a directory called “music_control”.
  2. Make sure you have node.js installed, then cd into the “music_control” directory and start the server with: node server.js.
  3. Cd into the “extension” directory and open “background.html” in your favorite editor. Change the SERVER_HOST variable to reflect your host name.
  4. In Chrome, go to Window > Extensions. Make sure “Developer Mode” is checked.
  5. Click on “Load unpacked extension,” then navigate to the “extension” directory. (You can also package the extension and install it normally by double-clicking on the resulting “music_control.crx” file.)
  6. Install any application that lets you map global keyboard shortcuts to shell scripts (or AppleScripts, but I prefer bash). I used an app called Shortcuts, but I’m sure there are plenty of free alternatives.
  7. Setup whatever keyboard shortcuts you want to map to the following bash commands (note that you can use something like wget rather than curl if you prefer):
    • curl "http://localhost:8000/music?play"
    • curl "http://localhost:8000/music?next"
    • curl "http://localhost:8000/music?previous"
  8. You’re done! You should now be able to control you web-based music players with keyboard shortcuts.

I realize there are a lot of moving parts here, and any number of ways to accomplish the same thing. If you decide you don’t want to use this exact implementation, hopefully this will at least get you started down the right path of your own setup. Let me know if you get this working and/or if you adapt the concept to something equally or even more interesting. I have lots of ideas for where this could go.

If You Want to Know the Future of Software, Just Look at Email

I’ve often said that if you want to see the future of software, look no further than email. It may seem odd to think of email as a killer app since most of us don’t like it very much and because it’s been around for so long, but I firmly believe that email is actually one of the best models on which to base future technology. Here’s why:

  • The data is separate from the client. While my email lives safely on a server (in the cloud, as we’re fond of saying these days), I can access it from any number of device-specific clients. On the desktop, I use Mail.app. In the browser, I use Gmail. On my phones, I have clients optimized for touch and small screens. On my iPad, I have a mail client optimized for a slightly larger screen and a virtual keyboard. Email is available from almost every device I own, and every device has a client which is optimized for its particular characteristics.
  • Data is seamlessly synchronized. For many years, I used POP3 simply because it was so widely supported, but my life changed the day I switched to using IMAP. Suddenly all my mail, mail boxes, and the state of individual messages was synchronized across all my devices and clients. I currently access my email from no fewer than three devices (sometimes more) every day without even thinking about it.
  • Email protocols are simple and widely supported. One of the reasons we can access email from just about anywhere using just about any device is the fact that POP3 and IMAP are relatively simple protocols. Libraries are widely available in just about all languages, and where they’re not available, they aren’t hard to write. Nobody owns the protocols, so everyone is free to implement them, and to build any kind of client on top of them that they want — everything from massive enterprise solutions, to simple notification widgets.

Now think about what life would be like if everything worked like email. Imagine if all your music, videos, documents, contacts, source code, preferences, etc. lived in the cloud, and you could access all your data not just from any device, but from clients specifically designed for the strengths of particular devices. Imagine everything being perfectly and seamlessly synchronized, and imagine if accessing all your data on a brand new device (or through any web browser) was as simple as configuring a new email client: just type in a user name, password, and maybe some server information, and within a few minutes, everything is there, and everything is perfectly synchronized and customized for the device that you’re currently using.

I’m certainly not making the claim that email is perfect, or even all that good, for that matter. And I certainly don’t believe that email itself is the future since things like text messaging, Facebook, Twitter, Google Wave, etc. are decreasing our dependency on email every day. But the model that email represents — data in the cloud, device-specific clients and experiences, synchronization, and open protocols — is almost certainly the future, and the irony is that it’s been right under our noses all this time.

Stop predicting the death of email (or anything else)

If you’re considering writing an article predicting the death of some form of dominant technology, please read this first.

Technologies seldom just die. Instead, they tend to do two things:

  1. Evolve
  2. Become refined

The evolution of technology is obvious: televisions get bigger, computers get faster, phones become more powerful. But it’s the refinement of technologies that throw people off and lead them into misinterpreting trends. One of the most obvious (and annoying) examples is email.

I can’t tell you how many times I’ve heard people predict the death of email (usually because it makes a good headline, or a shocking interjection during geeky conversation). As is the case with all absolutes, this is a terrible oversimplification.

Rather than saying that email is dying because of Facebook, Twitter, instant messaging, texting, etc., I think it’s more accurate to say that electronic communication is being refined. Whereas email (and later, IM) used to be the only mechanisms we had to communicate electronically, we now have several more options, all of which work slightly differently and meet a slightly different need. I believe these differences are complementary rather than competitive.

Service Communication Method Properties
Email Asynchronous
(no immediate response expected)
  • Secure (if done properly)
  • Easy to archive
  • Relatively open (anyone can email you)
  • Medium priority (sometimes ignored)
Instant Messaging Synchronous
(immediate response expected)
  • Responses are typically very fast
  • Tightly controlled network (buddy lists, rosters, etc.)
  • High priority (difficult to ignore)
Twitter Publish and subscribe –
open network
  • Completely open network (subscribe to anyone you want)
  • Extremely casual (say things you’d never bother to put into an email)
  • No response expected or required
  • Low priority (easy to ignore)
Facebook Publish and Subscribe –
closed network
  • High level of control over network
  • High discoverability (easy to find people)
  • Low commitment (communicate with people you wouldn’t normally email or call)
Texting (SMS) Asynchronous
(but with a synchronous expectation)
  • Highly available (almost anyone is reachable no matter where they are)

Personally, I use all of the communication mechanisms listed above, and I use them for very different purposes. I’m not about to start communicating with business contacts and colleagues exclusively through Twitter (even though my Twitter URL is on my business cards), or send out a white paper via SMS, or CC 500+ people on an email with a simple status update (“just had my first cup of coffee this morning”). In other words, while electronic communication continues to be refined, none of these forms of electronic communication is likely to die in the immediate future.

One trend in particular that leads to people to conclude that email is dying is the fact that young people are less likely to use it. If your kids look at you funny when you tell them to email something to you, you might make the mistake of assuming that they will cary that prejudice with them throughout life. Maybe they will, or maybe they just don’t have a need for email yet. The day will eventually come when they will probably rather email their thesis to their professor than post it on their Facebook wall.

When talking about the death of technology, it’s important to separate the technology — or the use of the technology — from the implementation. Yes, VHS is mostly dead, but it might be more accurate to say that the implementation of how people record and watch video has evolved to DVDs, Blu-ray, DVRs, portable devices, and streaming video.

The last thing I’ll say is that some technologies certainly do die. For instance, it’s possible that satellite radio will completely go away someday (possibly very soon). But I would argue that these are technologies which really didn’t make much sense in the first place, and never really reached critical mass (both in numbers, and in psychological acceptance). In my mind, email makes a huge amount of sense. I use it very differently than I used to, and I believe that in 5 to 10 years, I will use it very differently than I do today, but I’m pretty sure I will still have a need that only email (or whatever email evolves into) will meet.

Tips for deploying a LAMP stack on Amazon EC2

If you’re interested in using Amazon EC2 and other services to deploy a LAMP (Linux, Apache, MySQL, and PHP) stack, you will probably find this post invaluable. I spent about three full days migrating all my sites over from a physical dedicated server to an EC2 instance, and what follows are several things I learned during the process.

This post will cover the following (in varying levels of detail):

  • Selecting and setting up an AMI (Amazon Machine Image) with Apache, MySQL, and PHP.
  • Setting up an elastic IP address.
  • Setting up an EBS (Elastic Block Store).
  • Sending email from an EC2 instance (not as easy as one might think).
  • Backing up your data and web applications.

Continue reading

How web applications will get to the desktop

About a year and a half ago, I made a post entitled "Why web apps will move offline". All this time later, I’ve come to realize that we’re in for much bigger and more interesting changes than just offline web apps.

It’s inevitable that web applications will move offline, and we’re already starting to see some examples (Google Reader using Google Gears, for instance), but I think that in the next year or two, we’ll see something even more interesting: web apps that run in the browser with real desktop functionality. I’ll call these "webtop" applications.

The first thing webtop applications need is secure local storage. Google Gears is addressing that with what I believe is a very interesting solution: a browser extension with SQLite embedded to give web application developers the ability to store data in a local database. Google Gears also has a local server bundled for caching assets offline, and a way to spawn additional threads in JavaScript to make web applications more responsive.

The next thing you need is desktop APIs, or maybe I should say OS APIs. We got our first glimpse of web applications using OS APIs at WWDC when Steve Jobs revealed how devleopers will extend the iPhone: web applications which will load into Safari. The iPhone version of Safari has APIs for things like making phone calls. These applications will run in some kind of a secure sandbox which will keep them isolated so that, in theory, they can’t damange your phone or corrupt other applications.

So what’s the next step? I see webtop applications moving forward in two different directions:

  1. I think there will be additional browser extensions which will add desktop functionality like drag and drop, system notifications, and maybe even limited file system access to browsers. I also think it’s possible that Apple will add OS APIs to the desktop version of Safari, and now that Safari is available for Windows, webtop applications will be able to run cross-platform. (Apple has already done it on the iPhone — why not on the desktop?)
  2. The Adobe Integrated Runtime (AIR) is another alternative (I’m a Product Manager on the AIR team at Adobe, but I’ll try to be objective). AIR lets you build desktop applications using web application technologies like Flash, Flex, HTML, Ajax, etc. Rather than loading the applications from the web, however, you install them, more like traditional desktop applications, which gives them more desktop privelages than you would probably want to give something that was loaded from a web server. AIR applications bridge the gap between the desktop and the web by allowing easy access to remote services, and by providing a secure sandbox in which remote content can run in.

Not to be outdone, I’m sure Microsoft will join the party with additional Silverlight functionality which means some of the biggest software comapnies in the world (Google, Adobe, Apple, and Microsoft) will all be trying to bring web applciations to the desktop. Get ready for web to take a huge step forward.