I Don’t Typically Do This

by Martin Gordon

Unlocked iPhones from Apple

Apple released carrier-unlocked GSM iPhones in their U.S. store today. Unlocked iPhones were previously available in other countries, but in the U.S., the only GSM iPhone you could get was locked to AT&T.

But why now? Why bother releasing this now when the next iPhone is supposedly only a few months away? The phone continues to not support T-Mobile’s 3G bands, so it’s not like this is a T-Mobile “soft” launch. It is possible that it’s an attempt to clear out stock, but I can’t imagine there’s that much pent up demand in the U.S. for an unlocked iPhone to warrant this now.

Verizon iPhones and iMessage

The Verizon iPhone 4 doesn’t do simultaneous data and voice, so I’m wondering how it will work with iMessage, which uses the data network (as opposed to SMS which uses the control channel on the voice network), when a recipient is on a phone call. A phone with no service will deal with similar issues, but the Verizon example is especially complicated because a Verizon iPhone on a call can still send an SMS while a phone with no service can’t do SMS or data.

When the iPhone can’t send an iMessage, it will fall back to SMS. I don’t know if this just checks the ability to send or if it also checks if the recipient can receive messages. If it does do a recipient check, then there’s no problem. If a Verizon iPhone is on a call, it wouldn’t be reachable and the sending iPhone would send over SMS. But what if iMessages only does a send check (e.g., that the sender has network access)?

To further complicate things, throw an iPad into the mix. Presumably, the iPad can only send iMessages and does not gain the ability to send SMS. How does the iPhone handle missed iMessages?

Apple has a Technical Note that does provide some answers, but they aren’t good:

If you are sending multiple notifications to the same device within a short period of time, the push service will send only the last one.

Here’s why. The device acknowledges receipt of each notification. Until the push service receives that acknowledgment, it can only assume that the device has gone off-line for some reason and stores the notification in the quality of service (QoS) queue for future redelivery. The round-trip network latency here is of course a major factor.

As described in the Local and Push Notification Programming Guide, the QoS queue holds a single notification per app per device. If the service receives another notification before the one in the queue is sent, the new notification overwrites the previous one.

All of this points out that the intent is that a notification indicates to an app that something of interest has changed on the provider, and the app should check in with the provider to get the details. Notifications should not contain data which isn’t also available elsewhere, and they should also not be stateful.

A quick search reveals that the BlackBerry Messenger server will deliver all messages after a phone rejoins the data network, which won’t be the case for iMessage if its using Apple’s stock Push Notification Services. If there are no Quality of Service enhancements in iOS 5, iMessage won’t exactly be a drop-in replacement for SMS and is slightly inferior to BBM. That said, for the few minutes I used iMessages, it felt a lot more fun to use than SMS. I can see why the kids like BBM.

Steve Jobs Q&A at WWDC 1997

WWDC 1997 took place in mid-May 1997, five months after Apple bought NeXT and less than two months before the ouster of Gil Amelio. Steve was serving as a consultant to Apple while his NeXT took control of Apple.

The linked video starts when Steve discusses what is basically iCloud, but the rest of the video is worth watching for the Q&A, which includes this gem:

Q: Mr. Jobs, you’re a bright and influential man.

SJ: Here it comes…

Q: It’s sad and clear that after several counts you’ve discussed, you don’t know what you’re talking about. I would like for example for you to discuss in clear terms how Java in any of it’s incarnations addresses the ideas embodied in OpenDoc. And when you’re finished with that, perhaps you could tell us what you personally have been doing for the last seven years.

SJ: You know, you can please some of the people some of the time. One of the hardest things when you’re trying to effect change is that people like this gentleman are right, in some areas. I’m sure that there are some things that OpenDoc does, probably even more that I’m not familiar with, that nothing else out there does. And I’m sure that you can make some demos, maybe a small commercial app, that demonstrates those things. The hardest thing is what…how does that fit in to a larger cohesive vision that’s going to allow you to sell $8 billion, $10 billion of product a year? And one of the things I’ve always found is that you’ve gotta start with the customer experience and work backwards to the technology. You can’t start with the technology and try to figure out where you’re gonna try to sell it. And I’ve made this mistake probably more than anybody else in this room and I’ve got the scar tissue to prove it, and I know that it’s the case. And as we’ve tried to come up with a strategy and vision for Apple, it started with what incredible benefits can we give to the customer, where can we take the customer. Not starting with, “let’s sit down with the engineers and figure out what awesome technology we have and how are we gonna market that”. And I think that’s the right path to take.

On programmer productivity:

The way you get programmer productivity is by eliminating lines of code you have to write. The line of code that’s the fastest to write, that never breaks that doesn’t need maintenance is the line you never had to write. What the goal here is to eliminate 80% of the code you have to write for your app.

And for the “That’s fine for Merlin” crowd:

Some mistakes will be made along the way. That’s good. Because at least some decisions are being made along the way.

Developing for BlackBerry in 50 Easy Steps

  1. Sign up for the RIM developer program.
  2. Find the SDK download page.
  3. Select “Download”.
  4. Whoops, forgot to answer “No” to question about whether you want to receive spam from RIM (this happens on every download page).
  5. Download and open SDK installer.
  6. Installer is not built for Intel (you know, the processor that has been in all Macs for almost 5 years), so install Rosetta.
  7. Installer requires USB drivers, need to download and install BlackBerry Desktop Manager (which requires a restart).
  8. Re-run SDK installer.
  9. Open the BBEclipse folder on your Desktop (the default install location) and launch Eclipse.
  10. Whoops, there’s no BlackBerry Simulator for the Mac.
  11. Install VMWare Fusion.
  12. Install Windows XP.
  13. Download and install SDK.
  14. Develop app.
  15. Run app in simulator.
  16. Whoops, there’s no UDP support in the simulator.
  17. Drive down to the store and buy a phone.
  18. Whoops, can’t activate the phone without service books from AT&T.
  19. Call AT&T and find out they won’t give you the service books without a one-year contract, despite having paid full price for the phone.
  20. Drive back to the store and return the phone.
  21. Find a friend to loan you a phone, or pick one up from eBay.
  22. Run app on phone.
  23. Whoops, can’t run app without signing the app.
  24. Request code signing keys from RIM. Despite them being free, you are still required to enter your credit card number.
  25. Wait four hours for the keys to arrive.
  26. Install the keys via the IDE tool.
  27. Sign the app and try to run it on the device.
  28. Whoops, it says there’s no device connected.
  29. Download BlackBerry Desktop Manager.
  30. Whoops, it requires Service Pack 3.
  31. Install SP3.
  32. Check email. There are 30 new emails from RIM notifying you that you signed your app. Despite it being one app, you must sign each of the 10 debug files with three different keys.
  33. Install BlackBerry Desktop Manager.
  34. Try to debug app again.
  35. Whoops, Eclipse still says there’s no device connected.
  36. Since your app gets signed each time you try to install it on the device, you just got another 30 emails.
  37. Google for a way to disable the emails.
  38. Find out you can’t. It’s a security feature meant to alert you that someone is signing apps with your keys.
  39. Set up Gmail filter to delete those messages.
  40. Settle for at least trying to get your app to run on the device, even if you can’t debug it.
  41. Try to install app using the Desktop Manager.
  42. In order to install the app, you need to install an OS update that can’t be disabled.
  43. In the process of installing the update, the BlackBerry restarts, breaking something with VMware Fusion. The device works, but the Desktop Manager doesn’t recognize that the update was run.
  44. Try 40-42 few more times.
  45. Realize that the reason you went to Windows was to use the simulator.
  46. Try to install app using Desktop Manager for Mac.
  47. Find out that in the process of installing the app, the Desktop Manager verifies the checksum of all existing apps, and that for some reason some apps are failing.
  48. Try an OS restore.
  49. OS restore worked, and now the app does install.
  50. Yay! We have the app running on the device!

If you’ve made it this far, here’s a sneak preview of the process for actually debugging an app…

  1. Open Eclipse on the Mac.
  2. Debug the app.
  3. Whoops, the signing keys aren’t installed.
  4. Install signing keys.
  5. Whoops, no more registrations left for the keys.
  6. Request new keys from RIM (yes, enter your credit card number again).
  7. Wait for keys…