Tag Archives: Opinion

My delicious.com bookmarks for February 25th through March 5th

Going Rental

Apparently the movie studios are placing further restrictions on rentals in order to promote the purchase of shiny disc. Marco Arment says this won’t work because:

If I’m adding a movie to my Netflix queue, I’ve already decided not to buy the DVD. I’m adding it because it looks mildly interesting and I’d like to watch it sometime.

I take the opposite approach. I am unlikely to buy a movie unless I have previously rented it. Why would I buy it if I don’t know whether or not I like it?

I don’t mention this to suggest that Marco is wrong. Quite the opposite. What I’m saying is that I can’t think of any use cases where this strategy would work. Whether you’re not buying it because you don’t want to buy it or not buying it because you don’t know whether you’ll like it, the common thread is that no purchase is involved. The studio would make more money in both these anecdotes if they allowed rentals.

But it’s not really about making money, as bizarre as that might seem. It’s about control.

Movie studios look to the music industry and are trying to learn from their mistakes. Unfortunately they’re taking completely the wrong lessons. Rather than seeing customers buying music instead of taking free copies from P2P networks, they see Apple being in control and able to dictate “unfavourable” terms to them.

To an outsider, “unfavourable” is an odd word as it mainly seems to involve more people paying for more content.

In this battle between the studios, the content providers (Amazon, Apple and NetFlix) and consumers there are no winners. Consumers either miss out on seeing films they want to see or end up making illegal downloads. Amazon, Apple and NetFlix all have to disappoint their customers with seemingly arbitrary additions and removals from their catalogue. And the studios continue to leave money on the table.

Personally I see that as the most “unfavourable” outcome, but what do I know?

A new CEO for Yahoo?

Rumour has it that Yahoo! are looking for a new CEO. Some people have been putting their name forward for the role, or at least offering suggestions for Carol Bartz’s successor. This post is in response to Joe Stumps list of ideas.

To be clear, I know that list is not completely serious. I know that he’s not really angling for the CEO role and I understand that many of the options would not be achievable even if they were the best thing for Yahoo! That’s not the point I’m trying to make.

The point, in summary, is that buying a bunch of companies to get smart people is not going to fix Yahoo!s problems.

Let’s look at some of the suggestions and, more importantly, how they inter-relate.

I’d buy Instagram and put them in charge of both Instagram and Flickr. They would have 100% autonomy over the entire “Yahoo! Photo” division.

Fine. Instagram has done really well. But what makes it successful? (Assuming that it is successful. So far it has managed to attract a lot of users but there’s no revenue stream as far as I can see.)

Is it the photo part? Well, partially. It has filters that people like playing around with. Another key to its success is the sharing, social side. But…

I’d buy Path and With for the sole reason of bringing Dave and his team on to lead the new “Yahoo! Social” division.

What’s the direction of the company if “Yahoo! Photo” and “Yahoo! Social” are both doing social stuff? Who decides how to share photos or videos?

And how is social distinct from mobile?

I would buy Twitter and Square in order to bring Jack Dorsey on full-time to run a new division called “Yahoo! Mobile.” He would have 100% autonomy over the entire mobile strategy.

Part of the success of both Instagram and Path are the fact that they’re “mobile.”

Mobile and social are not divisions any more than a technology company should have an “internet” division; they are fundamentals that need to influence all modern web “properties.”

Buying companies is not a solution. They’ve bought plenty over the years, but that didn’t help. What happened to Flickr? How “Yahoo!” is it? What about Delicious?

What Yahoo! lacks is not smart people or good technology, it’s a coherent way of tying everything together. Unfortunately that can’t be fixed by maintaining existing fiefdoms or importing new ones.

Crash

It’s nearly four years old now, so I do expect the odd beach ball occasionally. When my MacBook is doing something hard or complex or just opening iTunes, it often shows its “I’m too busy to respond to you right now” indicator. But this time it was different. The beachball appeared and didn’t really go away again. Sure, it occasionally hid but as soon as I instructed the machine to do anything it would return.

And I do mean anything. From accessing a menu item, to quitting, to switching application, everything resulted in the beachball returning.

I powered off for the night, optimistically hoping that it was transitory, maybe a software failure that a simple reboot would fix.

The picture above and the title of this post probably tells you that it wasn’t.

Fortunately I was pretty well prepared and I lost little more than a few days use of my MacBook and less than £50. My backup regime has changed a little since I last wrote about it so it’s probably worth discussing what I’m doing these days.

Previously I used SuperDuper to clone my main disk. The nice thing about this is that there is a full, bootable copy of my complete Mac. The disadvantage is the small print surrounding the word “complete.”

It’s absolutely complete, but only to the point that the last backup was actually made. Using SuperDuper is fairly quick and easy, but it’s still a manual process that needs to be initiated manually.

Fortunately I realised this before I lost any data. A couple of years ago, shortly after I upgraded to Mac OS X 10.5, I also picked up a Time Capsule. Long story short, a Time Capsule is a wireless router with a built-in disk. And 10.5 has a feature called “Time Machine” that automatically performs hourly, incremental backups.

Since the disk in my MacBook went so suddenly this was brilliant. I would lose a maximum of one hours work with only one proviso: that the backup actually worked.

But skipping straight to actually restoring the backup would be missing a few steps. First I had to replace the broken disk.

CPUs and disks are things that I understand more in theory than in practice. I know that CPUs come in different clock speeds and with varying numbers of cores but if you start to discuss Intel part number I’m going to reply with a blank look of incomprehension. Similarly, I know that disks come in a number of physical and capacity sizes. So when I was looking at the specifications question such as “What’s the difference between SATA and SATA-II?” were asked. I quickly became confused.

Answers were not entirely forthcoming. In the end I took a bit of a punt and bought twice the capacity (320Gb) with a faster rotational speed (7200rpm). Most disks were SATA-II so I crossed my fingers on that. And nowhere did I see a physical size mentioned so there was no way that I could check to see whether it would actually fit in the aperture left by the old, failed disk.

As luck would have it, it all worked out just fine. Replacing the old disk was suspiciously easy, so much so that having switched over I was wondering which steps I had missed or which vital component had dropped on the floor and whose absence would short out the motherboard.

I booted up from the Snow Leopard install disk and told it to restore from the Time Capsule. On first attempt it couldn’t find a disk to install on to. I missed a step. I went back and formatted the new, 320Gb disk.

I let out a big sigh of relief when I realised it could find and format the disk. I guess that meant by confusion over SATA and SATA-II wasn’t going to be a problem.

This time the restore started. It would, the installer said, take about eight hours to complete.

I don’t know exactly how long it took but it was ready the next morning.

I rebooted.

It looked good.

My familiar desktop was there. The backdrop was there, the few documents and folders that I had there before the crash were still there now. The dock showed all my old applications. I poked around my Documents folder.

All good.

Phew.

I clicked on Mail. Slight panic when the setup dialog appeared, and then I realised that Time Machine would not have backed up in the mail index. The messages were all there. It churned away for a while, processing all the messages. It finished. And then it crashed.

I restarted.

It re-crashed.

Okay, let’s Google the error message.

Ah, Safari crashes when launching too.

Everything with an embedded web view crashed either on launch or when the web component was used. Even the Software Update app. Worrying, but not cause for concern yet. Using Firefox, which did still work, I downloaded the 10.6.4 updater from the Apple website and proceeded to install.

In doing so, I learned something new. Did you know that the installer application has an embedded web view?

Luckily the command-line does not scare me — I have a history of voluntarily using Emacs — and I found the appropriate incantation to install the patch the hard way.

It didn’t work. Applications crashed in exactly the same place as before.

In hindsight I probably should have tried installing Safari again but instead I went straight to reinstalling the whole OS from scratch. From past experience I knew that my data was safe. It may have been a brute-force approach, but I was confident that it would work.

And it did.

It took about an hour to do the initial install, then I had to download and install a bunch of updates. Excluding the time it took to copy my data from the Time Capsule to the local disk, it took perhaps three hours to swap out my old disk and get my laptop to pretty much exactly the state it was in when the old disk stopped working.

It’s disappointing that the restore from Time Machine backup option didn’t work in its entirety but, to its credit, I didn’t lose any documents, emails or data. And in that sense it was a complete success.

Delicious Debrief (Part 5/5)

The story so far

Last year Yahoo! announced, with no notice, a significant change that had far reaching consequences for all third party applications including my iPhone program, Yummy. This is the third in a series of posts that discusses how I dealt with it.

We’ve already talked about most of the work, starting with an overview, the announcement, the low level technical challenges and the implementation (technical and UI). All that remains it to launch it, and that’s what we’re going to talk about today.

Availability

I switched my own Delicious account over to use my Yahoo! ID to shake out as many bugs as possible and I’d already had a few emails from people asking if they could help, so by the time I submitted the update to Apple it was in pretty good shape.

It launched on 13 December 2009, simultaneously for the full version and Yummy Browser. I decided against holding back for the free version.

Despite the volume of code that had changed, I decided to call is a “point” update (moving from version 2.3.1 to 2.3.2) because it didn’t really add any new user-level features. In hindsight maybe I should have made more of a fuss over it, since it was the first — and is still the only — Delicious iPhone app that supported Yahoo! IDs. But it felt wrong to kick my competitors over something that was just as outside their control as mine ((Six months later and with no updates from any of them I’m feeling less charitable!)).

Lessons

So what have we learned through all this process?

I’ve learned how vulnerable Yummy is to outside influence. I had been planning a new feature release before the end of last year but this slipped until the first quarter of 2010 because of all the work that I have outlined above. I’m glad that I’ve kept “agile” (an overused word in the software industry), sticking to relatively small and frequent releases as this made it much easier to change from one feauture set (mostly what you see in the current Yummy 2.4 release) to another (OAuth).

But I think most of the lessons need to be taken on the other side, by Yahoo! From my point of view there were multiple failures:

  1. No notice. It was impossible to have an application ready for day zero as we just didn’t know that a change was coming
  2. No documentation. Even when we found out about the change there was little to no documentation about how to make the change
  3. No concessions to desktop apps. It just is not possible to write a desktop application ((By “desktop” I mean something that doesn’t run in a web browser. iPhone apps in this sense are “desktop” applications.)) with a fluid, easy to use UI. OAuth works nicely for web apps but not so well for desktop (and mobile) ones. Twitter is pushing forward with xAuth which solves this problem. It’s not yet standardised, which is a problem, but guaranteeing a poor user experience is hardly a winning strategy either
  4. No transition. When Twitter moved from basic auth to OAuth ((Past tense as, while this process is still ongoing, it will be complete shortly.)), both systems worked for over a year. This meant that there was no single, big switch over. True, they incentivised new apps to use the new scheme and the end of basic auth is going to orphan a bunch of apps but, still, there has been a year when developers can transition from one scheme to the other. For Delicious this change happened overnight, but not for all users. Instead we have to support both schemes and with no obvious method of knowing which one to use in advance

Luckily Yahoo! seem to have noticed the pain that their development community have been put through. They have since (albeit very recently) tried to get a handle on who is developing what against their APIs. Quite how they’ll use that information is anyones guess but it’s certainly a step in the right direction.

Delicious Debrief (Part 4/5)

The story so far

Last year Yahoo! announced, with no notice, a significant change that had far reaching consequences for all third party applications including my iPhone program, Yummy. This is the third in a series of posts that discusses how I dealt with it.

On Monday I gave an overview of the problem, Tuesday I looked at how those changes were announced and why they were tricky, and yesterday I looked at how I actually implemented those technical details.

After the low level technical stuff there was still a lot of work making it useful. That’s what I’d like to talk about today.

But that’s not all

What I have been discussing so far has been entirely about the low-level, very technical details of OAuth. Of course there’s another side to it and that’s how it is presented to the user. This, again, has two parts: first, the options made available to the developer and, secondly, the work involved in actually making it happen.

So, the options available. We now have two authentication methods. I’ll call them Delicious and OAuth. The first point to make is that they’re not interchangeable. If I have an OAuth account I can’t log in with a Delicious username and password. And vice versa.

This begs the question: how can Yummy tell which type of account a user has?

The short answer is: it can’t.

Worse, many, if not most, Delicious.com users also have a Yahoo! account even when their delicious.com account is not linked to it. This results in a very confused user, as their login works without error yet they find they have no bookmarks.

What I was looking for was a way to identify the type of account that was accurate and would not require the same information to be entered multiple times. I ended up watching a number of people logging into their Yahoo! accounts ((Don’t worry, I wasn’t looking at what password you were typing.)) and, unfortunately, this invalidated most of my theories for making the process easier.

I thought, for example, that I was onto a winner when I noticed that I always typed “@yahoo.com” at the end of my username. Yummy could show the username screen as normal and, if the user typed “@yahoo.com” it would automatically remove the password field and offer to login using OAuth. However there are two problems with this. The minor, but annoying one, is that the user would be forced to enter their username twice, once in Yummy and then again in Safari. More significantly, I found that you don’t have to type “@yahoo.com” at the end of your Yahoo! ID. Although I do it all the time, most people seem to avoid the extra typing.

If people are going to avoid the extra typing, I would still need a way for them to override the default (Delicious) authentication method. And if they know that they have to overide it then, I reasoned, I may as well just come straight out and ask them how they’d like to proceed.

And this is exactly how it currently works.

Honestly, I’m really not very happy with it. How software talks to the server is entirely technical and is really not something that I should need to ask my users about. However this seems to be the least-bad approach. As I’ve noted before, I’m happy to entertain alternatives but I’ve not come across a better one yet.

The other significant user interface issue is one that I have already alluded to: should Yummy use a built-in web viewer or exit entirely and switch to Safari? The OAuth specification is clear on the matter: the users standard web browser should be used as it is both trusted and known ((We’re using an iPhone here so we can assume that the user is not using Internet Explorer.)). However, OAuth is really designed with web applications in mind. Even on a Mac this switch from “my” app to a web browser and back again would be far from ideal. But on an iPhone, that can only display a single application at a time, it is confusing at best.

All else being equal I would be happy to go against the advice of the specification and use an embedded web view if it made for a better user experience. Unfortunately, all else was not equal.

What I found was that, although I could log in correctly using the web view there was no way for Yummy to automatically regain control afterwards. If you’re familiar with OAuth you will be aware that there is supposed to be a method for doing this. I spent a long time trying to get this to work but never did. I’m unclear whether this was a problem in my code or on the Yahoo! side ((I’ve got this working in the development version of Yummy now. I’m still not sure where the problem was.)).

In practice, this would have meant that I’d have to provide instructions before the user was allowed to log in. Something like “press the ‘Done’ button when you have finished logging in and enter the code you were given.” Of course this is not dramatically better than copying the code from Safari and relaunching Yummy.

In the end I decided that I would completely follow the spec rather than not follow its advice and force my users to jump through a few hoops.

Again, this is not something that I am entirely happy with. Could I have implemented this differently? Absolutely! Would the user experience be better had I done so? Not significantly.

In addition to the big things there were also a number of smaller, more cosmetic difficulties.

There a few things that that Delicious.com API is not terribly good at. One of the problems I’ve had from day one is that it’s not really designed for applcations to synchronise bookmarks (which is kind of bizarre when you think about it). It can be done, but it’s pretty tricky, especially when you have limited memory as is the case on the iPhone.

The new Yahoo! ID authentication scheme brought another: how do you know who has just logged in? Previously the user entered their username, so Yummy would know immediately. However in this case, their username is entered into Safari and Yummy never sees it. It so happens that one API call does return the username, but only under certain conditions and not necessarily straight away.

I mention this not because it was impossible to solve — indeed it was not spectacularly hard — but because it was was unexpected. After working through the low-level technical details of OAuth; and after figuring out how to allow the user to exit Yummy and return to the same point (while still allowing the process to be cancelled); after all that, the process was still not complete. What appeared to be just a different username and password became a significant and fundamental change.

Coming tomorrow

With most of the hard work finished I just had to make sure it really worked, and then sit back and analyse what went wrong.