Thursday, April 29, 2010

I finally understand Steve Job's argument against Flash

Yes. That's right, I finally understand Steve Job's argument... and it is more asinine than I thought. You may have seen that he posted an open letter on the Apple website clearly spelling out his argument. While there are some things I can't disagree with such as stability and security on Macs (since I don't work on a Mac that much), there are a few statements that really clear it up for me.

What I mean by that is the fact that Steve Jobs is so removed from the lowly task of developing software that he cannot comprehend what it would take to create an equivalent application in HTML5, CSS and Javascript. To quote Steve Jobs:
If developers need to rewrite their Flash websites, why not use modern technologies like HTML5, CSS and JavaScript?
There really are no words to describe how much this trivializes what Flash developers do.

You might as well say:
Why take a plane from New York to LA when you can ride a bike?"

The two technologies have widely varying capabilities and weaknesses. Why not use HTML5, CSS and JavaScript? Because they aren't good enough yet. They just aren't. I know Steve wants them to be and maybe someday they will but right now you just can't do the same thing. Even if some websites, applications, and games could be done it HTML5, it isn't necessarily cost effective for me to change everything to support one platform.

And do we really need to hear how Apple defines Open again:
Adobe’s Flash products are 100% proprietary. They are only available from Adobe, and Adobe has sole authority as to their future enhancement, pricing, etc. While Adobe’s Flash products are widely available, this does not mean they are open, since they are controlled entirely by Adobe and available only from Adobe. By almost any definition, Flash is a closed system.
Now I don't know about you but this statement is just as true as Jobs's
Apple iDevice products are 100% proprietary. They are only available from Apple, and Apple has sole authority as to their future enhancement, pricing, etc. While Apple's products are widely available, this does not mean they are open, since they are controlled entirely by Apple and available only from Apple. By almost any definition, Apple's iDevice is a closed system.
And when you think about it, the Flash Player is free, Adobe's Flex SDK is open source and the Flex Compiler is free, the Flash Player format spec is freely available. It doesn't cost anything additional for a developer to start creating apps for the Flash Platform. Just a browser, the free items above and some initiative and off you go. Plus, I can't remember the last time Adobe stepped in an disallowed any Flash application from being sold (or given away for free)

In contrast, you need to buy a Mac from Apple to build iDevice apps, you need to pay for the privledge of becoming an iDevice developer (which doesn't guarantee they will let you actually distribute anything you create). You then have to submit your creation to Apple's approval process (whose guidelines vary widely depending on some unknown criteria). At any time Apple can choose to prevent your creation from being distributed even if it approved it previously.

Now seriously, does Apple really think they are more "Open" than Adobe?

Apparently Jobs also doesn't understand the meaning of the word full. So here is the definition for anyone else who doesn't know:
  • containing as much or as many as is possible or normal
  • entire: constituting the full quantity or extent; complete;
  • complete in extent or degree and in every particular
More...

When a person goes to a website and the whole thing or any significant part of it cannot be seen, then they are by definition not seeing the "full" website. It doesn't matter that YouTube videos can be seen if the ones I want can't be seen. If many of the sites I visit use Flash, and many do, then I am not seeing the "full" web. If I play a lot of games online that are Flash, then I am again not seeing the "full" web.

I do agree that Flash was created in the PC era. However, Objective-C was too. And who cares? Flash is pushing beyond PCs too. Targeting TVs, mobile devices, and anything else with a screen is just as likely with the Flash Platform.

Having Flash on mutliple types of devices does not mean that Adobe (or their developer base) wants to take a single application and run it on every device. What we do want is to be able to leverage some code, logic and assets in order to quickly build contextual apps without driving costs up by recoding everything in a different technology.

So yes... I understand what he is saying. To paraphrase: "I am so important that it doesn't matter that I am so out of touch with reality... people will follow me! And by the way... I want to control everything"


Wednesday, April 28, 2010

Building Flex 4 AIR application with flex-mojos (Maven)

After spending a number of hours trying to get my Flex 4 AIR application to successfully build with the maven flex-mojos plugin, I was finally able to create a pom.xml file that worked. There are a few gotchas to deal with which are detailed below. First of all here is the working pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://
www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://
maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mcgraphix.xd</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<name>my-app Flex</name>
<properties>
<flex.framework.version>4.0.0.14159</flex.framework.version>
<sourceDir>src/main/flex</sourceDir>
</properties>
<packaging>swf</packaging>
<build>
<sourceDirectory>src/main/flex</sourceDirectory>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>3.7-SNAPSHOT</version>
<extensions>true</extensions>
<dependencies>
<dependency>
<groupId>com.adobe.flex</groupId>
<artifactId>compiler</artifactId>
<version>${flex.framework.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.adobe.flex.compiler</groupId>
<artifactId>adt</artifactId>
<version>${flex.framework.version}</version>
</dependency>
</dependencies>
<configuration>
<sourceFile>AirTest.mxml</sourceFile>
<flexbuilderCompatibility>true</flexbuilderCompatibility>
<descriptorTemplate>${basedir}/src/main/flex/AirTest-app.xml</descriptorTemplate>
<keystore>${basedir}/cert.p12</keystore>
<storepass>secret</storepass>
<includeFileSets>
<fileSet>
<directory>src/main/resources/embedded</directory>
<includes>
<include>*.*</include>
</includes>
</fileSet>
</includeFileSets>
</configuration>
<executions>
<execution>
<goals>
<goal>sign-air</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>air-framework</artifactId>
<version>${flex.framework.version}</version>
<type>pom</type>
</dependency>
</dependencies>
</project>


Also notice that includeFiles and includeFileSets configuration parameters are both set. Although the documentation says they are not required, leaving them out causes an exception to be thrown from the sign-air goal. This has been fixed in the latest snapshot.

Also note that it seems to only be possible to include files that are located within the src/main/resources directory.

Also, one other thing to note is that the flex-mojos plugin uses the application descriptor xml file as configured in the descriptorTemplate node. However, there is one change that I had to make in order for the plugin to work. Normally, FlashBuilder updates the descriptor template to specify the name of the SWF in the <content/> node:

<content>[This value will be overwritten by Flex Builder in the output
app.xml]</content>

In order for the sign-air goal to work, I had to manually update that node with the correct value. In my case it needed to be:

<content>my-app-1.0-SNAPSHOT.swf</content>
This change breaks FlashBuilder but there are two solutions. One would be to just make a duplicate version of the descriptor that you use with flex-mojos and one with FlashBuilder. However, you would need to manually keep them up to date if you change the version number. The other option would be to dynamically make a copy and then update that node as needed. This would theoretically allow you to automatically sync the version number with the version specified in the pom. I haven't figured this part out yet, but I will update this post with my progress. This has been fixed. You can specify the flexBuilderCompatibility parameter to let the plugin manage this automatically


<flexBuilderCompatibility>true</flexBuilderCompatibility>

UPDATE: You can also use the special ${output} token in the application descriptor as the value of the content tag which will allow the plugin to set the name of the swf into the descriptor automatically. With this approach, you don't need to set the flexCompatibility paremeter. However, that still breaks Flash Builder's Export Release Build function.

The last step if desired is to let the plugin manage the version number in the application descriptor. This can be done by setting the version node with ${version}.

<version>${version}</version>

This doesn't break Flash Builder, however if you use the Export Release Build the version number will be "${version}".

I will bundle everything up and post here shortly.


Also, I have posted some of my findings to the Flex-mojos Google Group.

Friday, April 9, 2010

Lets not forget that the iPhone can have buggy apps when built natively too

There seems to be a trend with the people backing Apple in their decision to prevent Flash from being compiled to the iPhone. Many developers have been saying that that capability will cause a whole wave of poorly designed/developed applications from get submitted which would be a huge burden on the App Store review process.

Am I the only person who has my iPhone lockup or crash when using native apps?


I doubt it. Bad developers are bad developers regardless of what language they use. The fact that a bunch of new app submissions is going to bog down the review process speaks more about the review process than the apps. What if for a whole new generation of Objective-C developers comes out of the woodwork? Wouldn't that slow down the review process too? Wouldn't you get just as many poorly written applications? The fact of the matter is that the whole concept of a review process is ridiculous. If Apple wants to maintain quality, then have the review process be optional. Then let the consumer choose whether they want to download apps that don't have the Apple approval.

There are probably a hundred different compromises that could be made that would benefit both developers and consumers while at the same time protected the Apple brand experience. The real problem is Apple's lack of willingness to compromise.



Apple pours salt on Adobe's wound...


In a further attempt to crush Adobe, Steve Jobs has announced that starting Monday (coincidentally the same day as the Adobe CS5 launch event) you will no longer be able to dial the number 5 from your iPhone. Steve Jobs states that the number 5 is buggy and has lead to 92% of all iPhone crashes.

This couldn't be true right? Of course not... but it is only slightly more ridiculous than his decision to prevent the use of the Flash iPhone packager. There are a lot of developers out hear that didn't want to have to take sides in the Adobe/Apple war... but we are taking a lot of shrapnel from Apple's F-You grenades.

I for one will be focusing on AIR development for every other phone and if I have to learn Silverlight to support Windows Phone 7, then I will.

This certainly doesn't make me want to go spend $3000 on a Mac, then pay for the privilege of becoming an "iPhone" developer, then spend a ridiculous amount of time learning a language that's only other use is for supporting a single minority (talking Mac vs. Windows here) platform, then spend tons of time building the next great mobile application which will need to ported to Flash anyway to support all the other phones, only to have it take forever to be reviewed by the App Store nazis and finally get rejected because Steve Jobs doesn't like the color Red (or some other undisclosed reason).

Ok... I'm done ranting for today. Now I will go back to checking out the HP Slate

Wednesday, April 7, 2010

First problem with Flash Builder 4

I have been using the Flash Builder 4 beta for quite a while now and decided I would try out the trial version while I wait for my request for a license to go through my company. At the same time I got a shiny new Win 7 machine. So one of the first things I had to do was install FB4 and the ClearCase plugin from IBM. What I noticed was that it installed fine (I can use the check in/out from the right click menu), but when I went to Customize Perspective so I can make it show up in the top level menu... I couldn't because once the Customize Perspective window is open, the OK button doesn't do anything.

This is probably not a top priority problem but it is annoying.

To top it off, I went looking in the Adobe Forums to see if anyone else has the problem and I can't even find a Flash Builder 4 forum at all. There is one for the beta but I don't think this belongs there. And it isn't a Flex problem so it doesn't belong there either.