360|Flex is Coming in April

If you're scared that Flash is dead; I can understand the fears. Adobe has been stomping us into the ground as if were the ashes of a freshly smoke cigarette.

I expect 2012 will be a year of transition for Flash Platform Developers. It may be because we have bitterness towards Adobe, or that we want to "follow the jobs", or just because we love learning new stuff. We'll spend a lot of time learning new technologies, such as Objective C, Java, and HTML5.

Learning all that new stuff will make us smarter, and better, developers all around. The 360|Flex schedule is full of sessions on these alternate technologies. If you're a Flex Developer and are looking for your next steps, this is a great conference to go to.

I'll be speaking on building games with Flex, and explaining why that is probably a bad idea. There will be tons of good info you can take with you back to Enterprise apps, especially in the mobile space.

I think there is a good chance that I'll be paying the bills by Flexing long beyond 2012; but that won't stop me from learning new stuff. Swing by 360|Flex in Denver this April 15th-18th and say Hi to me.

In Defense of Flash

This is a modified version of a letter I wrote to a client to defend the choice of using Flash. This issue has come up due to some recent PR heat that Adobe is abandoning Flash. I believe that Flash and Flex were the right choice for building Enterprise applications a year ago. I believe that Flash and Flex are the right choice for building Enterprise applications today. As HTML5 tooling, frameworks, and related resources improve I will reevaluate my needs and the needs of my clients on a routine basis. I had to remove some client specific information, but the bulk of the information remains the same.

Here is the letter:

Per our recent discussion, regarding Flash and Flex, I wanted to clarify a few things to in writing. In the recent weeks, many media outlets have reported that Adobe is abandoning The Flash Platform in favor or HTML5 solutions. This represents an incomplete understanding of the facts, and I hope to clarify that here. Such a statement would be like saying Amazon.com is going to abandon selling real world goods because they released the Kindle Fire.

What is the Adobe Flash Platform?

First, for completeness, I want to clarify what Adobe's Flash Platform is. The Flash Platform consists of multiple deployment runtimes, development tools, and frameworks that are integrated across the full Adobe Creative Suite. Here is a list of some Flash Platform elements:

  1. The Flash Player: Flash Player is a browser plug-in which allows us to deploy web based applications to Windows, Mac, Linux, Android, and Blackberry.
  2. Adobe AIR: Adobe AIR is a runtime that allows us to deploy native applications to Windows, Mac, Android, iOS, and Blackberry.
  3. Flash Professional: Flash Professional is a tool for developing timeline based animations.
  4. Flash Builder: Flash Builder is an IDE to help programmer's write advanced code.
  5. Adobe Flex: Flex is the Software Development Kit that helps programmers build, debug, and deploy Enterprise applications with the Flash Platform. Flex includes a UI Component library, a SWF compiler, a command line debugger, an application profiler.

There are more aspects of the Flash Platform ecosystem, but I highlight these because they come from Adobe and are prominently used by Flash Platform developers.

We have built our applications using Adobe Flex to target the Flash Player desktop runtimes. One part of this decision is the breadth of the tooling available to us decreases the time it takes us to deliver a finished application. The ease of styling the default Flex Components also provides the applications with some cross platform elegance. They will work without change on the Windows and Mac machines used by your employees.

Is Flash Really Dead?

I want to quantify some of the press announcements over the course of the past week. The first one is that Adobe will no longer, personally, develop the Flash Player for Mobile Devices. This means that Adobe will not produce version of the Flash Player for Android, or Blackberry devices. To quote:

"We will no longer continue to develop Flash Player in the browser to work with new mobile device configurations (chipset, browser, OS version, etc.) following the upcoming release of Flash Player 11.1 for Android and BlackBerry PlayBook"

Source

If you look at my list of Flash Platform elements above, it is clear this affects a very small subset of the Flash Platform; and not one we have targeted in our development. Through Adobe's Open Screen Project, licensees are able to continue their own development of the mobile Flash Plugin. RIM has already stated they will do this for Blackberry devices. To quote:

"As an Adobe source code licensee, we will continue to work on and release our own implementations. RIM remains committed to delivering an uncompromised Web browsing experience to our customers, including native support for Adobe Flash Player"

Source

Moving forward, Adobe will focus on development of Flash Player 12 for desktops, and focus on using Flash Platform technologies to deploy Native Apps to mobile devices:

"Our future work with Flash on mobile devices will be focused on enabling Flash developers to package native apps with Adobe AIR for all the major app stores."

"We are already working on Flash Player 12 and a new round of exciting features"

Source

According to the Adobe Max 2011 keynote, the Adobe touch apps, including Photoshop touch, were built using the Flash Platform. This is the surest sign of Adobe's commitment to the Flash platform.

"You've already seen some incredible examples of applications built in Flash. What do you guys think of the touch apps that Kevin showed you yesterday? So, they were useful and usable, they had rich UI, performed really well, very engaging interfaces. What you weren't told is that almost all of those applications were actually built in Flash!"

Source ~14 minutes, 20 seconds

Flash Platform technologies are continuing to evolve and provide a strong value proposition for our current use.

What does this mean for Flex?

A big part of the work we have done together has been based on the Flex SDK, and I wanted to highlight some changes about the future of Flex. The model with which Flex is developed will change. First, Adobe is working on making Flex part of the Apache Foundation:

"Adobe is in the process of preparing two proposals for incubating Flex SDK and BlazeDS at the Apache Software Foundation."

Source

The Apache Foundation is one of the leading Open Source Foundations and the project will be managed by Adobe and some high profile Flex Community members from the Spoon.as project, an effort from the Flex development community to help improve the Flex Framework.

Continued development will take place under the open source foundation, however Adobe still plans to implement the road map they discussed at Adobe Max. This will include new components that make building applications easier, and an improved compiler that will make development easier.

Additionally, Adobe is committing to future Flash Builder improvements, with support for the future releases of the Flex SDK:

"Future versions of Adobe Flash Builder will continue to provide code editing, compilation, debugging and profiling support for Flex applications. Adobe will undertake the required work to ensure Flash Builder is compatible with future releases of Flex SDK."

Source

The future of Flex is strong.

HTML5, ColdFusion, and Silverlight

Much of the recent press talks about how Adobe is abandoning Flash in favor of HTML5 development. I believe the information above is clarification that Adobe is not abandoning Flash. However, it is undeniable that they are investing heavily in HTML5 development tools. The primary reason for this focus is mobile device support. All major mobile web browsers-Android, iOS, and Blackberry--use the same rendering engine, Webkit, therefore providing a consistent experience across mobile devices.

Adobe is undertaking some work to help bridge the gap from The Flash Platform tools to HTML5 and JavaScript. The next version of Adobe Flash Professional will have an export to HTML5 feature:

"Wallaby is the codename for an experimental technology that converts the artwork and animation contained in Adobe(r) Flash(r) Professional (FLA) files into HTML."

Source

The Flex team has an experimental Flex to HTML/JavaScript compiler that will be given to the Apache Foundation as part of the Flex code base:

"Will Adobe provide migration tools to enable existing Flex applications to be converted to HTML/JavaScript? We have undertaken some experimental work in this area, but remain unsure as to the viability of fully translating Flex-based content to HTML."

Source

HTML5 is something to watch carefully over the next 3-5 years, but it is not yet ready for Enterprise applications.

Another Adobe technology used in our projects is ColdFusion. ColdFusion is alive and well, and not affected by any of the recent announcements:

"There is no change in plan for next version of ColdFusion codenamed Zeus and we continue to go aggressively trying to make Zeus a kick ass release."

Source

"We're still here--same leadership, engineers, and sales team as before last week--and we're still selling ColdFusion 9 and working hard on the next version of ColdFusion, codenamed ColdFusion Zeus."

Source

With ColdFusion, we have nothing to worry about.

We had discussed Silverlight as a possibility, so I wanted to make you aware that many of the same issues which Flash Player experiences on Mobile devices will also be issues for Silverlight. In Windows 8, Metro style browsing will not support plugins:

"The Metro style browser in Windows 8 is as HTML5-only as possible, and plug-in free."

Source

This means that the Windows 8 Metro UI will not support Flash or Silverlight. Traditional desktop browsing will still support both, but many believe that the metro interface will be the Microsoft interface for Tablets and other mobile devices. Additionally, rumors are that Silverlight 5 will be the last release of the player:

"Several of my customer and partner contacts have told me they have heard from their own Microsoft sources over the past couple of weeks that Silverlight 5 is the last version of Silverlight that Microsoft will release."

Source

Converting existing projects to Silverlight would not solve any issues for us at this time, and may introduce other issues later.

Final Thoughts

Right now, today, I still believe that Flex is the right choice for the development we are doing together. We should continue to evaluate the state of alternate technologies on a routine basis to verify our choices. But, today I leave you with this quote

"..the performance, framework maturity and robust tooling provided by Adobe are cited as critical factors by enterprise customers as to why they continue to select Flex."

Source

Sincerely,

Jeffry Houser
DotComIt, Owner

Seven Reasons to be a Happy Flash Developer

There have been a lot of emotion in the Flex and Flash community over the past few days; regarding certain decisions that Adobe has made about Flex and Flash and their utter failure to communicate with us, the developer community. The news, and responses, have been overwhelming negative.

I grew up an eternal optimist. While I see a lot of challenge ahead, I also see a lot of opportunity.

Here are seven reasons I'm happy to be a Flash Developer today.

  1. Adobe is focusing their Flash related efforts to allow us to easily build cross platform native applications. Let's face it; on mobile devices native apps are lot cooler than browser based apps.

    "Our future work with Flash on mobile devices will be focused on enabling Flash developers to package native apps with Adobe AIR for all the major app stores."

    Source

  2. Flex being released to 3rd party open source foundation, most likely the Apache Foundation. This is kind of like the Spoon project with a +10 power up.

    "We are preparing two proposals for incubating Flex SDK and BlazeDS at the Apache Software Foundation."

    Source

    Some of the smartest community members in the Flex Community involved. As a corollary I've heard some talk of decoupling Flex from the Flash / AIR runtimes so it can cross compile to alternate technologies such as HTML and JavaScript. Apparently Adobe even has a prototype on this which will be included as part of the open source code.

  3. A lot of Adobe's Flex Roadmap discussed at Max will be implemented to completion, including the new Falcon Compiler, and some new spark components. Additionaly, Adobe will continue with Flash Builder, which is Adobe's best ActionScript editor.
  4. The next version of Flash Player will be developed on Desktops; and that is all many Enterprise Applications Need anyway.

    "We are already working on Flash Player 12 and a new round of exciting features which we expect to again advance what is possible"

    source

  5. Adobe wants to use the Flash player to continue to extend the web. Many of their innovations will be used a test bed to bring things back to formal HTML standards bodies. PixelBender turning into CSS Shaders and the poster child of this approach.

    "We will continue to leverage our experience with Flash to accelerate our work with the W3C and WebKit to bring similar capabilities to HTML5 as quickly as possible"

    Source

    This approach is good for web standards; and good for all developers. We could easily argue this is what early browser makers did, and continue to do to move forward HTML.

  6. Many of the skills we have developed using Flash Platform tools will be easily applicable to the next generation of HTML5 related tools. That can give us a head start in the job market. Adobe is going to be adding HTML5 support for many of the tools we already know, such as the Flash Professional export to HTML feature.
  7. And If all else fails, HTML approaches to cross browser development will take 2-8x longer depending on the tasks at hand. You can laugh all the way to the bank.

I don't know how this will all play out. I don't know what the future holds for me, The Flex Show, or Flextras. But, I'm cautiously optimistic about what the future holds.

Why can't I access Flex Mobile Skins in my Flex Library Project?

I try to minimize cross posting between my blogs as much as possible; but this one is a cross post. Flex Library projects cannot access mobile skins by default

If you think this is 'broken' you should go vote for the bug report so that Adobe will fix it in a future release.

You can read my full write up over on the Flextras Blog.

Get a Flex 4 Autocomplete Component from Flextras

I'm not sure if you have all caught this yet, but Flextras, my Flex Component company, is offering a free Flex AutoComplete component built entirely in the Spark architecture. Read all the details on the Flextras Blog.

What advice can you give developers who would like to start selling components?

I got "found" via twitter late last year by Adam Tel, an author for Smashing Magazine. He was writing an article and wanted to talk to component developers and was writing an article about such things. I answered a few questions for him over e-mail and this is a transcript of my answers. I'm not sure if I'll make it into an article. At the time I'm writing this post, I cannot find such an article on the site. This is a transcript of our conversation.

Hi guys, Thanks for agreeing to participate in this article, which would be published on SmashingMagazine.com. I have a few questions, feel free to skip the ones you don't feel like answering. Please note that these answers would be quoted in the article, and probably published, so if there's info you don't want to share, feel free to omit it. So here we go:

1. Can you please describe shortly what kind of components you develop, and who uses them? Assume some of the people reading do not know anything about Flex.

At Flextras, I build User Interface Flex Components. Flex is part of Adobe Flash Platform and is used for creating Rich Internet Applications, on the web, on your desktop, and on your devices. I provide developer's with user interface widgets, such as a Calendar, that they can use as a starting point to more complex application. Our goal is to provide developers with a Flexible, extensible code base that they can easily adapt to their needs.

[Future Jeffry Note: I probably should have said that our main selling point is that we save developer's time when compared to writing similar components on their own].

2. Are you currently making a living from selling these components? Or is it just a side gig?

The long term intent is to grow Flextras into a five person company, generating about $600K in sales. We are not there yet. Flextras is about to enter it's third year in business. During our first year, the company had a financial loss. This year, we will turn a profit, however not enough for me to take a salary.

I make up the "balance" of my income by doing some private training, and small custom development projects, primarily for small businesses.

3. What are your goals for the next year?

Our biggest goal is to stay in business for another year. We haven't figured out how to make the business work yet. We expect to add at least one, if not two, more products to our component set. We also plan to introduce some behind the scenes changes so we can start selling premium support plans and subscription style offerings.

[Future Jeffry Note: I often use 'we' a lot when referring to the company, because I consider as eparate entity than myself. But I am the only employee]

4. What advice can you give developers who would like to start selling components, or code-related products (as opposed to just providing coding services) Your answers could be as short or as long as you wish - the more information the better, I just don't want to be a bother:)

I can offer a lot of advice for developers.

First, they need to realize that it takes more than good programming to make a business work. You'll need to learn about marketing, and cash flow, and customer support, and project management, and taxes, and dealing with the competition. How are you going to make money? Who are your customers? What need are you solving for them? Do you know what you're really selling? It is probably not components. Flextras is selling time. Instead of taking 3-6 months to build something, they buy it from us for a day's wage. The savings to them can be significant. But, only If we can communicate the value of our offering.

Second, you need to be aware of the market you're in. We live in an age where digital bits are infinitely replicated and easily distributable at nominal cost. It has happened for the music industry, and it is happening for the movie industry. Software won't be far behind. A lot of business models focus on using Digital Rights Management to make an infinite good scarce. That is why you can't watch Hulu on Google TV, for example. That is why I can't install Photoshop on both my laptops.

DRM is an annoyance to customers and does not stop the pirates from getting at your content. Think twice before you go down that route. Instead of trying to limit your customers, what can you do to use these promotion mechanisms to promote your business? A good business will focus on selling scarce goods, not easily replicated. Many software companies make their money by selling support contracts and giving away their software for free. I call that the scarce good of "access". Another scarce good that I think will be of interest to software folks is the ability to create more. Perhaps people will pay for future updates, or new product. The cloud business model is to sell access to a server somewhere that resides your data. It is something that is not as easily replicated as a boxed software product.

Finally, I'd say be sure to ignore the experts of your field, including me. They'll often tell you your idea sucks or can't be done. The biggest changes are made by the people who didn't know enough to know better. I'm never comfortable moving forward with an idea until someone tells me it's bad; because then I know I've gotten at least one honest opinion about my idea.

[Future Jeffry Note: I'm posting this in late December, with a release date of February. I just wanted to get it out of my "list of things to do" and I thought it might be interesting to some]

Learning RobotLegs Part 2: Model and Dependency Injection

This is the second in my series on my adventures learning about the robotlegs framework. In my first post I spoke about Article 2 focuses on the model, and that is what I will talk about in this article.

What is a Model?

If you've been around in the development world for a while, you've probably heard the term model. It is even part of the name of one of the most pervasive design patterns, Model View Controller, or MVC for short. A model usually contains data storage, often in a database level, and classes to load, and store, that data into memory. Your data is often stored in memory as 'dumb' objects, called Value Objects in the Cairngorm world and Data Transfer Objects in many other situations.

Often a Model is more than just a collection of dumb data containers, though. It will include objects that contain business logic and other application specific knowledge. One example may be a Shopping Cart object which probably contains a lot of data which is not analogous to a single database table. It also probably contains business logic such as the total price of all items in the cart.

In Cairngorm, there was a ModelLocator which would contain model objects. It was often a big data storage object. In the Cairngorm projects I worked n, the move was to have a single ModelLocator with all your global data in it. RobotLegs has directed me to a different approach.

Build out Multiple Models

In my RobotLegs development, I have been building multiple, focused, models. For the most part each model class I create is just a way to store data in memory for use in multiple places. In the current application I'm building, I have a model for search criteria, which stores the criteria a user entered into the search form. Based on that data, I may call any one of four different remote procedures to retrieve search results.

I also have a model for user authentication information. There is a model that contains Controlled Vocabulary dataProviders for ComboBoxes and Lists used across multiple forms. I like this approach because I'd rather have a lot of independent focused, objects instead of one big object with lots of unrelated data.

A sample Model may look like this


package com.flextras.model
{
import com.flextras.vo.UserVO;
import org.robotlegs.mvcs.Actor;
    
public class UserModel extends Actor
{
public function UserModel()
{
super();
}
        
public var user : UserVO;
}
}

The model class is just a class like any other ActionScript class you're used to creating. Model extends the Actor class, which is a helper class included as part of the Robotlegs framework. Actor includes code for implementing the dispatch method. The dispatch method can be viewed as a parallel to Flex's dispatchEvent method. Where dispatchEvent uses the internal Flash Player mechanism to dispatch events to a component's parent, the Robotlegs dispatch method will dispatch events to the model's context. Mediators, as discussed in part one of this series, can listen to context events. This is a unique way to tell the rest of your application that something important happened. I'll expand more on context events in a later entry to this series.

Dependency Inject that Model!

Now that you've created the model class, what can you do with it? You'll want to add it into your mediators using Dependency Injection. Dependency injection is a design pattern that means the system will create objects for you automatically, and set them as instance variables on the objects that need them. To use Dependency injection with Robotlegs I've been following these steps:

  1. In your context, define the type of injection that occurs.
  2. In the mediator, define the variable with the inject metatag.

These are two simple steps, but they can be very powerful. First, in your context, you want to set up your object to be used for injection purposes. The context includes a variable called injector and injector has many methods for injecting the class. To inject the UserModel as a singleton, do this:


injector.mapSingleton(UserModel);

There are other forms of mapping, but I have stuck to mapSingleton for this project. The value of the map method is a class name. We do not create an instance of the class. The injector deals with that. In your mediator, you use the inject metadata to get your singleton instance into the mediator. Put the metadata before the variable that will represent your UserModel instance:


[Inject]
public var user : UserModel;        

The rest of the magic occurs automagically. At runtime, the injector knows to create a single instance of UserModel class. It knows to set the user property of our mediators to that single instance.

It is worth noting that Robotlegs uses swiftSuspenders under the hood for dependency injection. I have not spent any time exploring it in depth yet.

Once the model is in the mediator, what do you do with it? It depends on the type of data and how you want to do it. I have used models to pass search criteria into a service and I've used them to pass data into a view for display. I've also updated model data from the mediator.

A Review

So, let's see what is going on in a Robotlegs process:

  1. A component loads, and initializes the context.
  2. The context runs the startup procedure.
  3. The startup procedure prepares classes for dependency injection and maps mediators to views.
  4. After a display component is created, and added to the stage, Robotlegs creates it's mediator.
  5. RobotLegs injects all appropriate objects into the view's mediator
  6. The mediator's onRegister method executes.

How we make use of injection, models, and mediators will depend on what you want to accomplish with your application.

What Next

I'm planning at least three more entries into this series. The next one will cover using Services with Robotlegs. Services are how your Flex application gets data from your backend.

Jeffry Houser is the Stack Overflow Devil

I answer a lot of questions on Stack Overflow in the Flex Category. I signed in tonight to see this, as my latest score:

I am amused. BTW, at the time of this writing I only need 54 upvotes to become number one in the all time Flex question answerer chart.

Jeffry Houser's 360|Flex DC Schedule

if you happen to be at 360|Flex, then this is where you can find me. I do plan to spend a lot of time at my booth playing with marshmallow guns. But, for the rest of the time, these are the sessions I plan to attend:

Sunday Hands On

In the morning I'll be in the AIR for Android session. In the afternoon, I'll probably "relax" and take some breather time.

Monday

I'll open the day at the keynote. Then, it's off to Jesse Warden's session on "How to Launch a Small Software Project." Jesse and I had very different experiences not being an employee of a corporation, and it's always great to learn from his experience and trade stories with him.

Then, I'll be giving my introductory Flex Component presentation, Flex Components for the Real World. If you want an introduction to components and how to use them in your application, then this is for you.

The last session of the day I'll be hanging at the Flextras booth, but I'll probably join Ben Stucki's general session about the art of computer science. I'm not sure what to expect there.

I think the Flexapalooza party swings in that evening and I'm supposed to be MCing and interviewing folks live between sets.

Tuesday

The day starts out with a general session on Mobile UX, so I'll probably be there and at the Flextras booth.

Then I'll be speaking about using Flex with iCalendar data. This is the most code heavy presentation I've ever created. The slide deck is only 10 slides (compared to my usual 50).

If it were up to me, I'd go to The invaluable Freelance Flasher presentation running opposite of mine, but unless you have a cloning option I can only be at one place at a time. The rest of the day I'll be focused on the Flextras booth and talking to folks.

Wednesday

Wednesday opens with an general session. I usually call this the "community keynote" because John (and in past year's Tom) get up to talk about the company, the conference, and people who helped stuff). They also have community members get up and demo projects and other stuff out there. Although, based on the scheudle they may have moved the "community member" stuff into the general lunch session.

Space permitting, I'll probably stop by Michael Labriola's preso on Flex 4 components. Michael is a dynamic speaker and often seems to know everything.

Then I'll stick around for David Ortinau's "How to Scale Your Freelance Biz and Maximize Your Profit." What can I say, I love the businessy stuff.

I'll probably spend the rest of the day at the Flextras booth, taking stuff down and depositing the remainder of the marshmallows in creative ways and taking down.

Tickets are still available, but at this point it is your last chance to get here.

Flextras Sends Unemployed Developers to 360|Flex

I believe that 360|Flex is the best Flex conference out there; so in conjunction with the organizers, we are working together to send some unemployed folks to 360|Flex in DC. This is a great way for you to get your feet wet on one of the hottest technologies out there.

You can read my high praises of 360|Flex over at on the Flextras blog or jump right to the promotion on the 360|Flex Blog.

If you're not unemployed, but you're a member of the Flex Community or want to learn, I strongly recommend you make it out to the conference. Give me some kudos by registering with this link.

More Entries

All Content Copyright 2005, 2006, 2007, 2008, 2009 Jeffry Houser. May not be reused without permission
BlogCFC was created by Raymond Camden. This blog is running version 5.9.2.002.