Lifting the Apple vs. Adobe compete veil


In October 2009 I warned the Adobe community via InsideRIA that Adobe should tread very carefully with Apple and how that if they kept poking the sleeping giant sooner or later they’d react.

It’s now April, and Apple have reacted – and like a great game of chess, it’s not check mate just yet either.

Apple decided this week to update their licensing and block the ability for 3rd party software vendors like Adobe for example, from allowing their tooling and customers to produce iPhone/iPad based solutions that do not make full use of the way Apple intended to enable such vendors in the first place – “It’s my house if you don’t like it leave” is the summary.

A lot of people are asking questions around “why” and a lot of the blame is being pointed at Apple as being unfair and so on. Allow me to interject given I was one of the main Adobe compete leads at Microsoft and secondly my prediction rate on Adobe has been approx 90% correct so far (I guess you’ll have to trust I know a thing or two about the brand).

The lesser of two evils.


Adobe or Apple who is to blame? who is innocent and who is trying to do the right thing? these are all immediate questions that come to mind when you start seeing the battle lines being drawn between these two “A” brands.

The answer is – it depends.

The knee jerk assumption is Apple isn’t playing fair here that they are the ones holding innovation back on the beloved iPhone/iPad platform(s). It depends, as in Apple’s defense why would you allow a company like Adobe who’s made no secret about this:- the ability and power to lock down the user experience for all devices into a democratic format like Flash.

That plan is effectively the same playbook as Microsoft has used for Windows, own the platform own the industry its that simple.

If Flash was to gain entry to the iPhone/iPad then it effectively puts app vendors and such on the same playing field as other devices and in many ways the unique form factor of that which is the iPhone today starts to lose its initial appeal as it then becomes yet another device. Apple is a company that prides itself on “thinking differently” in that it appears to approach consumer based products in a very unique and at times stubborn – but profitable – way. The brand likes to ensure its products are different from what people expect and that their experiences are unique and a must-sort after thing.

Adobe is desperately trying to change that, they see their future as being the UX platform to the masses – “use my tools and you can produce on all devices and platforms” is essentially their mantra.

Apple, Microsoft and in parts Google aren’t even slightly interested in agreeing on this as they are all acutely aware of the potential hazard products like Flash can become if left to grow organically.

If your going to have democracy, let it be HTML5 then.


User Experience in technology is now fast becoming a consumer focus as well as an enterprise focus. 99% of my workload is visiting Microsoft customers every week helping them figure out their UX story on disparate technology. I’ve never seen this before  and I’ve been a UX plug-in focused designer and developer for the past 15 years and as my bio states, a Product Manager of one of these technologies. It’s inspiring but at the same time fragile and the reason being is HTML5.

HTML5 for me represents an industry slow-down, in that if we all move to abandon plug-ins and support HTML5 in the way it’s being instructed to, we in turn sacrifice the agility of that which is user experience on the web as we know it today.

Apple and Google are ok with this though, for both of them having HTML5 on the horizon is a good thing. It enables them to still control the way in which they run their unique business models but at the same time it still gives them the ability to block competitors from over-taking their said business models.

An example is today, I can log into my bank and handle my financial affairs all through a unique iPhone specific experience. One of the largest banks in Australia reacted to the iPhone and produced a solution that befits a device which today still has minority share.

The point of that example is simple, companies will react to where they perceive the value is and enabling their various application domains to have multiple user interface channels is extremely important and one that is visible on all of their roadmaps for the future. They are all acutely aware that the industry is changing and the lines between Desktop and Mobile are blurring and in a manner that  is going to be a lot harder to separate.

HTML5 however represents a unique value proposition to this technology hazard that’s coming up fast. It effectively puts us all on an even playing field and it also strikes at the heart of everything Adobe represents as it effectively deprecates Flash.

If Apple is able to keep large brands reacting to their business models without having to take a technical dependency on products like Flash, then this in turn solidifies their position in the future in a more healthy way. It’s much more profitable today to starve the Adobe ecosystem out  Apple based devices than it is to allow the said technology to co-exist on the devices – as once that technology gets on the phone all bets are off as sure it will become popular.

It’s not about being ethically right, as this isn’t a Disney movie it’s reality. All software vendors are doing everything they possibly can to dominate a niche in the industry without taking a technical dependency on a foreign software company

Where is Microsoft in all this?


If i know my old team well, they’d be chuckling at the demise of Adobe and how all their best efforts in marketing CS5 + iPhone just came unstuck overnight. That being said, this is why Silverlight and WPF was built to play by the same rules but differently. Microsoft aren’t interested in holding down a unique experience on their own proprietary devices as well they don’t make hardware. Its in their best interest to keep things on an even playing field provided you buy their operating system first and secondly you develop using their tools for it. If either of those tick boxes are ticked, life is good for Redmond.

If you screw around with those two boxes they will compete against you and hard. Silverlight is a result of this, as it was well known Adobe’s intent was to own the UX platform across it all which in turn interrupts Microsoft’s story in a way that isn’t healthy for the company. Silverlight was born out of that competitive necessity and you’ll soon start to hear random stories on how Windows 8 will solidify their position on counter-acting concepts like Adobe but whilst still embracing the existence of concepts like HTML5.

HTML5 is the brakes for this giant chess game, its the technology safety haven which enables us all to slow the engines down a little and start making stronger bets instead of this ad-hoc technology evolution we seem to be on.

Apple can leverage its concept to propel them forward in a much more controlled fashion. Google will enjoy its splendor as their content business model can remain intact without having content and experiences online forking. Adobe will do what it can to keep their fingers in the HTML5 via their tooling story (and in parts server products) but in reality if HTML5 were to gain dominance it would impact their entire business model in a way that they aren’t yet equipped to deal with.

Apple blocked the Adobe market potential simply out of necessity and future proofing their brand, all you’re seeing this week is one move out of many in this game of industry chess.

Adobe are being attacked on all fronts, they simply MUST stop their immaturity and aggressive behavior in order to survive – otherwise their developer share will continue to drop and Flash will continue to be ignored in lieu of other more appealing approaches to the same thing.

Adobe will win this, public demand will turn in their favor.


It’s something I hear often a cry of desperation if you will. Adobe don’t have a groundswell of developers to storm the Apple gates and press outlets like New York Times etc may post an article or two around how unfair it is but it won’t be a sustained momentum as they are more inclined to talk in depth about the engaging devices such as the iPhone and iPad bring than what powers them.

What about consumers by large? Consumers are indifferent to technology choice as Google, Microsoft, Apple, Adobe, Amazon etc are all bombarding them daily with “try my new shiny toy” so it’s hard enough for the tech savvy minded to separate signal from code.

I predict Adobe will lose this bout and despite Adobe’s CTO post today about how they will produce CS5 to do the same as what they had intended and leave it up to Apple to make the next move is a silly move on their part as it effectively devalues CS5’s potential – again. Not to mention his wording just is passive aggressive for example:

First of all, the ability to package an application for the iPhone or iPad is one feature in one product in Creative Suite. CS5 consists of 15 industry-leading applications, which contain hundreds of new capabilities and a ton of innovation. We intend to still deliver this capability in CS5 and it is up to Apple whether they choose to allow or disallow applications as their rules shift over time

The last line in bold was a smart ass response and I took that as being “We will still move forward and we are calling you on your bluff Apple”. As that is a feeble attempt to ignite a public tech riot once the first app gets blocked. Watch how fast it starts and dies down as well.

Related Posts:

Silverlight Installation / Preloader Experience – BarnesStyle.

When I was in the Silverlight Product team, I had many visions of where I wanted to take the product beyond where some of my co-team mates were comfortable with (slow painful incremental growth in terms of change).

One of the main focal areas I wanted to fix, was the overall Installation and Preloading Experiences for Silverlight. In that, i think it’s essentially the like the IRAQ war of software (i.e. meaning, its so far embedded now that fixing it is going to take generations of change).

Here is how I’d love to see it change course.

Change the way Silverlight Boostraps.

If you new-up a project within VisualStudio or Expression Blend, you will effectively get an automated boostrapped solution, meaning inside your main Silverlight project via App.xaml.cs for example, you should see something like this:

        private void Application_Startup(object sender, StartupEventArgs e)
            this.RootVisual = new MainPage();

What effectively is happening here is that Application Class is the default root for Silverlight and when you inject “MainPage()” into the RootVisual its pretty much the same as if you went:

	UserControl MyUserControl = new UserControl();
	MyUserControl.Content = new MainPage();

What I would love to see firstly is a separate Project called “BootStrapper” created as part of the new-up Project template – that or it prompts you to create one much like it does at the moment with ASP.NET Website (More on that below)

The point is, it draws the developers around the worlds attention to the fact that the Spinning Balls are really bad idea to hand out to public facing websites.

Why are they bad you may ask?

It has to do with the way end users approach your experience and assuming they have Silverlight in place, it’s important that you give the end users some clues as to what they are loading and what is the likely time or more to the point is this going to take forever?

Impatience is a virtue all users have so its going to be very hit or miss depending on what the context of your application expected usage is and lastly the end users broadband connection and tolerance for plug-in experiences in general (I counted like 5 variables of failure that can occur per user when I did some research on this back at Microsoft).

The rotating balls don’t offer much value, there’s nothing to keep you entertained or interested in the experience other than balls rotating and some % of where I’m at.

Soliciting the end users.

Just like a hooker, your job is to entice the person before you to take faith in the hopeful reality that this will be an experience to remember (ok that analogy just took a nose dive in very bad way). Your job is to firstly convince the end user to install Silverlight should it not be in place and secondly and just as importantly your job is to convince the end user that sticking around is also equally important SHOULD they have the installation in place of Silverlight.

You first need to have inside your webpage “You don’t have Silverlight, go get it and here’s what you will get in return” vs the dreaded “Get Silverlight” medallion.

To illustrate this importance; when I was at Microsoft we noticed on Microsoft properties an increase in installation of Silverlight when we actively went out of our way to solicit end users to Install vs the default “Get Silverlight” medallion – information is power, users want power just as much as the next person, power of choice.

Once they jump through that hurdle, you need to again keep their attention on you and try and convince them to avoid the temptation of alt-tabing and twittering etc while they wait – think of all end users as a 3 year old child’s attention span and you will be better positioned for success here.

You need to create a preloading experience that is as helpful and joyful as the intended experience you’ve just spent $thousands of dollars creating (why drop the ball at the last yard! – for you NFL fans)

In this you create something that is part of the theme or take a page out of MAXIS Games where you insert random crap that’s quite funny – example:

“…Initializing launch codes for anti-nuclear attack”

”…Growing Llamas feet so it can walk…”

”…Handing a Monkey a nail gun for entertainment value..”

Keep them informed but not too informed as you want to balance out keeping them informed whilst not making them aware of “time” as that is the enemy, “time”. I’ve even lied once due to a latency hit that I couldn’t avoid, so I put in the initializing splash screen “Checking Security Credentials”  (Given I found end users were more likely to wait for a serious thing like Security to validate vs.. staring at rotating balls of stupidity).

That all aside, this is the “Why” both Preloading/Splash Screens and Install Templates are critical for SIlverlight’s future success as this in turn is what end users judge the technology on (Do i need to bring up the “Skip Intro” debacle of the early 2000’s where Flash Intros were all the rage and bad bad experiences with Flash occurred as a result).

First: Install Templates.

Imagine if you will, you new-up a Silverlight Project. You’re asked obviously what type of project you require and then in the next step it prompts you with the below:


You then choose your Install Template and it can be both an Online or Local template (more on Silverlight Marketplace potential later). Once you select the template, this then will take a vanilla themed experience and injects in into your MySilverlightProject.BooStrapper project. You as a developer and/or designer can then focus on swapping out these assets and messaging to suite your intended experience context for your brand etc (much like the larger brands have done with Silverlight today – e.g. MSNBC etc).

Second: Preloaders/Splash Screens.

Same approach as the Install Templates, except it automatically attaches the intended original Silverlight project you wanted as being the “First” to load (but with enough breadcrumbs in code that you can also swap this out should you choose to).


Once you have gone through these three templates, your solution should have 3 projects in place.

  • Project1 – MyProject.Silverlight.BootStrapper

    This project’s job is to handle the preloading of Project2, as in order to preload you first have to have a project that is very small in size for Silverlight to load, then once it’s loaded, Silverlight can then automatically bring down the .XAP file (secondary but main project) in a more controlled and aesthetically pleasing manner.

  • Project2 – MyProject.Silverlight

    This is the project you originally intended to use, exact same structure(s) as you have today in Silverlight.

  • Project3 – MyProject.Silverlight.WebThis is the project which is in place today in terms of automatically generating the said ASP.NET / HTML project code you need to test with. Except, it also injects a bunch of files/scripts which handle the “Does the end user have Silverlight?” which then based on a Boolean result reacts and produces a prompt that goes beyond the “Get Silverlight” medallion.

The Marketplace.

Ok, you can technically write a VS Template or WPF/WinForms app today do the above without having to bug Microsoft (i’ve started and stopped 3 times – stopping only due to boredom or busy). Why this needs to come from Microsoft is simply put – Marketplace.

We should have a concept where we can buy/sell Themes, Behaviors, Preloaders and Install Templates etc from one another whether it be by cash, XBOX Live Points or whatever currency you want to barter with. Point is, we should foster more of an exchange based community that is more consolidated and branded under a single point of entry for both Silverlight and Expression (say NO to Expression and Silverlight/WPF segregation– designer / developers need to cross-pollinate).

I’d love to see a similar concept as and for the Silverlight community only less fragmented and one that has a much smoother tooling integration experience (I’ll come back and work at Microsoft if need be to make this happen).


I’d like to see us as a community leap frog the Flash community in terms of handling these two experiences. As the below illustration highlights the fatigue gates associated with any plug-in experience.


Why leap frog Flash? it’s nothing to do with their community it has to do with “learning from their mistakes” as at the moment Flash folks have figured this out and have a bunch of strategies (whilst fragmented) in place to fix this broken situation. We on the other hand are like the retarded step-child twice removed when it comes to picking up on this, and it erks… (for I am ERKED) to see the rotating splash balls and Get Silverlight Medallion – which incidentally were just a placeholder animations and images that someone forgot to come back and replace.

We fix this we drive Silverlight installation experiences up by minimum 20% per month, I guarantee you that much. As it will lesson majority friction associated with Silverlight and drive a much more deeper awareness of the product amongst consumers who aren’t reading the blogsphere for “What is Silverlight?”

The “What Is Silverlight” is still a question being asked a lot today. It’s one thing to answer that, but it’s another to attach friction to and users experience of the said product once they’ve found a satisfactory answer to that question with bad preloading/installation experiences – OUTSIDE – of Silverlight today.

This is both a Microsoft and Community problem that needs immediate resolution.

Call to Action: Contact Microsoft and hammer away at this issue, get more of a community groundswell behind it so that we can all move forward. I remember inside the team, community reaction was one thing we often would use to trigger emails with one another on why change is important.

Vote here so this can be escalated to the Silverlight Feature planning team! – :

Related Posts:

How to hack Expression Blend

I’m the kind of guy who likes to tinker where i shouldn’t and tonight I just couldn’t help myself and decided to see how far I could go in terms of hijacking the UI in Expression Blend.

The reason that sparked this quest was that I wanted to write my own special custom UI Panel for Blend that reflects a Skinning framework I’ve been working on. I was more specifically focused on how to hide Category panels that are basically not required, in that “Skin X Panel” is all I wanted developers to access for my given control (which in turn has all the relevant turnkey properties that they should tweak).

I managed to do this like any “Design-Time” solution can, by basically invoking BrowsableAttribute.No in the MetaDataStore.cs (Justin Angel has a brilliant write-up here on how to setup your own at – design time Expression Blend extensibility) which was working, except I noticed PropertyGrids like “Font” and “Grid” wouldn’t hide (Given they are DependencyProperties and are hard-coded into Blend).


Given this was annoying me, I decided to see if there was maybe a way for me to hijack blend via the internal VisualTree in order to react to a control type selection and then switch Category Panels on/off depending on the type that’s being accessed.

Armed with this mission, I proceeded to get a few much needed tools for my upcoming journey.


First: Snoop.
Peter Blois was a guy I used to always enjoy having coffee with as not only is he one of the Program Managers in Expression Blend team, but he often writes very cool small tools that just basically make your life easier should you wish to run up against the grain. Peter’s written a small open source app which attaches itself to an instance of Blend that you have open and then proceeds to walk the VisualTree within your current view.

Get Snoop

Second: 2x Instances Visual Studio open.
Obviously the first one is to allow you to access your code base (duh) the second is for debugging Expression Blend, so make sure you attach the second VS instance to debug Expression Blend that you’re about to Snoop (i.e. Attach to Process tutorial here)

Third: VisualTreeWalker
Jim Baltzell-Gauthier has written a class that basically takes FrameworkElement.FindName() and injects some steroids into place. This is important as you’ll need this to hunt specific nodes within Expression Blend’s internal VisualTree.

Basic Hack.

Armed with that, the first thing you’ll want to do is create a Construct in your MetaDataStore.cs (in your Expression Blend.DesignTime project). In this you’ll need to access the following branch to get yourself started.


This is pretty much like in Silverlight at runtime, your “root” starting point, from here you’ve pretty much got access to the XAML DOM much like you would in WPF today. To prove my point, try this:

Application.Current.MainWindow.Title = "RIAGENIC.COM is My Daddy";

I can haz your snoop Blend

Now you have probably some basic skills around how you can hack Expression Blend. The next step is to really screw around in the kitchen, in that let’s break something.

Let’s for example, hide the Panel which shows you what your control’s “Name” property is (ie see below).


To do this, open up Snoop and attach it to your Expression Blend. Then type into Snoop “InfoBar” into your Tree Filter textbox (first one above the actual tree). This should narrow your selection down to the following:


Now if you move your mouse over inside Snoop over the actual “InfoBar” node, you’ll see a preview of that control (ie snapshot of it). This is the one we want to mess with.

Next, inside your MetaDataStore.cs type in the following:

Border o = VisualTreeWalker.FindName("InfoBar", Application.Current.MainWindow) as Border; 

                if (o != null) 
                    o.Visibility = Visibility.Visible;

Now, inside Expression Blend, “Rebuild the Project” and watch the Name Panel disappear.

Pretty cool huh?

The more you “Snoop” around inside the VisualTree the more you can start to see possibilities here on how you can really do some hardcore damage to the beloved Expression Blend. As with anything, with great power comes great responsibility, so do be careful and do understand that anything you touch via this route WILL NOT be supported by Microsoft (use at your own risk – if you could also potentially use this concept to inject time-bombed trial watermarks etc on developers using your 3rd party controls etc).

Where to from here?

I’m going to keep tweaking around with this, but basically I want to attach an event to the selection of a said control and then sniff the type. If the end user accesses my controls that I’ve made, I then want to do something unique and fun to provide a specific UI Panel for them to make use of.

Its, again, Unsupported but from what I’ve seen over the years this backdoor in hasn’t changed all that much as the hardest part to get to this point was creating a “Design-Time” project that worked for both WPF and Silverlight (Inside Expression Blend 4, this is fixed).

Have fun.

Related Posts:

  • No Related Posts