Dennis Forbes on Software and Technology   Subscribe to RSS


About the Author
Dennis Forbes Dennis Forbes is a Toronto-based software architect. While focused primarily on the .NET and SQL Server worlds, Dennis frequently ventures outside of this comfort zone into game development and image processing. He has been published in several industry magazines, has been quoted in the Wall Street Journal and has been interviewed by NPR.

He is a vice president and lead software architect at an innovative New York City hedge fund back-office services firm.

Dennis has been working on solutions for the financial, telecommunications, and power generation markets for over 15 years.




The Feed Bag

 
Thursday, September 02 2010

A Brief History of My Antagonism Towards Flash

I was anti-Flash before Steve Jobs made it cool. I have as much anti-Flash credibility as anyone.

For over a decade I've steered organization after organization away from building solutions in Flash, often against great resistance. I was evangelizing SVG — what I saw as the biggest opportunity for a more illuminated, open solution than Flash — back when it's strongest corporate sponsor was none other than Adobe.

Aside: Humorously Adobe was leveraging SVG in their battle against Macromedia's Flash/Shockwave empire, before finally giving in and buying 'em out.

I have railed against Flash many times on many occasions.

The Great Flash of Propriety

Up until around 2005 and the birth of YouTube, Flash had very little presence in the video space: That realm was dominated by Real Player, Windows Media Player, Quicktime, among others. Flash fit in the RIA niche where it displaced the short-lived empire of ActiveX and Java Applets. It was the tool for great web entertainment like You Don't Know Jack, the Net Show.

Then YouTube rose with Flash at its core, and the rest is history. Soon Flash was the oddball foundation for video.

Mention Flash in the common era and the topic will veer to the great Flash/Apple battle of 2010, where Apple has violently and loudly rejected Flash (where it represents a proxy for "rich applications they don't control"), and Google, perhaps being a bit antagonistic, has embraced it with their Android and Chrome solutions.

Ok, embraced is probably a bit of an overstatement. In reality Google's initiatives have top notch HTML5 support, the best JavaScript performance, and are probably the best mobile/thin platforms for rich HTML5 applications, but they just happen to optionally support Flash as well, perhaps providing a bridge from the past.

A Very Personal Flash Experience

I've been running Flash on my Nexus One for several months now. I have it configured to On Demand so the scourge of animated, CPU-clogging Flash adverts don't destroy my web browsing experience. When there is Flash content that I want to view, I click the little arrow and voila, Flash is running on my mobile phone.

Overall it has been a very welcome addition to the device. From restaurant sites, to small videos like Zero Punctuation reviews, to games for my children, to product information pages, I like having the option of engaging Flash when the need arises.

So when I saw entry titled "Just How Bad Is Flash on Android" on Daring Fireball, of course I was drawn in. There Gruber indirectly linked to some demonstrations of Flash failing miserably on several Flash video sites.

To which, I say, no frigging kidding.

Anyone under any illusion that having Flash on their mobile device opened up any and all content is willfully or technically incompetent. That or it's link bait trying to herd in the people who desperately need their biases confirmed, and a lot of people desperately need to believe that Flash isn't necessary on mobiles. I'd probably go with that second option.

Of course not all content will play. This is, after all, a mobile device with a little power-sipping mobile processor. While 1Ghz sounds pretty pimp, the Snapdragon in the Nexus One is in many ways a weakling, particularly in video decoding and 3D graphics tasks where it fell behind even the iPhone 3GS.

On this 1Ghz processor I've had trouble playing 720x480 h264 videos encoded at 1Mbps, encountering frequent stuttering and dropped frames. Compare that to the iPhone 4 which allows for up to 7Mbps+ videos at 1280x720, which it plays flawlessly, owing to the excellent hardware decoding.

When it comes to video the iPhone 4 simply kicks the Nexus One (and virtually every other HTC Android device, as HTC is addicted to Snapdragons) to the curb. Then again, the Samsung Galaxy S kicks the iPhone 4 around and calls it Sally, while the OMAP in the Droid 2/X yields a good competitor, but the point remains: Snapdragon processor devices are not the top of the pile by a long measure.

So the Nexus One really isn't a great platform to highlight video prowess anyways.

And when it comes to Flash videos, Flash is almost always its own worst enemy: When you enable the plug-in, your enable is browser wide for that page, meaning it simultaneously enables the twelve punch-the-monkey animated ads surrounding it, often destroying the experience.

So no, trying to run a high bitrate 1000x500 video on ABC that clogs a high performance 2.4Ghz core on a modern x86 PC (which would be equal to about a 7Ghz snapdragon), probably with it being bundled up in DRM as well, is not reasonable.

"So Steve Jobs Was Right! Flash won't work on mobile!"

That's not what I'm saying. In fact, given that I've enjoyed Flash on many occasions, I find such claims ludicrous. When I see people make statements (direct from the talking points) like "Flash on mobile doesn't exist", I just marvel at the fervent, desperate doublespeak.

Mobile Flash exists. It's far from perfect. The available content usually isn't even aware it exists. Yet still, it is.

When sites provide HTML5 video, they do so often specifically for the iPhone/iPad. Most sites don't even feature sniff for the functionality — they don't care if you are running Chrome or Safari or IE 9 and can run HTML Video — but will instead refuse to serve up HTML 5 video for anything but those Apple devices. Given that, they encode specifically and only for that platform, with appropriate bitrates and complexity profiles ideal for those devices.

There's no big surprise that it often runs well.

That isn't a very encompassing, scalable solution though. One device family isn't meant to rule, and at some future point HTML5 will start to leave the iOS devices behind. The iPhone lived through a special moment where it was handled as a blessed child, getting its own special treatment, however that moment is passing.

Of course the Flash people have a solution for disparate devices, using dynamic streaming that is based upon the consuming device (resolution and bitrate scaling based upon the capabilities of the device). Not surprisingly there is little use of it yet given that mobile Flash devices just started appearing very recently, and still comprise a tiny market.

"So...Steve Jobs Was Right?"

No.

When I originally thought about how to respond to this, my first idea was to make a video demonstrating a smartphone failing miserably at rendering and interacting with various HTML5 sites. But then I thought better because someone might confuse that as a serious indictment of HTML5, when I love the technology stack and pragmatically realize that it can't (and shouldn't) always be universally accessible.

Yet still, contemplate the failings of HTML5 on mobile devices:

  • Layout can be ill suited for the screen dimensions and resolution of a smartphone.
  • Functionality can be overwrought and too heavy for a smartphone.
  • Input techniques might not work on smartphone.
  • etc.

Which is of course why many sites, like the atrocious script pig TechCrunch, created special mobile pages that they force you to, against your will, when you try to visit on a mobile device.

The next time you see a TOP 10 CANVAS DEMOS on your social news site of choice, pull them up on your tablet or smartphone and check out how well they work. Chances are overwhelmingly that they will fail miserably. Almost every HTML5 game demands that you use a keyboard to control it, if they aren't simply too resource demanding for a little mobile device.

So do we write off web browsers on mobile devices? Of course not: That would be asinine.

Punching Monkeys Coming in HTML5 Soon To You

One trend that is accelerating is the movement of many ads to HTML5 and away from Flash. That short period where iOS devices came with an almost intrinsic AdBlock+ in the form of the lack of Flash capabilities is rapidly disappearing. Soon every page you visit is going to be a mishmash of computationally demanding canvas renders and DOM manipulations, and it's going to become much more difficult to avoid their cost.

Closing Notes

For those who are on the fence about the whole Flash thing — whether they care about it on their mobile or tablet — take a look a the quick video I put up above. The videos did not run perfectly, the auto configurator didn't provide a seamless, perfect experience...but if the option is that or nothing, I think most people would agree that it's better than nothing.

  Flash   Android   iOS   iphone 
Monday, June 28 2010

While a number of beta releases of Android 2.2 (AKA Froyo) have made the rounds since the Google I/O public unveiling over a month ago, all of the prior releases targeted the T-Mobile variants, leaving my EPE54b-based "AT&T" model on the outside longingly looking in.

Sure, there are methods of rooting and rolling back and then forward to get it working, but I wasn't interested in them simply because this phone is too useful for me to bother: It is already a very decent phone, and I was willing to bide my time until Google refined the final bits and pushed it officially, at least when the alternative started with rooting.

Alas, a version has finally been unviled for my version of Android. I downloaded it, did the manual update, and initial impressions are incredibly positive.

I've complained numerous times before about the stuttering, seemingly overwhelmed feel of the platform, at least relative to the buttery smoothness of an iPhone, and I can happily say that most of those complaints are no longer true.

One possible facet of the Froyo update that has been debated back and forth as myth has been support for 802.11n. I can gladly say that FRF85b does indeed enable 802.11n on my handset.

802.11n
Taken after switching the WAP to 802.11n only, though it establishes the same connection in mixed g/n. Yes, I named my WAP "dlink", even though it isn't a dlink.

While much has been made about 802.11n's higher theoretical speed, how often is greater than 54Mbps really needed on a smartphone? Is the max 54Mbps of 802.11g just too constrained?

Hardly. The increased max theoretical throughput is a non-issue for this usage.

Instead the real benefit of 802.11n is that it maintains a decent throughput at the edges of the connection, where 802.11g would stutter and disconnect. I can already say that testing this throughout the house and the yard has demonstrated a more consistent, more usable experience. With the WAP in the basement, connectivity in the bedroom was often more hit and miss, whereas now it appears to be rock solid and ever so speedy.

  Android   2.2   Froyo   Smartphone 
Friday, June 04 2010

“Fragmentation? What Fragmentation?”

The Android Developer’s Blog ignited a firestorm recently by publishing an entry on the purported fragmentation of the Android ecosystem.

It’s worth a read. Too bad the same can’t be said to most of the responses to it.

When the topic concerns either Android or the iPhone, and the arguable failings of each platform, it’s seldom debated by people genuinely interested in seeing the target of their criticisms improve in any meaningful way. Instead it’s pundits (less generously called fanboys) hoisting their flag, pushing in for their chance to line drive some talking points.

Rabble rabble rabble, Steve Jobs will eat your firstborn

Rabble rabble rabble, Android is fragmented and anarchist.

It is noise that seldom inspires or enlightens.

On Android Fragmentation

We have a problem, Mountain View.

Some handset vendors are lagging on upgrading their devices, if they do at all. There is a wide disparity in performance and functionality among devices, leading to unpredictable user experiences.

It parallels the dark days of Windows Mobile, when unloved devices were shat onto the market and promptly forgotten, the vendors more interested in prepping you for the next iteration that, they assure you, will fix all of the problems of the last.

For those writing application targeting Android, such as myself, there is a need to carefully consider the current version breakdown, choosing the target that offers the minimum functionality you need without restricting your market too much. You need to perform the same analysis on the target hardware capabilities, as the simple reality is that a rich graphical 3D application won’t run acceptably on a wide range of deployed Android devices. A high-end game might run well on a Samsung Galaxy S, for instance, while being unusable on every other Android device.

Do you target 2.1 and take advantage of Quick Contacts, for instance, and limit yourself to 45% of the potential customer base, maybe preparing yourself for the future? Or do you target 1.6 and simply go without those refinements? Do you build a 3D rendering interface that will choke on all but the latest handset, or do you cater to the lower common denominator?

It’s a serious concern. There are brand new Android devices that are hitting shelves today with Android 1.5 on them. There are new devices with mediocre processors, limited memory, and barely functional GPUs.

Isn’t that weird? It isn’t optimal.

Add that there are all of the various skins that the vendors put on their devices to differentiate: HTC’s SenseUI, Motorola’s MotoBlur, Sony’s Rachael, among others.

Android devices come in all sizes and capabilities: There are big screens and little screens; devices with keyboards and those without; cutting-edge super phones and feature phones on steroids; tablets and netbooks; processors with NEON instruction sets and without; with SSE or without.

An Android device is not a homogenous experience for either users or developers.

Crazy isn’t it? Anarchy reigns! Contrast this to the land of iPhone where there is a very strong uniformity and development consistency among experiences and development and devices.

Shouldn’t Android be more like the iPhone? Shouldn’t Google lay the hammer down and demand that vendors refrain from customizing, they upgrade in lockstep, they build a consistent, uniform platform, and nothing deviates from the reference implementation? Everyone building a Nexus One with a vendor label on it?

No way.

Fragmentation is the Reason the Android Platform Has Succeeded

The progress of Android over the past year, or even just the past 6 months, has been nothing short of extraordinary.

From being a marginal wannabe, largely adopted by those ideological few willing to turn a blind eye to its many, many faults, Android is now a very serious competitor among mainstream consumers.

It’s an accomplishment that Google could never have pulled off alone. They needed a lot of help from a lot of very capable partners, and their strategy with the Android platform and the Open Handset Alliance is entirely the reason we got to where we are today.

HTC, Motorola, LG, Samsung, Sony, nVidia, Intel, ARM, among a slew of others…a lot of very smart, very capable companies working to make their own success story, pulling up the Android platform at the same time.

Motorola wants to sell you a Droid, yet by investing so much into making their devices a success they’ve build an ecosystem where you benefit from their success even if you choose another vendor’s phone.

Fragmentation is progress.

Instead of releasing a single iteration yearly, a single lockstep uniform device and experience, a Darwinist battle is taking place, the best choices and experiences triumphing. The Evo 4G is hitting shelves today, yet already we’re hearing about the next superstar, a purported HTC Scorpion device with a 1.5Ghz processor coming soon.

When people argue that Android should be more like the iPhone, they lose sight of this very beneficial side effect of the so-called fragmentation.

If Google ran the Android platform like Apple, it would have been a Buzzesque flop. It would have failed miserably.

But they didn’t, and it wasn’t. We are where we are.

So where are we?

Well firstly, most of what you’ve read about Android fragmentation is bunk. Horror stories about incompatible apps and terrifying development processes are largely exaggerated.

But there are some issues.

Google Earth, Google Goggles and the official Android Twitter application (an excellent application that was built with Google’s help) all require Android 2.1 or above. It’s fairly obvious that Google intentionally limits the best to a recent version in efforts to motivate vendors to hasten their upgrades, and to showcase the most recent platform additions, such as the animated backgrounds in the Twitter applications.

Those are the reason that customers demand that vendors update their phone, and it helps keep them motivated to push out upgrades. Motorola just released the Backflip on 1.5, and Sony released the X10 on 1.6. Both of them have gotten a lot of criticisms in reviews for this choice, and they both will pay for lagging behind. Their motivation to get upgrades to the market quickly is very strong.

As a developer, when you develop an application you need to target a given version knowing that you’re cutting out anyone running something older (thus cutting out some prospective customers). In a subset of cases you can target an old version and optionally target newer features using runtime reflection and feature sniffing.

And there are compatibility quirks. In developing an app that integrates the camera I’ve encountered a number of issues, including devices that invert the preview output, some that only return greatly scaled down pictures when a picture is taken, among a variety of other little variations and surprises, and that’s just among the devices I’ve tested with.

There are known issues when dealing with OpenGL where some devices demand a certain magic quadrant of environment conditions to operate at their peak.

All in all, though, it is an absolute walk in the park compared to most other development efforts I have pursued. The Android SDK abstracts most everything to a shockingly effective degree, and the very clever, HTML-like (and thus XAML-like) layout manager allows you to very effectively run your application on a huge variety of displays.

You can build high-performance code in the NDK, including hand-crafted ARM assembly, but you can do it in a way that will only optionally be used if the right conditions are available (e.g. an ARM processor with NEON instructions), otherwise falling backed to a managed version.

In many ways writing to Android is a bit like writing an HTML5 application. There are quirks that you have to deal with on some clients, but they’re mostly known and documented and fade away as the clients move closer to the specification, without restricting the innovation and uniqueness of the individual clients.

Everything about Android is built to abstract from the device, from the virtual machine runtime to the density-independent pixels to the layout manager’s multi-dot-pitch resource utilization (I would have preferred that they used vector graphics, such as SVG, but it’s better than nothing).

If Android is HTML5, then the iPhone is ActiveX

When you develop for the iPhone, you develop for the iPhone. With the iPad there’s one additional form factor, but the universe of clients is extremely limited and of little variance. With the new iPhone there are rumors that it will see a simple doubling of each axis’ pixel count, allowing the system to simply pixel double previous applications.

It’s a bit like developing for Internet Explorer back in the early 90s: Everything was grand and entirely consistent and uniform, and in many cases you could just target an ActiveX control because you could make so many assumptions about your target.

There is limited variability build into the iPhone SDK or development process, and those hurdles are crossed when they are encountered. When the iPad came out, they updated the SDK to deal with the second screen size. The new iPhone SDK added the ability to deal with the new pixel density.

It makes a developer’s life simple. But it also seriously hobbles the rate of innovation and the ability to adapt to change.

It’s a Long Term Strategy

In the short run the single-target approach – the ActiveX approach – wins. In the longer run those early gains disappear, especially when you’re moving uniformly (“non-fragmented”) against many speedy opponents.

Just take a gander at the comments on any Android market share story. Just a few months ago it was gloating damnation as the iPhone ecosystem dominated the Android platform. Now it has subtly shifted, and the argument has moved from "iPhone dominates!" to “You can’t compare the many Android makers against just Apple! Apple still beats HTC!” It’s quite a shocking adaptation, and of dubious merit: As a developer I completely care about the platform saturation, not whether a phone is a Motorola or an LG.

And of course Apple does as well. There are millions of iTouch and iPad devices that don’t get counted in smartphone surveys, and they give iPhone targeting developers a staggering lead still, but we’ll see for how long.

Friday, May 28 2010

Android 2.2

Android 2.2 was announced at Google I/O just over a week ago. It is the highly anticipated update to the Android platform that brings a slew of very important improvements and refinements, including a reduced memory footprint, the addition of a JIT compiler to both the Dalvik Java-esque virtual machine and the V8 Javascript engine in the browser, push-messaging for any 2.2 or above targeting apps (with the reliable and powerful Google ecosystem to back it), streaming media, comprehensive ActiveSync support, among many other new features and functions.

Lots of refinements have taken place. It levels the ground with the iPhone, and provides some ammo against the soon-to-be-announced iPhone 4.

The Android platform is a very exciting place to be. Competition is excellent. Hopefully the iPhone 4 is a stunner as well.

A Terrible Roll Out

The (non-)roll-out of 2.2 could have been done better.

A pre-release of 2.2 got pushed to a subset of devices — those given to press or as handouts at Google I/O — shortly after I/O concluded, with no one seemingly knowing that it wasn’t the real deal, or that it was only going to a subset of devices.

The tech sites proclaimed that the roll out was underway. Purportedly there was a confirmation by a Google rep that the new version was being pushed.

Google had indicated, at the conclusion of I/O, that they planned on getting 2.2 out for the Nexus One in a “couple of weeks”, so this seemed like a case of setting expectations low and then wowing them. Everyone was eagerly checking their phones, suddenly convinced that it wasn’t worth using until Froyo was installed. Soon they could impress their friends with Linpack results.

But it wasn’t a real roll out. Nor was it the actual release version. Google didn’t seem to correct anyone until days later, after lots of people had downloaded and installed a covertly discovered pre-release version of it.

Android already suffers enough criticism for the purported need for “task management” (you don’t need to manage tasks! It is often simply a placebo), it doesn’t need people thinking that you need to root your phone, rollback to a prior version, and then roll forward, all to avoid being picked last for the team.

The pre-release clearly has some issues. There are observations about apps crashing, with commentators opining that those app devs need to “update their app for 2.2”, providing more misinformation to add to the talking points of Android detractors

Communicate better, Google. And stop treating the press (or even people sent to I/O by their employers) as your closest allies. They aren’t.

Android has succeeded despite sites like Gizmodo and Engadget and their brethren, a strong community and grassroots effort keeping it aloft in the face of a lot of effluence and misinformation.

This tarnished what should have been a stunning release of a stellar upgrade.

The Android Platform Today

It still is a bit rough for mainstream consumers. I own an HTC Dream, an HTC Magic+, and most recently added a Google (née HTC) Nexus One, and I love all three of them (and it is far and away the best platform for me and my needs), but there are still warts and issues.

Scrolling on the Nexus One, for instance, is often rough, like the device is over-extended. This includes scrolling down pages, between home screens, and so on. It seems like a trivial thing, and it doesn’t impede actual functionality at all, but it is one of those minor things that really favor the iPhone, where scrolling and transitions are brilliantly smooth.

The Sense UI added by HTC offers a much more iPhone-like smoothness, but the base OS shouldn’t falter on such powerful hardware (and Sense UI is why HTC lags behind the Google release cycle at such a distance).

If you add animations to interactions, they must be smooth or they become a detriment. I’d rather pages just instantly flipped rather than being poorly animated. Android does it well compared to devices that came before, but it’s the unparalleled smooth elegance of the iPhone that makes it pale in comparison.

The Android Market

The Android market is a mess. There are 50,000 apps, around 49,000 of them being horrendous make-money-fast junk apps (thousands of compasses, levels, and after a “success story” led to a gold rush, parked-car-finder apps).

The “Just In” section is simply depressing.

This is very similar to the Apple market, for those who might be gloating, where there are companies spamming the directory full of thousands of repackaged web pages and regurgitated filler. Apple might have strong opinions about what Adobe’s Flash-to-native compiler would do to quality, but they certainly have no qualms letting low quality junk saturate the app market.

Of the remaining 1,000 apps, many still have a pretty big “need work” sign hanging on them. As a contemporary example, Epicurious just pushed out an Android app to join their existing iPhone app, and while the iPhone app is lauded, the Android version is seriously deficient, almost to the point of being unusable.

Make it easier for us to separate the wheat from the chaff. The current rating system is broken, and seems to be primarily used by spammers trying to earn gems in garbage games.

Allow me to pick my own trusted rating authority to browse and sort the app market. This should be similar to looking at a movie listing and choosing whether you want to rate based upon Metacritic, IMDB, Rotten Tomatoes, Flixster, the community at large or just personally trusted reviewers and their network of trusts.

I don’t care what a million spammers have rated an app at, nor do I care to waste my time with apps that people whose opinion I value have given the thumbs-down.

The market is improving (the new system that will be coming after 2.2 is apparently going to be very similar to Xbox Live, where I can pick movies and games on their web interface from a desktop and they’ll instantly start pushing down to my powered on Xbox 360), but people need appropriate expectations going in.

It doesn’t matter how many apps there are in the Android market. Or the iPhone market, for that matter. It only matters how many satisfy your needs.

Taking on the Snaptic Challenge and Then Making it Personal

Snaptic launched an interesting challenge recently – the Move Your App! Developer Challenge – and it inspired me to get serious about Android development. More so than the cursory surface skimming I did previously.

It was mostly a nice external motivation and a bit of a deadline to get me taking the initial steps. Yet in the end I decided against submitting for the contest.

I didn’t submit for two reasons.

Firstly because I started two weeks before the contest started, and the odd evening or weekend just isn’t enough time to polish something in that amount of time. I don’t want to contribute to the pollution of the market.

Secondly because I couldn’t reasonably fulfill a basic requirement of the contest, which is that you have to integrate with their note/photo cloud service (the contest isn’t entirely selfless on their part). It didn’t lend itself to my app without seeming like a completely superficial tacked on requirement-filler.

I hugely applaud them for creating the contest, encouraging Android development and getting people to get on the move. Their prizes are incredibly generous and unique as well.

Alas, I’m going to keep on plugging away and will have a version 1.0 in the market in the coming weeks, and I will openly say that it was inspired by the Snaptic challenge.

Google and the Nexus One Channel “Failure”

A lot has been written about Google purportedly abandoning the Nexus One. In reality the market simply isn’t ready for unsubsidized phones, people much more willing to pay $199 for an iPhone, and then thousands in service fees, than to pay $500+ for an unsubsidized device.

It’s similar to bandwidth where people are more accepting of “unlimited” data plans, with onerous throttling and usage restrictions, vendors trying to game it to ensure that you use as little as possible, than to pay for actual consumption. It’s destructive for everyone, but it’s the Big Lie that we all live with.

It’s also true that Google is a terrible retailer.

When my Nexus One was ordered I quickly realized I should have joined two orders (the phone and the car dock) to pay a single shipping charge, but more importantly a single customs brokerage charge. Despite contacting them almost immediately I instantly got a stock reply saying that it couldn’t be done due to their ultra-expedient fulfillment process. The fulfillment wasn’t ultra-quick, and strangely I can make such changes to trivial, low-margin computer orders with no issues at all, but that’s the operation of Google where the earnings per employee is maximized, and saying no is easier (and cheaper) than being accommodating.

I also ordered an engraving (see below) on my phone and the phone came sans engraving. I filled out their support form to say “What happened with the engraving I asked for?” to instantly get an obviously mechanical Bayesian response that I needed to contact HTC for any order problems.

Google isn’t great at retailing directly to the public. I love the phone, but the experience was far from pleasant.

On Engraving One’s Phone

Engraved Phone

Several times prior I had almost completed an order but backed out once presented with the engraving options.

It seemed like something I should take advantage of.

But what to engrave? My name? My email address?

What if I transferred the phone to someone else once the next killer Android device came along? Surely they wouldn’t like having my name permanently engraved on a non-removable part of the phone.

What if I dropped the phone on a covert mission and wanted deniability?

At the same time I’d like for someone to be able to contact me if they find the phone, and maybe edge someone who is on the fence about whether to keep the found goods to doing the right thing.

So I went and registered a domain – mylost.mobi – and set my engraving to be yyz@mylost.mobi.

I “think bigger” in almost all that I do, and the idea was that such a site would offer a control panel and the ability to transfer the forwarding address, so if I transferred the phone I would simply transfer the email address.

Alas, my phone didn’t come engraved so I didn’t bother building it out. Neat idea, I think.

  Android 
Tuesday, May 11 2010

Some recent NPD data showing the Android platform overtaking the iPhone in the US has set the web on fire. Apple apologists like John Gruber are working overtime to try to spin it.

Remember back when Daring Fireball was actually an interesting site? Now it’s like I imagine Pravda was during the Cold War.

In any case, I was a little shocked to see the gains come this quickly. Android was obviously making a dent, but I expected another generation of products to flow through the market – like the Incredible and the EVO 4G, and eventually the long-anticipated onslaught of Dell vapourware – before Android really took hold with mainstream consumers.

And of course iPhones are still selling. They’re selling like hotcakes, for that matter: Apple reported a more than doubling of sales during the period in question (kind of undermining the notion that it’s some sort of calm before the 4G storm).

At this point smartphones have a limited market saturation, which is why it’s a critical juncture and why there’s a bit of a race to perform a land grab. It remains anyone’s game.

In a year we might be looking at the emergent dominance of Windows Mobile 7 phones. Or maybe the next iPhone model will storm the market. Or WebOS will be reborn into a real contender. Or maybe Blackberry – the strangely unmentioned leader of the pack – will really wow the market with their next cycle.

It is critically important that there is competition in the space. Competition is great for everyone, including for iPhone users (see the upcoming multitasking that is a virtual clone of the implementation in Android). The market can’t be dominated by one vendor, especially one with walled gardens.

Speaking of walled gardens, as much as HTML5 got talked up during the Great Jobs-Adobe War of 2010, in reality HTML5 performance on the iPhone and iPad is abysmal and is close to unusable for rich content.

The real alternative to Flash on the iDevices has been native, single-platform, completely-proprietary apps. Which is arguably a perfectly fine approach (take full advantage of the platform and all), but it was incredibly frustrating seeing HTML5 used like such a cheap sacrificial prop during the debacle when it really had perilously little to do with the debate. It was so grossly dishonest.

Of course I’m speaking outside of videos. For videos Flash is almost always a completely unnecessary wrapper around an h.264 stream (which is what many Flash videos come encoded in these days). Separating the video from the container is a no-brainer.

Obviously HTML5 needs to keep improving. With Android 2.2 around the corner there are wide expectations that they’ll introduce a JIT compiler for the Dalvik engine (“native” apps largely run in a VM runtime and are currently seriously hobbled by the lack of optimizations in the same), and it would be fantastic to see something like V8 for the browser as well. While the platform has far-and-away leading canvas and dynamic graphics support, it falls behind in scripting and that would be a nice gap to eliminate. It would be nice to see a decent dynamic HTML 5 capability built into iPhone OS 4, as currently it is seriously deficient.

  Android   iphone 
Wednesday, February 24 2010

More Apple/Android Junk?

I have so many things I’d like to write about – topics having nothing whatsoever to do with Apple or Android, like IoC, ARM assembly, rational NoSQL, and of course pragmatic software architecture – but various mobile issues keep mentally demanding that I hop up on a soapbox about them for a bit. I have to get this out of the way.

Mobile computing is absolutely the most important realm for this industry over the coming decade, so pay attention to what is happening because it really, really matters.

CIBC – Leader and Innovator, or Me-Too Wannabe?

CIBC app
The CIBC Platinum Card

CIBC, a large Canadian bank, just launched a nationwide advertising campaign to promote their newly released iPhone banking application. You can see the video on YouTube.

It's notable that CIBC isn't targeting iPhone-only venues with these ads, which they could easily and cost-effectively do, but instead they are promoting this during primetime Olympics coverage. They're putting it front and center on their website.

If you caught the commercial you might have mistook it for an Apple ad, given that the strongest takeaway is a subtle "there's an app for that" message, followed by the implicit declaration that iPhone customers – a small minority of CIBC customers – are the elite, their walled garden needing its own special flowers.

Maybe Apple subsidized the ads and the product itself. It’s a little surprising for a large and profitable bank to look for ad subsidies, but it’s the only conclusion I can draw.

It’s either that or CIBC has an Apple fanboy wreaking havoc from the executive level.

In any case, big deal: CIBC makes an app for the iPhone (first bank in Canada to do so, they proudly boast). Just serving customers, right?

Consider that CIBC has never offered a rich-client Windows application for banking, which is a statement that is true for every Canadian bank as far as I know.

They will let you download data to Quicken or Money or what have you, on whatever platform you’d like, but if you want to bank electronically as an end-user the cross-platform web browser is and has always been your electronic banking tool, even when it limited them to a very simplistic interface.

They knew not to fall into the ActiveX quagmire like, say, South Korea. The banks have always supported just about any modern client equally.

Think about that for a bit: They have never directly supported the rich interface of the overwhelmingly dominant client platform for PCs.

And for very good reasons.

Yet now they have special, premiere support for one far-from-dominant Smartphone.

Given that history of device and platform treatment, it’s natural to presume that they have some fantastic and compelling reason for making this change: Maybe they’re using amazing 3D graphics of money flow or something on the device. Maybe a breathtaking augmented reality experience that allows you to visualize your debt load increasing when the camera is pointed at that new must-have device you really want at the electronics superstore, a virtual banker sternly shaking his head no.

There must be something that they just couldn't do without "going native", right?

Nope.

Their iPhone app features shockingly basic functionality. The single place where it could use something even remotely client-rich – to get the user's location to find the nearest branch – they screw it up and force you to type your location in.

This Is What Web Apps Are Made For

Really HTML5
This Is An HTML5 App on the iPhone

This application was made for HTML 5, which humorously would easily allow them to use the Geolocation API to get the user's current location for richer and more intuitive mapping.

And let’s give credit where it is definitely due: The iPhone features excellent web app support, arguably best of class, likely because that was originally the only way to create applications for the device.

Jobs’ original vision was that the phone would offer a native Apple experience enhanced by a rich and robust web application ecosystem. That was the phone that they originally delivered.

That web richness allows you to make apps that look and act just like an iphone application with some simple targeted styles and scripting, offering rich and robust functionality and features.  It also allows you to avoid going hat-in-hand through Apple's app review process for every update, as is demanded when you publish via the App Store.

So imagine a world where CIBC decided that they didn’t need to kneel in worship before Apple, trying to suck some Apple-idolizing droppings from the dirty ground, and they’d release this as an HTML 5 app.

It would feature the same look and feel, could easily support all of the same functionality (without breaking a sweat). It would almost certainly be far more maintainable, and could function like a minimized version of the web app they already have for PCs, without necessarily demanding new public-facing web service APIs.

Win all around, right? Well that’s just the start.

If CIBC did it the correct way – as an HTML 5 app – it would also work on Android devices (including crazy features like local databases and geolocation and all of the snazzy dynamics), such as the hot new Milestone coming to Telus, and the anticipated Acer Liquid and Sony X10 coming to Rogers, and more importantly – this is the land of RIM – it would work on the newly revamped Blackberry webkit browser coming shortly, which is worthwhile given that Blackberry remains atop Apple in the “smartphone” category, especially here in Canada.

Remember that Apple far from dominates the Smartphone category, and competition is only getting fiercer. Canada has never been as iPhone-crazed as the US, and a number of compelling non-iPhone smartphones are just hitting our shores.

So if they went the HTML 5 route, they could offer a rich experience on all capable devices, easily stylable and feature-scaling to optimize the platform experience. Anything would be better than the WAPishly rudimentary "everyone else" dumpbin interface they currently support for every other mobile device.

Didn’t They Listen To Steve Jobs?

Juxtapose Steve Jobs telling us that the iPad doesn't need Flash because HTML 5 makes it irrelevant – a premature statement, but the time will come when his words will seem prophetic – with organizations like CIBC porting absolutely rudimentary web functionality into native apps, wasting time and resources and cash, primarily benefiting Apple, while undermining marketplace choice.

Very backwards move, CIBC. It doesn't make you look hip and on-the-ball, but instead makes you look like Apple-salesmen hoping for your little bit of me-tooism hipster credibility.

Given how boastful CIBC is about being the first bank to feature an iPhone interface, it would be delightful to see another Canadian bank, such as my old workplace RBC, take the high road and come out with rich and robust mobile web apps that don’t favour one walled garden without cause.

They could show it running just as richly on a Blackberry, gaining benefit from the glow of Canadian patriotism.

A Place for Web Apps and a Place for Native Apps

While Jobs is quick to declare the end of Flash in pitching the iPad, the reality is that there are serious gaps in what HTML 5 web apps are capable of.

Graphical games, for instance, aren’t a web app reality without either adding Flash to the equation or going native (e.g. OpenGL on Android or the iPhone). Some day down the road it will be possible, but that isn’t reasonably the case right now, aside from some tech demos that make a high-end desktop grind to a halt.

Apps that exploit special features and functions of the hardware generally can’t be web apps either, at least until the feature is so common and prolific that it gets baked into the shared standards, as geolocation has. I’m sure at some future point we’ll have “camera” and “webcam” and “DSP” APIs to access from JavaScript, but for now those are native app domains.

Mr. Jobs’ statement could more honestly be worded as “Flash isn’t necessary when you have HTML....and apps from the Apple App Store”.

Platform specific apps are needed for a lot of solutions. That goes without saying.

Still, porting absolutely rudimentary functionality to native apps is a backwards repeat of mistakes made in the past, walling the garden off for no logical reason.

CIBC is hardly alone in making this foolish, foolish move, but given that they seem to be so proud of this mistake they deserve particular criticism.

So You Own An iPhone and You Don’t See The Problem

Hanging with My Youngest
My Youngest Doesn't Have an iPhone...yet

Even if you own an iPhone, and you happily imagine a world where your children’s children will have iPhones, you should still view moves like CIBCs with intense cynicism.

Not only are they limiting your choice unnecessarily if you ever decide to consider alternatives (as everyone should always be doing), even if you’ve declared fealty to Apple forever and ever the movements of organizations like CIBC are diminishing Apple’s need to be competitive.

Recall what happened to Internet Explorer after so much of the web (outside of Canadian banks, notably) decided that they would treat IE users as first class citizens, everyone else ignorable chumps. Once that lock-in was established Microsoft had little incentive to work on their browser and they took their users for granted. We’re still trying to pull ourselves out of that mistake.

Apple isn’t Microsoft, but by the end of 2010 they will likely exceed Microsoft’s market capitalization, which is absolutely shocking. Corporate sludge is inevitable at some point. If something happens to Steve Jobs, for instance, and they recruit Ballmer to run the place, you might decide to consider alternatives only to find that you're tied to the platform in a thousand seemingly minor but cumulative ways.

Competition is good. Building up the walled-garden of the iPhone undermines competition, and encourages a foolish Windowsification of the mobile world.

  walled garden   CIBC   iphone   Android 
Thursday, January 21 2010

The NAS Gets a New PSU

In March of last year I wrote about replacing the home NAS with a custom-built Linux box.  

Almost a year in and the device has served the purpose well, providing a solid foundation for a connected home. I’ve been very satisfied with the change.

The only downsides of the unit are the higher power consumption (averaging around 38W), and the groan of the two fans inside: the power supply and chipset fans. The audible part isn’t really an issue given that it’s stashed away, but considering that a probable failure point on most new electronics is the fans, it becomes a reliability concern.

I junked a laptop because of an impossible to repair broken fan. I’ve lost several video cards for the same reason.

I can even hear the irritating whirring of my blu-ray player’s fan (do not buy the Samsung BDP1600. The thing is complete junk even without factoring in the noisy fan trying to upstage the even noisier optical unit. Speaking of junk, the Sony alpha-200 is another garbage product that made me regret ever turning my back on Canon).

As promised in the original entry, I got around to replacing the power supply with a PicoPSU 90W unit, which was basically a plug and play swap.

In my original entry I estimated a 4-8W power reduction, which turned out to be an underestimation. With this PSU the power consumption dropped a whole 10W, going down to a constant 28W (only slightly spiking under load), making me feel a little less enviro-guilt. There’s still the noisy chipset fan, but that’ll be another project.

The case was built around the expectation of a power supply fan exhausting heat, so some extra natural ventilation was required. With that the sensor readings now hover at low operating levels.

Economically this is a change that will not pay off. From NCIX the new PSU cost me $73.49 all in. Given a savings of 0.01kWh per hour, and a fully loaded electric cost around $0.16/kWh, it would take 5 years for the 10W to pay for the change.

It would be nice if all power supplies were mandated to be efficient (they aren’t for most devices because they know it plays zero part in your purchasing criteria. It’s unfortunately one of those areas where legislation is really the only effective solution), because right now inefficiency is the standard. Of course environmental choices don't always yield the expected results.

The Dream is Over...Wake Up With New Phone

In July of last year I wrote about choosing a new smartphone to replace the MotoQ that I had been using. While the MotoQ served a good tour of duty, it was seriously showing its age and was falling behind in the empowering mobile revolution.

While I’d been using variants of Windows CE since before the turn of the century, Windows Mobile was obviously lost in the wilderness. Not only was each equipped device essentially abandoned right after being released, the clearest sign that Microsoft lost the plot could be seen in PocketIE, where the preloaded bookmarks to various Microsoft Mobile pages led to 404 errors.

The team moved onto something new and shiny and had no concern at all for the existing base. Microsoft has a very short attention span to products that don't earn them Windows Office type revenue numbers, so it wasn't a surprise.

For various reasons I did not want an iPhone (we don’t need another restrictive and innovation crushing Microsoft scenario playing out, and I want to develop for the device without embracing the whole cult), despite it being the easy choice. I opined in the first entry that Android seemed to have a very bright future ahead, which is a prediction that seems quite obvious now given that it is the platform of so many incredible devices recently released or on the horizon.

The future is so bright for Android that the robots have to wear shades.

The options in Canada were (and remain) limited, so I went with an HTC Dream (G1) given that it had a keyboard and otherwise had largely the same specs as the newer HTC Magic, aside from what seemed like a minor difference in memory capacity.

 I have to confess to being disappointed with the device.

Functionally it is amazing, and even with Android 1.5 the platform is simply brilliant. When everything operates correctly I am over the moon with the device.

The problem is that everything didn’t operate correctly. For whatever reason the device seems to be horrendously overloaded, so even with virtually no apps installed and nothing beyond the base system running, most actions are plagued by obnoxious pauses, even on a fresh start-up.

I hate pauses.

I stopped using brilliant apps like Weatherbug because they seemed to make the situation worse.

Alas, my long term plan was always that I would buy one of the newer, faster phones when they came to market, while using the starter device for development purposes until that time. If an unlocked Nexus One or Droid/Milestone worked on Rogers’ wireless band, I’d grab one of those when it was a possibility.

Nonetheless, I was pleasantly surprised recently to find that Rogers was offering all HTC Dream owners a free HTC Magic for $0, with the caveat that your term length pushes out. Given that Dream owners can only possibly be 6 or 7 months into their term, that isn’t that tough of a demand. I am on a very reasonable family plan that allows me 5GB / month (which I seldom use more than 1% of), so I feel fairly future-proofed with that foundation and for me it was all win.

So the next day a Magic arrived in the mail and moments later I was up and running with it. With the SIM card removed my existing Dream still works on wifi, where it can browse the web and play media and respond to emails and take pictures, and I can of course put another card in it and continue using it online. I’ll likely install Cyanogen on it now.

Quite pleased about that.

The most shocking thing, though, is that this Magic is much more responsive. It has the same processor as the Dream, so that doesn’t explain the difference. If I had to guess, I’d point to RAM, which on this device comes in at 288MB, compared to the 192MB in the Dream. For comparison both the Droid and the iPhone 3GS feature 256MB of RAM.

The extra headroom over the base OS seems to make all the difference in the world. On the Magic I can see that the free memory is usually less than 90MB, even on a fresh start-up, which notably would put it over the limits of the Dream.

HTC and Rogers claim that they’ll release Android 2.1 for this device in the near future, which makes me especially pleased.

Great move, Rogers. The new HTC Sense update and free month of data is icing on the cupcake.

Firefox 3.6 Released – Web Worker Performance Remains the Same

Back in June I wrote about Web Workers, a fantastic new method to move processing out of the UI thread. To support the entry I posted a variation of the SunSpider benchmark I named Moonbat.

Safari kicked Firefox around in this benchmark. I just tried it with the just released 3.6, and it doesn’t look like much has changed: FF 3.6 does 10 iterations with 4 threads in ~11 seconds, Chrome does it in 2.6 seconds, while Safari leads the pack at 2.3 seconds.

Alas, web worker performance isn’t a critical factor in choosing a browser (my favourite browser remains Firefox), but it would be nice to see it moving in the right direction.

Celebrating My First Home High Speed Overage

Got the cable bill — a bill that pushes into the $250 range per month these days — to find a surprising $11.25 "internet overage fee". Apparently I used 67.5GB last month, while my limit is 60GB. The Steam sales, several purchased HD movies and a couple of on-demand games for the kids on the 360, added to the normal internet usage apparently really added up to a very atypically throughput-intensive month.

I'm not going to cry many tears about it, even though I do think $1.50 a GB is a bit absurd (in an average month I doubt I use 10GB, so now I almost feel obligated to max it out), given that I think by usage pricing would lead to a far better, more open, more honest system for everyone.

Earlier EntriesLater Entries

Dennis Forbes