I'm happy to report the Apache Flex incubator proposal vote has concluded today and it has unanimously been accepted as a podling! There were a total of 23 votes of which 10 were binding (by Incubator PMC members). It was nice to see there were no 0 or -1 votes at all so think any initial doubts in the discussion period have been able to get addressed to everyone's satisfaction. The next step is getting the infrastructure set up for the project and then ultimately getting the initial code submitted. It is important to realize that now the hard work actually just starts and I look forward to seeing Flex move to an open development model and the community actively getting involved.
The vote on the Apache Flex incubator proposal is now open and in 72 hours we will know the result. The vote on adding the additional mentors to the Apache Incubator PMC has not concluded but they have provisionally been added to the proposal. In the unlikely event Dave Fisher and/or Anne Kathrine Petterøe are not accepted there are still at least two confirmed initial mentors on the project.
You can follow along on the mailinglist and show your support with a +1 (though your vote will only be binding if you are a PMC member). There is already quite a bit of activity on the thread and it is extremely likely we will have the go-ahead this Friday for the Apache Flex podling.
The vote on the Apache Flex incubator proposal has not yet started but should only be a matter of days away - currently a few additional candidate mentors for the project (Dave Fisher and Anne Kathrine Petterøe) need to be elected to the Incubator Project Management Committee. Once that has happened it should be plain sailing to get it going. With a bit of luck we will have the process wrapped up in the first week of 2012 - what better way to start the new year!
In the meanwhile, if you were anything like me and the Apache way of doing things isn't quite obvious there are a couple of videos from the Flex Summit that are well worth watching. Roy Fielding - one of the original founding members of Apache, and well known for his work on HTTP and REST - who now works for Adobe explains the process, what it means for technology to become an Apache project and how you can make it thrive.
There's also a great episode of "The Flex Podcast" you can listen to with Jon Campos, Michael Labriola, and Jesse Warden as guests talking about their take-aways from the Flex Summit and the future of the technology.
I've been running a poll on my blog for a little over a week now and am encouraged to see the sentiment around Apache Flex is largely positive and more of a "wait and see" than an immediate negative outlook on what is happening.
If you are active on Twitter you can follow @ApacheFlex (not sure who runs this account) which aggregates a lot of articles and tweets about Flex and the Apache Software Foundation or follow the discussion using the #ApacheFlex hashtag.
As you can see there are plenty of ways to keep up to date with what is happening and encourage everyone to do so and get involved in whatever way they can. Its important to realize that the community can now actively shape the future of Flex and it is an open process where contributions from anywhere are encouraged and on an equal footing.
Happy holidays to you all!
The discussion about the Apache Flex proposal is now in full swing on the Apache Software Foundation Incubator mailinglist. I have to say its been great getting some outside perspective and it seems to generally be very positive and constructive. If you haven't followed along, here are some of the discussion points that got raised:
- There was a point made about individual contributors versus company representation when the proposal talks about Adobe having minority representation. This was subsequently addressed in the wording of the proposal.
- There is an interest in getting a list compiled of third party dependencies, their licenses and possible open source alternatives. Part of this will be addressed by Adobe lawyers and the findings will get shared as they become available.
- The Flex trademark is planned to get donated to the project, there were some concerns about the request to let existing groups using this trademark continue to do so and how that would work under the general ASF trademark guidelines. This is something that would get addressed before the project can graduate from its incubator status.
- Concerns about Flash Player and AIR runtime dependency and its proprietary nature. This has been largely addressed and the Apache Flex incubator would be free to decide how it proceeds with this and if it wants to target another export format. There is a keen interest in FalconJS and it was reiterated that there is every intention to propose this at some point as either a separate incubator or subproject.
- There was a question about Adobe commercial Flex support. This could be partly driven by some poor wording in my reporting of the Flex Summit discussions. Alex Harui addressed this in saying "Adobe is not currently planning to offer support for Flex released from Apache, but that could change."
Definitely some valid questions there and a good understanding of what the obstacles might be as well as clear opportunities. One of the quotes that stood out for me was by Greg Stein: "Let's not strive for a perfect contribution from Adobe, and miss an opportunity for an excellent contribution.". I agree there might be areas where we don't have a 100% ideal situation but there is time and scope to get that addressed within the incubation period.
Bertrand Delacretaz - one of the project sponsors - issued a call for additional mentors (given the size of the codebase and large number of initial committers). These need to be existing Incubator PMC members and can register their interest on the mailinglist.
If I understand correctly how the whole process works, after the proposal is fine tuned and the discussion dies down a vote will be called on whether to admit Apache Flex as an incubator project. I look forward to seeing how this develops.
There now is a discussion period followed by a vote on whether to accept the project. The voting procedure takes three days after which we will hopefully have some good news and initial source code can get committed.
If you want to follow along with the discussion, subscribe to the incubator mailinglist by sending an email to general-subscribe at incubator dot apache dot org.
Looking forward to seeing what the future brings!
"Challenges that bring great opportunities" is how I'd summarize what I've seen of the Flex summit so far. Adobe has invited some key Flex community members and enterprise partners to discuss the open source strategy around Flex and shed light on its commitment to the Flash Platform runtimes.
Here is some of the more interesting news that came out of the discussions:
- Adobe has legal clearance to submit Flex to the Apache Software Foundation, the incubation proposal will be submitted in the coming weeks
- Adobe will not be offering any commercial support contracts for Flex 4.6 and higher, though will honor existing contracts and continue offering support for the foreseeable future.
- Flash Builder is continuing to be developed, the next version will not have Design View
- Flash Catalyst is being discontinued
- Adobe is investigating HTML5 but doesn't have a framework in the pipeline that would allow migrating enterprise Flex functionality.
- Danny Winokur acknowledges Adobe's communication blunder and resulting trust deficit
- Adobe wants to continue to innovate with the Flash Platform, gaming and premium video are features that will drive it - but will not be limited to just those areas.
- There is a firm commitment to AIR on Android, iOS and BlackBerry PlayBook.
- Discussion with Microsoft is ongoing about AIR application support in Windows 8 Metro.
- Falcon compiler is under development, current timeline is early second half 2012 for AS3 support, late 2012 for MXML. Based on the discussions at the summit, there is a keen interest to get Falcon contributed as open source and have the community help work on it.
- Falcon JS is a research project and Adobe seems very reluctant in making any promises that this will turn into a viable product to cross compile real world applications to HTML/CSS/SVG/JS.
If the news about Flex going open source came at any other time, I believe just about everyone in the community would be jumping for joy. The fact that it was announced in the wake of a general sense that Adobe is starting to abandon its Flash Platform technology is what made it problematic. That said, there are certainly valid concerns - especially for the enterprise market that makes huge long term investments and Adobe wil have a tough time reclaiming trust with them.
I was skeptical about what this summit was supposed to achieve but have to say the open discussion has been great and Adobe is clearly looking to find ways to recover from the horrible communication disaster of this last month.
There's more news coming out today (here is a live stream and you can ask questions through twitter using the #flexsummit hashtag), I might follow up on developments in a later blog post. In the meanwhile there are recordings available that you can watch of yesterdays discussions.
- Discussion, Q&A with Danny Winokur - Flash Platform and Flex updates - Falcon and Falcon JS
I've been meaning to attend gotoAndSki for several years now, but it never seemed to work out - until now. If you don't know about this unique event you should definitely check it out! In summer it takes place in Norway, in winter in Switzerland.
This coming January 2012 I'll join a fantastic lineup of speakers (Mario Klingemann, Mihai Corlan, Bhakti Pingale, Michael Plank, Steven Peeters, Dominic Graefen, Hugo Fernandes, Eugene Zatepyakin) in the beautiful town of Stechelberg. Its a relatively small scale conference, giving you excellent opportunity for networking and general "geeking out".
During the day you can get out and see the Swiss Alps, ski or do other fun activities. The evening is conference time with several sessions over a period of three days.
My session is called "Simple P2P with Flash & Flex for the common mortal" and I'll be showing the latest developments of the CocoonP2P framework. I'll show how to set up device discovery, messaging, file sharing, video streaming (and hopefully some other cool surprises) between various devices *all without a server*.
The goal is to make it so easy your grandmother could do it - and I think we've pretty much accomplished that.
I hope to see you there, if you want to make it out - be sure to grab your ticket now - its without a doubt the best conference deal around (not to mention it includes accommodation and all your meals).
[update] There is now some more solid information on the future direction of Flex available here.
We're a week after Adobe's shocking announcements around its future vision of the Flash Platform - time to get some perspective and see what exactly has happened.
Unfortunately on a number of topics we're no closer to having real answers but this is my personal take and summary of what is publicly announced:
Flash Player for mobile (e.g. on Android) will not be further developed nor receive any further updates after version 11.1 (which was made available earlier this week) apart from critical bug fixes and security updates.
The Flash Player is still available for download and existing SWF content is supported, at some point in the future SWF content targeting new features will likely no longer work on mobile browsers. There has been talk about Adobe allowing OEMs to license Flash Player and do their own implementation, something which RIM reportedly wants to do for their PlayBook and upcoming QNX based devices (lets hope for more willing OEM partners to do their own Flash Player porting).
Unclear to me is if Flash Player 11.1+ content will be supported in AIR for Android and other devices. I don't see how that would work if they don't want to continue to port newer versions of the Flash Player - unless they take a strategy like on iOS where the runtime gets cross compiled to native binaries for each platform.
The Flash Professional engineering team has had a number of layoffs, though the product is still under development.
Product management is located in the US but the development is being outsourced to India. The next release of Flash Professional will have a feature to export to HTML5. If its anything like Wallaby or Google's Swiffy project, ActionScript support - if any at all - will be very limited.
The Flex SDK is going to get donated to an open source foundation and the Spoon project and Adobe (unclear how active and to what extent) will be involved in shaping its future.
The blog post announcing this however goes on to mention that HTML5 and web standards will be the best long term strategy - which undermines their case for continued support of the framework.
Flash Builder will still be developed and reportedly some Flash Catalyst features will merge into that product. The Falcon compiler project is still being worked on.
That seems like a pretty sensible move to me, imagine that at some point soon HTML5 will also become an export format here too.
LiveCycle and Acrobat Connect are being "wound down" - best guidance I've found on it is that they're cutting investment on it, though continue to support it for existing clients in the government and the enterprise financial services market.
I am still baffled at what Adobe was thinking in the way they communicated these changes. Clearly serious mistakes were made and I'm already seeing consequences everywhere.
Flash Player on desktop technically has a bright future ahead for gaming in particular, the issue here is if the actions of last week have not undermined Adobe's credibility to such a point that nobody is willing to invest. After all, they've now proven that the very thing you've been working on for months or years can be pulled out from under you at any point in time.
Most shockingly is still how MAX attendees were misled - thousands of people paying thousands of dollars to make it out to an event that claims to give them insight into the roadmap at Adobe. It is now also clear that Adobe employees did not know about these upcoming changes until the day itself, so this is no criticism on their part.
I still strongly stand behind my call for a leadership change at Adobe. Spending billions of dollars over the years on developing a mobile platform to then abandon it without any advance guidance or clear transition path to your user base is inexcusable. The enterprise Flex market is one few that actually prefers proprietary solutions, they want a strong company backing the technology they use and a roadmap they can trust on.
We'll see how these decisions play out, the move towards web standards can proof to be a good one in the long run but the more critical problem is restoring confidence in Adobe.
When working with local data in mobile applications you might want to consider a SQLite database. Those are especially useful when working with large amount of data that you want to filter at runtime. Flex Mobile projects can simply take advantage of SQLite support in the Adobe AIR runtime. You could certainly write it from scratch - meaning you create a File instance and SQLConnection, set up event listeners, wait for the connection to open and set up a SQLStatement with a SQL query and more event listeners.
Just to illustrate how easy these wrapper classes make things for you when writing Flex Mobile projects look at the code below. These two lines do everything you need to open a connection to your database file and select all the records.
You can see that using the open event on the SQLite tag we can wire it up to automatically run the query that selects all the records from our database.
The only thing left to do is pass the result of the database query to a component to display it in our mobile application. In this case I'll be using a List component and assigning the data property of the query instance when the result event fires
There are times when writing mobile apps that you want to have more fine grained control over the software keyboard and Flex 4.5 makes this very easy.
Any object based on InteractiveObject now has a needsSoftKeyboard property, setting this to true will cause the virtual keyboard to come up on the device whenever the instance is given focus.
For example here we have a Button component where we can set the needsSoftKeyboard property to true. As soon as it gets focus when clicked the soft keyboard will trigger. By default the Button component obviously doesn't have this behaviour.
Apart from setting the needsSoftKeyboard property you can also control it through an ActionScript call. In the example below we trigger the soft keyboard to appear as soon as the view is ready.
When the virtual keyboard triggers there are a few events that fire. The first one is "softKeyboardActivating" that indicates the keyboard is about to open and "softKeyboardActivate" which is dispatched right after the keyboard is made available. Likewise there is a "softKeyboardDeactivate" event that gets fired after the virtual keyboard is dismissed.
The SoftKeyboardEvent that gets triggered has two interesting properties, one is triggerType and can have either a value of "contentTriggered" (when the keyboard was triggered through ActionScript) or "userTriggered" when it was triggered through user interaction.
Another property we can get through the event is relatedObject, which is a reference to the InteractiveObject instance that is responsible for triggering the soft keyboard.
If you've been playing around with the Flex 4.5 mobile features, one of the great new things is the ability to easily navigate between different screens. For this you can use the navigator object and push or pop a view in your application.
There are a few extra things you can define when navigating between views and one of them is what type of transition should be used. I'll show the following example where I started from a new Flex Mobile project using the "View-Based Application" template.
In the first view that gets generated I'll simply add a backgroundColor property and set it to red and put a button on the stage.
The next thing to do is create a second view in the views package that we can transition to, I'll call it SecondView.mxml and give it a blue color and a button to navigate back.
In the Flex mobile development video I did a little while back I showed the basics of navigating to a different view. That is exactly what we'll do here as well. Back in the first view we'll add a click handler to the button.
If you remember the first argument in pushView is a reference to the view class you want to navigate to. The second and third arguments have to do with passing data to the next view and the basics of that were covered in the video as well.
The last argument however is what we'll need here, it lets you pass in an instance of a ViewTransitionBase class. There are a few transitions that come with Flex 4.5 and you could obviously build you own by extending this base class.
In this case I'll use the built-in FlipViewTransition that adds a nice 3D effect while navigating between views, I'll set the duration of the transition to 1 second. The FlipViewTransition supports two different transition types "card" and "cube" - the first one is more of a 2D turning effect while the other one rotates around an axis giving a more distinct 3D feel, I'll go for "cube" here.
The only thing left to do is add the same code to SecondView.mxml but use navigator.popView instead to navigate back and change the direction property of the transition. This direction property takes up, down, left and right values so you have quite a few options to how you want this transition to look.
You can now test and run the application and you should see the following result:
Download source code (zip file - 7Kb)
Pretty easy, right? If you're a little more experienced writing ActionScript you could write your own custom view transitions (I'll cover this in a future blog post). Have fun!
One of the common things you'll want to do when building mobile apps is add a splash screen. This is an image that shows up while the application is launching and gives a visual indication to the user in the 1 or 2 seconds it takes after clicking.
With the new Flex 4.5 mobile components this is now very easy to add and there are built-in properties that help you do this on Application, ViewNavigatorApplication and TabbedViewNavigatorApplication.
Its great to have this splash screen there but how do we deal with different devices? Some devices might have much higher specs and launch the app in milliseconds, while on older devices it could take several seconds.
The best practice here is to add a minimum display time for the splash screen, that way you're sure that even on very fast devices the splash screen will be visible for at least x amount of milliseconds, giving the user the chance to briefly see it.
In the code example below we're setting the splash screen up to display for at least 2 seconds (so that means 2000 milliseconds).
Another important thing to take into account when you release your application across devices is screen size and how your splash screen will scale. We've also got a property to set that and have a number of options.
- none (default) - splash screen does not scale
- letterbox - splash screen scales to the available screen size but maintains the aspect ratio
- stretch - splash screen scales to fill the exact screen size (aspect ratio is ignored)
- zoom - splash screen scales so it completely fills the available screen size (could go outside bounds and crop the image)
This is just one of many new mobile features in Flex 4.5 that make it really easy to create applications. Have fun!
There is a bit of a change of plan - rather than give an overview talk on open source projects in the community - I'll be doing my session at Flash on the Beach on Flash Player 10.1 development and the litl webbook. Ever since Flash and the City earlier this year I've been playing around with this somewhat unusual device and am sold on its potential. It is quite unlike the typical hackable geeky gadget I'm usually interested in but opens up opportunities for web enabled content feeds around the house and of course uses my favorite development platform.
I'll be talking about how you can get started developing channels for this device using the developer SDK and test your work in the simulator or on the device itself. We'll walk through various examples of channels and look at some creative use cases. I'll also be covering best practices for Flash Player 10.1 on devices in general.
It's going to be a fun session and will hopefully inspire you to start experimenting with Flash Player 10.1 content on the litl or a variety of other devices and form factors that are hitting the market.
Hope to see you there!
It took me a long time to finally get round to it, but have updated the TWiT Live Desktop AIR application and released it as version 2.2. I've also gone ahead and made it open source under an MIT license, so feel free to check out the code and I'm open to having contributors to the project. For those that haven't tried it yet, TWiT Live Desktop lets you watch a live video stream of Leo Laporte's TWiT network shows as well as interact in the IRC chatroom and check out the twitter and other feeds.
A lot of people were having problems with the "black screen of death" in the previous version. Those issues luckily seem to be resolved and you now have the option of switching between the various video streams or even go for an audio-only version (just right-click for those options). You also have a feature to take image captures of the video stream.
Some minor improvements include saving your last video feed, window size and position when you relaunch the application. You can also double click the video to toggle between full screen and normal mode.
Since its an AIR application this runs on Windows, Mac and Linux -- if there is enough interest we can port it to support Android devices as well.
The old uservoice page will be faded out and I recommend people to use the issues page on the Google Code project to file any bugs or feature requests.
Note: the application loads in the default video players from the various streaming services and renders them in the background. This means the controls are not accessible to you. I'm working on having custom controls for the application that work across the different video streams.
I have plans for a 2.5 update in the next month and a 3.0 later on that will include the following features:
- Controls for changing video feed, image capture etc.
- Twitter stream widget
- Volume control and mute button support
- Production schedule interface (with timezone support)
There is built-in support to "check for updates" so when you have the application installed new version will get pushed to you as they become available.
[airbadge]TWiT Live Desktop,http://twitlivedesktop.googlecode.com/svn/trunk/releases/TWiTLiveDesktop_2_2.air, 2.2,http://www.peterelst.com/blog/wp-content/uploads/2010/09/twit-badge.jpg[/airbadge]
Thanks for everyone's patience waiting for this update, and Leo and the TWiT team for their support. Enjoy the application and look forward to hearing from users on how to improve it further!
Earlier this week I headed to the Adobe DevSummit event in Chennai and was pleasantly surprised of how vibrant the community here is. No less than 600 people turned up and the rooms were absolutely packed. We had some great talks and hands-on sessions by the Indian Adobe evangelists and various people from the community (including Mrinal Wadhwa, Saurabh Narula, Yash Mody,...) presented in depth sessions on various technologies. I did two sessions on Adobe AIR, one of which covers various examples of AIR APIs and you can see some video excerpts of below.
Sometimes I really wish I worked over in San Francisco -- now and again Adobe does these great meet ups, like recently happened with FlashCamp. They've put the video of the presentations online including a keynote by CTO Kevin Lynch and the following topics:
- Introduction to Flash Catalyst
- What's New in Flex 4
- Skinning Components and Apps in Flex 4
- New Productivity Features in Flash Builder 4
- New Data Features in Flash Builder 4
- Update on Adobe AIR
- Using Effects and Animation in Flex 4
- Advanced CSS in Flex 4
These are some really good in depth presentations that I can highly recommend you check out!
It seems Google did an update to how it indexes Flash content yesterday. Some of you might have already heard about the headless Flash Player aka "Ichabod" that Google and Yahoo got from Adobe -- it seems it is now being put to better use. Google has been indexing Flash content for years, basically extracting any static text that might be embedded in there. If you do a search with the filetype:swf flag you'll see what that turns up.
Now with this new headless Flash Player, rather than trying to extract static data from the SWF file, it runs it over a command-line (non-visually) and gets back information about the contents of your Flash file, it will simulate button clicks etc. and capture the text results for indexing.
The important update now is that Google will also follow external resources, so for example XML files or other data that gets loaded in and not index it as a separate URL (as before) but in context to your Flash content. If you want to avoid your SWF files from getting crawled you can simply include them in a robots.txt directive like any other content.
I promised to blog about my adventures exploring what ColdFusion has to offer, and ColdFusion Components (CFC's) was one of the first things I tried.
I've got to admit its still a little uncomfortable writing non-interface related markup in tags, though of course you can do the same with Flex, and technically this can also be done using CFScript over CFML.
This particular HelloWorld component has just one function "sayHello" and you can probably figure out what it does. It requires one argument "name" of type string and returns a string using the given name.
To integrate this in a Flex application, things are very straightforward. The easiest option you have is using the Flash Remoting gateway that comes with ColdFusion.
In the example above the only thing we actually need to connect to the HelloWorld CFC is the RemoteObject tag. We first set the destination property to "ColdFusion" and point the endpoint to the ColdFusion remoting gateway location. The source property is the name of our CFC (HelloWorld.cfc) without the .cfc extension.
Now that is set up we can call methods in the CFC by referencing the id of the RemoteObject instance, e.g. cfc_service.sayHello() as you see happens when the button component gets clicked. The RemoteObject tag is also set up to listen to the result event and then populates the result in the result textinput component we set up.
In a more real world example, I'd recommend creating an actual ActionScript 3.0 result handler function rather than writing that as inline code.
You can see this is pretty trivial to set up. In an upcoming blog post I'll show you how to access this same CFC as a SOAP webservice from PHP or other scripting languages.
Scotch on the Rocks went on the road this year, and I was happy to do a presentation yesterday at their London event. In many ways this was a new type of session for me -- not in the least because most of my audience will no doubt have had more hands on experience with the technology than me. It seemed to go down pretty well and think it was worth the ColdFusion community getting a glimpse at how their technology gets perceived by those outside. I did a couple of basic examples to show what I thought were the strong points of CFML and how I see things evolving.
I think the discussion afterwards was particularly interesting and most of us were in agreement that ColdFusion is in need of a renaissance and together with Adobe, the open source CFML vendors and the developer base we can make that happen.
I tried to get a narrated version up of my slides but had some audio sync problems, I'll see if I can get that fixed later.
In the next few days and weeks I'll be blogging a couple of basic CFML experiments I've been doing while preparing for this session. They should show how simple it is to get things up and running and connecting to Flash/Flex applications or even get some ColdFusion services integrated with other languages such as PHP, Python etc.
Aral Balkan blogged about what he called an epic FAIL of removing the Fx prefix from Gumbo. This I admit came as a bit of a surprise to me as it has been widely discussed in the community for some time and strong consensus built around using namespaces. The decision was then made by Adobe on February 13th 2009 to drop the Fx prefix and go with namespaces. For those that aren't really getting this whole controversy, its actually quite simple.
Initially the idea for the next release of Flex (codenamed Gumbo) was to leave out namespaces for the new components and instead use an Fx prefix. As you probably know up until now we had the mx namespace for Flex components which was like this:
The Fx prefix approach looked as follows:
The new approach with namespaces looks as follows if you want to mix and match between the old Halo and new Spark components.
OK, now I see how that can look a little more confusing -- what in fact is happening here is that you set up a language namespace (there can be only one) that defines how your MXML gets parsed and compiled.
Then for any set of components you use (as you might already be doing for third party libraries) you create a namespace. In this case one for the Halo components "mx" and one for the Spark components "s".
Why do I believe this is a good thing? Prefixing component names is not a sustainable option, in a next release you would have to go with a different prefix, i.e. Fx2Button. I don't see a huge use case of people mixing various versions of components (update: as rightly pointed out by Asger in the comments, since Form etc. are mx only at the moment you would in many cases be required to mix namespaces). This sort of reminds me of what you had happening in Flash with fscommand and fscommand2.
Namespaces are a common standard, they're implemented in the language and are good solution to avoid naming conflicts. Simplicity in syntax is one thing, I think the pragmatic approach here is seeing how things will evolve and not painting yourself in a corner.
I believe there is room for improvement but structuring MXML around namespaces makes complete sense to me at this moment in time. Moving forward there's something to be said about using naming conventions to abstract the underlying concept of namespaces. If and when the tooling (i.e. Flash Builder) is up to scratch, this whole process should be seamless for developers and not that different from how you had things in Flex 3.
More information here: http://opensource.adobe.com/wiki/display/flexsdk/Dropping+the+Fx+Prefix