Sep 15

Frustrating User Experiences: How Apple and DRM can ruin your flight

Tech with tags: , , No Comments »

As I got ready for my 10 hour flight to Europe, I booted up iTunes and looked around for some interesting TV shows and movies. I found a few new things that I thought would be good for wasting some of those hours away, so I put them on the iTunes tab.

Fast forward to 30k feet in the sky, when I pulled out the laptop after the obligatory 10 minutes of staring as we took off. I went to start one of the shows and was shocked to see:

Grr Quicktime

You are kidding me. How had the iTunes install experience now grabbed the latest Quicktime with it? This reminded me of the fuss that DRM has been making with Spore and how all this effort is going into the bad side of usage. Installing Spore and getting a bad hard drive would make you hate the darn thing and never buy anything of its ilk again. There has to be a better way.

If I had just downloaded a movie file, then even without Quicktime i could have played it.

Sep 12

A commercial about nothing; How we are talking about Palin and Seinfeld/Gates

Personal, Politics, Tech 8 Comments »

Disclaimer: If you don’t like politics, Seinfeld, or Microsoft, please more on now!

The latest ad airs, and a larger version gets posted to the Web. The first one had people saying “huh?” and this has lit up the blogosphere again. “This has nothing about Microsoft in it!” That is the point. Seinfeld is going a commercial about nothing… at least to begin with. They are setting the stage. Letting people know that they may be a little out of touch, and how they will explain through each other how Microsoft actually gets it. That will be the tough sell. For now though, they have everyone talking (case in point!).

Remember the last campaign? The WOW factor?

Did people talk a lot about that? In fact, when was the last time anyone paid attention to Microsoft in this way? That is why the commercial is a success, right now.

It actually sounds very similar to the Sarah Palin story. She had the big bang onto the scene (rather than the ‘huh?’), but the more people get to actually interview and thus get to know her, I predict the ‘huh?’ will come to the American people too. I am sure she is a nice person and all, but Matt Damon hits out like we all have too:

I know what you are thinking? Matt Damon? “He is just an actor! I have just as much right to …” You do, and you can get out there and demand more from this election too. I am really hoping that the runway to the election is long enough that people get past the honeymoon phase, and think about the “oh right, that person doesn’t just sit and have fun BBQs, they run the free world.” America voted in the BBQ guy twice over the last 8 years, maybe it is time to go past someone who changed colleges 5 times, and get someone who was president of the Harvard Law Review. Let’s vote in someone who really will fight to make a difference, and will have the respect of the world.

I am writing this sitting at an airport, and I am about to fly to London, Paris, New York, Munich, Madrid, Boston, and in the European countries I know which way they want to go. Don’t take that as “well WE are the ones who get to vote, who cares what the Frenchies think!” Take a second to reason why.

It will be interesting to watch and see if Seinfeld and Gates can grow to show us something about Microsoft that is compelling, and if Sarah can get away with limiting her exposure since she has already probably done her best work.

Sep 10

Yammer wins over FitBit and others? Seriously?

Tech with tags: 9 Comments »

No offense to the Geni team that have spun off Yammer but it says it all that they “won” at TC50. I have seen 10 Yammers out there, who took Twitter and re-purposed it. Business model, really? The valley loves Twitter so much that clones win things?

FitBit is far more interesting to me. Having a tiny device that tracks what your activity has a chance at being huge. Imagine a social network, or apps on existing networks, that show your exercise regime, what you are eating, and more. “Your mother just lost 4 pounds!”, “Bob just ran 3 miles!”. This will be incredibly viral. You can join up and see how you are comparing to your friends and family. You can join groups. Weight Watchers 2.0 baybee. That is something that you could get excited about. Nike+ is a player here, and the first person to get the social balance right will be huge. Don’t you think?

Fitness 2.0

Sep 08

Revisiting why the Open Web matters; Gratuitous technology politics analogy

Tech with tags: 3 Comments »

Communist Party

I have been thinking more about the Open Web recently, and decided that it may be time to go back to first principles and work out why I am such an advocate for it. The Open Web has plenty of flaws. I wish it was more productive, more seemless, and more beautiful :)

This came about as I pondered the same thing for feeling an association to a political party. Why do people associate themselves as Democrats, Republicans, a member of a smaller party, or just independent? How often do you join a team and just stick with it? It feels like there are a few types of people, including (sorry for a football analogy!):

  • At birth: I was born in Tottenham, so I will be a Spurs fan for life
  • Fair weather: I never liked Chelsea particularly, but after that Russian guy got involved I go to games and cheer them on
  • First principles: I like teams who play attacking football. I used to hate “boring boring Arsenal” but after that French bloke go involved, I have changed my mind.

Things change. The party of Honest Abe kicked into gear with the “core values” revolving around abolishing slavery, rather than all of the conservative values that the party espouses today.

Of course, within a party there are many factions. The Neo Cons and the traditional fiscally conservatives may share a party, yet be at odds on various decisions. The exact same goes for the Democrats and their beliefs.

Because of this, I am trying to regularly take a step back and match my belief system to the current politics of the day. Often parties use deep wounds and values to try to tie people together, but in other times we see the need to be reborn. Tony Blair famously did this recently in the UK by creating the “New Labour” brand. He ended up doing what Neil Kinnock never could, and becoming prime minister.

How does this all fit into software?

It is easy to get sucked into the same trap. “I believe in the Open Web!” Things change, so you can challenge yourself on why that matters to you.

As I look into why I care so much for the Open Web, a few core thoughts come out.

Power will lead to bad things

If I look back at the recent history of software and platforms, I come to the conclusion that at various points on the road the interests of developers and vendors align for awhile. Ben and I have been talking about this. For example, Microsoft nails the productivity of Visual Basic, and developers take that gift and run with it. But, over time, developers get frustrated and some of them feel like Microsoft uses their power to do bad things. Many lose trust and look elsewhere. Others don’t care and keep listening.

When the Java community came to the realization that Applets weren’t the killer app, but rather the JVMs, the “better C++” for the time, and the write once, run anywhere promise took hold quickly. Despite Sun, the Java developer community is still strong to this day. The problem though, is that at some point the vendors got too involved in a way that created EJB. Forget solving developers problems, it is time to argue over what to standardize, where the game is having your approach be the standard. IBM, Oracle, Sun, and many others fought about EJB and thus we ended up with the monstrosity that would create fortunes for consultants. Once the success of Java kicked in, everyone jumped on how to make money for it. Sometimes the companies that innovated were able to both make money for themselves, and help developers. Other times, not so much.

The power of the Open Web is in the fact that no one company controls it. When the interest of developers and The Uber Company aren’t aligned, developers are no longer screwed. They have choice.

This choice can come at a cost though.

Mussolini may be a dictator, but he made the trains run on time!

There is a notion that the less voices that we have, the faster we can move. A dictator that owns multiple sides, or the entire stack, can make a more productive, technically superior solution. In some ways this makes sense of course, but remember that Mussolini set the trains perception by changing the clocks. It doesn’t have to be this way.

One key is to keeping the democratic process moving appropriately fast (but not too fast).

I have talked about the Fly wheel approach in the past, and I think that this is a key issue for a healthy democracy, and a healthy Open Web.

There are reasons why Winston Churchil said:

Democracy is the worst form of government except for all those others

On the bad side, you get the issue of it never being able to become pure (just the same as communism). We are dealing with people. Once people get in power they have reasons to tweak the system in their favour. Obvious examples exist such as redrawing the congressional boundaries to do what you can to keep your party in power.

In technology you get the same thing. On the Open Web for example, we only have a few viable browsers (like the few number of viable parties issue). This gives huge power to these browser vendors, and it can break the fly wheel. Browsers have barely had a chance to innovate in the last decade. Imagine using a cell phone from 10 years back? It is crazy! The silence in the chasm is frustrating as hell. Even when the browsers change, we still have the lead weight of the users who don’t update. We need to solve that problem.

Microsoft got such a huge leader in the browser war, that they turned off. This cut off the circle of healthy Web life:

  • Vendor creates technology
  • Developer uses technology
  • Developer pushes boundary of technology
  • Vendor sees what is being done, and works on newer better technology
  • REPEAT

It turned out that developers have really kicked this into live again via the Ajax revolution. With poor dhtml support, many developers moved from the client side of Web browsing, and ran screaming from dealing with Netscape layers, and IE equivalents (IE was quickly better in fact). They made their home on the server for the coming years, spending time on Web frameworks in every language camp out there. We went from CGI to NS/ISAPI, to mod_*/Servlets/PHP, to Rails/Django/and more.

It took the joining of Mozilla implementing XMLHttpRequest, and visible applications such as Google Maps and Gmail (among others) to wake up the developers to the wasted CPUs and functionality available in the browser. Only brave folks such as Dean Edwards, Alex Russell, Erik Arvidsson, Emil Eklund, Dan Pupius, Aaron Boodman, Scott Isaacs carried the flame and pushed during the lean years.

With developers back in the game, thanks to Ajax, the browser vendors had the push they needed to really kick into gear again. Richer Web applications required better JavaScript and APIs. If a browser got really good at powering these rich applications they could set themselves apart.

This wasn’t enough though. Web developers were frustrated. We had teams at Google that mirrored many others. They wanted to add more functionality to their applications, and they needed a vector to make that happen. This is how Gears was born, and I bet the case was similar for what became the Yahoo! BrowserPlus team (am I right Lloyd? :).

Now that we are back in sync, and the flywheel has been turned on again, my thoughts are on how to keep this effect going. How can we put developers first and make sure that the cycle continues and doesn’t get derailed? We need to balance the power and constantly be watching it. No one company can get to a point when the power can corrupt. This is subtle, as it isn’t just watching out for the Sheriff of Nottingham and seeing how he is taking all of the money. These things often happen by mistake. You can easily think that you are doing a “good thing for the community” and yet you are creating a very unlevel playing field. One simple example that shows this is if we put CSS and JS from Google properties directly into Google Chrome. We could argue that this would be good for users as it would make the experience faster. How harmless is that? I believe that it would destroy the level playing field.

This isn’t to say that you can’t innovate, far from it. We need to be very clear that we require innovation. We just need a path for taking the evolution and moving it into the standards. In the above example, we could create a system for richer caching of resources. We could implement the hashing work that Aza Raskin and Douglas Crockford talked about. Good work will stick and will become part of the Open Web naturally. This is the beauty of the Open Web. Someone can come up with a piece of technology and others can share and use it. An independent developer could think up OAuth and make it happen. If it is worthy, big companies can come along and implement it too, and we can standardize. It doesn’t have to come FROM the huge companies first though. Think about how rare that is.

This is why I come full circle to realize that the Open Web is important. We all need to do our best to make sure that this deeply evolving system doesn’t get cancer. We need the bursts of innovation to kick out new DNA that allows us to try experiments.

With all of the work being done right now, it feels like the end of the Dark Ages. I can’t wait for the next chapter, can you? What have I missed?

Aug 29

Frustrating User Experiences: Techmeme Meta Refresh

Tech with tags: , , 4 Comments »

Refreshing Grapes

If you have a site or application where content updates regularly, it can be nice to update the content for the user. Techmeme falls under that category, and they have at the top of their page:

<META HTTP-EQUIV="Refresh" CONTENT="1800">

The problem is that every now and then I come back to the browser and I see:

TechMeme

The refresh seems to be happening when network connectivity isn’t there and thus you get hit and the page dies. This isn’t a huge pain, you can manually refresh, but for some reason it bugs me a little.

What can you do? An ugly, error prone technique would be to test a connection before doing a refresh:

function pingRefresh() {
  var location = window.location;
  var xhr = new XMLHttpRequest();
  xhr.open('HEAD', location);
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && (this.status == 0 || (this.status >= 200 && this.status < 300))) {
        window.location.reload();       
    }
  }
  xhr.send(null);
}
 
setTimeout(pingRefresh, 60000);

Or, it may make sense to be able to update part of the page (the main div or what have you) instead of asking the entire page to refresh. FriendFeed seems to do this and has:

var gFeedSpecs = {};
var gFeedAutoRefresh = [];
gFeedSpecs['feed1'] = {"start":0,"num":30,"type":2,"hash":"f003fa699d7e64b96f2b901922d13ed8"};
gFeedAutoRefresh.push('feed1');
$(function() { if (gFeedAutoRefresh) { autoRefresher.start(120000); maybeRestoreHtml() } });

Other Frustrating User Experiences

Aug 28

Frustrating User Experiences: Tough Captchas

Tech with tags: No Comments »

Tough Captcha

Captchas are annoying. Half of the implementations that have you type in something from the image are unreadable for my eyes. I am sorry that I have to use them on my own blog. This one though, makes it very tough.

I had this on my own MT blog back in the day, when the code that would generate the images failed leaving the user with no option at all, other than to stop participating. Die captchas, die!

I still find that my own CommentQ plugin that lets me customize questions works fairly well. Because even Ajaxian is “niche” no one has an automatic attack. The odd ones that get through are the farms where captchas are shown to real people who solve them. I still remember the time where I had a spam comment get through, and then a real comment right after from the exact same IP, name, etc…. the spam farmer answered a real post! :)

Other Frustrating User Experiences

Aug 25

Using the W3C Geolocation API Specification today; Extending WhereAreYou

Ajax, Gears, Tech with tags: , , 4 Comments »

Last week I shared the WhereAreYou? application that used the Ajax APIs ClientLocation API to access your location via your IP address.

At the same time, we announced support for the Gears Geolocation API that can calculate your address using a GPS device, WiFi info, cell tower ids, and IP address lookups.

Add to all of that, the W3C Geolocation API that Andrei Popescu of the Gears team is editing. You will notice that it looks similar to the Gears API, with subtle differences. The ClientLocation API is quite different.

To make life easier, I decided to put together a shim called GeoMeta that give you the W3C Geolocation API, and happens to use the other APIs under the hood.

If you have the Geolocation API native in your browser (no one does yet, future proof!) that will be used. If you have Gears, that API will be used, and finally, with nothing the ClientLocation API will be used behind the scenes.

To you the API will look similar:

// navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options)
navigator.geolocation.getCurrentPosition(function(position) {
      var location = [position.address.city, position.address.region, position.address.country].join(', ');
      createMap(position.latitude, position.longitude, location);
}, function() {
      document.getElementById('cantfindyou').innerHTML = "Crap, I don't know. Good hiding!";
});

At least, that is what I would like. Unfortunately, there are a few little differences that leak through.

  • The W3C API only seems to give you a lat / long, so you have to do the geocoding to get address info
  • The Gears API gives you an additional gearsAddress object attached to the resulting position object. This can contain a lot of information on the resulting area (street address to city to …) however for certain providers the API returns that as null, the same as the W3C standard
  • That gearsAddress object has slightly different information from the address data that the ClientLocation API returns.

To give you control when you need it, you can ask the navigator.geolocation object what type it is. navigator.geolocation.type will be null if it is native, but ‘Gears’ or ‘ClientLocation’ if a shim kicks in. You can also check navigator.geolocation.shim to see if it is augmented code.

Implementation

There is some fun implementation code in there if you poke around. For example, for the ClientLocation API, when you make a call, it will be added to a queue if the Google Loader hasn’t fully loaded yet, and it will kick off that call when finished. Dealing with dynamically creating <script src> as a loading mechanism sure is fun!

I like the idea of jumping straight to the W3C standard and updating the shim as the APIs change. That way, when browsers catch up, the code will still work using the native APIs and you don’t have to change a thing.

Where are you?

Aug 22

TraceMonkey: DOM, Canvas, Opensource and more

Ajax, JavaScript, Tech with tags: 6 Comments »

Brendan Eich promised that trace based JIT’s will give us killer JavaScript speed and now we have seen the fruit of his labour with TraceMonkey (adds trace smarts to Tamarin-tracing).

A lot has been said already, but I am really excited about much more than the “look at how we run Sun Spider”.

The DOM matters

Although it may not sure in todays code drop, Brendan gets that you have to care about the DOM and not running while(1) { cheasyTest(); }:

  • He gets it: “As we trace more of the DOM and our other native code, we increase the memory-safe codebase that must be trusted not to have an exploitable bug.”
  • If DOM code comes out of native code and into JavaScript, it matters: “TraceMonkey advances us toward the Mozilla 2 future where even more Firefox code is written in JS. Firefox gets faster and safer as this process unfolds.”

Canvas

You know Canvas? It’s days are coming… fast, as John Resig mentions:

One area that I’m especially excited about is in relation to Canvas. The primary thing holding back most extensive Canvas development hasn’t been rendering – but the processor limitations of the language (performing the challenging mathematical operations related to vectors, matrices, or collision detection). I expect this area to absolutely explode after the release of Firefox 3.1 as we start to see this work take hold.

Opensource matters

None of this could be accomplished without the great side of opensource. TraceMonkey uses Tamarin-tracing, which enables it to build on amazing code.

TraceMonkey itself is opensource, which enables the SquirrelFish team say, to check it out. And, vice versa. This will keep the competition going along nicely.

This kind of competition is phenomenal for us, the consumers of the Web. Performance is key in 2008, and Web developers get to laugh all the way to the bank.

Thanks guys!

Aug 22

Where are you? Using the new Ajax ClientLocation API

Ajax, Gears, Google, Mobile, Tech with tags: , 22 Comments »

We just announced two new ways to get location info from a browser client.

The Gears GeoLocation API is very detailed. It is able to use GPS, cell towers, WiFi, and ip addresses to work out the location, and you get an “accuracy” parameter to see what was available. As well as getting a position, you can watch a position so you are updated when a change happens. This is perfect for mobile devices that have Gears installed, and since the community is working on the W3C Geolocation spec it should be in many more places soon.

To go with the Gears API, we also have an API that goes along with the AJAX APIs, called ClientLocation.

This is an ip based geocoder that we have made available, and is very simple.

I put together a trivial example called Where Are You? that ties together this API with the Maps API:

You get access to the data from google.loader.ClientLocation, which is null if it can’t be calculated.

Here is a bit of JavaScript that ties it together:

google.load("maps", "2.x");
 
google.setOnLoadCallback(function() {
    if (google.loader.ClientLocation) {
        var cl = google.loader.ClientLocation;
        var location = [cl.address.city, cl.address.region, cl.address.country].join(', ');
 
        createMap(cl.latitude, cl.longitude, location);
    } else {
        document.getElementById('cantfindyou').innerHTML = "Crap, I don't know. Good hiding!";
    }
});
 
function createMap(lat, lng, location) {
    var mapElement = document.getElementById("map");
    mapElement.style.display = 'block';
    var map = new google.maps.Map2(mapElement);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new google.maps.LatLng(lat, lng), 13);
    map.openInfoWindow(map.getCenter(), document.createTextNode(location));
}
Aug 20

Frustrating User Experiences: iPhone Mail.app

Tech, iPhone with tags: 14 Comments »

One of the most common tasks that I have as I check email on my phone, is jumping between work and personal email. This breaks down for me on the iPhone due to the menu system.

When you are on one inbox:

iPhone Inbox

you then have to go back, through the list of folders, to the accounts screen:

iPhone Accounts

At this point you then have to go back into the other account. This makes 4 animated clicks to go from Inbox to Inbox, and even more if you are already in a message.

Since this is so common for me, I would like to be able to bypass the menus and have something like a dropdown to go directly from Inbox to Inbox. Here is an incredibly crude visualization:

iPhone Dropdown

Maybe a nice gesture… a swish… which sends you back and forth :)

Other Frustrating User Experiences