iPad, Multi-Tasking, Flash

The anticipation built, the hype was beyond anything we had seen, the announcement was made, and now we’re left to ponder what it all means.

Yes, the iPad can be distilled down to 2 words: giant iPhone, but today’s announcement was never about the hardware (aside from the custom A4 cpu) but about the software. iPhone 3.2 OS, essentially the same OS that will be running in the iPhone sitting my desk.

iPad, in that respect, is underwhelming.

The two most requested features of the iPhone OS are Flash and multitasking. Neither of these features are in the iPhone 3.2 and ostensibly will not be available when the iPad launches in late March.

I can see how Apple justifies not having either of these features; none of which are technical. Let’s start with Flash. It is a resource drain, source of countless crashes, and the source code is ultimately not owned by Apple.

However, the main reason why Apple doesn’t want Flash on the device is that it can’t be optimized. Flash sits on top of Safari which sits on top of the OS; essentially a VM. With the iPad, Apple has designed custom silicon optimized for their OS and applications built off of their SDK. Flash applications are not built off their SDK, unoptimizable.

Multitasking is another matter. It’s obviously technically possible (read: jailbreak) but Apple is holding back on it because it impacts the user experience. Normal users do not want to deal with resource management nor do they understand it. How many Windows users have you seen with 50 icons in their task tray and complain their computer is “slow”. That’s not the perception that Apple wants users to have of the iPhone, and now the iPad.

Background Mobile Safari playing a flash video and it’s welcome to SlowVille – population: lag.

Apple will eventually offer multitasking once the silicon becomes fast enough that it doesn’t impact the user experience. They could potentially approve certain apps to be backgrounded, putting a resource cap for backgrounded apps, or limiting the number of background apps.

Apple’s answer for Flash? HTML5 and native apps of course.

I will be pre-ordering an iPad sight unseen. I know I’m in the minority and all the uses I imagine are very niche. But, what I wouldn’t give to own a first gen iPod. I believe the iPad is a product of that magnitude.


Best Argument Against Government AppStore Intervention

The FCC is probing Apple, AT&T, and Google over the whole Google voice fiasco. Although I wish Apple would open up it’s platform, I definitely don’t think the government should get involved. Also is any precedence set for the government intervention? No, I don’t believe so. Everybody is comparing Apple and the iPhone to Microsoft and Windows. The argument is that the government got involved there so why shouldn’t they intervene and stop Apple?

The best counter I’ve heard to this was discussed three weeks ago on the Engadget podcast (start listening at 23:05). Instead of thinking of Microsoft and Windows, think of Nintendo and the Wii (or Sony/PS3, Microsoft/XBox).

Think about it. Nintendo controls what’s available for sale on it’s console system. They also have an AppStore where they disallow content (e.g. they would never allow an emulator that enables you to play all NES games). They censor games, take a cut of sales, and they have full control of the eco-system. Yet, there’s no government intervention asking Nintendo to open up their platform. We purchase these console fully knowing that they will never be open.

At the risk of sounding like a fanboy, sadly Apple is just a victim of their own success.

From a Walled Garden to 1984

Everybody, hailed the iPhone as the savior to set developers and mobile businesses free from the walled gardens of traditional carriers. At first, Apple instantly gifted developers with easy access to a mobile audience that bypassed having to deal with carriers. The ancient lumbering beasts that are Verizon, AT&T, Sprint, and T-Mobile were out of the picture. Now we didn’t have to worry about being “on deck” or pre-installed onto phones to reach a mobile audience. All we had to do was submit our application to Apple and within a couple weeks, BOOM, someone with an iPhone would have your application.

Sadly, we all knew that we were climbing out of the walled garden only to land straight into 1984.

The problem is that Apple doesn’t need to explain why it removed Google Voice, NetShare, Podcaster, or Sling from the App Store. Developers can try to abandon the platform, but there are plenty of others to take their place. Developers and businesses can’t just turn a blind eye to the 30-40 million (depending on who you ask) iPhone install base. To put that number into perspective, when you factor in iPod Touches, it rivals one of the best handheld selling devices of all time, Nintendo DS, in yearly sales.

I’m going to predict that Apple doesn’t have to back down from it’s position any time soon and there will be nary a mention of abandoning ship from everybody attending the sold out iPhoneDevCamp this weekend.


Why Apple Needs to Make a iPhone Keyboard

Apple needs to introduce a physical keyboard attachment for the iPhone. With the 3.0, Apple gave developers access to the connector and it’s inevitable that devs will want to start supporting physical inputs in their apps. This would be so much easier if Apple said okay here’s the keyboard and here is a standardized API to use. Consumers and developers both win.

Let’s imagine Apple doesn’t do an OEM keyboard. A third party manufacture is going to fill the space but who will it be? Which apps support it? What if there are multiple keyboards that each work with different apps? Am I, as a consumer, going to have to decide which one to buy and hope my favorite apps support it?

The scenario above could be absolutely avoid if Apple puts out their own keyboard. If Apple is serious about the iPhone being a gaming platform then a gamepad would be nice too.

Macworld Keynote

My random reactions to Macworld Keynote announcements.

Face recognition in iPhoto is pretty slick tech. Tagging people on facebook is way too laborious right now, this will speed up the uploading of drunk blackmail pictures.

Music lessons in Garage Band is something I’ll personally be using. I’m excited for the prospect of guitar lessons by John Mayer. I can dream, can’t I?

New Keynote templates and transitions will enable more crappy slide presentations possible. I’m a believer in less is more for presentations. All those fancy transitions and animations should be used sparing.

iWork.com? Yeah, like me.com was a rousing success. I give it a year until it’s somewhat stable and another year until it has feature parity with Google Docs.

New 17″ MacBooks with crazy new batteries. Batteries are tough tech but I for one cannot wait for batteries that last 24 hours.

DRM-free iTunes is fantastic. Too bad Amazon.com is still 10c cheaper per song (and iTunes-Plus is $1.29, that’s 40c

That’s it? Oh wait… one more thing! That’s right, AAPL just took a dive.


Apple (AAPL) Bargain at $90

I just shifted half my portfolio into Apple (AAPL). I think it’s a bargain at this price, why? Simple…

It was $90 pre-iPhone.

That’s right, AAPL was hovering around $80 before MacWorld 2007, where the iPhone was announced. What’s happened since then? Apple has launched 2 versions of the iPhone in 50+ countries and essentially created an entirely new business for themselves with the AppStore.

They’ve also hit a record high in PC market share (~8%) and that will only continue to grow as the iPhone’s halo effect continues.

We’ll see how much of a fool I look like in a year…


$199 For 3g iPhone?

I just realized why Apple is willing to sell the iPhone for $199. No it’s not the kickback from AT&T. It’s the apps! They’re undoubtedly losing money on the device and banking on the fact that people will purchase so many apps over the life of the device. Sound familiar? Yup, it’s the same business model as the video game console market.

Maybe I’m the last one to realize this…

Missing in Apple’s Lineup: Mac

Where is the Mac? No, not the iMac or the Mac Pro or even the Mac Mini. I’m talking a Mac, a machine that gives me better than iMac specs without a built in monitor. I don’t need the nuclear powered Mac Pro (or it’s price) but at the same time don’t want the paltry Mac Mini. Give me something in between damn it!

IMO, Apple has missed yet another opportunity at this year’s MacWorld by not introducing such a machine.


Macbook’s Lazy Keyboard Under Leopard

zzz.jpgYesterday was a nightmare of a computing day for me. Along with my Ubuntu box not wanting to restart (which was my fault, I upgraded the kernel without upgrading the video drivers, sigh) my Macbook’s keyboard would not work intermittently. At first I thought it was faulty hardware until I looked online and found a whole slew of people with the same problem.Apparently the keyboard likes to go to sleep under Leopard. Appleinsider.com is reporting that the keyboard disappears from Apple’s System Profiler utility. Third party software has been ruled out as people with 2 week old fresh Leopard installs are reporting the same issue. There’s no official fix out yet, only temporary solutions workarounds. You can…

  • Use an external usb keyboard
  • Press and hold a key until the keyboard wakes up again
  • Open and close the lid
  • Reboot (eg. The Windows Solution) and hope it doesn’t come back.

Hopefully Apple fixes this soon, feels like the freezing issue all over again. Which actually hasn’t happened since I’ve upgraded to Leopard! Update!

 About MacBook, MacBook Pro Software Update 1.1  

This update addresses a responsiveness issue on MacBook and MacBook Pro notebook computers. Some MacBook and MacBook Pro systems may occasionally experience a temporary suspension of keyboard input which can last a minute or longer. The Mac OS X 10.5.1 update is required before installing the MacBook, MacBook Pro Software Update 1.1. Download 


Leopard borks MySQL, quick dirty fix

I installed Leopard and like some people on the net, MySQL was no longer running. MySQL would not start from the preferences pane and running mysqld from the command line got me:

wayne-pans-computer-2:bin Wayne$ mysqld
071026 17:29:55 [Warning] Can't create test file /usr/local/mysql-5.0.45-osx10.4-i686/data/wayne-pans-computer-2.lower-test
071026 17:29:55 [Warning] Can't create test file /usr/local/mysql-5.0.45-osx10.4-i686/data/wayne-pans-computer-2.lower-test
mysqld: Can't change dir to '/usr/local/mysql-5.0.45-osx10.4-i686/data/' (Errcode: 13)
071026 17:29:55 [ERROR] Aborting

Turns out for some reason the data directory has the wrong permissions.

wayne-pans-computer-2:mysql-5.0.45-osx10.4-i686 Wayne$ pwd
wayne-pans-computer-2:mysql-5.0.45-osx10.4-i686 Wayne$ ls -la
total 96
drwxr-xr-x  19 root    wheel    646 Jul  4 10:54 .
drwxr-xr-x  14 root    wheel    476 Oct 26 17:29 ..
-rw-r--r--   1 root    wheel  19071 Jul  4 06:06 COPYING
-rw-r--r--   1 root    wheel   5139 Jul  4 06:06 EXCEPTIONS-CLIENT
-rw-r--r--   1 root    wheel   8528 Jul  4 10:15 INSTALL-BINARY
-rw-r--r--   1 root    wheel   1410 Jul  4 06:05 README
drwxr-xr-x  73 root    wheel   2482 Oct 26 17:29 bin
-rwxr-xr-x   1 root    wheel    801 Jul  4 10:53 configure
drwxr-x---   4 _mysql  wheel    136 Oct 26 17:29 data
drwxr-xr-x   4 root    wheel    136 Jul  4 10:53 docs
drwxr-xr-x  67 root    wheel   2278 Jul  4 10:54 include
drwxr-xr-x  21 root    wheel    714 Jul  4 10:54 lib
drwxr-xr-x   4 root    wheel    136 Jul  4 10:53 man
drwxr-xr-x  15 root    wheel    510 Jul  4 10:54 mysql-test
drwxr-xr-x   3 root    wheel    102 Jul  4 10:54 scripts
drwxr-xr-x   9 root    wheel    306 Jul  4 10:54 share
drwxr-xr-x  31 root    wheel   1054 Jul  4 10:54 sql-bench
drwxr-xr-x  15 root    wheel    510 Jul  4 10:54 support-files
drwxr-xr-x  20 root    wheel    680 Jul  4 10:54 tests

So I simply chmodded data (with -R) to 777 and mysqld works again (along with the MySQL pref pane). Not the most secure way, but I said quick and dirty didn’t I? Before doing that I also tried chowning to root and starting mysqld with sudo but it complained about starting mysqld as root. Hopefully this helps someone out there.

On a side note, I hate the new dock. Try to figure out which one my apps are running by quickly glancing at the picture below. It takes some time for you to focus in on those light blue dots. Give me back the black arrow! (Also in the screenshot below, Eclipse is running but a second Eclipse icon is generated as the real Eclipse process. Not sure if I can blame Apple for this one.)


My biggest reason for upgrading is actually to see if Leopard will fix my annoying freezing issues!


Ruby on Rails in Leopard

title_macosxleopard_20071009.pngI was reading on Mac OS X Leopard and it’s new features and ran across this gem:

Ruby on Rails

Work in a developer’s dreamland. Leopard is the perfect platform for Ruby on Rails development, with Rails, Mongrel, and Capistrano built in.

Thank god! Getting RoR on OS X was a bit of pain if I recall (things you do once and forget about). The more Apple does of this the better… How about making a decent apt-get?

Annoying: MacBook Command-Tab Freezing

I switched the a MacBook Pro a recently and overall the machine is 10x better than any Windows laptop I’ve ever owned. (Sleep/hibernating a Windows machine is like playing russian roulette except all the chambers are full.)

However, the single most annoying bug in OS X is that every week when I’m working and I hit command-tab, the GUI freezes. The mouse still works, iTunes still plays, Apache is still running, sshing into the box and killing processes off one by one does not recover OS X.

Normally, it costs me about 20 mins of productivity except today I had an unsaved scratch pad open in TextMate. Now it’s lost, forever. I did some research and it seems like the problem dates back at least a year and it’s hard to believe that Apple doesn’t know about. From what I can gather nobody knows for sure what the cause of it is, except that it’s triggered by command-tab switching applications.

Theories like replace the switcher with LiteSwitch X, not using an external display, and don’t use 3rd party apps all seem to have some holes in them according to the threads I’m following.

I’m going to run the trial version of LiteSwitchX and see if it keeps happening although I think it’s a ludicrous idea.

Engadget reporting that Apple at least acknowledges the issue for iMacs. Hopefully the fix will apply to MacBook Pros. Everything seems to be pointing to the ATI video drivers. (crosses fingers)


Phoneless iPhone

The phoneless iPhone iPod Touch is now official. $299 for a wifi iPod with full browser. What does this mean? Cheaper to develop, bigger audience can only translate to more iPhone specific sites!

All those iPhone sites ( facebook, digg.com, etc ) have now increased in value. Along with it, iPhone specific ad units… with wifi becoming more and more abundant this will only be a good thing for mobile.

Josh Cantone from read/write echoes the same sentiment.

iPhone xhtml Javascript Development Woes

The iPhone has been great for mobile, it’s given a full browser to the mobile world. Except for one thing, it’s Safari, which can be good and bad. It’s good for example if you’re developing an app for iPhone, you have one browser to test and develop against. It’s bad because it’s Safari, not known to be the best of browsers.

At AdMob, I’m responsible for developing the javascript ad code for our iPhone specific code. Recently we’ve been experiencing odd behavior on sites where the ad code would simply not run. We finally narrowed it down to the fact that sites were setting content type as application/xhtml+xml. When Safari is in this mode it doesn’t like you doing such things as document.createElement(‘div’) or eL.innerHTML = ‘<div>text<div>’ or even eL.innerHTML = ‘text’; all of which are normal dhtml techniques.

Instead it expects you to use document.createElementNS and document.createTextNode which are the proper way to add XHTML elements. So I ended up having to rewrite our entire iPhone javascript code and a simple nifty utility function. 🙂

  var createElement = function(type, props, styles) {
    var d = document.createElementNS('http://www.w3.org/1999/xhtml', 'html:' + type);

    for(var i in props)
      d[i] = props[i];

    for(var i in styles)
      d.style[i] = styles[i];

    return d;

  // usage
  eL.appendChild(createElement('div', { id : 'divId' },
        { float : 'left', width : 100px' }));