<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://driveactivated.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Drive:Activated : Adobe, Flex</title><link>http://driveactivated.com/blog/archive/tags/Adobe/Flex/default.aspx</link><description>Tags: Adobe, Flex</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 21119.1142)</generator><item><title>Flexing backwards</title><link>http://driveactivated.com/blog/archive/2008/12/04/flexing-backwards.aspx</link><pubDate>Wed, 03 Dec 2008 16:21:00 GMT</pubDate><guid isPermaLink="false">a6ad56f3-672a-4869-8ea2-4a03165d64f8:1057</guid><dc:creator>Sam</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://driveactivated.com/blog/rsscomments.aspx?PostID=1057</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://driveactivated.com/blog/commentapi.aspx?PostID=1057</wfw:comment><comments>http://driveactivated.com/blog/archive/2008/12/04/flexing-backwards.aspx#comments</comments><description>&lt;p&gt;For the last few weeks I&amp;#39;ve been working on a project built with &lt;a href="http://www.adobe.com/products/flex/"&gt;Adobe Flex&lt;/a&gt; on &lt;a href="http://www.adobe.com/products/air/"&gt;Adobe AIR&lt;/a&gt;. A quick rundown - Flex 
is Adobe&amp;#39;s (well, Macromedia&amp;#39;s really) solution to make building form-based apps 
in Flash (as opposed to animations) easier, and AIR is Adobe&amp;#39;s way of expanding 
its influence off the web on to the desktop by allowing Flash and HTML/JS/CSS 
apps run as if they were desktop apps. 
&lt;/p&gt;&lt;p&gt;This is my first foray into the world of Flex, and might as well be a first 
into Flash and ActionScript (the last time I fiddled with this stuff was ages 
ago, and it was nowhere near as in-depth as this project). I chose it for this 
project because I was bored of HTML/CSS/JS and its quirks, and how rough it is 
when it comes to building apps without the HTTP model. My main need was that it 
need to support spiffy, animated interfaces out of the box. The alternatives 
were WPF, which isn&amp;#39;t cross-platform... and, that&amp;#39;s about it (Java&amp;#39;s ugly and 
clunky). 
&lt;/p&gt;&lt;p&gt;I approached this project as if it were a desktop app, and had those 
expectations in mind. I had nothing against Flex/AIR prior to this - in fact, I 
was even excited to use it initially. And even now, Flex/AIR still holds a 
unique set of capabilities that others do not have, so there are definitely cases where I would still consider using this combination. 
&lt;/p&gt;&lt;p&gt;All that said, there is clearly a bit of work to be done to make this 
combination work better, and be a lot more appealing, unique capabilities 
aside. 
&lt;/p&gt;&lt;h3&gt;Language&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;The constructor and casting syntax is very similar and hence can be 
confusing.&lt;/b&gt; But to be honest, this didn&amp;#39;t bother me too much, and there 
is alternative syntax for casting, however it does work slightly 
differently.&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;Construction - &lt;br /&gt;var ac:ArrayCollection = new 
ArrayCollection(a);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;Casting - &lt;br /&gt;var ac:ArrayCollection = 
ArrayCollection(ac);&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;b&gt;Properties must have the same visibility.&lt;/b&gt; This was a big one 
for me - there were plenty of situations where it made perfect sense to have a 
public getter, and a private setter, but no, this can&amp;#39;t be done in 
ActionScript(AS) 3. One workaround is to use a method instead, losing the 
advantages of the properties syntax.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The this keyword, combined with dynamic anonymous classes can lead to 
insidious bugs.&lt;/b&gt; This isn&amp;#39;t really a fault of AS3, but the combination 
of the two means your intention is easily mistaken.&lt;/p&gt;&lt;p&gt;For example, &lt;br /&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;public class ThisTester&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var _testValue:Boolean = false;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function get testValue():Boolean&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _testValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function set testValue(value:Boolean):void&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _testValue = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function test():void&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var f:Function = function():void&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.testValue = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;If you called test(), then did trace(testValue), you will see that the testValue still == false. Yet, if you add a trace right after the this.testValue = true line, e.g. trace(this.testValue), it will return true.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Why? Because when you declare an inline function, a new scope is given to it. By explicitly specifying using the this keyword, you are in fact specifying the scope to be the new one, rather than the enclosing ThisTester scope, and when it can&amp;#39;t find a testValue member in the new scope, it defines a new one as a dynamic member.&lt;/p&gt;&lt;p&gt;&lt;b&gt;No block-level scope.&lt;/b&gt; This is weird, but one I can deal with I guess. In AS3, variables defined inside a for loop, if block, try-catch block, or some other block, is accessible outside of that block as well (but within the same function). So if you define the same variable in different for loops in the same method, the compiler will warn you of declaring a variable twice, something different to C# and Java. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strike&gt;&lt;b&gt;No generic types.&lt;/b&gt; Maybe I&amp;#39;m just spoilt with C# and Java, 
but if AS3 wants to be a typed language (and it does), it really needs generics 
so types can be checked at compile time.&lt;/strike&gt; See update at the bottom.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Tries too hard to be a typed and untyped language.&lt;/b&gt; AS3 
would&amp;#39;ve been better if they could just decide on what it should be. Right now, 
you can use it as a fully typed language, or as an untyped language. However, 
judging by the libraries, it seems Adobe is pushing developers to the typed 
route. That said, it is missing some of the things that make typed languages 
good (e.g. generics), and personally, I think the untyped nature of AS was one 
of its strengths, yet Adobe seem intent on taking dynamic/untyped language 
features away from it.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Has&amp;nbsp;language features only usable by internal classes.&lt;/b&gt;&amp;nbsp;For 
example, abstract classes are not supported, yet some classes are inherently 
abstract, e.g. flash.display.DisplayObject (see &lt;a href="http://www.kirupa.com/forum/showthread.php?p=1892533"&gt;here&lt;/a&gt;). The E4X XML syntax is another, e.g. 
xdoc..name. To be fair though, it isn&amp;#39;t the only language to have in-built 
support for something that cannot be replicated by developers (VB.NET&amp;#39;s literal XML 
support is another). It would be nice if it was possible though.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Classes and constructors cannot be private&lt;/b&gt;. Prevents the use 
of the singleton pattern without ugly hacks.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The so called CSS support is subpar.&lt;/b&gt; It doesn&amp;#39;t support 
binding, only works with certain properties (e.g. width and height can&amp;#39;t be set 
in CSS), and one of the most annoying issue - you can&amp;#39;t refer to items in MXML 
using their ID in CSS. The one good thing about the CSS in MXML is that you can 
apply the same set of styles to multiple elements, and it is a neater syntax 
than specifying the attributes in MXML (less &lt;a href="http://www.codinghorror.com/blog/archives/001114.html"&gt;angle-bracket tax&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;There is no threading support&lt;/b&gt; even though the Flash Player 
itself is threaded apparently. Not entirely impossible, but there are times 
where synchronous behaviour is desired, and it makes it difficult. Also, because it is single-threaded, long-running intensive operations may hold up the UI thread, even with callbacks. &lt;/p&gt;


&lt;h3&gt;Libraries&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;The in-built libraries are, to say the least, lacking.&lt;/b&gt; Among 
other things, there is no reflection API at all, even though all the bits for it 
are there, and hence there are some excellent third-party libraries out there 
(&lt;a href="http://www.spicefactory.org/spicelib/"&gt;Spicelib&lt;/a&gt; is one example). 
There is no method to round numbers to a certain degree of accuracy either - 
only round to the nearest integer. The workaround is to raise the number to a 
certain power first, use the in-built round, then reverse the initial operation 
(credit &lt;a href="http://www.ear-fung.us/2008/04/flash-rounding-function/"&gt;here&lt;/a&gt;), but 
this is just basic stuff that should be in-built.&lt;/p&gt;
&lt;p&gt;There are plenty of libraries out there that fix these shortcomings and more, 
but at the end of the day, it all just adds bloat to apps when the functionality 
should just be in-built. Don&amp;#39;t go all out and implement obscure functionality 
that few people would use, but I think it is time to consider widening the 
in-built libraries. I&amp;#39;m pretty sure users would rather a once-off larger 
download, compared to a longer download every time they load the app (obviously 
less of an issue with AIR apps, but more so with Flex in browser apps). &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Some methods have weird quirks. &lt;/b&gt;This is probably not an AS3 
thing, but rather part of the ECMAScript spec, but still - why does the date 
method assume months are zero-based, but other parameters (day, year etc.) are 
not?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The lack of local system APIs in AIR apps is ridiculous.&lt;/b&gt; Why 
can my app have full access to the filesystem (to the extent that the user 
does), yet it cannot run another app on the desktop? I suspect Adobe are trying 
to prevent the whole ActiveX debacle, but there are much better ways of doing 
that than restricting the ability for your platform to do what it should be able 
to. Or maybe cross-platform issues; hopefully something they have resolved in AIR 2.0. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;The organisation of the in-built APIs are annoying and 
confusing.&lt;/b&gt; I understand the need to separate Flash and Flex namespaces 
(hopefully, this won&amp;#39;t be an issue in the future if/when Flex is integrated into 
the Flash distribution), but it really doesn&amp;#39;t help the discoverability of 
classes when you have to look in multiple places for things, e.g. the flash 
namespace, and the mx namespace. From my perspective, they&amp;#39;re the same thing, so 
put them together. Also, sticking things in the utils namespace is the same as 
sticking them in the miscellaneous namespace - what&amp;#39;s wrong with giving them 
their own namespace?&lt;/p&gt;
&lt;p&gt;There is also a lack of open-source libraries for common desktop app tasks, 
like data objects management and persistence.&lt;/p&gt;
&lt;h3&gt;Documentation&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;The AIR security restrictions are still not documented well.&lt;/b&gt; 
I have yet to find a document that explains when a cross-domain policy file is 
needed for URLLoader requests, and when a socket policy file is needed for 
Socket requests. There are&amp;nbsp;also apparently sockets that I can&amp;#39;t use, even if 
there is a socket policy&amp;nbsp;file (below port 1024 I think).&amp;nbsp;I understand there is a 
difference between the AIR app running from the AIR package, as opposed to code 
loaded from the net (e.g. another SWF file). All I want is a nice table 
describing what remote request APIs I can use in what situation.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Javadocs-style docs&amp;nbsp;suck. Admit it.&lt;/b&gt; I know AS3 and Java have 
a close relationship, but I hope you are not blind because of that. In case you 
are, I&amp;#39;ll tell you - Javadocs are useless, and the ASdocs, while they&amp;#39;re 
slightly better, they could be much better.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;There is no information about which version of Flex the particular API is 
available in, the differences if any, or which one it was introduced in. This is important, particularly 
if you&amp;#39;re just searching for APIs on google, and stumble across something, or 
need to use a certain version of Flex/AS. The way that MSDN does it with .NET 
Framework APIs is one way. This is one thing that has irked me to no end when I 
was using Java, and needed to know if a certain method was available in a 
certain JRE version.&lt;/li&gt;&lt;li&gt;The constructor is not highlighted in the docs. It is there, under methods, 
but given its particular importance, I think it should be given its own 
section.&lt;/li&gt;&lt;li&gt;There are still many areas that are missing examples and detail, and links 
to the Programming ActionScript 3.0 or the Flex 3 Help site with more 
information, e.g. &lt;a href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/xml/SimpleXMLEncoder.html"&gt;http://livedocs.adobe.com/flex/3/langref/mx/rpc/xml/SimpleXMLEncoder.html&lt;/a&gt;&amp;nbsp;- 
how is it encoded, what does it look like, any metadata tags to control 
serialization?&lt;/li&gt;&lt;li&gt;The &amp;#39;comments&amp;#39; section doesn&amp;#39;t have enough direction. There are many pages 
where the comments are people asking for help, rather than the intended purpose, 
which is to add to the content on that page.&lt;/li&gt;&lt;li&gt;The pages on Flex visual components lack visual diagrams. In fact, the 
entire API docs set is lacking in&amp;nbsp;diagrams, but it is most needed in visual 
component pages. I know the books and help site have them, so maybe better 
linkage is one solution, but is there much harm is visually describing concepts 
in the API docs?&lt;/li&gt;&lt;li&gt;There is a tendency to use big convoluted words to describe things, just 
because you can. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;LiveDocs search is crap.&lt;/b&gt; If I am on a Flex 3.2 API page, and 
I run a search for XML, I expect the results to be for Flex 3.2, not Flex 2.01, 
which all the results on the first results page are. Sure give me an option to 
widen my search, but I think that is a reasonable assumption.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;LiveDocs is slooooow. &lt;/b&gt;I don&amp;#39;t know why, but being new to 
Flex, and having to look up so many pages on it has gotten me quite annoyed at 
the delay. Any chance you can make it Google speed?&lt;/p&gt;
&lt;p&gt;&lt;strike&gt;&lt;b&gt;There are no coding guidelines &lt;/b&gt;(that I can find). Where are they?&lt;/strike&gt; Found them - &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions"&gt;http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions&lt;/a&gt;. Not complete, but quite extensive, although some reasoning in certain areas would be nice. &lt;/p&gt;
&lt;h3&gt;Editor&lt;/h3&gt;
&lt;p&gt;Of all the sections I&amp;#39;m complaining about, this is the BIGGEST PAIN POINT. If there is a better IDE out there, with similar support for Flex features, 
I would dump Flex Builder in a heartbeat.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Eclipse is sloooow. &lt;/b&gt;I have never experienced good 
performance with Eclipse-based IDEs, and this is no exception. The startup time 
is ridiculous. Other IDEs (Visual Studio, Komodo) all load and work faster. 
Maybe I need to tweak my Java settings...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The compiler is very, very, slow.&lt;/b&gt; Because I&amp;#39;m using a few 
open-source components from the SVN trunk, I don&amp;#39;t have the compiled SWC, and I 
haven&amp;#39;t found a handy way of compiling them into SWC without having to do 
-include-classes and listing all of them manually. No thanks. So every 
compilation of my fairly simple app takes at least a minute. It drove me up the 
wall until I found the &amp;#39;build automatically&amp;#39; setting and turned it off - it took 
minutes every time I saved a file. Again, maybe my Java settings need to be 
tweaked...&lt;/p&gt;
&lt;p&gt;Apparently, improvements are in the pipeline for Flex 4 (Gumbo).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The code checking mechanism seems to be dependent on the compiler, 
which is slow as I have already mentioned.&lt;/b&gt; This means that any errors 
(or warnings)&amp;nbsp;in my code are not picked up until I compile the project, which 
takes minutes. Why can C# and Java IDEs detect these things without compiling, 
while Flex Builder can&amp;#39;t? And I&amp;#39;m not talking complicated things here, but 
simple things like including the var keyword in a catch block (why it shouldn&amp;#39;t 
be there, when it is needed in for each loops&amp;nbsp;is another mystery).&lt;/p&gt;&lt;p&gt;&lt;b&gt;Classes that the compiler doesn&amp;#39;t think are referenced, are not compiled.&lt;/b&gt; I can understand the rationale here, but I use an IoC container (&lt;a href="http://www.spicefactory.org/parsley/"&gt;Parsley&lt;/a&gt; to be precise) that uses XML for configuration, and it is very annoying to have to use -include-classes (which is long and annoying), or use a useless class to hold references just so all the classes compile. There should be an option to make all classes within a folder compile. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Eclipse is too imposing.&lt;/b&gt; Why do I have to specify a 
workspace? I like to have my&amp;nbsp;projects all over the place, in my own perfectly 
organised world, who are you to tell me where I should put them? I should just 
be able to open any project I have, in any instance of Eclipse. It took me ages 
to discover that I apparently had to &amp;#39;import&amp;#39; projects into my workspace before 
using them if they were in a different location. Why can&amp;#39;t I just open them?&amp;nbsp;To 
make things worse, apparently Eclipse is so cool it can rewrite the meaning of 
the word &amp;#39;import&amp;#39; - import doesn&amp;#39;t necessarily mean it will copy the project 
into the current workspace, as it does in &lt;i&gt;every&lt;/i&gt; other program. Oh, and 
did I say that the Import dialog is confusing as hell? What&amp;#39;s the difference 
between importing a Flex Project, and an Existing Project into Workspace?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;No refactoring support (renaming a file doesn&amp;#39;t count).&lt;/b&gt; 
Adobe, I&amp;#39;m sick of typing all the boilerplate property getters and setters. Why 
can&amp;#39;t your IDE do them for me, like all other IDEs, and while we&amp;#39;re at it, how 
about extracting interfaces, extracting methods, promoting variables, converting 
between loops, and all the other convenient things other IDEs do &lt;i&gt;out of the 
box&lt;/i&gt; (although they do it even better with commercial addons).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Does not offer fixes for&amp;nbsp;errors it can determine potential solutions 
for.&lt;/b&gt; If I forget to implement an interface method, I expect to be able 
to click on the red X and select &amp;#39;implement method&amp;#39; and have the method 
signature added to the current class, ready for me to implement. If I forget to 
import a class before using it, I expect to click on the red X and be able to 
select which class I mean, and have the import declaration added for me 
automatically. Eclipse Java does all this and more.&lt;/p&gt;&lt;p&gt;From Eclipse, &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1059/original.aspx" border="0" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Find does not wrap around.&lt;/b&gt; I don&amp;#39;t know about anyone else, 
but most of the time when I&amp;#39;m searching for something in a class, I generally 
want to search the whole thing. There is no such option in Flex Builder, and 
worst of all, the search does not know how to wrap. So if you&amp;#39;re expecting it to 
wrap if it does not find any results in the selected direction, as you are quite 
allowed&amp;nbsp; to expect given most other apps do it, you will be surprised, then 
annoyed after you realise.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Code completion is very hit and miss.&lt;/b&gt; I don&amp;#39;t know how to 
replicate this because it is very random, but it is extremely frustrating when 
you need code completion to appear and it doesn&amp;#39;t, particularly when you&amp;#39;re 
still&amp;nbsp;learning the APIs and using code completion to discover APIs. This is in 
both AS3 and MXML, although MXML is much better. If they could add support for 
code completion before the dot is entered, I would be over the moon, e.g. if I 
type in Simp, code completion should show me matches including the 
SimpleXMLEncoder and the SimpleXMLDecoder. Alternatively, because I use _ for instance variables, I would like them to show as soon as I type _.&amp;nbsp; &lt;/p&gt;&lt;p&gt;From VS,&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1063/original.aspx" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;There is no code completion for CSS attributes.&lt;/b&gt; What were 
they thinking? Too difficult?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;There is no ASDoc or&amp;nbsp;Flex doc&amp;nbsp;integration for code 
completion.&lt;/b&gt; Apparently they think their methods are so descriptive, 
that even a one-liner describing them are unnecessary. Seriously guys, take a 
look at Visual Studio, where one-liners are given for each member of a class, 
and when you use a method, one-liners are given for each parameter in the 
signature. Even better, take a look at Eclipse Java or Netbeans, where a 
shortened version of the Javadocs is shown, with full working links. I was very 
impressed when I saw that.&lt;/p&gt;&lt;p&gt;From Netbeans,&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1061/original.aspx" border="0" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Properties don&amp;#39;t have type information in code completion, 
&lt;/b&gt;but everything else does. WTF?&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1066/original.aspx" border="0" alt="" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Object Browser anyone?&lt;/b&gt; I have missed this every time I leave 
the .NET universe. Why does no one else think it is useful to have the entire 
API (and any loaded libraries) shown in your IDE as a tree, so you can browse 
through it, find methods, and get basic information on them? This is so much 
better than browsing through the web-based API docs. You can even browse through the current project&amp;#39;s classes. Even better would be the class view in .NET &lt;a href="http://www.red-gate.com/products/reflector/"&gt;Reflector&lt;/a&gt;, which shows all inherited types, and classes that inherit from it, among other useful bits.&lt;/p&gt;&lt;p&gt;From VS,&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1064/original.aspx" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;I know my errors are important, but really, I don&amp;#39;t need to be told 
twice.&lt;/b&gt; For some odd reason, every error and warning I get in Flex 
Builder is repeated twice.&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1062/original.aspx" border="0" alt="" /&gt; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Where are my inherited members?&lt;/b&gt; Why doesn&amp;#39;t the Outline 
panel give me the option of showing inherited members? Sometimes it is useful to 
know what they are, to know what I should call or whatever.&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1065/original.aspx" border="0" alt="" /&gt; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Custom code folding regions, please.&lt;/b&gt; Another thing I miss 
when I leave the .NET universe. I like being able to define regions in my code, 
e.g. for properties, overridden methods, private methods, etc. and be able to 
shrink and hide them when I want to.&lt;/p&gt;&lt;p&gt;&lt;img src="http://driveactivated.com/photos/blog/images/1060/original.aspx" border="0" alt="" /&gt; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;If I don&amp;#39;t want the debug perspective, I don&amp;#39;t want it.&lt;/b&gt; 
Sometimes when I debug code, I would rather do it in the Flex Development 
perspective. Yet Flex Builder get angry, and when I step through code, it asks 
me on every line, if I want to open the Flex Debugging perspective, even if I 
had already clicked No. Why don&amp;#39;t I click the &amp;#39;don&amp;#39;t ask me again&amp;#39; box? Because 
I want it to, but the next time I start debugging, not this debugging session. 
Oh, and it would be nice if it would return me to the Flex Development 
perspective when I&amp;#39;ve terminated the debugging session.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Anti-aliasing in the editor. &lt;/b&gt;All my usual coding fonts look funny in Flex Builder, except the default Courier New, which sucks. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;More precise context menus, less hidden keyboard shortcuts.&lt;/b&gt; 
The right-click menu for a doc is way too big, and some things are not 
applicable. Run As, Debug As, Profile As? They belong in the Run/Debug menu, or 
the right-click menu of the project, not the current coding file.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;More surprises.&lt;/b&gt; I want to right-click somewhere, or do 
something, and have an option to do exactly what I was thinking, like the first 
time I discovered the &amp;#39;generate getters/setters&amp;#39; option in Eclipse &lt;img src="http://driveactivated.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;
&lt;p&gt;Ok, I think I&amp;#39;m done. There&amp;#39;s probably more, but this is plenty.&amp;nbsp;Just needed 
to vent all that steam that has been building up over the last few weeks.&lt;/p&gt;
&lt;p&gt;But seriously, Flex/AIR is a platform with a promising future, and maybe I am 
being unfairly harsh on it, given it is relatively new. It still&amp;nbsp;has some way to 
go before it will be the slick&amp;nbsp;desktop app platform that its marketing material 
proclaims it to be, but the momentum is definitely there. Indeed, it definitely 
has a&amp;nbsp;passionate developer base that is willing to overlook and workaround the 
shortcomings of Flex, and still produce stunning stuff.&amp;nbsp;This experience has just 
told me though, how important every part of the link is in the platform, and the 
weakest link really drags it down. &lt;/p&gt;
&lt;p&gt;At the end of the day, do I regret using Flex/AIR for this project? No. In 
hindsight, would I pick another set of tools? No. Would I consider Flex/AIR for 
a project in the future? Yes. Would I be a happier camper if they fixed all the 
above and more? Definitely &lt;img src="http://driveactivated.com/emoticons/emotion-1.gif" alt="Smile" /&gt;.&lt;/p&gt;&lt;p&gt;And if anyone knows of solutions to any of the issues above, I&amp;#39;d love to hear them. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;P.S. I&amp;#39;m running the free educational version of Flex Builder 3 Professional 
(available at &lt;a href="http://freeriatools.adobe.com/"&gt;http://freeriatools.adobe.com&lt;/a&gt;), and 
unlike other student editions of stuff, Adobe allows users of this version to 
create commercial apps too. Nice one.&lt;/p&gt;&lt;p&gt;&lt;b&gt;UPDATE (31/12/2008):&lt;/b&gt; I stand corrected - Flex 3.2 has a some kind of in-built generics support in it for &lt;a href="http://livedocs.adobe.com/flex/3/langref/Vector.html"&gt;Vectors&lt;/a&gt; (the java.utils.Vector type of Vector, i.e. a typed ArrayCollection in AS3 terms). Unfortunately, it doesn&amp;#39;t seem like you can use it in your own code though. &lt;/p&gt;&lt;p&gt;&lt;b&gt;UPDATE (03/01/2009):&lt;/b&gt; While I&amp;#39;m complaining - it would be nice if AIR apps defaulted to an icon, say the AIR icon, if no icon is specified, instead of the default OS no-icon icon, which in Windows, is not the prettiest icon out there, particularly the icon in the start bar, which for some reason is different to the others. &lt;/p&gt;&lt;p&gt;&lt;b&gt;UPDATE (04/01/2009): &lt;/b&gt;What, there&amp;#39;s no dispose event? How the hell am I supposed to do cleanup? The removedFromStage event fires when I minimise the app, or if I move the component around the display tree; very helpful.&amp;nbsp;&lt;/p&gt;&lt;p&gt;And the accordion doesn&amp;#39;t fire the CHANGE event if I change the selected panel programmatically, only if it was changed the user in the UI. I really fail to see the &lt;a href="https://bugs.adobe.com/jira/browse/SDK-8066"&gt;logic here&lt;/a&gt;. Apparently we&amp;#39;re supposed to use the ValueCommit event, which is very helpful, because it only tells me some value has changed on the Accordion control, not which one - not. &lt;/p&gt;&lt;p&gt;&lt;b&gt;UPDATE (09/01/2009):&lt;/b&gt; Found the coding conventions. See entry in post above. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://driveactivated.com/aggbug.aspx?PostID=1057" width="1" height="1"&gt;</description><category domain="http://driveactivated.com/blog/archive/tags/flash/default.aspx">flash</category><category domain="http://driveactivated.com/blog/archive/tags/web+apps/default.aspx">web apps</category><category domain="http://driveactivated.com/blog/archive/tags/Adobe/default.aspx">Adobe</category><category domain="http://driveactivated.com/blog/archive/tags/programming/default.aspx">programming</category><category domain="http://driveactivated.com/blog/archive/tags/techCollective/default.aspx">techCollective</category><category domain="http://driveactivated.com/blog/archive/tags/AIR/default.aspx">AIR</category><category domain="http://driveactivated.com/blog/archive/tags/Flex/default.aspx">Flex</category><category domain="http://driveactivated.com/blog/archive/tags/RIAs/default.aspx">RIAs</category><category domain="http://driveactivated.com/blog/archive/tags/IDEs/default.aspx">IDEs</category></item></channel></rss>