Flash Community: “Keep Calm & Carry On”

Since I can’t seem to help myself, I’m going to continue being an un-official community manager and provide a little more of my view of what is going on for people to consider over the weekend.

This week has been a struggle to say the least, but I know that tomorrow I need to go into my classroom and in front of all of my students give them answers that will make sense to them for their education and careers. This same information is relevant to anyone who has clients or customers that rely on us to make sound technology decisions to help them have successful businesses.

First, adopting Flash and AIR as a platform to build content is still a sound and strong platform for customers and to teach our students. This week though, the types of projects that you build with the platform has changed significantly from what we have been used to for the last several years. With this, where to take our customers and students now has multiple paths.

As I mentioned before, Flash in the desktop browser isn’t going anywhere. In fact, it is going to only get better when Stage3D ecosystem frameworks become more popular and available to the community. Projects like Starling are a perfect example of how Flash is a great platform for desktop browser gaming.

Next, AIR is an amazing platform to create custom experiences for the desktop, Android, iOS and Blackberry, and soon when Stage3D support comes to AIR, we will have a kick-ass gaming platform for mobile that uses our existing ActionScript skills to create great apps that can be monetized through app store and in-app purchases. With Adobe’s Creative Cloud Touch apps built using Adobe AIR, it is a safe bet that Adobe is investing in this technology for the long haul.

The Flex team at Adobe announced today that they are moving to an open development model, merging with the Spoon project and contributing the project to an open source foundation. The contributors at Adobe and Spoon will continue to collaborate to develop the technology. In a group chat tonight, a number of the Spoon project board members joined in and talked about some of the specifics of how Spoon got involved with Flex. They are a great group of dedicated community professionals, smart engineers, and otherwise awesome people who understand the world of enterprise, browser and mobile development and have been part of the Flex community for several years. One thing that was mentioned was the desire and need to have the Flex framework target more than just Flash. As someone else said—it is drawing bits on the screen, and with work, it could be adapted for other runtimes or ecosystems.

This type of outlook with Spoon and Flex is something of a shock to a lot of us in the Flash community. But now there are other technology options for the community, and from the messages of Adobe there is an underlying message that has been pretty consistent: that HTML5 will become the dominant platform for expressivity, and Flash and AIR are focusing on gaming and mobile applications.

When I face my students, that is exactly what I’m going to tell them and that they should burn this week’s news into their heads, because it is a perfect example of how technology changes affect a community at a dramatic level. What is happening right now—right in front of us, is historic. The unfolding of a technological change of this magnitude does not happen often. But at the same time it teaches us something, and it is this type of change that keeps us in this industry—because our skills and expertise are what allow our customers, clients and students to be successful and navigate the waters of technology and software.

As I said tonight in the chat, the Flash community has taking a beating this week—and they deserve some time to rant, yell, kick and scream to get it out of their systems. But we are also an amazing community that evolves and changes as the need arises.

This week, we have a new need for evolution and change, and it is within our opportunity and responsibility to do the most with it.

Thoughts on Stuff and Things + Adobe

So it has been quite a week…but I wanted to pass along my thoughts to everyone in the community around the news from Adobe.

First off, I want to thank everyone for all of their messages, e-mails, texts and thoughts on my behalf. Leaving a company you love is always hard, being laid off from a company you love is even harder. I was very shocked on Tuesday when I heard the news about my fate, but you have all helped me get through the week and I am very excited about my future and the opportunities that lie ahead. Layoffs suck, but they aren’t personal—they are business, and while you and I may not agree with the decision, it was made for business reasons, and I’m not angry with Adobe or any of my former co-workers and peers.

Whenever you get laid off, there is always a mixture of emotions. Happiness, relief, grief, anger and fear. That is hard enough, but when you combine that with Adobe’s news on Wednesday, the way it was communicated, and the community reaction, the emotions were exponentially magnified. Now, that being said, while I want to just sit on the sidelines (or my couch) and tune it all out, I can’t—because of my love for this technology and the community that I have tried to support for many years.

I also find myself in this weird middle ground. I am no longer officially working as a community manager or product manager at Adobe; but there are NDA restrictions that prevent me from sharing the how and why of the week’s news. While I might not have my Adobe badge anymore, that in my eyes does not take away any of my responsibility as a leader in the community and speak on your behalf to the stakeholders that are at Adobe. Which brings me to an important point—the product managers, evangelists, community managers, and developer relations team members found out the news and the way it was communicated at almost the same exact time you did. They are wrestling with the news and your reaction in real time—so please be supportive of them as they dig through everything. They really really have your back and are working hard to bring your reactions and feedback to the people that need to hear it.

So, on to the news itself:

First, let’s look at the facts of yesterday’s announcement. The announcement stated that Flash Player for mobile browsers was no longer going to be developed internally, and the technology and product teams at Adobe are focusing on Adobe AIR applications for application development, and continued investment in the desktop browser plug-in.

From an engineering perspective, getting one platform to behave nicely is hard enough, but when you consider the number of devices, operating system fragmentation, and wide range of device hardware, it was going to be a huge mountain to climb. The Flash Player and AIR teams implemented a number of changes to how they make their products and how they release them to try and meet this demand; but when you look at it from a ROI perspective, the investment outweighed the benefit.

Now those are the facts of the announcement—the part that was missing and was handled poorly by communications was around the technologies and roadmaps that go into it. The flow of the information started with a press release from Adobe, that went to the press who want to get attention from their readers, so they linked the “reason” to the Steve Jobs message around Flash, which was read by all of our clients, investors, backers, and then ultimately, us. All of these individuals contacted you, the designers and developers of the platform, and wanted an explanation; however Adobe didn’t prepare the community with information that would be helpful to defend our technology choices and expertise. This then compromised our integrity to our clients; the factual technology announcement didn’t matter—it was communication flow that backed the community into a corner.

The other side of this is the perception and the fundamental value proposition of Flash: to normalize user experiences across platforms, browsers and devices and make it more efficient for designers and developers to create amazing stuff. This gap of not having the mobile player directly hits that value proposition.

Now, let’s look at this from another point of view. HTML5 on desktop browsers is a mess—low adoption, inconsistencies, etc. On mobile, the support is far better and consistent, but the app technologies and languages are the biggest hurdle now between Objective-C, C#, Java and C++. So for Adobe, the choice was to continue to help normalize the developer experience for desktop browsers, and offer the same benefit for app development using AIR. With HTML5 being “better” (not perfect—I know better than to say that), the benefit and more profound impact that Adobe could bring to the community was better tooling support for HTML5 and to have a seat at the table for those that are charting its path. That is what has driven new products like Edge and Muse that I am proud to have played a hand in their early days.

The challenge that Adobe faces with Flash, Flex and AIR is to communicate a roadmap that is reliable and long term to the community to understand and trust and take it to their clients and know that they have Adobe’s 100% commitment behind it. It is this roadmap that I feel will be difficult to deliver, since for a number of the community that work with enterprise know—the roadmap needs to be long term between three to five years. In addition, it needs to be within the mobile and device ecosystem, which has become so volatile that any roadmap will need to have significant shifts and changes since the platforms themselves haven’t provided clear roadmaps of their own. It is the silence around the lack of a road map that has been deafening—but the teams are working hard to give you the information you need to do your job and run your businesses.

Last week I started a new semester teaching ActionScript 3.0 at San Francisco State University. One of the first things I said, and I said that my recent book reflect this, was that the biggest opportunity for new developers to the Flash Platform was in making apps for the smartphone and tablet markets through multiple app stores and ecosystems. The announcements this week are a validation to that belief. In a couple of weeks, I’m also going to start my new HTML5 course where I will be featuring Adobe Edge and JavaScript instruction for creating content for browsers. As an educator and a community leader, this is where I see technology going.

Say what you will about the way the message was communicated, but know that the teams at Adobe believe in you, support you and go to bat for you every day.

I know that I do…

…and always will.

Troubleshooting removeChild()

I had someone on Twitter send me a message saying they were having difficulty working with the removeChild method for an object within another container. I know that from experience addChild and removeChild can be tricky when you mix up contexts and get lost on where your “stuff” actually is.

So I wanted to post this little code snippet for people to refer to if they get lost. The premise is this:

  • A MovieClip is instantiated on the stage. In this example it is called removeMe
  • A Loader class is created that loads a resource. The Loader class instance is added to the display stack within the removeMe MovieClip instance
  • Another MovieClip is instantiated on the stage. This example names it clickMe. This MovieClip has an event listener attached to it listening for MouseEvent.CLICK, which then executes a callback function removeLoader()
  • The removeLoader() event callback removes the Loader class instance from the display stack within the removeMe MovieClip instance

Here is the code that is used to get this done. This is also available as a gist on gitbub:

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.MouseEvent;

var myLoader:Loader = new Loader();
var myLoaderContent:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg");
myLoader.load(myLoaderContent);

var removeMe:RemoveMe = new RemoveMe();
stage.addChild(removeMe);
removeMe.x = 25;
removeMe.y = 25;
removeMe.addChild(myLoader);

var clickMe:ClickMe = new ClickMe();
clickMe.x = 475;
clickMe.y = 25;
clickMe.addEventListener(MouseEvent.CLICK, removeLoader);
stage.addChild(clickMe);

function removeLoader(e:MouseEvent):void
{
   removeMe.removeChild(myLoader);
}

Links: