Question
Alright, I'm confused by all the buzzwords and press release bingo going on.
What is the relationship between flash and flex:
Replace flash (not really compatible)
Enhance flash
The next version of flash but still basically compatible
Separate technology altogether
???
If I'm starting out in Flash now, should I just skip to Flex?
Follow up
Ok, so what I'm hearing is that there's three different parts to the puzzle:
Flash
The graphical editor used to make "Flash Movies", ie it's an IDE that focuses on the visual aspect of "Flash" (Officially Flash CS3?)
The official name for the display plugins (ie, "Download Flash Now!")
A general reference to the entire technology stack
In terms of the editor, it's a linear timeline based editor, best used for animations with complex interactivity.
Actionscript
The "Flash" programming language
Flex
An Adobe Flash IDE that focuses on the coding/programming aspect of "Flash" (Flex Builder?)
A Flash library that enhances Flash and makes it easier to program for (Flex SDK?)
Is not bound to a timeline (as the Flash IDE is) and so "standard" applications are more easily accomplished.
Is this correct?
-Adam
The term Flash can include any of the other terms defined below, and I find that saying "Flash" without specifying exactly what you mean can be confusing and misleading. Case in point: I'm not sure what you specifically mean when you say "Flash" in your question. Is it Flash Player? The authoring tool? Or the whole collection of technologies that fall under what Adobe calls the "Flash Platform"? To help clear all this up, let me define the technologies involved in creating Flash and Flex content so that we're all using the same terminology here:
Flash Player is a runtime for rich media content in the browser. There is also Flash Lite to run Flash content on older or low-end mobile devices, and Adobe AIR extends Flash Player to allow content authors to publish native desktop and mobile applications that can integrate with things like the file system, windowing systems, and device sensors like the accelerometer and camera. Collectively, Adobe refers to these as the Flash runtimes.
Flash Professional (often called the Flash authoring tool or the Flash IDE) has traditionally been the primary application used to create content that runs on Flash Player. It is very designer oriented with timelines, layers, and visual drawing tools. Software developers may find this application disorienting and limited compared to other development tools that focus more on code, like Flash Builder (see below). When someone says, "I built something with Flash", they often mean the Flash authoring tool, but that's not always the case. For that reason, it's good to always clarify to avoid any confusion.
ActionScript is the primary programming language supported by Adobe to target Flash runtimes. The current version is ActionScript 3 (abbreviated as AS3), which has been supported since Flash Player 9. Content created with older versions of ActionScript can still be run in the latest versions Flash Player, but new features are only supported when using ActionScript 3 to create new content.
Flex is a collection of technologies designed to create rich applications that target the Adobe's Flash runtimes. Though saying "Flex" previously had the same ambiguity as "Flash", the Flex brand name is becoming more and more focused on the Flex framework and SDK, described below.
The Flex SDK consists of compilers, a command-line debugger, and the Flex framework. The included compilers are:
1. MXMLC, an ActionScript and MXML compiler to output the final SWF file for deployment to Flash Player.
2. COMPC, a static library compiler for ActionScript that outputs SWC files.
3. ASDOC, a documentation generator built on the compiler technology.
The Flex framework is a collection of ActionScript classes designed to build Rich Internet Applications. It includes things like user interface controls, web services and other connectivity classes, formatters and validators, drag and drop, modal windowing, and component states. These classes are in the mx.* package. Generally, when developers say "Flex" without any clarifying information, they mean the Flex framework and not the product formerly known as Flex Builder.
In 2011, Adobe donated the Flex SDK to the Apache Software Foundation. It is now called Apache Flex and it is fully managed by the community rather than Adobe. However, Adobe employees continue to contribute to the project, and Flash Builder (see below) continues to support new SDKs released by the Apache Flex project.
MXML is an XML-based markup language used by the Flex compilers to make layout and placing components into containers easier. The tree-like structure of XML make the containment hierarchy easier to visualize. MXML is actually converted to ActionScript during the compilation process.
Flash Builder (formerly known as Flex Builder) is a development environment that allows developers to build different project types to create SWF files that are deployed to Flash runtimes. It is built on the Eclipse platform and is more familiar to software engineers. Flash Builder supports projects built with Flex or pure ActionScript. Flex projects include the Flex framework. ActionScript projects are the most basic you can work with, starting with a single class and an empty canvas, and the Flex framework is not included.
Flash Builder does not replace Flash Professional. Some people who have traditionally used Flash Professional may now choose to use Flash Builder instead. Often, these are software engineers who appreciate or require the advanced development tools offered by Flash Builder or don't work heavily with assets designed in a visual tool. Some developers may write their code in Flash Builder, while choosing to compile their projects in the Flash authoring tool. Often, these developers are also designers, or they are working with other people who are designers. In this situation, there may be many graphical assets created in the Flash authoring tool, and it could be difficult or simply inappropriate to bring them into another environment.
The Flex framework is specifically designed to build applications. It includes many traditional form controls (buttons, lists, datagrids, etc) and much of the code runs on an advanced component framework written in ActionScript. Not everyone is building the sort of content that Flex is designed to create, and Flex does not replace traditional Flash development practices for everyone. It is a better approach for some developers, but may not be right for others. More design-heavy websites, such as those created for movies, music, energy drinks, advertising campaigns, and things like that probably shouldn't use the Flex framework. These types of content might be better suited to Flash Professional or a pure ActionScript project in Flash Builder. Similarly, little widgets you put into the sidebar of your website or on your profile in a social networking website may need to be built with pure ActionScript (without the Flex framework) because they require a smaller file size and they probably don't need a big complex component architecture designed for larger applications. When targeting Flash runtimes, your development environment, frameworks, and workflow should be chosen based on your project's requirements and goals.
Adobe Flex Builder is Adobe's IDE for developing applications that will run in the Flash plugin. The Flex SDK refers to the libraries that developers uses to write the applications.
Essentially, the term 'Flex' is the development side and 'Flash' is the run time side of Adobe's technology.
Correction: The term 'Flash' is also used to refer to the Flash IDE which designers use.
Yeah, I was confused by this for quite a while too.
Flex seems to be thier name for the 'Flex Builder' IDE (based on Eclipse), and the general approach of building flash files using mxml and ActionScript rather than the normal flash tools.
I think the mxml and ActionScript approach (i.e. Flex) is designed to appeal much more to programmers, where as the Flash side is designed more to appeal to graphic designers.
The end result of either approach is a .swf file which can be run in the browser's flash player plugin (although with Flex you can target the Adobe Air runtime instead if you want access to the file system and to run offline etc).
My advice would be, if you're coming from a programming background, to start with Flex.
What is the difference between Flex and Flash?
The way I keep it clear in my mind and explain it to others is as follows:
Choose the right tool for what you want to create.
If you want to write an APPLICATION using Flash technology, use Flex.
If you want to create an ANIMATION using Flash techology, use traditional Flash.
Flex is optimized for application construction (but you can create primitive animations using states) and it compiles into a SWF.
Flash is optimized for animation construction but you can also create applications with some extra work, and it compiles into a SWF.
Once you have your SWF you can play in your Flash player, although Flex requires Flash 9 or higher.
In conclusion
Application -> Flex -> SWF
Animation-> Flash -> SWF
Hope this helps.
Part of the confusion is that "Flash" means multiple things. Flash can mean one of a multitude of applications, OR the general technology behind SWFs.
There's the Flash CS3 product that Adobe sells. This is generally targeted at designers and uses a Timeline-based approach to creating SWFs. Previously the Flash product was the only way to create SWFs, and SWFs generally were just used for animations and other visual effects not possible in a browser otherwise.
Then there's the Flash Player. This is the application/plugin used to run SWFs. SWFs can also be wrapped in a "Projector" which allows them to run as a standalone app, but that's not as common.
At some point (I don't know when) Flash started to be used for more interactive applications. The Flash product wasn't very well suited for kind of work, as it was designed to create animations. Recognizing this, Macromedia created Flex. Flex is another development environment for creating SWFs, but it targeted more at developers than designers. The latest version is Flex 3. The Flex SDK is freely available and includes a command line compiler, debugger, and the class libraries. Adobe also provides (for purchase) the Flex Builder app, an Eclipse-based IDE for creating SWFs using Flex. There are some free IDEs for using Flex, most notably FlashDevelop, though I don't know of any that provide a visual designer for MXML, the markup language used by Flex to define UIs, or a visual wrapper for the debugger.
If you're approaching Flash from a developer's perspective then you're going to want to use Flex. It's probably a lot closer to what you're used to dealing with, and seems to be the direction Adobe is pushing Flash in general.
Flash is a Runtime Environment - you use the Flash Authoring tool to make some Flash content, and the Flash player processes your content, executes the scripts, and draws the appropriate pictures onto the screen.
Flex is a Development Framework - you use the Flex development tools to define how your component-based content should work, and then Flex generates the Flash content for you. You could have made the same thing with the Flash Authoring tools, but using Flex may let you avoid reinventing some wheels.
In functional terms, Flash is an extremely versatile runtime; it gives you lots of freedom to do anything you want. But if you're building a loan simulator, you probably don't need the freedom to define precisely how all the pulldown menus and screen transitions work. Probably you'd rather that you could just use premade components for that stuff so you can concentrate on the loan stuff. Flex lets you do that, with the cost that it may turn out to be a lot of work if you decide that you do need a lot of freedom to change all the fine details.
Here's another simple view based on how you describe an application you want to develop.
Do you want it to have the highly granular UI capabilities you expect from a workstation (e.g. Windows) application, with a fairly complete set of controls (listbox, combobox, grid, etc.)?
Flex gives you that.
Do you want to deliver it to run in most browsers (i.e. anywhere Flash is installed/installable)?
Flex gives you that, because it runs in the Flash virtual machine.
Do you also want to be able to offer it to run in the OS, not in a browser (with minimal coding changes?)
Flex can give you that, by allowing you run it, not in the Flash VM, but instead in the Adobe AIR VM (which has versions for Windows, Mac, and Linux) which provides wrappers for common OS resources like the filesystem, OS dialog-box UI components (e.g. "Open/File/ etc.)
Are you OK using javascript as the development language? You need to be, because it's the only language supported, in the form of ActionScript, which is a proper superset of javascript - it accepts javascript code directly.
So the partioned pieces are:
A runtime environment, either the Flash browser plugin, or the AIR runtime (the native OS equivalent).
Actionscript as the development language.
A bunch of libraries of controls and other resources, i.e. the typical Window, Frame, Combobox, Listbox, Image container, TextBox, TextArea, a wysiwyg-y RichTextArea, etc.) These are the province of Flex.
With the above resources alone, you can use the free command-line compiler to build applications in the same fashion as you would with any other command-line-compiler language with libraries.
Then, if you want a fancy IDE, there's Flex Builder, which is a set of extensions to good-ol' Eclipse (for several hundred $$). Or there are several other IDE's that are more or less equivalent.
Flex is a framework FlexBuilder is an IDE
(in an attempt to resolve the confusion between the 2, adobe is renaming FlexBuilder to FlashBuilder)
if you do not know what a Framework is:
Flex is to Flash as what CodeIgniter is to PHP
or like what .net is.
I like to think of a framework as extending a language like you would extend a class in OOP.
Flex is a development framework that compiles xml and actionscript into a SWF, which runs on a client machine accessing a website. It can also run as a desktop application using Adobe AIR. Flash uses a drawing canvas instead of xml. Compiled SWFs can be referred to as Flash, which adds to the confusion. You may find Flex similar to ASP.NET, which takes xml and c# (vb.net, etc) and compiles into a dll. Of course, ASP.NET runs on the web server.
If you are choosing between Flex and Flash for an application, consider whether the application will be based around data. If you want to make a pretty spreadsheet application, Flex would be the way to go. If you are creating a video game or some sort of presentation, you would probably want Flash.
Following up on this, I found a very useful article on the subject:
Adobe Flash and Flex—Which Makes the Most Sense for Your Project?
The Flash Integrated Development
Environment (IDE), otherwise known in
its current version as Flash CS3, is
an ideal tool for developing character
animation or linear animation
projects. These are projects that
require little coding and can be
effectively implemented with the Flash
IDE timeline.
In other words, Flash CS4 is very tightly bound to the timeline - good for linear sequences or animations. While one can add loops and interactivity in the form of jumping to new points on the timeline, it is limiting for projects which cannot easily be mapped out in terms of progression over time.
It is, in simplistic terms, an animation tool with very powerful interactive features - creating and composing new elements on the fly, and jumping around on the timeline allows one to create applications, and the Flash CS4 IDE makes this relatively easy, but it's not a great platform for application style software.
Flex was built as an answer to that - while it makes use of the same elements and exposes the code, it is not bound to a timeline, and has more in common with object oriented programming languages than animation languages.
The Flex Builder IDE includes both the programming IDE, as well as a GUI designer for quickly building interfaces, and a few other tools for developing applications that run on the flash player.
Flex and Flash have different target audiences. Flex is more geared towards developers where as Flash is more geared towards designers and artists.
Flashdeveloper has been mentioned as a free tool to develop flex applications. I just want to add a free tool to design applications (create an MXML file using a designer): designview. It's available directly on the adobe website, it's an air application that is basic but that give the possibility to take a look freely and easily to the possibilities of flex.
Flex is a free and open source framework based on ActionScript to develop SWFs and AIR applications. Flex Builder (now renamed to Flash Builder as of version 4, to avoid the confusion) is a commercial IDE from Adobe to develop SWF/AIR using the flex framework. While flash (CS3) is good for animation related stuff, flex is good for application/ui related stuff. Adobe positions flex as an RIA (Rich Internet Application) framework.
Flex runs on Linux, too, while Flash doesn't.
Flex is kinda Flash CS 4 second edition.
Flex is less graphical, as it separates compiler and IDE, which allows for command line compilation (makefiles, large projects so to say) which allows for alternative IDE's to Flash.
Edit:
Flex lacks some classes that Flash CSX has (e.g. fl.controls), while Flash lacks some classes that Flex has (e.g. mx.controls or mx.alert).
All in all:
You can have your own Flash compiler for free by downloading Flex 4 SDK and FlashDevelop.
But it is no substitute for Flash.
Flash produces much smaller files (e.g. Flash compiles a project to 100 kB while Flex is compiles the same project to 500kB). So Flash is for internet multimedia applications, while Flex is for desktop multimedia applications.
Flex Builder 3 --> Flash Builder 4, even though you use it for Flex. You can also use it for Flash. If you really want to learn about all this stuff, you should just buy a veteran lunch for a day because it will save you MONTHS. Adobe makes some cool products, but is also well-known to be a lazy company, and this leads to extremely poor documentation. Unless you are a fan of "livedocs," which is a term Adobe coined to describe "slow and bloated HTML."
"Adobe Flex is a collection of technologies released by Adobe Systems for the development and deployment of cross platform rich Internet applications based on the proprietary Adobe Flash platform."
Adobe Flex
Flash is a programming language rather similar to JavaScript but with support for static types.
Flex is a flash library that is intended to help people program in Flash on a much higher level.
It may be helpful to some to think about this as Flex over Flash being like MFC over C++.
Flex is basically a language that compiles down to a flash "movie" or "applet", that will run in the Adobe Flash player plugin.
In very simple terms, Flex technology uses MXML to create applications. MXML is analogous to HTML and Flash components is analogous to something like form elements.
MXML basically allows you to specify what Flash components (such as a table, dropdown list, or something custom that you build in Flash) go on an application screen.
This is a very simplified answer, but that's how I tend to explain Flex.
(Flex Builder is an environment for you to develop Flex apps and Flash apps)
Flex is not a programming language.
flex is a Framework for developing Rich Internet Applications over the Flash runtime and includes ActionScript & MXML as language.
Flex is a collection of Technologies, Tools and Frameworks for building cross platform Rich Internet Applications.
The best answer I've found for "What is Flex" is at this page:
http://www.adobe.com/products/flex/faq.html#flex-flash
Search for "How is Flex different from Flash?"
My interpretation of this is that if your application was generated from Flash Professional, it is a "Flash" application. If it was generated with the Flex SDK (Flash Builder, Flash Develop, or straight code & command line tools) it is a "Flex" application. Both "Flash" applications and "Flex" applications compile into bytecode that can be run by the "Flash Player" or by "Adobe AIR". Both types of applications can include "Actionscript" code.
A quick glance at the present-day internet would seem to indicate that Adobe Flash is the obvious choice for embedding video in a web page. Is this accurate, or are they other effective choices? Does the choice of ASP.NET as a platform influence this decision?
Flash is certainly the most ubiquitous and portable solution. 98% of browsers have Flash installed. Other alternatives are Quicktime, Windows Media Player, or even Silverlight (Microsoft's Flash competitor, which can be used to embed several video formats).
I would recommend using Flash (and it's FLV video file format) for embedding your video unless you have very specific requirements as far as video quality or DRM.
Flash is usually the product of choice: Everyone has it, and using the JW FLV Player makes it relatively easy on your side.
As for other Video Formats, there are WMV and QuickTime, but the players are rather "heavy", not everyone might have them and they feel so 1990ish...
Real Player... Don't let me even start ranting about that pile of ...
The only other alternative of Flash that I would personally consider is Silverlight, which allows streaming WMV Videos. I found the production of WMV much better and easier than FLV because all Windows FLV Encoders I tried are not really good and stable, whereas pretty much every tool can natively output WMV. The problem with Silverlight is that no one has that Browser Plugin (yet?). There is also a player from JW.
One consideration would be whether video playback is via progressive download or streaming. If it's progressive download, then I would say use Flash because you get a wider audience reach.
For streaming wmv, it is out of the box functionality provided by Windows Media Services
For streaming flash, you will have to install a streaming server on your Windows box. Some options are:
Adobe Flash Media Server (Commercial)
Wowza Media Server (Free/Commercial)
Red5 Flash Server (Open Source)
If you have access to Microsoft Expression Encoder 2, you can use that to encode a video file and generate a Silverlight video player. Then if you have IIS 7, you can use Adaptive or Smooth Streaming also checkout Smooth HD for a really cool example.
You can also do streaming from the free Microsoft Silverlight Streaming Service. It's connected to a Windows Live account.
A consideration is that the client will need to have Silverlight installed, just like Flash, but Flash has been around longer.
<object width="660" height="525"><param name="movie" value="http://www.youtube.com/v/WAQUskZuXhQ&hl=en&fs=1&color1=0x006699&color2=0x54abd6&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/WAQUskZuXhQ&hl=en&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="525"></embed></object>
I have worked for a company that developed a system for distributing media content to dedicated "players". It was web based and used ASP.NET technology and have tried almost every possible media format you can think of and your choice really comes down to asking yourself:
does it needs to play directly out of the box, or can I make sure that the components required to play the videos can be installed beforehand?
If your answer is that it needs to play out of the box then really your only option is flash (I know that it is not installed by default, but most will already have it installed)
If it is not a big issue that extra components are needed then you can go with formats that are supported by windows media player
The reason why windows media player falls into the second option is because for some browsers and some formats extra components must be installed.
We had the luxury that the "players" were provided by us, so we could go for the second option, however even we tried to convert as much as possible back to flash because it handles way better than windows media player
"Does the choice of ASP.NET as a platform influence this decision?"
Probably not.