<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Farata Systems</title>
	<atom:link href="http://flexblog.faratasystems.com/feed" rel="self" type="application/rss+xml" />
	<link>http://flexblog.faratasystems.com</link>
	<description>A blog about our experience with Adobe Flex</description>
	<lastBuildDate>Tue, 31 Aug 2010 01:46:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Victor&#8217;s gonna kill me, but I must show you this</title>
		<link>http://flexblog.faratasystems.com/2010/08/27/victors-gonna-kill-me-but-i-must-show-you-this</link>
		<comments>http://flexblog.faratasystems.com/2010/08/27/victors-gonna-kill-me-but-i-must-show-you-this#comments</comments>
		<pubDate>Fri, 27 Aug 2010 12:36:28 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[blaseds]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=904</guid>
		<description><![CDATA[While most of the Flex developers simply enjoy life, Farata Systems work hard to make their lives even more enjoyable. I want you to have a quick look at the beta version of Clear Data Builder 4.1 that generates Adobe Flex CRUD application using Hibernate, JPA 2.0, BlaseDS on the server side. This is one [...]]]></description>
			<content:encoded><![CDATA[<p>While most of the Flex developers simply enjoy life, Farata Systems work hard to make their lives even more enjoyable. I want you to have a quick look at the beta version of Clear Data Builder 4.1 that generates Adobe Flex CRUD application using Hibernate, JPA 2.0, BlaseDS on the server side. This is one of the screencasts  we give to our developers for private testing only, and was never ever intended for public use . But if there are some kamikaze (a.k.a. early adopters) among the readers of this blog, watch this video and let us know if you&#8217;d like to take CDB 4.1 beta for a ride. Enjoy<strong><a href="http://www.cleartoolkit.com/Screencasts/4_programmingCDB41/index.html"> the show</a></strong>.</p>
<p>Don&#8217;t tell Victor I showed you this cause he&#8217;s going to kill me for leaking a product that&#8217;s still in private beta.  But if you want to see hem personally showing you this process + something else (even cooler), enroll into our one day symposium in New York City on September 10, 2010: <a href="http://www.eventbrite.com/event/770788449">http://www.eventbrite.com/event/770788449</a>. To get $50 off the price, enter discount code njflex.</p>
<p>Yakov Fain<br />
P.S. If you won&#8217;t see me around, you know who to blame for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/08/27/victors-gonna-kill-me-but-i-must-show-you-this/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Clear Data Builder 4.0 doc</title>
		<link>http://flexblog.faratasystems.com/2010/08/26/new-clear-data-builder-4-0-doc</link>
		<comments>http://flexblog.faratasystems.com/2010/08/26/new-clear-data-builder-4-0-doc#comments</comments>
		<pubDate>Thu, 26 Aug 2010 15:39:38 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[CDB]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=899</guid>
		<description><![CDATA[I&#8217;ve uploaded the pdf, which contains the description of the hands-on  workshop on CDB4.0 that we ran for one of our customers. Currently we are working on the September release of CDB 4.1 that will  automate data persistence via Hibernate. The appropriate section will be  added to the workshop when ready. The [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve uploaded the pdf, which contains the description of the hands-on  workshop on CDB4.0 that we ran for one of our customers. Currently we are working on the September release of CDB 4.1 that will  automate data persistence via Hibernate. The appropriate section will be  added to the workshop when ready. The Java branch of code generation will have substantial changes in CDB 4.1, but the current doc may be helpful in understanding of the CDB basics.</p>
<p>You can download it in the doc section of Clear Toolkit on Sourceforge: <a href="https://sourceforge.net/projects/cleartoolkit/">https://sourceforge.net/projects/cleartoolkit/ </a></p>
<p>The beta version of CDB 4.1 will be presented during our symposium on September 10, 2010 in New York City <a rel="nofollow" href="http://www.eventbrite.com/event/770788449" target="_blank">http://www.eventbrite.com/event/770788449</a> . Enter the code njflex to get $50 off the ticket price.</p>
<p>Yakov</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/08/26/new-clear-data-builder-4-0-doc/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What is the best way to integrate with native Android interface</title>
		<link>http://flexblog.faratasystems.com/2010/08/16/what-is-the-best-way-to-integrate-with-native-android-interface</link>
		<comments>http://flexblog.faratasystems.com/2010/08/16/what-is-the-best-way-to-integrate-with-native-android-interface#comments</comments>
		<pubDate>Mon, 16 Aug 2010 04:23:01 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=897</guid>
		<description><![CDATA[As the time passes by without commercial release of AIR for Android, the case to integrate all devices (phone, tablets, laptops and servers) directly becomes more important for enterprise and consumer markets. That is currently done by managing services in the cloud but that architecture has obvious implications with performance, bandwidth, cost and security. Much [...]]]></description>
			<content:encoded><![CDATA[<p>As the time passes by without commercial release of AIR for Android, the case to integrate all devices (phone, tablets, laptops and servers) directly becomes more important for enterprise and consumer markets. That is currently done by managing services in the cloud but that architecture has obvious implications with performance, bandwidth, cost and security. Much simpler solution would be to implement p2p communications, but it has some uncommon obstacles:<br />
1. Implementing direct socket bridge based on BlazeDS or Merapi on Android is tough as it misses most of java.bean.* package related to introspection thus making port very tough &#8211; unless you migrate additional 500KB of JDK code or limit the scope of exchange objects.<br />
2. Placing proxy server embedded in AIR application would definitely solve the problem by translating AMF in Java ObjectStream or similar lightweight technology but it would require your desktop to run either tomcat or merapi like solution.<br />
3. Implementing code generator to handle each request signature translating from AMF request into specialized reader/writer. For most cases it would be quite simple as most request will have standard intent/dataUR/extras request coming in and well structured responses coming out</p>
<p>WIth commercial release of Android the need for socket server might go away as long as AIR provides extended URLRequest object to send all information needed for Android interprocess communications as well as mode for execution of such requests. Would be much simpler task to implement on AIR level of course then building full blown bridge and class loader.</p>
<p>Sincerely<br />
Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/08/16/what-is-the-best-way-to-integrate-with-native-android-interface/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Time for Open Source Java Alliance</title>
		<link>http://flexblog.faratasystems.com/2010/08/13/time-for-open-source-java-alliance</link>
		<comments>http://flexblog.faratasystems.com/2010/08/13/time-for-open-source-java-alliance#comments</comments>
		<pubDate>Fri, 13 Aug 2010 20:28:05 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=893</guid>
		<description><![CDATA[Oracle managers are clearly out of their minds. Rather then embrace huge potential Android brings to Java market thanks to Google they are trying to kill it again &#8211; the same way they killed it on Microsoft and Apple platform &#8211; by inserting themselves as &#8220;guides&#8221; on innovation. Turning Java from legacy to red-hot environment [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle managers are clearly out of their minds. Rather then embrace huge potential Android brings to Java market thanks to Google they are trying to kill it again &#8211; the same way they killed it on Microsoft and Apple platform &#8211; by inserting themselves as &#8220;guides&#8221; on innovation. Turning Java from legacy to red-hot environment again was not an easy task. </p>
<p>After 4 month of Android development I have to complement Google on cleverness and quality of their work. There is more innovation in the way applications, security, and new technologies (voice, messaging, small factor UI) become practical than I have seen in all other technologies combined including iPhone (used it for 3 years), Linux on mobile (have 3 different devices), Java ME, etc. </p>
<p>The patents Google allegedly infringed on are laughable from technology perspective as they are not anywhere close to the core technologies. In short term I believe they can be easily bypassed (with actual benefit to the platform!) by minor changes to the VM and transforming engine that repackages Java byte code to the appropriate ARM level, or handle repackaging on the device itself. That would easily solve formal infringement issues but I do not know if it would matter for legal system.      </p>
<p>There are few outcomes none of which seems to be good &#8211; licensing or forcing Oracles approval on the changes. Second option is even worse as in my mind Oracle stopped being technology company over decade ago. At this time it is holding company that buys and &#8220;milks&#8221; legacy products &#8211; with appropriate mind set and people.</p>
<p>One thing is clear &#8211; there is a need to create Java Open Source Alliance to replace Oracle dependency. It has to examine all Oracle patents and steer away in VM implementation that is based on patents that can be challenged by Oracle. That is the only way to keep momentum Android built in Java space and provide Oracle with expiration notice on their stronghold on Java technology. I would also strong backlash from Java community back at Oracle &#8211; I would really doubt any Java professional facing Oracle&#8217;s strategy that diminishes ones ability to make living would recommend or support their products. </p>
<p>Sincerely<br />
Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/08/13/time-for-open-source-java-alliance/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The unofficial history of Java applets</title>
		<link>http://flexblog.faratasystems.com/2010/08/10/the-unofficial-history-of-java-applets</link>
		<comments>http://flexblog.faratasystems.com/2010/08/10/the-unofficial-history-of-java-applets#comments</comments>
		<pubDate>Wed, 11 Aug 2010 02:27:47 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[javafx]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=884</guid>
		<description><![CDATA[Fifteen years ago there was no iPhone and Android. Web browsers were hot. Netscape market share was over 90% &#8211; they didn&#8217;t have competition.The situation changed when Microsoft has introduces Internet Explorer (me too, me too). Back in 1998, there was an infamous law suite between Microsoft and Sun Microsystems – the former started quietly [...]]]></description>
			<content:encoded><![CDATA[<p>Fifteen years ago there was no iPhone and Android. Web browsers were hot. Netscape market share was over 90% &#8211; they didn&#8217;t have competition.The situation changed when Microsoft has introduces Internet Explorer (me too, me too). Back in 1998, there was an infamous law suite between Microsoft and Sun Microsystems – the former started quietly introducing their own class libraries to Java breaking the write-once-run-anywhere idea of Sun that back then seemed to be achievable. Sun won that $10B law suite. But as the saying goes, they won the battle but lost the war.</p>
<p>Angry Microsoft refused to include upgrades to JVM that came with Internet Explorer, which seriously hurt applets popularity – the end user couldn’t just open a Web page to see the applet that required, say 1.3 version of JVM. They’d need to first download the proper version of JVM, and only then the applets that were written with the assumption that JVM 1.3 was available would work. The process of downloading the right JVM Plug-in was a multi-step process, and a truck driver from Alabama wouldn’t be able to go through it.</p>
<p><strong>Update.</strong> Two days after I published this blog, the news broke that <a href="http://news.cnet.com/8301-30684_3-20013546-265.html">Oracle decided to sue Google</a> for the &#8220;wrong use&#8221; of Java on Android platform. Does Larry Ellison have short memories? Sun literally killed Java on the desktop because of that old law suit with Microsoft. In the worst case scenario, if Oracle will win this law suit, Google may do the same thing as Apple did on the iOS and ban Java from this very promising Android platform. Given the fact that five years from now large portion of the applications will consist of a mobile device communicating with the cloud, Java will be seriously damaged. Imagine how many top-notch developers can be added to Java and JavaFX engineering teams at Oracle if the money spent on lawyers would be saved? Oracle, please stop!</p>
<p>High penetration of the required runtime environment and the ease of its upgrade are the crucial moments for any Web-based technology. Adobe Flash Player shines in this area today (sorry, Steve). Flash Player is also a virtual machine with a small memory footprint (1.5Mb), and its installation takes under 20 seconds after one button click. For years, the size of the JVM Plug-in was about 16Mb and install was complicated for a non-programmer, and (the rumor has it) – it’s a lot smaller now.</p>
<p>This situation has changed after the release of Java 6 update 10, which includes so called next-generation Java Plug-in.  Now applets don’t run in the JVM packaged with the Web browser, but run in a separate JVM launched by the Java Plug-in. The applet still appears in the Web browser’s window, but now it doesn’t depend on the goodwill of the browser vendor to include the latest Plug-in. You can read more about this Java Plug-in at <a href="https://jdk6.dev.java.net/plugin2/">https://jdk6.dev.java.net/plugin2</a>.</p>
<p>The other major change introduced in the next-generation Java Plug-In is ability to launch Java applets directly from JNLP (Java Network Launch Protocol) files, which in the previous releases were used only in Java Web Start technology that allowed local deployment of the applications over the network. As of Java 10.6.10 you can use the JNLP meta descriptors to launch applets too. JNLP support is described in details at <a href="http://www.oracle.com/technetwork/java/javase/index-142562.html">http://www.oracle.com/technetwork/java/javase/index-142562.html</a>.</p>
<p>Earlier versions of HTML standard included the tag &lt;applet&gt; to incorporate Java applets into HTML page. But as of HTML 4.01 this tag has been deprecated and you should use the tags &lt;object&gt; for users who like Internet Explorer or &lt;embed&gt; for other Web browsers. But Oracle, the company behind Java, recommends using &lt;applet&gt; for Web pages accessed through the Internet and &lt;object&gt; or &lt;embed&gt; for intranet-based Web sites. The main reason being that Web browser vendors are infamous for being inconsistent of implementing HTML standards, and it’s safer to use tried and true &lt;applet&gt; tag to get predictable look and feel of the Web pages that host Java applets. But intranet is a more controlled environment. You can read about the differences of embedding applets with these tags at <a href="http://download.oracle.com/javase/6/docs/technotes/guides/plugin/developer_guide/using_tags.html">http://download.oracle.com/javase/6/docs/technotes/guides/plugin/developer_guide/using_tags.html</a>. When young and old kids (sorry Steve) tell that HTML 5 will change the world, it&#8217;s funny.</p>
<p>The deployment options for applets have been extended as of release of Java 6 update 10. To learn all the options of applet deployment in depth, refer to the Oracle document titled “Java Rich Internet Applications Deployment Advice” available at <a href="http://download.oracle.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html">http://download.oracle.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html</a>.</p>
<p>What’s the next step in applet’s evolution? You’ll be creating UI for the Web-based applications with a relatively new language called JavaFX. In a month, I&#8217;ll be trying to attend every JavaFX technical session at JavaOne conference to see if it&#8217;ll become a real competition to Adobe Flex and Microsoft Silverlight. By the way, anyone heard any noise about Apple not letting JVM on the iPhone? Neither did I. Do you know why?</p>
<p>If you&#8217;re not into Java applets, consider attending our <a href="http://www.eventbrite.com/event/770788449">Third Annual Enterprise Flex Symposium</a> in New York City. It’s a small event where attendees and presenters will talk turkey about Adobe Flex.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/08/10/the-unofficial-history-of-java-applets/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>To use or not to use Flash/Flex portals for Web sites</title>
		<link>http://flexblog.faratasystems.com/2010/08/01/to-use-or-not-to-use-flashflex-portals-for-web-sites</link>
		<comments>http://flexblog.faratasystems.com/2010/08/01/to-use-or-not-to-use-flashflex-portals-for-web-sites#comments</comments>
		<pubDate>Sun, 01 Aug 2010 12:45:19 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=880</guid>
		<description><![CDATA[Last week I was thinking about design of the main view of a new project for a new client of ours. This application is interesting in that it can deployed as an enterprise RIA as well as a tool to be used by any consumer connected to the Internet.
The mockup of the main view looks [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I was thinking about design of the main view of a new project for a new client of ours. This application is interesting in that it can deployed as an enterprise RIA as well as a tool to be used by any consumer connected to the Internet.</p>
<p>The mockup of the main view looks clearly like a Web portal with a number of portlets, which can be maximized, moved around, and independently communicate with the server(s).  But… This Web site has to be discoverable to bring more and more new customers.<br />
Here comes the quiz. Can you see why the previous two paragraphs have an important logical issue, which represents a misconception sitting in minds of many creators of Web content?</p>
<p>Being a Java developer, the JSR 168 is always in my mind and the first annoying thought is, “I can create a traditional HTML/JavaScript Web site with portlets, some of each are Flash Player SWF’s and the others are regular HTML/JS markup. This will give to search engines enough of a textual chew to digest plus the benefits of more animated, engaging, and better performing (sorry, Steve) Flash content”.  If some of you want to bring these dopey and groundless Adobe statements that Google is indexing Flash content with special secret, mighty, but headless Flash Player, please, get real or show me the money.</p>
<p>I know how to create a well looking and performing Flex/Flash based portal. I know how to cut this RIA into pieces, how to run this project, how split the job between team members located all around the globe. I don’t know just one thing – how to make this Flash-based portal d-i-s-c-o-v-e-r-a-b-l-e on the Web.</p>
<p>And here comes the answer to my quiz. Stop confusing Web sites and rich Internet applications! Got it? OK, let me re-phrase it. A Web site and RIA are created for different purposes.  Creating an HTML/JS Web site to present, promote, and make discoverable your RIA is one independent track of your project. And a-f-t-e-r the random user somehow landed on this Web page offer him or her a little link to the real beauty – a Flash-based (sorry, Steve) portal.</p>
<p>That’s all folks. It’s Sunday morning, and I need to go out and get some stuff for the barbecue – having more than 20 people over today.<br />
If you want to discuss it in person, consider attending our <a href="http://www.eventbrite.com/event/770788449">Third Annual Enterprise Flex Symposium</a> in New York City. It’s a small event where attendees and presenters can have face-to-face conversations.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/08/01/to-use-or-not-to-use-flashflex-portals-for-web-sites/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notes of a lifelong IT student</title>
		<link>http://flexblog.faratasystems.com/2010/07/20/notes-of-a-lifelong-it-student</link>
		<comments>http://flexblog.faratasystems.com/2010/07/20/notes-of-a-lifelong-it-student#comments</comments>
		<pubDate>Wed, 21 Jul 2010 02:34:04 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[it training]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=875</guid>
		<description><![CDATA[Have you ever attended software training? If yes, have you enrolled  voluntarily or your employer required you to get re-trained to get extra  points for your annual review? If so, was that class useful other than  getting these points?
In my blog “Notes of a traveling  contract trainer ” I promised to [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever attended software training? If yes, have you enrolled  voluntarily or your employer required you to get re-trained to get extra  points for your annual review? If so, was that class useful other than  getting these points?<br />
In my blog “<a href="/notes_of_traveling_contract_trainer.htm">Notes of a traveling  contract trainer</a> ” I promised to write a sequel from the student’s  point of view. You got it.</p>
<p>If you work for a large corporation,  the chances are high that you are entitled for taking one or two  training classes each year. In some cases you even get to choose which  classes to attend. I mean off-sight training. But most likely, you are  enrolling a class offered onsite by an invited instructor.</p>
<p>IT  training classes can be divided into two main categories: five full  consecutive days or two-three months long evening classes. The latter  are for people who want to get fundamental training and have time to  study and absorb the material.<br />
If you are planning to learn new  software by attending a five-day instructor-led class, the most  efficient way is… to learn it by yourself before the class.  I’m not  kidding. This way you’ll know what questions to ask the instructor  during his/her short visit.<br />
I’ll give you an example from my own  career.  Back in 1998, I was a client-server developer (PowerBuilder and  Visual Basic) who wanted to switch to Java. Being an independent  contractor, I had to switch gears fast to make sure that my billable  rate won’t suffer. How can one quickly convert from PowerBuilder expert  to a senior enterprise Java developer?  J2EE was completely different  comparing to any client-server technology.</p>
<p>Learning the syntax  of yet another language is the easiest part, unless it’s an  Objective-C.  But understanding the architecture and the best practices  of new environment is always a challenge. To make the story short, I  went through a couple of Java books by myself, and then enrolled to a  five-day class “Developing J2EE applications with BEA Web Logic”. I got  lucky – the instructor was good (he had the real-world experience). Five  days and $2500 later, I was ready to work on real world Java projects. I  still believe that attending an instructor-led class after  self-studying is the best way to learn.</p>
<p>Computer-based training  is usually boring.  You can’t ask questions, but have to take  computer-based tests. Multiple-choice SAT-like exams are equally stupid  everywhere. They just prove that you are good at taking multiple choice  exams.</p>
<p>Instructor-led training remains your best choice.  In the  class, use your own laptop to make this training efficient. Contact the  instructor prior to class and ask what software has to be installed.  These days, unless you are getting into SAP or CICS-like software, you  can download and install evaluation copy to your laptop. It’s better  than using a desktop provided in the classroom, because you take with  you the software with training files after the class is over. It’s  properly configured with the help of the instructor and all samples  work. Add to this well written courseware (is it well written?) and you  are armed and dangerous.</p>
<p>If you are not sure where to find a  reputable instructor for the software you want to learn, find the  conferences related to this software. Pretty often, one day intensive  training is offered the day before or after the conference. Instructors  that are approved to teach a class at a major conference are usually  good. I’m not saying that you have enroll into this short class, but  google the name of the instructor – the chances are that s/he teaches  longer classes as well.</p>
<p>Check the training catalogs of your local  universities, where evening classes in schools of continuing education  are often taught by practitioners.</p>
<p>While in class, try to get  as much help from your instructor as possible. Most of the instructors  enjoy helping students. Don’t be shy. There’s no such thing as stupid  questions in the classroom.</p>
<p>At the end of the class, never forget  to fill out evaluation sheets. Instructors have to present them to their  managers. Be nice to them. Even if you didn’t like something in this  training, leave your comments and submit your evaluation sheet.</p>
<p>In  September-October of 2010, I’ll be wearing a student’s hat twice and be  an presenter in one event. I’ve already registered into two  conferences: <a href="http://www.oracle.com/us/javaonedevelop/index.html">Java One  by Oracle</a> and <a href="http://max.adobe.com/">Adobe MAX,</a> and I know exactly what  I’m looking for besides networking. At JavaOne I’ll attend every  technical session on the upcoming JDK 7 release, and at MAX, my main  educational goal is getting good at development for Android platform.  But first, I’ll be one of the presenters at the <a href="http://www.eventbrite.com/event/770788449">Third Annual Flex  Symposium</a> here in New York City.  I like being in classrooms.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/07/20/notes-of-a-lifelong-it-student/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enterprise Development with Flex</title>
		<link>http://flexblog.faratasystems.com/2010/07/11/enterprise-development-with-flex</link>
		<comments>http://flexblog.faratasystems.com/2010/07/11/enterprise-development-with-flex#comments</comments>
		<pubDate>Sun, 11 Jul 2010 13:12:47 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[enterprise flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=870</guid>
		<description><![CDATA[It’s been almost four months since our book “Enterprise Development with Flex”  been released in print by O’Reilly.  Since day one, it remains in Amazon’s bestseller’s list in several IT categories. This gives me a great feeling given the fact that Amazon re-calculates their stats hourly.
I’d like to share with you some interesting facts that [...]]]></description>
			<content:encoded><![CDATA[<p>It’s been almost four months since our book “<a href="http://amzn.to/ag1RVx">Enterprise Development with Flex</a>”  been released in print by O’Reilly.  Since day one, it remains in Amazon’s bestseller’s list in several IT categories. This gives me a great feeling given the fact that Amazon re-calculates their stats hourly.<br />
I’d like to share with you some interesting facts that from the times when this book was in its proposal stage. If you carefully look at the book cover, you’ll notice a little logo and the text Adobe Developer Library.  To earn the right to be included in this library our book proposal had to be approved by Adobe engineers. We made it, and are grateful to excellent software engineers from Adobe Flex team, who put their trust in our ability to write such a complex and advanced book.</p>
<p>After the approval process was done, O’Reilly sent us the Flex team members feedback without revealing the names of engineers who wrote them. Most of them were 100% positive. But our special thanks go to one unknown member of Flex team who wrote something like, “I don’t agree with many of the things that these authors write about Flex in their blogs and articles, and I’d rather not approve them, but I will because there are not many people in the industry who are capable of writing such a book.” We don’t know your name, but we consider this assessment to be the best compliment we’ve received so far.</p>
<p>Looking forward to meeting with the members of Adobe Flex team in October at MAX conference.  The authors of this book are going to attend this event in LA in October.</p>
<p>Our praise goes to the O’Reilly cover designers who correctly visualized three authors of this book without ever meeting them in person.</p>
<p>If you bought this book, Farata’s team would really appreciate if you’d spend 10 minutes and publish your review of this book on Amazon. It doesn’t have to be long, but we are looking for getting your honest opinion about our work.</p>
<p>Your truly,<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/07/11/enterprise-development-with-flex/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Disappointed with Adobe</title>
		<link>http://flexblog.faratasystems.com/2010/06/22/disappointed-with-adobe</link>
		<comments>http://flexblog.faratasystems.com/2010/06/22/disappointed-with-adobe#comments</comments>
		<pubDate>Wed, 23 Jun 2010 03:05:31 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Adobe]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=865</guid>
		<description><![CDATA[Was not planning to write this post. It was ignited by the  “Disappointed with Flex” article posted by Valery Silaev, our lead Flex/Java developer.  I’ve been working with Valery on a couple of projects. He’s good software developer. And when he says that he’s disappointed with Flex 4, you should listen.
I really value people who [...]]]></description>
			<content:encoded><![CDATA[<p>Was not planning to write this post. It was ignited by the  “<a href="http://flexblog.faratasystems.com/2010/06/22/dissapointed-with-flex-4">Disappointed with Flex</a>” article posted by Valery Silaev, our lead Flex/Java developer.  I’ve been working with Valery on a couple of projects. He’s good software developer. And when he says that he’s disappointed with Flex 4, you should listen.</p>
<p>I really value people who speak up freely and have something to say. Valery is disappointed with Flex 4, but I’d like to take it one step further. I’m disappointed with Adobe.<br />
To put it simple, Adobe is sloooooow. I mean really slow, and I’m not sure what’s the reason.  I know some people from Flex team. They are smart. They can deliver given the right support from top management and proper investment, which is definitely not there.</p>
<p>Let me build the case. Slowly.<br />
Four years ago, when Adobe purchased Macromedia, I was looking for a decent tool for development of the enterprise Web applications.  At that time I was disappointed with Java Swing. Wrong decisions at the top level of Sun Microsystems resulted in having 75% of the computers running Internet Explorer with… ten years old Java run-time. Sun Microsystems won the lousy $10B law suit with Microsoft back in 1998, but lost the battle. Their runtime (yes, the JVM) is not installed at the consumers’ computers.</p>
<p>Four years ago, Adobe’s Flash Player (it’s a VM too) gave me some hope. The runtime was there, the library of rich components  was there too, installing Flash Player was piece of cake. I started working with Flex.</p>
<p>This new for me Flex/Flash community was a bit unusual after Java. It was small.  I had a feeling as if we are in a small country club chanting, “We are the best”.  Flex developers knew each other by names. Adobe Flex technical evangelists were Gods. This was different from Java community of six million of professional developers.</p>
<p>But Adobe didn’t have competition in the area of enterprise rich Internet applications in 2006, 2007, 2008&#8230; Until the greatest “Me too” firm from Redmond, WA realized that RIA is the right place to be and IE is not the only browser people have. They started working on this Silverlight thingy. Two years ago they released the 1.0 version that could be ignored – nothing but video streaming was there. At the same time Adobe released Flex 3, which had pretty much everything: 98% penetration of runtime, rich library of components, fast communication protocols, and the server-side component LCDS, that nobody but filthy rich Wall Street firms could afford.</p>
<p>Two years later, Microsoft released three more versions of Silverlight, and the only thing that stopped them from presenting a serious threat to Flex was low penetration of their runtime. Microsoft has tons of cash and excellent engineers. During the same period of time, Adobe has released Flex 4 in hard labor. It took Adobe two years to release the next incomplete version of Flex. Why?</p>
<p>Being a Java developer, I was watching closely the evolution of JavaFX, yet another wannabe player in RIA.  I clearly a similar pattern there. Top-level management proclaims at every keynote that “We are the best” without giving enough juice for engineering teams that work hard developing a product.<br />
The bad guy, Steve Jobs, doesn’t even know what Flex is. He’s not happy with Flash Player. Need to admit, he’s not playing by the rules trying to say that Flash Player is junk and a main reason that crashes the OS. He’s bad, but he’s not stupid. Adobe couldn’t offer a better response than “We love Apple”.</p>
<p>Yes, Flash Player is installed on 98% of desktops, as if we don’t know that not many consumers are using desktops today, and in five years they will become minority.<br />
Steve Jobs, the bad guy, made Adobe moving just a little bit faster and they finally released Flash Player 10.1 in 18 months (!) after the 10.0 release.</p>
<p>Two years for the next and incomplete version of Flex. Eighteen months for 0.1 upgrade of Flash Player. Dumb pricing policy on LCDS that makes it unaffordable for even a small group of loyal customers. Not a Wall Street giant? Get out of here. Is this the way to treat customers?<br />
Let’s get back to the tooling. This smart idea to bring together designers and developer gave birth to yet another prototyping tool called Flash Catalyst. Is it more than just a prototyping tool? Tell me why?</p>
<p>Here comes the Flash Builder (formerly Flex Builder). Flash developers (they haven’t seen any better) were so happy with Flex Builder 3… From the Java developer’s perspective, this was a mediocre and damn slow Eclipse plugin. Flash Builder 4 after two years of development was not a major improvement either. I’m not sure why JetBrains doesn’t want to invest a couple of rubles and add a WYSIWYG designer for Flex. As soon as they do it – Flash Builder is brain dead.</p>
<p>The next target is Flex 4 SDK.   The new Spark library of components with separating the functionality of components and their skinning implemented just half of the components comparing with Flex SDK 3. In two years they could have done better if they were a large company catering for developers.  But they are not. Until Photoshop and PDF remain their main source of revenue, the tooling for software developers will be pushed aside.</p>
<p>Adobe was and remains a small company. They do what they can.  And it doesn’t seem that they can do much more for us, developers.</p>
<p>Yakov Fain<br />
P.S. This is my personal opinion. My employer may think differently.</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/06/22/disappointed-with-adobe/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Disappointed with Flex 4</title>
		<link>http://flexblog.faratasystems.com/2010/06/22/dissapointed-with-flex-4</link>
		<comments>http://flexblog.faratasystems.com/2010/06/22/dissapointed-with-flex-4#comments</comments>
		<pubDate>Tue, 22 Jun 2010 18:05:04 +0000</pubDate>
		<dc:creator>Valery Silaev</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[flex 4]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=859</guid>
		<description><![CDATA[After spending some time working with Flex 4 on a real project, I can&#8217;t say I&#8217;m happy with this product. My list of complains  is based on moderate sized project, 5 months, 4 developers, WebService-only  back-end.
1. Flash Builder 4 has lots of issues &#8211; more than Flex  Builder 3. AS of today it [...]]]></description>
			<content:encoded><![CDATA[<p>After spending some time working with Flex 4 on a real project, I can&#8217;t say I&#8217;m happy with this product. My list of complains  is based on moderate sized project, 5 months, 4 developers, WebService-only  back-end.</p>
<p>1. Flash Builder 4 has lots of issues &#8211; more than Flex  Builder 3. AS of today it has lots of bugs:<br />
-it doesn&#8217;t release resources;<br />
-debugger does not allow to run several instances and consumes a lot of  resources;<br />
-debugger intercepts all network calls and the debugging proxy  is terribly slow and inefficient;<br />
-code navigation between several  projects is absolutely impossible;<br />
-compiler is unpredictable and slow;<br />
-it periodically tries to do incremental compilation, even if you  explicitly tell it not to do so &#8212; and you have to disable incremental  compilation, because it&#8217;s slower than full rebuild of all related  projects with Maven.<br />
-Help system is not well designed &#8212; Adobe moved  help to a separate AIRr application, in-place contextual help is  non-existent; search always shows one link &#8212; &#8220;yes, there are probably  some topics for your query &#8212; open separate application to search again&#8221;</p>
<p>2. Flex compiler is broken<br />
It&#8217;s slow. It&#8217;s slower than any previous  version I&#8217;ve used. And it&#8217;s buggy. Periodically it shows some cryptic  messages like &#8220;there is no x or y or width or height properties on  UIComponent&#8221;. It never points to exact source of problem &#8212; and I doubt  it exists. Because sometimes fix is to set  &#8220;-keep-generated-actionscript&#8221; flag on. And sometimes off. And if it  doesn&#8217;t help then the fix is to reorder attributes in MXML tags. Just  insane. And I can&#8217;t find the exact root of these messages, the only  thing I can say for sure that they are caused by new MXML skins &#8212; no  skins, no errors.</p>
<p>3. The new Spark library is over-engineered.<br />
I worked on some Java Swing  projects some time ago. It seems that Adobe takes the Swing route,  however Flex becomes popular just because of the opposite &#8212; it was way  far simpler than Swing. Flex ideology was &#8220;keep simple things simple,  make complex things possible&#8221;. Now it turns to be the Swing ideology:  framework usage is irrelevant, the only relevant thing is framework per  se, and it should be perfect.</p>
<p>I can&#8217;t do a lot of things with  Spark I was able to do with MX. Icons in buttons? Develop descendant  component of Button, define new parts and develop separate skin.  ComboBox where items in drop-down are large than input field? Develop  own skin &#8212; just copy-paste and tweak a bit. Paddings? What paddings?  It&#8217;s not a css attribute any longer, extend and develop own skin.  Left/right/top/bottom? You can&#8217;t customize this via css, or develop your  skin if you truly need this option.</p>
<p>But architecturally Spark is  beautiful, no doubt. Astronauticaly beautifull architecture, if Joel  Spolsky permits me to use this term.</p>
<p>4. New Spark library is incomplete.<br />
Yes, this statement  doesn&#8217;t contradict with [3]. Being overdesigned it&#8217;s missing a lot of  functionality from MX: no Calendar, no DateInput, no ColorPicker, no  PopUpButton etc. No clone for MX SWFLoader/Image. There is no complex  containers at all (like Accordion and TabNavigator) Needless to say,  there is no advanced controls like DataGrid and the supplied &#8220;proxies&#8221;  for ItemRenderers confirm that there are will be none any time soon.</p>
<p>5. New states engine encourages unmaintainable code<br />
Previously we  have states with explicit overrides. All data related to override was  co-located, so it was easy to see what and when changes. There were  inheritance of states, and it was sufficient. There were no groups, but  when you need state groups &#8212; then 99.9% of times you in fact have to  extract part of component as sub-component, and coordinate isolated  state changes there. But now the great property.inStateFoo=&#8221;xyz&#8221;  notation comes.</p>
<p>Now you have to scan over tens or hundreds of lines of  code and check all and every includeIn / excludeFrom attribute and  decompose them back to the very same old &#8220;overrides&#8221;. In short, when you  are debugging states you have to do job of compiler but without the  help of compiler. And the existence of state groups multiples the  complexity by the factor of ten. It&#8217;s a Ruby-way productivity &#8212; it&#8217;s  easy to develop a sketch / prototype, it&#8217;s a nightmare to polish this  sketch to be a real product and it&#8217;s absolutely impossible to support  it. But sure, you can start quickly, who cares about the rest&#8230;</p>
<p>6.  Vectors (Flash-10 related, not just Flex 4)<br />
Vector is a  canonical example of a half-pregnant woman. Hey, developers! Use new  features -  Vectors and Generics (or this is templates??? we are not sure  on our own). Yep, it&#8217;s cool, Vector is a parametrized type. Though,  there is no type covariance/contr-variance and no type bounds in syntax.  So you have to cast data Vector whenever it&#8217;s declared as parameter or  as a return value. But who cares?</p>
<p>7. Text engine (Flash-10 related, not Flex 4 only)<br />
It&#8217;s great  that &#8220;Gordon works on text&#8221;, and new engine is indeed superior. But may  we have both Spark and MX on same engine by default without the dual  way to embed fonts and dual size of embedded fonts?</p>
<p>Am I missing something?</p>
<p>Valery Silaev</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/06/22/dissapointed-with-flex-4/feed</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Four-day Advanced Flex Master Class</title>
		<link>http://flexblog.faratasystems.com/2010/06/14/four-day-advanced-flex-master-class</link>
		<comments>http://flexblog.faratasystems.com/2010/06/14/four-day-advanced-flex-master-class#comments</comments>
		<pubDate>Mon, 14 Jun 2010 23:48:24 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex Training]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=857</guid>
		<description><![CDATA[We&#8217;ve expanded to four days our popular Advanced Flex Master Class. In 2010 this training will be available only for US-based enterprises. Course outline can be downloaded at http://myflex.org/yf/AdvancedFlex4days.pdf
Yakov Fain
]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve expanded to four days our popular Advanced Flex Master Class. In 2010 this training will be available only for US-based enterprises. Course outline can be downloaded at <a href="http://myflex.org/yf/AdvancedFlex4days.pdf">http://myflex.org/yf/AdvancedFlex4days.pdf</a></p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/06/14/four-day-advanced-flex-master-class/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Quick Tutorial on Casting</title>
		<link>http://flexblog.faratasystems.com/2010/06/10/a-quick-tutorial-on-casting</link>
		<comments>http://flexblog.faratasystems.com/2010/06/10/a-quick-tutorial-on-casting#comments</comments>
		<pubDate>Thu, 10 Jun 2010 15:46:22 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[casting]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[oop]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=849</guid>
		<description><![CDATA[Recently, I&#8217;ve been teaching a class and one of the students stopped by after the class and said, &#8220;I&#8217;m just learning object-oriented programming, can you explain me the benefits of casting?&#8221;.  How would you answer such a question? I did my best in a short period of time I had, but felt obligated to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I&#8217;ve been teaching a class and one of the students stopped by after the class and said, &#8220;I&#8217;m just learning object-oriented programming, can you explain me the benefits of casting?&#8221;.  How would you answer such a question? I did my best in a short period of time I had, but felt obligated to give better explanations and wrote this blog.  I&#8217;ve been using example from Java language here, but all this apply to other object-oriented languages too.</p>
<p>All Java classes form an inheritance tree with the class Object on top of the hierarchy – all Java classes are direct or indirect descendants of Object. When you declare a non-primitive variable, you are allowed to use either the exact data type of this variable or one of its ancestor data types. For example, if the class NJTax extends Tax each of the following lines is correct.</p>
<p>NJTax myTax1 = new NJTax();<br />
Tax myTax2     = new NJTax(); // upcasting<br />
Object myTax3 = new NJTax();  // upcasting</p>
<p>Java is smart enough to automatically cast an instance of the class to its ancestor. When the variable has more generic class than an instance of the object it’s called upcasting. Let’s say the class object has ten methods and class variables defined, the class Tax (it’s an implicit subclass of Object) adds five more methods and variables (total 15), and NJTax adds another two (total 17). The variable myTax1 will have access to all 17 methods and variables, myTax2 will see only 15, and myTax3 just 10. Why not always use exact types in variable declarations?</p>
<p>Let’s say you need to write a program that will process the data about workers of a certain company. Some of them are full time employees, and some are contractors, but you’d like to read them from some data source and into the same array. Arrays can store only the objects of the same type, remember?</p>
<p>Since Java can automatically upcast the objects, you can create a class Person with two subclasses: Employee and Contractor, and then read the records from a database, and based on the employment type, create an appropriate object instance and put it into an array of type Person:</p>
<p>Person workers[] = new Person [100];<br />
workers[0] = new Employee(“Yakov”, “Fain”);<br />
workers[1] = new Employee(“Mary”, “Lou”);<br />
workers[2] = new Contractor(“Bill”, “Shaw”);<br />
…</p>
<p>Of course, you could’ve created two separate arrays for employees and contractors, but I’m laying the foundation here for explaining polymorphism &#8211; a powerful concept of object-oriented languages.</p>
<p>At some point you’ll need to process the data from the array workers. Say, in a loop you can test the data type of the current element of the array with the operator instanceOf, then downcast the object (it can’t be done automatically) to Employee or Contractor, and process it accordingly.</p>
<p>for (int i; i&lt;20; i++){<br />
Employee currentEmployee;<br />
Contractor currentContractor;</p>
<p>if (worksers[i] instanceof Employee){<br />
currentEmployee = (Employee) workers[i];<br />
// do some employee processing here<br />
} else if  (worksers[i] instanceof Contractor){<br />
currentContractor = (Contractor) workers[i];<br />
// do some contractor processing here<br />
}<br />
}</p>
<p>Placing a data type in parenthesis in front of another object means that you want to downcast this object to specified type.  You can downcast an object only to one of its descendant data types. Even though the above code has correct syntax, it doesn’t represent the best practice of processing similar objects. In the next lesson you’ll see how to use polymorphism to do it in a more generic way.<br />
If a class implements an interface, you can cast it to this interface. Say, a class Employee implements Payable, Insurable, Pensionable interfaces:</p>
<p>class Employee implements Payable, Insurable, and Pensionable {<br />
// implementation of all interfaces goes here<br />
}</p>
<p>If in particular code you are interested in its Insurable behavior, there’s not need to cast the Object to type Employee, just cast it to Insurable type as shown in the code fragment below. Keep in mind though that if you do so, the variable current employee will expose the access to only those methods that were declared in the Insurable interface.</p>
<p>Insurable currentEmployee;</p>
<p>if (worksers[i] instanceof <span style="text-decoration: line-through;">Employee</span> Insurable){<br />
currentEmployee = (Insurable) workers[i];<br />
// do some insurance-specific processing here<br />
}</p>
<p>Is it clear enough? I&#8217;d appreciate your feedback.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/06/10/a-quick-tutorial-on-casting/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Think twice before declaring a Java method as final</title>
		<link>http://flexblog.faratasystems.com/2010/06/07/think-twice-before-declaring-a-java-methods-as-final</link>
		<comments>http://flexblog.faratasystems.com/2010/06/07/think-twice-before-declaring-a-java-methods-as-final#comments</comments>
		<pubDate>Mon, 07 Jun 2010 15:24:28 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=842</guid>
		<description><![CDATA[If you  create classes that may be used by other developers, declaring methods  as final will make them not overridable in the subclasses.
&#160;
While today,  it may seem obvious to you that a particular method will never ever need  to be overridden, you might not properly predict all use-patterns of  this [...]]]></description>
			<content:encoded><![CDATA[<p>If you  create classes that may be used by other developers, declaring methods  as final will make them not overridable in the subclasses.</p>
<p>&nbsp;</p>
<p>While today,  it may seem obvious to you that a particular method will never ever need  to be overridden, you might not properly predict all use-patterns of  this class. If this happens, some other developer will have to jump  through the hoops to create another version of such a method in a  subclass. If you don&#8217;t want to be cursed in the future, think twice if  you really really want to declare this method as final. Do you see any benefits in using final methods?<br />
We had to extend a third party library to improve their implementation of a certain networking protocol. As it usually happens, the code was poorly documented, so we had to read the code to find out which method to override in the subclass. Sure enough, that method was declared as final.</p>
<p>We found a workaround and still replaced the call to the final method to the call to our own. So what the original developer achieved by using final? He made our work more difficult than it should have been.</p>
<p>&nbsp;</p>
<p>Originally, Java compiler was optimizing (inlining) final methods. Today I&#8217;ve learned (thank you, Heinz) that Java compiler doesn&#8217;t do it anymore, and they are optimized by the Hotspot JVM:</p>
<p>http://www.javaspecialists.eu/archive/Issue157.html</p>
<p>http://www.javaspecialists.eu/archive/Issue158.html</p>
<p>Who are these guys we&#8217;re protecting from by using final? BTW, I also believe that the keyword protected is equally useless. </p>
<p>&nbsp;</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/06/07/think-twice-before-declaring-a-java-methods-as-final/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Few notes on iPhone replacement</title>
		<link>http://flexblog.faratasystems.com/2010/06/01/few-notes-on-iphone-replacement</link>
		<comments>http://flexblog.faratasystems.com/2010/06/01/few-notes-on-iphone-replacement#comments</comments>
		<pubDate>Wed, 02 Jun 2010 01:29:07 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=839</guid>
		<description><![CDATA[As many Flex developers waiting for release of Flex on iPhone for over a year, last 2 months were Denial, Anger, Bargaining, Depression and finally Acceptance. The acceptance came in the form of the Android phone and new battlefields/pastures.
Apple and Google are in open war right now &#8211; over tv/media, virtual assistants, navigation and ads. [...]]]></description>
			<content:encoded><![CDATA[<p>As many Flex developers waiting for release of Flex on iPhone for over a year, last 2 months were Denial, Anger, Bargaining, Depression and finally Acceptance. The acceptance came in the form of the Android phone and new battlefields/pastures.</p>
<p>Apple and Google are in open war right now &#8211; over tv/media, virtual assistants, navigation and ads. Lately it became obvious that workspace and social networking are also becoming part of the battle &#8211; and that is the fields we specialize, so we need to adopt. </p>
<p>I picked up Nexus One recently to do some research work. N1 is a bit better as research device then particular carriers ones as you can share the same providers card with your iPhone (no extra contract). I am quite used of swapping AT&#038;T cards from iPhone with other phones (50$ Samsung phone +iPhone account = better phone + bluetooth/usb network hotspot, etc). It also has no provider&#8217;s protection so updating software and rooting is a bit simpler. </p>
<p>Let&#8217;s make sure you have been warned: N1 is not a replacement for iPhone for consumer or either status seekers/heavy phone users. It has some significant pluses &#8211; better Navigation, voice integration and web experience are superb. Hardware spec beats 3GS easily, but the actual hardware quality is sub par:<br />
- quality of the phone subsystem (signal reception, sound quality, integration with provider) is much lower<br />
- quality of the screen is bad ( easily greased, bad touchscreen recognition, predictable typing is not working as expected)<br />
- touchscreen and buttons do not always respond as expeced.</p>
<p>Once you accept that Google phone is development device and not your primary phone, you can appreciate really great features it provides for software enthusiasts:<br />
- open development environment including AIR with reasonable debugging and diagnostics<br />
- top of the line hardware stack including fast CPU<br />
- standard open OS</p>
<p>The last few weeks spent with physical device were a lot of fun. The development cycle is much faster then with iPhone and the applications perform MUCH better. There are quite few adjustments you need to make to your development in order to deploy application on the phone, but I will talk about it in the next post. For now, grab your Android phone and experience new platform for yourself.</p>
<p>Sincerely,<br />
Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/06/01/few-notes-on-iphone-replacement/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where to find enterprise Flex developers?</title>
		<link>http://flexblog.faratasystems.com/2010/05/28/where-to-get-enterprise-flex-developers</link>
		<comments>http://flexblog.faratasystems.com/2010/05/28/where-to-get-enterprise-flex-developers#comments</comments>
		<pubDate>Fri, 28 May 2010 10:13:26 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=835</guid>
		<description><![CDATA[I’m finishing the third(!) week of teaching Flex. The first half of June I’ll spend doing some regular consulting work, and then another two weeks of corporate training.  The use of Flex technologies is picking up in the corporate world, but hiring managers are clearly facing challenges caused by the lack of qualified software developers [...]]]></description>
			<content:encoded><![CDATA[<p>I’m finishing the third(!) week of teaching Flex. The first half of June I’ll spend doing some regular consulting work, and then another two weeks of corporate training.  The use of Flex technologies is picking up in the corporate world, but hiring managers are clearly facing challenges caused by the lack of qualified software developers on the market.  Solution? Re-train your own people.</p>
<p>Well, it’s not exactly a complete solution, because after a week of training, a senior Java developer becomes a Flex rookie, but at least these people are familiar with business.</p>
<p>Finding a qualified Flex/Java consultant is literally impossible. Enterprise HR managers pretend not knowing that an hourly rate is the only perk consultants  have. Corporations don’t offer competitive rates. Our consultancy has a couple of job requests for Flex/Java consultants from a long term customer from Wall Street, and we’re interviewing people with a little hope to find the right consultants for the money offered for these positions.</p>
<p>Train your own people regardless of what background they have. Recently, I had a student with no practical programming background. I figured it out after he asked me to “explain the benefits of casting”. But this guy was really motivated, and I’m sure he’ll make it.</p>
<p>Our company already has a request to teach Flex to a group of Cobol programmers in September. This should be fun.  The first day should be spent on teaching the concepts of object-oriented programming. So what? Anyone who wants to learn will.</p>
<p>Will the demand for Flex developers sustain? This week I’ve presented at Atlanta Flex User Group.  Here’s one of the questions I got after the talk, “Does your company experience lower demand of Flex consultants in the enterprise world because Flash is not supported on iPhone?”  Absolutely not.  Rich Internet Applications are being developed at full swing regardless of the fences built by Steve Jobs. iPhone is not a threat for the Enterprise RIA.  The only thing that bothers me is the slowness of Adobe in offering new releases of Flex and related tools and technologies.</p>
<p>While everyone is busy talking about the latest news from the iPhone battlefield or how Android is doing, I’m closely watching Microsoft.  As expected, they are becoming the real competition to Adobe in the field of the enterprise RIA. While Adobe is talking about new Designer-Developer workflow, Microsoft implements it. The penetration of Silverlight runtime is over 50%. Give them another year to build up the muscles…</p>
<p>Anyway, are you looking for senior enterprise Flex developers? Me too.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/05/28/where-to-get-enterprise-flex-developers/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Upcoming public Flex training and New Jersey User Groups</title>
		<link>http://flexblog.faratasystems.com/2010/05/21/upcoming-public-flex-trainings-and-new-jersey-user-groups</link>
		<comments>http://flexblog.faratasystems.com/2010/05/21/upcoming-public-flex-trainings-and-new-jersey-user-groups#comments</comments>
		<pubDate>Fri, 21 May 2010 10:48:46 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex Training]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JUG]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=827</guid>
		<description><![CDATA[1.    Last year, the Princeton Java Users Group  that I’m leading became homeless. We lost the host that was giving us a place to meet and pizza.
2.    Last year, New Jersey Flex Users group ceased to exist – not sure why.  The Garden State, where every other person is in IT deserves better.
3.    Being a [...]]]></description>
			<content:encoded><![CDATA[<p>1.    Last year, the Princeton Java Users Group  that I’m leading became homeless. We lost the host that was giving us a place to meet and pizza.<br />
2.    Last year, New Jersey Flex Users group ceased to exist – not sure why.  The Garden State, where every other person is in IT deserves better.<br />
3.    Being a proud Jersey resident, the next week will be the second time I’m presenting this year… at Atlanta Flex User Group Atlanta. No, it’s not Atlantic City, NJ.  It’s Georgia.<br />
4.    Flex and Java nicely compliment each other in lots and lots of real-world enterprise projects in the greater New York Area, which wouldn’t be able to run its IT operations without us, Jersey hero commuters who spent 3.5-4 hours a day getting through the tunnels and bridges to that famous island and back.<br />
5.    Recruiters have hard times finding developers with Flex/Java skills.<br />
6.    I’m ready to create and run a new Flex and Java Users Group in Central Jersey as soon as someone will offer a place to meet and pizza to eat. It has to be a meeting room that can fit at least 30 people.  This is all I’m asking for. The hosting company will be entitled for opening 5 minutes of each meeting announcing their products, or job openings. And people who attend users groups are real developers! If interested, send me an email at yfain11 at yahoo.com.<br />
7.    My role is to bring qualified presenters and present myself on the subjects that interest enterprise Flex and Java Developers.<br />
8.    All of the above is a just part of my contribution to Flex and Java community.<br />
9.    Now let me take care of the bills. I’ll be running a week of live online introductory Flex 4 training on the week of July 12, 2010. You can attend without the need to travel.  For details and registration <a href="http://www.eventbrite.com/event/690230498">visit this site</a>.<br />
10.    The next one-day advanced public Flex workshop on modularization of Flex applications will take place in Lansdowne Resort, VA on July 27, a day before the CFUnited conference starts in the same venue ( this workshop is not affiliated with CFUnited). Here’s <a href="http://http://www.eventbrite.com/event/697857310">the registration page</a>.</p>
<p>11. In August-September I&#8217;ll be running a week of online live Intro to Java class &#8211; stay tuned.</p>
<p>That’s all folks. See you in one of the meeting rooms.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/05/21/upcoming-public-flex-trainings-and-new-jersey-user-groups/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How the Flex Framework Cairngorm 2 Died</title>
		<link>http://flexblog.faratasystems.com/2010/05/19/how-the-flex-framework-cairngorm-2-died</link>
		<comments>http://flexblog.faratasystems.com/2010/05/19/how-the-flex-framework-cairngorm-2-died#comments</comments>
		<pubDate>Wed, 19 May 2010 15:38:00 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Cairngorm]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=817</guid>
		<description><![CDATA[When a new version of a software is released, the old version lives for a while and its creators usually care about supporting it.  Yesterday, after reading about the release of Cairngorm 3, it’s clear that Adobe Consulting ignores this rule.
For those who are not following Cairngorm evolution, I want to remind that there [...]]]></description>
			<content:encoded><![CDATA[<p>When a new version of a software is released, the old version lives for a while and its creators usually care about supporting it.  Yesterday, after reading about the <a href="http://blogs.adobe.com/auhlmann/archives/2010/05/cairngorm_3_rel.html">release of Cairngorm 3</a>, it’s clear that Adobe Consulting ignores this rule.</p>
<p>For those who are not following Cairngorm evolution, I want to remind that there was a framework called Cairngorm 2, that was a library of classes (built on Model-View-Controller architecture) to be included in the Flex application. I never agreed with the architecture of Cairngorm 2 which was acting as a Crazy Glue and lead to generation of monolithic applications based on global singletons.  People who follow my writings or were attending my presentations at various conferences know that during the last four years I was openly stating that Cairngorm 2 has more cons than pros. For example, here&#8217;s the just one of of these occasions &#8211; <a href="http://tv.adobe.com/watch/max-2008-develop/the-flex-architecture-faceoff/">a video of the panel on enterprise frameworks</a> at Adobe MAX 2008 (after this blog, I doubt that I&#8217;ll ever be approved as a MAX speaker again).</p>
<p>Now, when I looked at the design of a product that’s now branded as Cairngorm 3, it’s clear that Adobe assigned to this project the right engineers (i.e. Alex Uhlmann) and there is hope that this methodology (it’s not an MVC framework any longer) may produce or include useful component libraries.</p>
<p>My first problem is that the Cairngorm 2 has literally disappeared from the face of Earth (the only trace found is the site cairngormdocs.org that has some old documentation).</p>
<p>My second, and more serious problem is that Adobe Consulting up till today has never made a statement that selecting Cairngorm 2 was a wrong path. There are lots of enterprises that some time ago started using Cairngorm 2 (recommendation by Adobe Consulting) just to find themselves with a large monolithic application at hand that took long to download and was difficult to modularize.</p>
<p>A couple of years ago, I lead a large enterprise project for a customer that I won’t name, but will provide some relevant technical details.  When I joined, the team was already 5 months into the project. This consumer facing application was producing one 5Mb SWF file. Just recompiling the application in Flex Builder was a lengthy project.  I started to look at ways of modularizing this application so the first screen would come up sooner than 90 seconds for customers sitting on DSL connections.</p>
<p>Sure enough, the project has been built with Cairngorm 2 by advise of some engineer from Adobe Consulting (not to be confused with Adobe Flex team). The Cairngorm’s global class FrontController is expected to be a registry for all possible events that travel through the system let alone tons of classes and boilerplate code written  just to support that life cycle of the framework itself.</p>
<p>My first suggestion was to start modularization with removing Cairngorm.  They asked, “How much?” It would take two man-weeks worth of work, but they didn’t have time for this. To make the long story short, we had to modularize the application in a non-kosher way – the main SWF had a knowledge about all events in every module. Changes in a  module’s code can lead to changes in the main applications. Tight coupling in action.</p>
<p>I’m sure there are lots of enterprise teams that were similarly misguided and were marching in a wrong direction under the Cairngorm 2 banner.</p>
<p>With the release of Cairngorm 3, the Cairngorm 2 has vanished. I’m sure, if you’ll hire a private eye, you’ll find its code (has not been updated from about three years) in some SVN repository.  But this is not how the new version of the enterprise software should be released.<br />
I’d like Adobe Consulting to state loud and clear, “If your team started development of a large enterprise project with Cairngorm 2, please stop. This was our mistake, and the sooner you switch to Cairngorm 3 or any other lighter framework the better.”</p>
<p>Will it happen? Let’s wait and see.</p>
<p>Yakov Fain<br />
P.S. The views and opinions expressed in this blog are purely my own and don’t represent views of my employer</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/05/19/how-the-flex-framework-cairngorm-2-died/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Presentation slides from Flash and the City 2010</title>
		<link>http://flexblog.faratasystems.com/2010/05/16/presentation-slides-from-flash-and-the-city-2010</link>
		<comments>http://flexblog.faratasystems.com/2010/05/16/presentation-slides-from-flash-and-the-city-2010#comments</comments>
		<pubDate>Sun, 16 May 2010 12:57:54 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Clear Toolkit]]></category>
		<category><![CDATA[LCDS]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=803</guid>
		<description><![CDATA[Yesterday, I&#8217;ve presented at Flash and the City conference in New York City on Clear Toolkit, as an open source alternative to Adobe LiveCycle Data Services. Half of the presentation was about features and tools od Clear Toolkit 3.2, and then I&#8217;ve demonstrated our new Flex 4 spark-based DataForm container with convenient layout manager, data [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I&#8217;ve presented at Flash and the City conference in New York City on Clear Toolkit, as an open source alternative to Adobe LiveCycle Data Services. Half of the presentation was about features and tools od Clear Toolkit 3.2, and then I&#8217;ve demonstrated our new Flex 4 spark-based DataForm container with convenient layout manager, data provider and both form and form item level validators. </p>
<p>The last portion of the presentation was about how to deal with unreliable messaging of BlazeDS. Interestingly enough, some people from the audience were complaining that even in LiveCycle Data Services 3, the reliable messaging part is not documented and it&#8217;s hard to get support from Adobe.  If you don&#8217;t know what unreliable AMF messaging is, <a href="http://flexblog.faratasystems.com/2010/05/15/missing-amf-requestsresponses">read this post</a>. We already had a number of projects started form a phone call, &#8220;One of our clients doesn&#8217;t receive responses to RemoteObject requests&#8230;once in a while. Others seems to be fine. Can you help?&#8221; Yes we can.</p>
<p>You can download the presentation slides <a href="http://myflex.org/presentations/FlashAndTheCity2010_yakov_fain.pdf">here</a>.<br />
There were no video recording crew at the conference, but due to multiple requests, I&#8217;ll record this presentation and publish it as a screencast in early June.</p>
<p>My special thanks to Adobe for raising LCDS prices &#8211; this means more business for us as more and more corporate clients are looking for reasonably priced solution and architect their projects using BlazeDS.<br />
Farata Systems will gladly help our clients in building robust, scalable, and reliable Flex-BlazeDS-Java applications. </p>
<p>If you are new to Flex, consider taking this <a href="http://www.eventbrite.com/event/690230498">5-day live online training course</a>.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/05/16/presentation-slides-from-flash-and-the-city-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Missing AMF requests/responses</title>
		<link>http://flexblog.faratasystems.com/2010/05/15/missing-amf-requestsresponses</link>
		<comments>http://flexblog.faratasystems.com/2010/05/15/missing-amf-requestsresponses#comments</comments>
		<pubDate>Sat, 15 May 2010 17:03:38 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=801</guid>
		<description><![CDATA[Every month we get calls from new Flex clients with exactly the same question: can we help to fix strange networking problems. The application they fully tested exhibits very strange problems for some users once released in the wild. Here is a brief list of the problems they have seen:
1. Missing packages coming from client [...]]]></description>
			<content:encoded><![CDATA[<p>Every month we get calls from new Flex clients with exactly the same question: can we help to fix strange networking problems. The application they fully tested exhibits very strange problems for some users once released in the wild. Here is a brief list of the problems they have seen:<br />
1. Missing packages coming from client going to the serer (majority of the problem cases)<br />
2. Missing responses ( coming from server to client)<br />
3. Out of sequence execution of the server calls<br />
4. Duplicate requests to the server<br />
Interesting enough, the popular belief is that TCP/IP protocol takes care of all these problems and it is not responsibility of the developers to deal with these issues.</p>
<p>Unfortunately, living with the problems above is a typical WAN way of life, and TCP/IP protocol provides reliability on LANs only. To make the matters worse, applications are tested on LANs and extremely reliable &#8220;local WANs&#8221;. As a result, they are not tested at all for this type of the issues. And with thousands of small AMF requests per session even fraction of percent of lost packages affects the reliability of application.     </p>
<p>Once application is in this state, typical response from development teams is to add application error handling and do more testing. Unfortunately, this testing is also done on LAN, and reliable WANS. Plus due to the non-deterministic nature of the lost packages conventional testing does not help much.</p>
<p>The advice I usually give to our clients is to fix the problem on communication protocol level (in a layer between the  Flex Framework and Application) rather then in the application code. Usually it involves creation &#8220;ReliableAMFChannel&#8221; ActionScript class on the client side and customized Java Endpoint on the server side. These classes are primarily responsible for the following:<br />
1. Keeping copies of the original requests(client) and responses (server) till they are confirmed or answered by the other side.<br />
2. Managing resending of unconfirmed requests/responses after certain timeout.<br />
3. Filtering out duplicate/already executed requests/responses<br />
4. Fixing the order of requests/responses to prevent execution &#8220;out of order&#8221;</p>
<p>Usually it is implemented as 5-10 days project to integrate reference implementation code with the client codebase, provide resynchronization logic (login/reconnect) and timeouts&#8217; optimization. I usually recommend to move long running requests to messaging as a part of the same effort as those have a long list of their own related issues, which I&#8217;ll cover in the next post.</p>
<p>If you are new to Flex, consider taking this <a href="http://www.eventbrite.com/event/690230498">5-day live online training course</a>.</p>
<p>Sincerely,<br />
Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/05/15/missing-amf-requestsresponses/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Overloaded With Training Requests</title>
		<link>http://flexblog.faratasystems.com/2010/04/29/getting-overloaded-with-training-requests</link>
		<comments>http://flexblog.faratasystems.com/2010/04/29/getting-overloaded-with-training-requests#comments</comments>
		<pubDate>Thu, 29 Apr 2010 14:56:26 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex Training]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=789</guid>
		<description><![CDATA[For some (good) reason we are getting bombarded with Flex training requests of various kinds. Not sure if this is a side effect of our recently released book Enterprise Development with Flex  (it stays in the Amazon&#8217;s bestsellers list in several categories) or maybe it&#8217;s just something in the air&#8230;
&#160;
Here&#8217;s my current calendar:
&#160;
April 26-30: [...]]]></description>
			<content:encoded><![CDATA[<p>For some (good) reason we are getting bombarded with Flex training requests of various kinds. Not sure if this is a side effect of our recently released book <a href="http://www.amazon.com/Enterprise-Development-Flex-Practices-Developers/dp/059615416X/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1270358607&#038;sr=1-1">Enterprise Development with Flex </a> (it stays in the Amazon&#8217;s bestsellers list in several categories) or maybe it&#8217;s just something in the air&#8230;</p>
<p>&nbsp;</p>
<p>Here&#8217;s my current calendar:</p>
<p>&nbsp;</p>
<p>April 26-30: Teaching a week of Flex intro at Home Depot, Atlanta, GA<br />
May 10-14, Teaching Adobe Certified Flex 4 (!) class at AT&#038;T, New Jersey<br />
May 15, Speaking at <a href="http://blog.flashandthecity.com/">Flash and the City</a> in New York on LCDS alternatives.<br />
May 17, Teaching a one-day <a href="http://www.eventbrite.com/event/608272359">workshop on modularization of Flex applications</a> (btw, if you enter discount code saynotowifi you&#8217;ll get $100 off the price)<br />
May 20-21, Teaching a 2-day Advanced Flex seminar at AT&#038;T in New Jersey<br />
May 24-28, Teaching an intro Flex class at Home Depot in Atlanta, GA<br />
June 7-8, Teaching a 2-day Advanced Flex seminar for a private client in<br />
Casablanca, Morocco.<br />
June 21-25, Teaching an Intro Flex class to a private client.</p>
<p>My colleague Victor is finishing consulting project and will be  running two two-weeks training engagements for a private Middle-East client. This will be a  a mix of formal classes and one-on-one mentoring sessions.</p>
<p>On our waiting list, we have two requests for a one-day Modularization workshop from and two-day Flex overview from private clients.  They want me it in May&#8230;</p>
<p>Also, we&#8217;re planning to start running online live Flex and Java training classes, but that&#8217;s in July.</p>
<p>And let me tell you, I love being overloaded with training requests!</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/04/29/getting-overloaded-with-training-requests/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>We’ll help with your Flex problem, and you pay whatever you feel is fair</title>
		<link>http://flexblog.faratasystems.com/2010/04/19/we%e2%80%99ll-help-with-your-flex-problem-and-you-pay-whatever-you-feel-is-fair</link>
		<comments>http://flexblog.faratasystems.com/2010/04/19/we%e2%80%99ll-help-with-your-flex-problem-and-you-pay-whatever-you-feel-is-fair#comments</comments>
		<pubDate>Tue, 20 Apr 2010 02:11:38 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[cosnulting]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=773</guid>
		<description><![CDATA[We&#8217;re proud to announce  a new consulting service by Farata Systems:
We suggest a solution to your Flex problem within two business days. You pay us after that whatever you feel is fair.
&#160;
Here’s how it works:
1. You contact us explaining the issue your enterprise Flex RIA is facing.
2. We analyze your issue and within two business [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re proud to announce  a new consulting service by Farata Systems:</p>
<p><span style="color: #800000;">We suggest a solution to your Flex problem <strong>within two business days.</strong> You pay us after that whatever you feel is fair.</span></p>
<p>&nbsp;</p>
<p>Here’s how it works:</p>
<p>1. You contact us explaining the issue your enterprise Flex RIA is facing.</p>
<p>2. We analyze your issue and within two business days suggest a solution to your problem.  Most likely we’ll either need to review your code or will ask for a test application that reproduces the issue you’re having.</p>
<p>3. We’ll send you a link to pay for the service with an empty field “Amount”. You enter the amount and pay whatever you feel is fair. No matter what amount you are going to enter (including $0), we’ll take it, no questions asked.</p>
<p>&nbsp;</p>
<p>This offer is valid only to enterprise teams working on Flex/Java projects. This is not an offer for fix bugs of every software developer working with Flex .</p>
<p>&nbsp;</p>
<p>Why  have we decided to announce this new service? Well, technically it&#8217;s not new.  Pretty often we are presented with a problem by a perspective client, then we spend some time finding the proper remedy, present it to the requester, which pretty often turns into a new contract. It just seemed the right thing to explicitly offer this service when many project managers may not even know that there is an affordable solution to their problem.</p>
<p>&nbsp;</p>
<p>Too good to be true? Try it. Fill out the Contact Us form at<a href="http://faratasystems.com/"> faratasystems.com</a>. <strong>New clients only.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/04/19/we%e2%80%99ll-help-with-your-flex-problem-and-you-pay-whatever-you-feel-is-fair/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oops, Apple did it again</title>
		<link>http://flexblog.faratasystems.com/2010/04/11/oops-apple-did-it-again</link>
		<comments>http://flexblog.faratasystems.com/2010/04/11/oops-apple-did-it-again#comments</comments>
		<pubDate>Sun, 11 Apr 2010 15:03:23 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=767</guid>
		<description><![CDATA[Here it goes &#8211; Apple officially locked itself out from majority of development community again. While people are trying to find justification for such move ( http://www.taoeffect.com/blog/2010/04/steve-jobs-response-on-section-3-3-1/ ) and while it came as a shock to some Adobe developers ( http://theflashblog.com/?p=1888 ) I actually have deja vu of 1991 / NeXT Computer fiasco. NeXT was [...]]]></description>
			<content:encoded><![CDATA[<p>Here it goes &#8211; Apple officially locked itself out from majority of development community again. While people are trying to find justification for such move ( http://www.taoeffect.com/blog/2010/04/steve-jobs-response-on-section-3-3-1/ ) and while it came as a shock to some Adobe developers ( http://theflashblog.com/?p=1888 ) I actually have deja vu of 1991 / NeXT Computer fiasco. NeXT was the best PC of 1991. First browsers/servers were developed on NeXT platform. I took time to learn Objective-C and developed for that platform. But proprietary language and hardware lock drove the company in the ground.  The truth being told, people make the same mistakes again and again, and Steve Jobs is no different. So the only question remains &#8211; will it will be fixed soon enough via Adobe/Apple negotiations and public outrage or Apple will win this battle and loose the war to Google, RIM and Microsoft. </p>
<p>Technically Apple&#8217;s terms and reasonings are absurd. The quality of the code is not related to the language. Specialized p-code languages sometimes outperform native ones by highly optimizing (even writing in assembly for specific CPUs) critical parts. In case of Flash/AIR a lot was done to support GPU that would take ages for regular C++ developers to even approach. P-code toolkit can include generation of C/C++ code &#8211; however it would be just a waste of developers time to do so.</p>
<p>I have been using Apple products exclusively for the last 3 years and I really enjoyed ability not to deal Windows problems during the development process and still reliably deploy (thanks to Adobe) on 100% of PCs regardless of OS. Performance was never an issue for our apps, and we had steady job helping others to achieve good/excellent performance.</p>
<p>Apple has 3 month to fix this mistake. After that developers will make choice &#8211; Adobe or Apple. It will mean significant boost for Google, RIM and Microsoft &#8211; and end of Apple growth. At that time, if not resolved, I will be selling my Apple stock. Reasons are simple : in the last 3 years I personally spent about $15K on Apple products, planning to spend at least the same amount over the next 3 years. I was planning to replace my development machine Mac Pro dual Xeon/20GB/10TB for faster one by the end of the summer &#8211; looks like it will be Linux server as without platform neutrality it will be easier to at least have development and deployment platforms the same. With developers fallout getting tools and new software for OSX will be even more difficult, so developers need to move toward growing platform. It is really a shame, as Apple really had a chance to become the biggest player in the new market.</p>
<p>In meanwhile, it is time to shop for Nexus phone and Linux development machine.</p>
<p>Sincerely<br />
Anatole Tartakovsky </p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/04/11/oops-apple-did-it-again/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Our new Flex book is a Java bestseller</title>
		<link>http://flexblog.faratasystems.com/2010/03/30/our-new-flex-book-is-a-java-bestseller</link>
		<comments>http://flexblog.faratasystems.com/2010/03/30/our-new-flex-book-is-a-java-bestseller#comments</comments>
		<pubDate>Tue, 30 Mar 2010 14:17:43 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[enterprise flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=761</guid>
		<description><![CDATA[Our new book &#8220;Enterprise  Development with Flex &#8221; made the Amazon bestseller&#8217;s  list of &#8230;  Java books:
http://www.amazon.com/gp/bestsellers/books/3608/ref=pd_zg_hrsr_b_3_4_last
This   list is refreshed every hour so I&#8217;m not sure what place you are going  to  find it at, but at the time of this writing it&#8217;s #20.
Help us  to move [...]]]></description>
			<content:encoded><![CDATA[<p>Our new book &#8220;<a href="http://www.amazon.com/Enterprise-Development-Flex-Practices-Developers/dp/059615416X/ref=pd_ts_b_20?ie=UTF8&amp;s=books">Enterprise  Development with Flex</a> &#8221; made the Amazon bestseller&#8217;s  list of &#8230;  Java books:</p>
<p><a rel="nofollow" href="http://www.amazon.com/gp/bestsellers/books/3608/ref=pd_zg_hrsr_b_3_4_last" target="_blank">http://www.amazon.com/gp/bestsellers/books/3608/ref=pd_zg_hrsr_b_3_4_last</a></p>
<p>This   list is refreshed every hour so I&#8217;m not sure what place you are going  to  find it at, but at the time of this writing it&#8217;s #20.</p>
<p>Help us  to move up the list by doing you know what <img src='http://flexblog.faratasystems.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/03/30/our-new-flex-book-is-a-java-bestseller/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Open source alternatives to LiveCycle Data Servcies</title>
		<link>http://flexblog.faratasystems.com/2010/03/15/open-source-alternatives-to-livecycle-data-servcies</link>
		<comments>http://flexblog.faratasystems.com/2010/03/15/open-source-alternatives-to-livecycle-data-servcies#comments</comments>
		<pubDate>Mon, 15 Mar 2010 12:51:39 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Clear Toolkit]]></category>
		<category><![CDATA[LCDS]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=719</guid>
		<description><![CDATA[   Development of enterprise Flex/Java rich Internet applications benefits from using automated data integration solutions and productivity tools. Currently Adobe offers LiveCycle Data Services ES2 (LCDS) and open source BlazeDS 3.  While LCDS is certainly a great piece of software for those who are looking to support thousands concurrent users via the most [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: 0pt;"><span style="font-size: medium;"><span style="font-family: 'times new roman';"> </span><span style="font-family: 'times new roman';"> </span></span><span style="font-size: small;"> </span><span style="font-family: 'times new roman';"><span style="font-size: small;">Development of </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">enterprise </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">Flex/Java rich Internet applications benefits from using automated data integration soluti</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">ons and productivity tools. Currently Adobe offers </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">LiveCycle</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;"> Data Services ES2 (LCDS) and open source </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">BlazeDS</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;"> 3.  While LCDS is certainly a great piece of software for those who are looking to support thousands concurrent users via the most efficient communication protocols, its high licensing cost makes LCDS not affordable for the vast majority of the enterprise applications let alone small businesses and startups. </span></span></p>
<p style="margin: 0pt;">
<p style="margin: 0pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">If you are looking for an alternative solution for to integrate Flex and Java EE layers consider using </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;"><a id="lqwo" title="GraniteDS" href="http://www.graniteds.org/confluence/pages/viewpage.action?pageId=229378">GraniteDS</a></span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">, </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;"><a id="xzpe" title="WebOrb" href="http://www.themidnightcoders.com/products/weborb-for-java/overview.html">WebOrb</a></span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">, and <a id="ii6j" title="Clear Toolkit" href="http://sourceforge.net/projects/cleartoolkit/">Clear Toolkit</a>. The first two products offer their own implementation of the AMF protocol, and Clear Toolkit uses the AMF libraries that come with BlazeDS . If you are looking for an open source implementation of the Real-Time Messaging Protocol (RTMP), the<a href="http://osflash.org/red5"> Red5 server</a> (currently in version 0.7) may be your option.</span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"><br />
</span></span></p>
<p style="margin: 0pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">The feature matrix below lists compares LCDS, </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">BlazeDS</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">, and open source Clear Toolkit. This feature matrix was created </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">using the data </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">from </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;"> <a href="http://www.adobe.com/products/livecycle/dataservices/compare.html">LCDS</a></span></span><a href="http://www.adobe.com/products/livecycle/dataservices/compare.html"><span style="font-family: 'times new roman';"><span style="font-size: small;">/</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">BlazeDS</span></span></a><span style="font-family: 'times new roman';"><span style="font-size: small;"><a href="http://www.adobe.com/products/livecycle/dataservices/compare.html"> comparison chart</a> published by Adobe</span></span><a href="http://www.adobe.com/products/livecycle/dataservices/compare.html"><span style="font-family: 'times new roman';"><span style="color: #0000ff;"><span style="text-decoration: underline;"><span style="font-size: small;"> </span></span></span></span></a><span style="font-family: 'times new roman';"><strong><span style="font-size: small;">. </span></strong></span><span style="font-family: 'times new roman';"><span style="font-size: small;"> </span></span></p>
<p style="margin: 0pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">The current version of Clear Toolkit is 3.2.1. The features that are currently not available but will be implemented</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;"> in Clear Toolkit version </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">4 by the end of 2010 and are marked as v4 in the chart below.</span></span></p>
<p style="margin: 0pt;">&nbsp;</p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"><strong>Disclaimer.</strong> I&#8217;m one of the creators of Clear Toolkit. But if the owners of GraniteDS, WebOrb, and Red5 would like to be listed here, please let me know, and I&#8217;ll gladly update </span></span> this feature matrix.</p>
<p style="margin: 0pt;">
<p><strong>Feature Matrix: Adobe Live Cycle Data Services ES2, BlazeDS 3, Clear Toolkit 3+</strong></p>
<p style="margin: 0pt;"><span style="font-size: small;"><br />
</span></p>
<table class="zeroBorder" style="margin-left: 0pt; width: 429.85pt;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><strong><span style="font-size: x-small;">Feature</span></strong></span></p>
</td>
<td style="vertical-align: middle; width: 62.65pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><strong><span style="font-size: x-small;">BlazeDS</span></strong></span><span style="font-family: 'times new roman';"><strong><span style="font-size: x-small;"> 3</span></strong></span></p>
</td>
<td style="vertical-align: middle; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><strong><span style="font-size: x-small;">BlazeDS+</span></strong></span><span style="font-family: 'times new roman';"><strong><span style="font-size: x-small;">Clear</span></strong></span><span style="font-family: 'times new roman';"><strong><span style="font-size: x-small;"> Toolkit </span></strong></span></p>
</td>
<td style="vertical-align: middle; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><strong><span style="font-size: x-small;">LCDS ES2</span></strong></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><strong> </strong></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="background-color: #d9d9d9; vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="color: #800000;"><strong><span style="font-size: small;">RPC services</span></strong></span></span></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Java </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">remoting</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">/AMF </span></span></p>
</td>
<td style="vertical-align: middle; width: 62.65pt;">
<p style="vertical-align: middle; margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: middle; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: middle; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">AJAX to Java </span></span></p>
</td>
<td style="vertical-align: middle; width: 62.65pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: middle; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: middle; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">WS/JSON proxy</span></span></p>
</td>
<td style="vertical-align: middle; width: 62.65pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: middle; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: middle; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="background-color: #d9d9d9; vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="color: #800000;"><strong><span style="font-size: small;">Messaging</span></strong></span></span></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Servlet</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">-based messaging (hundreds of clients per CPU)</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Servlet</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">-based NIO messaging (thousands of clients per CPU)</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X*</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Java NIO high-performance messaging (thousands of clients per CPU)</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Real Time Messaging Protocol (RTMP)</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Data throttling</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">v4</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Reliable communications</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">v4</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="background-color: #d9d9d9; vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="color: #800000;"><strong><span style="font-size: small;">Data Management</span></strong></span></span></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Transaction (batch processing)</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Data paging</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">v4</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Lazy loading (on demand)</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">v4</p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">Hierarchical data collections</td>
<td style="vertical-align: top; width: 62.65pt;"></td>
<td style="vertical-align: top; width: 78.05pt;">X</td>
<td style="vertical-align: top; width: 74.95pt;">X</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Conflict resolution and synchronization</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">SQL adapter</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Hibernate adapter</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">v4</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Fiber-aware assembler</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">v4**</p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Offline Web applications</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="background-color: #d9d9d9; vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="color: #800000;"><strong><span style="font-size: small;">Development and deployment</span></strong></span></span></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Spring integration support</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">v4</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Adobe Flash® Builder™ modeling plug-in</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Enterprise support</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">RIA PDF generation</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X***</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">WSRP portal integration</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Load/stress testing tool</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Source code available</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Edge server</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Enterprise support plans</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="background-color: #d9d9d9; vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="color: #800000;"><strong><span style="font-size: small;">Productivity Tools</span></strong></span></span></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Generator of CRUD application</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Generator of </span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">ActionScript</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;"> data transfer object based on their Java peers</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Generator of ANT script based on the properties of Flash Builder project</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Automated Data synchronization of AIR locale cache</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> X</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Flash-based Web reporter</span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">v4</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
<tr>
<td style="background-color: #d9d9d9; vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="color: #800000;"><strong><span style="font-size: small;">Cost of </span></strong></span></span><span style="font-family: 'times new roman';"><span style="color: #800000;"><strong><span style="font-size: small;">production deployment</span></strong></span></span></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;"><strong> </strong></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><strong> </strong></p>
</td>
<td style="background-color: #d9d9d9; vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><strong> </strong></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="color: #000000;"><span style="font-size: small;">License type and cost</span></span></span></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">LGPL v3,</span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"> Free</span></span></p>
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">MIT, </span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Free</span></span></p>
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Commercial, about $30K per CPU****</span></span></p>
</td>
</tr>
<tr>
<td style="vertical-align: top; width: 214.2pt;">
<p style="margin: 0pt;"><strong> </strong></p>
</td>
<td style="vertical-align: top; width: 62.65pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 78.05pt;">
<p style="margin: 0pt;">
</td>
<td style="vertical-align: top; width: 74.95pt;">
<p style="margin: 0pt;">
</td>
</tr>
</tbody>
</table>
<p style="margin: 0pt;">
<p style="margin: 0pt;">
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">*   Farata Systems can develop an NIO based BlazeDS solution on a per-customer basis under a separate consulting agreement. Read and watch performance tests of our high concurrency Jetty/NIO/BlazeDS solution at <a id="s9re" title="http://flex.sys-con.com/node/720304" href="http://flex.sys-con.com/node/720304">http://flex.sys-con.com/node/720304</a></span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"><br />
</span></span></p>
<p style="margin: 0pt;">
<p style="margin: 0pt;"><span style="font-size: small;"><span style="font-family: 'times new roman';"><span style="font-size: small;">** Currently, Farata Systems is working on a solution for introducing the model-driven development to Clear Toolkit.</span></span></span></p>
<p style="margin: 0pt;"><span style="font-size: small;"><span style="font-family: 'times new roman';"><span style="font-size: small;"><br />
</span></span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">*** LCDS offers advanced server-side PDF generation. Clear Toolkit components support PDF generation on the client (WYSIWYG), but does not support working with forms. </span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"><br />
</span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">*</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">*</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">** Adobe doesn’t publish the cost of LCDS ES2 license. The price listed here is taken bas</span></span><span style="font-family: 'times new roman';"><span style="font-size: small;">ed on the data shared by current users whose employers allegedly paid (read the comments to the <a href="http://anilchannappa.org/2009/11/20/lcds-3-0-released/">following blog post </a>of Adobe LCDS/BlazeDS Product Manager).</span></span></p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"><br />
</span></span></p>
<p style="margin: 0pt;">
<p style="margin: 0pt;">I&#8217;ll be demoing Clear Toolkit in action at the <a href="http://flashandthecity.com/">Flash and The City</a> conference in May in New York City. If you&#8217;ll be in town on May 17, consider attending our hands-on <a href="http://www.eventbrite.com/event/608272359">master class on modularization of Flex applications</a>.</p>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;"><br />
</span></span></p>
<p style="margin: 0pt;">
<div>
<p style="margin: 0pt;"><span style="font-family: 'times new roman';"><span style="font-size: small;">Yakov Fain<br />
</span></span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/03/15/open-source-alternatives-to-livecycle-data-servcies/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>One day Master Class on Flex Modularization comes to New York City</title>
		<link>http://flexblog.faratasystems.com/2010/03/13/flex-modularization-a-1-day-master-class-in-new-york-city</link>
		<comments>http://flexblog.faratasystems.com/2010/03/13/flex-modularization-a-1-day-master-class-in-new-york-city#comments</comments>
		<pubDate>Sat, 13 Mar 2010 15:41:40 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Advanced Flex Training]]></category>
		<category><![CDATA[flex libraries]]></category>
		<category><![CDATA[Flex modularization]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/2010/03/13/flex-modularization-a-1-day-master-class-in-new-york-city</guid>
		<description><![CDATA[Last week, I&#8217;ve presented on Flex modules and libraries at 360flex in San Jose, CA. This talk brought lots of developers to the room. After this  80-minute presentation I&#8217;ve been answering questions for another 25 minutes.
Such an unexpected interest to this non-flashy and very technical topic is a good indication that lots of enterprise grade [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, I&#8217;ve presented on Flex modules and libraries at 360flex in San Jose, CA. This talk brought lots of developers to the room. After this  80-minute presentation I&#8217;ve been answering questions for another 25 minutes.</p>
<p>Such an unexpected interest to this non-flashy and very technical topic is a good indication that lots of enterprise grade Flex applications are being developed in the real world.</p>
<p>Three days in a row the 360Flex attendees were stopping by just to say &#8220;Thank you&#8221; for explaining how to slice a Flex application into pieces.</p>
<p>Inspired with such a warm welcome, I&#8217;ve created a curriculum for a one day hands-on master class where this topic can be covered from the practitioner&#8217;s point of view and in greater details.  I know for sure that most of the people who have developed at least one production grade Flex application had to go  through the pain of modularizing the application when it was almost ready for production. The goal of this workshop is to help you in designing your application properly in the early stages of the project rather than deciding what to do with this 3MB monster a month before going in production.</p>
<p>This event is scheduled on May 17 in New York City. It&#8217;ll take place right after the conference <a href="http://flashandthecity.com/">Flash and the City</a>, so consider staying in this great city for yet another day. You won&#8217;t regret it.</p>
<p>The ROI of attending this workshop can be pretty substantial. This is a small scale bring-your-own-laptop event and the number of seats is limited &#8211; consider registering early at the following Web page: <a href="http://bit.ly/cjUaCd">http://bit.ly/cjUaCd</a>.</p>
<p>Yours,<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/03/13/flex-modularization-a-1-day-master-class-in-new-york-city/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>360flex, San Jose 2010, Day 3</title>
		<link>http://flexblog.faratasystems.com/2010/03/11/360flex-san-jose-2010-day-3</link>
		<comments>http://flexblog.faratasystems.com/2010/03/11/360flex-san-jose-2010-day-3#comments</comments>
		<pubDate>Thu, 11 Mar 2010 23:01:50 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[360Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=698</guid>
		<description><![CDATA[Community Keynote at #360flex is about to start to the sounds of beat sequences. Why hire a DJ if Sean Moore, a remote Flex developer can call in via Skype from Colorado with video camera on and start spinning his disks? Tom is projecting the video on three large screens and the music goes through [...]]]></description>
			<content:encoded><![CDATA[<p>Community Keynote at #360flex is about to start to the sounds of beat sequences. Why hire a DJ if Sean Moore, a remote Flex developer can call in via Skype from Colorado with video camera on and start spinning his disks? Tom is projecting the video on three large screens and the music goes through the speakers.</p>
<p>Great job, @seantheflexguy! If we had more female Flex developers there, all 365 attendees would be dancing. How about introducing discount for girls at the next #360flex?</p>
<p>During the first part of this keynote the audience thanks speakers, volunteers, sponsors, and John’s wife Nicole for making this conference happen.<br />
The second part of the community keynote is like an annual visit to an accountant. The organizers open up the books. Literally. It’s the moment of truth and transparency. The first slide showed the expenses “the money out”. Then goes the slide with “the money in”, then the pocket change – the difference  between the in and out.  I’m not going to publish these slides here to give Tom and John some room to play before they’ll submit the final numbers to IRS.</p>
<p>I sincerely hope that this public bookkeeping will stop soon, which will be a good indication that Tom and John are finally making some real money for all the hard work they put organizing this excellent independent conference for Flex developers.</p>
<p>There’s one more tradition of the community keynote: Tom announces that this was the last time he was organizing this conference, and he quits. I understand his feelings. I have similar state of mind after finishing writing yet another book. Last month it was the 6th time when I said to myself, “Never again!” But I realize that I’ll write yet another book too.</p>
<p>But let’s observe the protocol and thank Tom for his hard work and say,  “@lordbron good luck in your future endeavors!”</p>
<p>Then the mike goes to <a href="http://www.flickr.com/photos/abunur/4422093923/in/set-72157623450143989/">Ben Stucki </a>who shows a quick demo of the Reflex framework of components that are a lot lighter than their Flex peer: 40Kb SWF vs. 400KB. Ben, as usual, wears his “always on” baseball cap.  @AmyBlankenship posted the following on Twitter: “Wondering if the top of @BenStucki &#8217;s head exists…”</p>
<p>Now seriously. Ben has very ambitious task. I’m not sure if Reflex will reach production quality any time soon, but I see at least three possible positive outcomes of this effort:</p>
<p>1. Adobe will learn from Reflex how to create lighter Flex components<br />
2. Ben will create a niche job market for his company – the firms that need fast and light components will be hiring him for development of specialized custom components.<br />
3. Tiny SWF may be in demand among the twenty minus one vendors of Smart Mobile devices.</p>
<p>Then I spent half an hour listening to Renaun Ericskon’s talk “ActionScript Tips for iPhone Games.” He’s the guy if you need to optimize your iPhone application written in ActionScript.</p>
<p>When I’ve heard that Adobe open sourced the data visualization code, my naïve mind took the price of Flex Builder Professional ($699 = $249  + datavisualization) and deducted datavisualization. My formula produced the new price, but I’m afraid that Adobe will apply different logic and the price of Flash Builder won’t go lower than $699.</p>
<p><strong>Hint.</strong> If you want to be cool this season, keep saying that you never use the Design mode in Flash Builder. Or even better – use IntelliJIdea.</p>
<p>My final three-hour technical session was “Comparing Flex and Silverlight” presented by  Jun Heider and Eric Fickes. These guys did a very good technical comparison of two products. Start taking Silverlight seriously. I’d be very interested to compare the licensing costs of deployment of an enterprise data driven application utilizing binary protocols in Flex/LCDS/BlazeDS vs Silverlight/IIS. Without these numbers it’s hard to recommend one or the other technology to the enterprise customers.</p>
<p>During this presentation I’ve also enjoyed watching the <strong><a href="http://www.youtube.com/watch?v=RINizGmhrYo">monkey dance</a></strong> of one of the Microsoft’s billionaires.</p>
<p>On the way home, @jefftapper told me that the new version of the Flex 4 Training from the Source book will become available. This time it&#8217;ll consist of two parts, and the first part will be available in April. In the past, I bought the Flex 2 and Flex 3 editions of this well written training manual, and will definitely buy the Flex 4 version too.</p>
<p><strong>Summary</strong></p>
<p>Here’s a recap of some things I liked about the #360Flex circa San Jose 2010:<br />
1.    Lot’s of power outlets and extenders.<br />
2.    A vending machine with disabled dollar slot was dispensing the cans for free.<br />
3.    80% of presentations are done by independent Flex developers.<br />
4.    As always, this conference was very friendly and informal</p>
<p>When/where is the next 360flex? Anyone knows? I need to book the flight early.</p>
<p>Yours<br />
Yakov</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/03/11/360flex-san-jose-2010-day-3/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>360flex, San Jose 2010, Tuesday</title>
		<link>http://flexblog.faratasystems.com/2010/03/10/360flex-san-jose-2010-tuesday</link>
		<comments>http://flexblog.faratasystems.com/2010/03/10/360flex-san-jose-2010-tuesday#comments</comments>
		<pubDate>Wed, 10 Mar 2010 14:53:51 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[360Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=690</guid>
		<description><![CDATA[On Tuesday, I’ve attended a couple of panels and 2.5 sessions.
The morning panel was titled “Principles of RIA” and was about bringing animation and effects to your RIA to make it more engaging. For some reason it didn’t get me excited as I have to deal with more prosaic issues on a daily basis.
The next [...]]]></description>
			<content:encoded><![CDATA[<p>On Tuesday, I’ve attended a couple of panels and 2.5 sessions.</p>
<p>The morning panel was titled “Principles of RIA” and was about bringing animation and effects to your RIA to make it more engaging. For some reason it didn’t get me excited as I have to deal with more prosaic issues on a daily basis.</p>
<p>The next hour and a half I spent sitting on the floor in the overcrowded room where Deepa was reviewing new features of Flex 4, which were not Spark components.</p>
<p>During the lunch I was invited to speak at a conference in Mexico and discussed specifics of working as a consultant on government projects.</p>
<p>Then, I made a wrong choice because of the misleading title – I was expected to see more advanced stuff, but it was an intro type session. C’mon, stop writing ANT manually – check out our free plugin <a href="http://sourceforge.net/projects/cleartoolkit/files/">FX2Ant</a> that generates ANT script from your Flex project in seconds.</p>
<p>My next selection was the session on Test Driven Development (TDD) by Elad Elrom. This was  the best session of the day hands down. There are situations when TDD can save project development cycle. Writing tests before the actual application is written forces people to better understand the application being developed. Ten year ago using UML-based code generators would have a similar effect -  we had to think before code, but we’d had to test code manually.<br />
In the 21-st Century, the legions of low skilled people rushed into software development and the more coding generated and tested automatically the better.</p>
<p>During Elad’s presentation I’ve learned a new term for something that we all experience in the corporate world: Asshole-Driven Development. Here’s the slide on the subject:<br />
<img class="alignnone" title="ADD" src="http://myflex.org/yf/add_driven2.jpg" alt="" width="586" height="553" /></p>
<p>The technical part of the day was closed by another panel. This time it was on the business of software – how to estimate development cost, how to talk to clients, how to run teams etc. This topic drew a lot of interest among the developers, but to me, most of the answers were sugarcoated. The panelists were saying the right things, but to my taste, it was not open enough. There is a lot more BS in this area than it was presented.  I liked the comments made by RJ Owen (he was on the panel) – RJ has a good sense of humor.</p>
<p>A couple of takeaways from this session are:</p>
<p>1. Development can be good, fast, and cheap – pick two.<br />
2. When you are developing a project, it’s like working in the construction business. The difference is that instead of wood and bricks you have to use live kittens – they move, play, fight…</p>
<p>The level of the attendees is different. For example, one person told me that he wrote a large Flex application – 8000 lines of code in one file. But he understands that this is not right. In today’s podcast The Flex Show one girl said, “We use a lot of Flex, especially for our front end.” Nice!</p>
<p>Organizers of the conference marked each presentation by a level of complexity: 100, 200, and 300. Mine was marked as 300, but one guy stopped by saying the he loved it even though it was of a level 400. He also said that during the preso I “sold” a lot of our copies of our <a href="http://www.amazon.com/Enterprise-Development-Flex-Practices-Developers/dp/059615416X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1268232716&amp;sr=1-1">upcoming book</a>. I was not presenting to sell books, but hey O’Reilly, have you heard this?</p>
<p>At the end of the day I went for dinner to P.F.Chang’s with Shashank, Tom, Jeff, and John and group of other people. Five Adobe evangelists were eating there already. We’ve asked the waiter to give us a table far from them assuming they might need privacy to discuss some secret things, like the date of Flex 4 release. He-he, if they’d read my <a href="http://bit.ly/cZ27dr">yesterday’s blog</a> they’d know that I calculated that date already.</p>
<p>For me, it was the second day in a row at P.F.Chang’s. I was the only one who have been there already. At this restaurant, they bring you the bill and fortune cookies at the same time, I guess, to ease the pain.  Shashank’s cookie had something about multi-touch, which is a good sign since he’s presenting on Wed on this subject.</p>
<p>Wednesday is the closing day of the conference.</p>
<p>Another day, another dinner at P.F. Chang’s.</p>
<p>Yours,<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/03/10/360flex-san-jose-2010-tuesday/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>First notes from 360Flex 2010 conference</title>
		<link>http://flexblog.faratasystems.com/2010/03/09/first-notes-from-360flex-2010-conference</link>
		<comments>http://flexblog.faratasystems.com/2010/03/09/first-notes-from-360flex-2010-conference#comments</comments>
		<pubDate>Tue, 09 Mar 2010 12:50:51 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[360Flex]]></category>
		<category><![CDATA[modularization]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=686</guid>
		<description><![CDATA[I’ve arrived to San Jose,CA late on Sunday. By coincidence, there were three other speakers on the same plane from New York: Shashank Tiwari, Elad Elrom, and Jeff Tapper.  A short taxi ride to Marriott and one of the conference organizers, Tom Ortega, gives us a warm welcome in the lobby, “Hello guys! Please don’t [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve arrived to San Jose,CA late on Sunday. By coincidence, there were three other speakers on the same plane from New York: Shashank Tiwari, Elad Elrom, and Jeff Tapper.  A short taxi ride to Marriott and one of the conference organizers, Tom Ortega, gives us a warm welcome in the lobby, “Hello guys! Please don’t do it again. Don’t get on the same plane next time – I can’t afford to lose four speakers”.</p>
<p>After a quick check-in to a nice room I spent a couple of hours drinking with a flex crowd in a couple of bars.</p>
<p><strong>The morning after.<br />
</strong></p>
<p>The shuttle bus took us to the huge eBay campus. Most of the people on the bus DID NOT have iPhones, can you believe this? Tom was <strong><a href="http://twitpic.com/17dfdr">greeting everyone at the door</a></strong>.<br />
Several hundred of people gathered to hear Adobe’s Deepa’s keynote. Her conference badge reads “I’m Deepa”. Nice! On the next conference I’ll steal this idea from her and will carry the tag “I’m Yakov”.</p>
<p>I’ve been looking at this crowd and was thinking to myself, “If Tom and John will keep 360Flex running, in two years it’ll become bigger than Adobe MAX for Flex developers.”</p>
<p>In the morning, I’ve attended a presentation on Web analytics (Google vs. Omniture) and after lunch, my yesterday’s drinking buddy Jesse shared with the grateful audience his use of Flex plus two (!) more frameworks in the same project. Jesse is a good presenter, and I always come to see him regardless of the subject he’s talking about.</p>
<p>At 4PM I delivered a preso titled “Boring Presentation on Libraries and Modules”. A hundred people gathered in the room (<strong><a href="http://myflex.org/presentations/360flex_before_preso.MP4">here they are</a></strong>), and I was talking for 80 minutes and then was answering questions for another 25 minutes. I was pleasantly surprised that a non-flashy subject of modularization gets such an interest. People started working on decent size enterprise RIA’s and need to properly cut them into pieces.</p>
<p>This presentation was videotaped and sooner or later will become available online. For now, I can offer you <strong><a href="http://blip.tv/file/3201360">a video of its shorter version</a></strong> that I made last year at Flash Camp Wall Street.<br />
The beer was served right at eBay and the networking part began. These are some things that I’d like to share with you.</p>
<p>1. After certain conversations with certain people and by applying the Sherlock Holmes’ method of deductive reasoning I came out with the release date of Flex 4. To be on the safe side, I’ll give you two dates: March 29 or March 31 of 2010. Let’s wait and see if I got it right or I got it right.</p>
<p>2. I met a guy who runs a tiny company of a couple of Flex developers. He was complaining that it’s very difficult for him to find Flex talent for his projects because he couldn’t afford to hire and keep on billing $100 per hour consultants. He was surprised to learn that our company can easily offer him senior (I mean it) Flex/Java developers working remotely for a lot more modest rates. This is not the first time I hear that people assume that Farata Systems works only for Wall Street giants. We have lots of happy customers and the smallest one has only two employees.</p>
<p>3. I met a guy who has a nice visualization piece that may compliment our ClearBI Flex reporter. For some reason, there’s a surge of interest to ClearBI during the last month or so. We haven’t open sourced it yet, but if you want to play with it, here’s <a href="http://myflex.org/demo/clearbi/demo3.html"><strong>the URL of the demo server</strong></a>.  You may find some old screencasts showing how to create a custom report based on the raw grid of data, but try just hitting the buttons on the screen and you should be able to figure out how to add grouping, sorting, computed columns with formulas, and other goodies to create a report to your liking.</p>
<p>The dinner at P.F.Chang with several flexers was closing my first day of this very friendly and high-tech event. Looking forward for today’s learning.</p>
<p>Another day, another framework.</p>
<p>Your’s truly,<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/03/09/first-notes-from-360flex-2010-conference/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Two weeks, two flights, two conferences</title>
		<link>http://flexblog.faratasystems.com/2010/02/23/two-weeks-two-flights-two-conferences</link>
		<comments>http://flexblog.faratasystems.com/2010/02/23/two-weeks-two-flights-two-conferences#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:41:48 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[360Flex]]></category>
		<category><![CDATA[Advanced Flex Training]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=682</guid>
		<description><![CDATA[The first two weeks of March I’ll be vacationing in training rooms – teaching and learning Flex.  I used the word vacationing because I love this part of my work the most.
March 1-2: Advanced Master Class on Flex in Brussels, Belgium. This public 2-day training becomes more and more popular. During the last 8 months [...]]]></description>
			<content:encoded><![CDATA[<p>The first two weeks of March I’ll be vacationing in training rooms – teaching and learning Flex.  I used the word vacationing because I love this part of my work the most.</p>
<p><strong>March 1-2</strong>: <strong><a href="http://bit.ly/59DdIU">Advanced Master Class on Flex in Brussels, Belgium</a></strong>. This public 2-day training becomes more and more popular. During the last 8 months we’ve taught this class in New York, Boston, Toronto, London, and Moscow. To the best of my knowledge, no one else offers such an advanced curriculum as public training.  On the night of March 2 I&#8217;ll be co-speaking at the Belgium Flex Users Group.</p>
<p>Here’s something you may not know. Viktor Yanukovich, the newly elected President of the Ukraine <strong><a href="http://blog.kievukraine.info/">will visit Belgium on March 1</a></strong>. The real reason is not to  meet political leaders of Belgium and European Union, but to attend our class to become more flexible and invite Farata Systems to teach the same class in Ukraine in June of 2010. We’ll definitely consider this.</p>
<p><strong>March 7-10</strong>: On arrival from Belgium, I’ll just have time to laundry my Farata t-shirts and have a couple of dinners with my family, and then board the next flight to San Jose, CA. Yep, it’s time for <strong><a href="http://360flex-YakovF.eventbrite.com">360Flex conference</a></strong>, which as of today is my favorite Flex gathering. This is a No BS event. For independent developers by independent developers. 40 sessions, 2 panels, 4 Sunday Hands-On sessions. Networking. Beer. Good energy.  Solid technical content.I even recorded <strong><a href="http://www.youtube.com/user/yfain#p/a/u/1/pSMSJLas-7k">a 40-sec video</a></strong> to share with you my excitement!</p>
<p>I’ll deliver an interesting and useful for enterprise Flex developers talk titled &#8220;Boring presentation on Flex libraries and modules&#8221;.  The rest of the time I’ll spend in the meeting rooms listening to what other developers are up to.</p>
<p>In the evening, I’ll be glad to join you for a Johny Walker. Be there. Join several hundreds of Flex developers who are in the know!</p>
<p>Yours truly<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/02/23/two-weeks-two-flights-two-conferences/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Flex 4 Skin Inheritance To Make PictureButton Component</title>
		<link>http://flexblog.faratasystems.com/2010/02/17/using-flex-4-skin-inheritance-to-make-picturebutton-component</link>
		<comments>http://flexblog.faratasystems.com/2010/02/17/using-flex-4-skin-inheritance-to-make-picturebutton-component#comments</comments>
		<pubDate>Wed, 17 Feb 2010 19:27:14 +0000</pubDate>
		<dc:creator>Victor Rasputnis</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex 2]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=627</guid>
		<description><![CDATA[Coming across several blogs that hint that custom Spark skins should not be created via OOP inheritance I felt challenged.  After all, Spark skins are using inheritance already, so why should I be stripped of something I am so used to? In this post , I will create a PictureButton component that injects image [...]]]></description>
			<content:encoded><![CDATA[<p>Coming across several <a href="http://www.flexjunk.com/2009/08/03/flex-4-skinning-ignores-developer-needs/">blogs</a> that hint that custom Spark skins should not be created via OOP inheritance I felt challenged.  After all, Spark skins are using inheritance already, so why should I be stripped of something I am so used to? In this post , I will create a PictureButton component that injects image into the Spark Button:</p>
<div class="quickcodenoclick"><code> &lt;PictureButton label=&quot;My PictureButton&quot;&nbsp;&nbsp;pictureGroupName=&quot;statistic&quot; skinClass=&quot;PictureButtonSkin&quot; /&gt;<br />
</code></div>
<p>This is how the button looks <img src="http://flexblog.faratasystems.com/images/627/PictureButton.png" alt="PictureButton" />and you can run view-source enabled <a href="http://flexblog.faratasystems.com/images/627/PictureButtonDemo.html">demo application</a> if you, like me, do not have patience for the wordy blogs. PictureButton component features <code>pictureGroupName</code> property, which represents the common &#8220;group name&#8221; of three images for &#8220;up&#8221;, &#8220;over&#8221; and &#8220;down&#8221; states. Mangled with the &#8220;_up&#8221;, &#8220;_over&#8221; and &#8220;_down&#8221; suffixes it should yield the real image URLs (e.g. <em>assets/statistic_up.png, assets/statistic_down/png</em> etc.) :<em><br />
</em><br />
Clearly, creating <code>public class PictureButton extends spark.skins.sparkButton</code> is a must, if anything &#8211;  just to carry arround the <code>pictureGroupName</code>. Then we have three choices for the <code>PictureButtonSkin</code>:<br />
a) create a brand new skin (this had been <a href="http://www.andymcintosh.com/?p=179">done before</a>)<br />
b) massage the clone of <code>spark.skins.spark.ButtonSkin</code><br />
c) build a descendant (in OOP terms)  of the Spark skin.<em></em></p>
<p><em>This post is focusing on the last two approaches, particularly highlighting the OOP way.<br />
</em><br />
<strong>Making Picture Button Skin By Cloning And Massaging Spark Button Skin</strong><em><br />
</em><br />
Massaging the original skin we redirect the <code>HostComponent</code> to point to our forthcoming <code>PictureButton</code>. Then, in the last,  8-th layer of original skin, we wrap the <code>labelDisplay</code> skin part with the <code>VGroup</code> and inject a <code>bitmapImage</code>. The &#8220;up&#8221;, &#8220;over&#8221; and &#8220;down&#8221; variants of the <code>bitmapImage.source</code> are bound to the bitmaps carried within the &#8220;hostComponent&#8221; :</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p627code7'); return false;">Flat PictureButton Skin (no inheritance)</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p6277"><td class="code" id="p627code7"><pre class="mxml" style="font-family:monospace;"><span style="color: #000000;">&lt;?xml version=<span style="color: #990000;">&quot;1.0&quot;</span> encoding=<span style="color: #990000;">&quot;utf-8&quot;</span>?<span style="color: #0033ff;">&gt;</span></span>
<span style="color: #000000;"><span style="color: #0033ff;">&lt;s:SparkSkin</span> xmlns:fx=<span style="color: #990000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> xmlns:s=<span style="color: #990000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> </span>
<span style="color: #000000;">             xmlns:fb=<span style="color: #990000;">&quot;http://ns.adobe.com/flashbuilder/2009&quot;</span> minWidth=<span style="color: #990000;">&quot;21&quot;</span> minHeight=<span style="color: #990000;">&quot;21&quot;</span> alpha.disabled=<span style="color: #990000;">&quot;0.5&quot;</span></span>
<span style="color: #000000;">	 <span style="color: #0033ff;">&gt;</span></span>
	<span style="color: #000000;"><span style="color: #0033ff;">&lt;fx:Metadata</span><span style="color: #0033ff;">&gt;</span></span>
		<span style="color: #000000;">&lt;!<span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span></span>
<span style="color: #000000;">		<span style="color: #66cc66;">&#91;</span>HostComponent<span style="color: #66cc66;">&#40;</span><span style="color: #990000;">&quot;PictureButton&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span></span>
<span style="color: #000000;">		<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #0033ff;">&gt;</span></span>
       <span style="color: #000000;"><span style="color: #808080; font-style: italic;">&lt;!-- The rest of the original spark.skins.spark.ButtonSkin - till layer 8  is omitted for brevity --&gt;</span></span>
	.  .  .  .  .
	<span style="color: #000000;"><span style="color: #808080; font-style: italic;">&lt;!-- layer 8: text --&gt;</span></span>
	<span style="color: #000000;"><span style="color: #808080; font-style: italic;">&lt;!-- @copy spark.components.supportClasses.ButtonBase#labelDisplay --&gt;</span></span>
	<span style="color: #000000;"><span style="color: #808080; font-style: italic;">&lt;!-- WE COMMENTED OUT ORIGINAL labelDisplay</span>
<span style="color: #000000;">         &lt;s:Label id=&quot;labelDisplay&quot;</span>
<span style="color: #000000;">			 textAlign=&quot;center&quot; verticalAlign=&quot;middle&quot;</span>
<span style="color: #000000;">			 maxDisplayedLines=&quot;1&quot;</span>
<span style="color: #000000;">			 horizontalCenter=&quot;0&quot; verticalCenter=&quot;1&quot;</span>
<span style="color: #000000;">			 left=&quot;10&quot; right=&quot;10&quot; top=&quot;2&quot; bottom=&quot;2&quot;&gt;</span></span>
	<span style="color: #000000;"><span style="color: #0033ff;">&lt;/s:Label</span><span style="color: #0033ff;">&gt;</span></span> 
         --&gt;
	<span style="color: #000000;"><span style="color: #0033ff;">&lt;s:VGroup</span>  horizontalAlign=<span style="color: #990000;">&quot;center&quot;</span>  verticalAlign=<span style="color: #990000;">&quot;middle&quot;</span> left=<span style="color: #990000;">&quot;3&quot;</span> right=<span style="color: #990000;">&quot;3&quot;</span></span>
<span style="color: #000000;">			   paddingTop=<span style="color: #990000;">&quot;3&quot;</span> paddingBottom=<span style="color: #990000;">&quot;3&quot;</span> </span>
<span style="color: #000000;">			   paddingLeft=<span style="color: #990000;">&quot;3&quot;</span> paddingRight=<span style="color: #990000;">&quot;3&quot;</span> </span>
<span style="color: #000000;">				   <span style="color: #0033ff;">&gt;</span></span>			
		<span style="color: #000000;"><span style="color: #0033ff;">&lt;s:BitmapImage</span>  id=<span style="color: #990000;">&quot;bitmapImage&quot;</span> </span>
<span style="color: #000000;">			  source.up=<span style="color: #990000;">&quot;{hostComponent.bitmapImageUp}&quot;</span></span>
<span style="color: #000000;">			  source.over=<span style="color: #990000;">&quot;{hostComponent.bitmapImageOver}&quot;</span></span>
<span style="color: #000000;">			  source.down=<span style="color: #990000;">&quot;{hostComponent.bitmapImageDown}&quot;</span></span>
<span style="color: #000000;">		<span style="color: #0033ff;">/&gt;</span></span>
&nbsp;
		<span style="color: #000000;"><span style="color: #0033ff;">&lt;s:Label</span> id=<span style="color: #990000;">&quot;labelDisplay&quot;</span> left=<span style="color: #990000;">&quot;10&quot;</span> right=<span style="color: #990000;">&quot;10&quot;</span> top=<span style="color: #990000;">&quot;2&quot;</span> bottom=<span style="color: #990000;">&quot;2&quot;</span></span>
<span style="color: #000000;">			  textAlign=<span style="color: #990000;">&quot;center&quot;</span> verticalAlign=<span style="color: #990000;">&quot;middle&quot;</span> </span>
<span style="color: #000000;">			  maxDisplayedLines=<span style="color: #990000;">&quot;1&quot;</span> </span>
<span style="color: #000000;">		<span style="color: #0033ff;">/&gt;</span></span>
	<span style="color: #000000;"><span style="color: #0033ff;">&lt;/s:VGroup</span><span style="color: #0033ff;">&gt;</span></span>		
<span style="color: #000000;"><span style="color: #0033ff;">&lt;/s:SparkSkin</span><span style="color: #0033ff;">&gt;</span></span></pre></td></tr></table></div>

<p>Now, let&#8217;s supplement this skin with the matching <code>PictureButton</code> code.<br />
<em><br />
</em><br />
<strong>PictureButton Component</strong><br />
To make the very PictureButton we extend the Spark button and instantly create three SWFLoaders to facilitate load of three images:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p627code8'); return false;">PictureButton Component: Image loaders</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p6278"><td class="code" id="p627code8"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PictureButton <span style="color: #0066CC;">extends</span> <span style="color: #0066CC;">Button</span>	<span style="color: #66cc66;">&#123;</span>
      <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> loaderUp:SWFLoader;
      <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> loaderDown:SWFLoader;
      <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> loaderOver:SWFLoader;
&nbsp;
       <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> PictureButton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
	        <span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		loaderUp = <span style="color: #000000; font-weight: bold;">new</span> SWFLoader;
		loaderDown = <span style="color: #000000; font-weight: bold;">new</span> SWFLoader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		loaderOver = <span style="color: #000000; font-weight: bold;">new</span> SWFLoader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		loaderUp.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #0066CC;">onLoadComplete</span><span style="color: #66cc66;">&#41;</span>;
		loaderDown.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #0066CC;">onLoadComplete</span><span style="color: #66cc66;">&#41;</span>;
		loaderOver.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #0066CC;">onLoadComplete</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
...</pre></td></tr></table></div>

<p>Changing of the <code>pictureGroupName</code> will result in loading of the pictures, according to the setter below:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p627code9'); return false;">PictureButton Component: pictureGroupName accessors</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p6279"><td class="code" id="p627code9"><pre class="actionscript" style="font-family:monospace;">		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _pictureGroupName:<span style="color: #0066CC;">String</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> pictureGroupName <span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_pictureGroupName <span style="color: #66cc66;">!</span>== value<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				_pictureGroupName = value;
				loadPictures<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> pictureGroupName<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">return</span> _pictureGroupName;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> loadPictures<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaderUp<span style="color: #66cc66;">&#41;</span> loaderUp.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;assets/&quot;</span> + pictureGroupName + <span style="color: #ff0000;">&quot;.png&quot;</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaderDown<span style="color: #66cc66;">&#41;</span> loaderDown.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;assets/&quot;</span> + pictureGroupName + <span style="color: #ff0000;">&quot;_down.png&quot;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaderOver<span style="color: #66cc66;">&#41;</span> loaderOver.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;assets/&quot;</span> + pictureGroupName + <span style="color: #ff0000;">&quot;_over.png&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Finally, as images get loaded we populate corresponding bindable bitmapImage properties that our custom skin so much depends on. Note, that being public these properties can be set from outside; you can avoid using <code>pictureGroupName</code> whatsoever and, in particular, you may load all your images from module classes or CSS styles etc.</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p627code10'); return false;">PictureButton:Communicating to the Skin</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p62710"><td class="code" id="p627code10"><pre class="actionscript" style="font-family:monospace;">		<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span> <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> bitmapImageUp:<span style="color: #0066CC;">Object</span>;
		<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span> <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> bitmapImageDown:<span style="color: #0066CC;">Object</span>;
		<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span> <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> bitmapImageOver:<span style="color: #0066CC;">Object</span>;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onLoadComplete</span><span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">target</span> == loaderUp<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				bitmapImageUp = event.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">content</span>;
			<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">target</span> == loaderDown<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				bitmapImageDown = event.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">content</span>;
			<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">target</span> == loaderOver<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				bitmapImageOver = event.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">content</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>OK. Both skin and control are done,  but there is an afterthought: WHAT IF THE BASE SKIN CHANGES?<br />
Obviously, we will be out of sync. Hence the need for OOP approach.<br />
<em><br />
</em></p>
<p><strong>Making PictureButtonSkin WITH INHERITANCE</strong><br />
<em><br />
</em><br />
All we did in the cloned Skin was replacing original <em>labelDisplay</em> with the <em>VGroup</em> containing both <em>labelDisplay</em> AND <em>bitmapImage</em>.<br />
We did it with the declarative MXML, however the same can be done in ActionScript:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p627code11'); return false;">PictureButtonSkin Inherited from ButtonSkin: UI components</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p62711"><td class="code" id="p627code11"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">import</span> ...
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PictureButtonSkin <span style="color: #0066CC;">extends</span> ButtonSkin      <span style="color: #66cc66;">&#123;</span>
&nbsp;
                protected override <span style="color: #000000; font-weight: bold;">function</span> childrenCreated<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
		       <span style="color: #0066CC;">super</span>.<span style="color: #006600;">removeElement</span><span style="color: #66cc66;">&#40;</span>labelDisplay<span style="color: #66cc66;">&#41;</span>;
		       addElement<span style="color: #66cc66;">&#40;</span>createVGroup<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
	               <span style="color: #0066CC;">super</span>.<span style="color: #006600;">childrenCreated</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	        <span style="color: #66cc66;">&#125;</span>
	        <span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> bitmapImage : spark.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">BitmapImage</span>;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> createVGroup<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:VGroup
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> temp : spark.<span style="color: #006600;">components</span>.<span style="color: #006600;">VGroup</span> = <span style="color: #000000; font-weight: bold;">new</span> spark.<span style="color: #006600;">components</span>.<span style="color: #006600;">VGroup</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			temp.<span style="color: #006600;">horizontalAlign</span> = <span style="color: #ff0000;">&quot;center&quot;</span>;
			temp.<span style="color: #006600;">verticalAlign</span> = <span style="color: #ff0000;">&quot;middle&quot;</span>;
			temp.<span style="color: #0066CC;">left</span> = <span style="color: #cc66cc;">3</span>;
			temp.<span style="color: #0066CC;">right</span> = <span style="color: #cc66cc;">3</span>;
			temp.<span style="color: #006600;">paddingTop</span> = <span style="color: #cc66cc;">3</span>;
			temp.<span style="color: #006600;">paddingBottom</span> = <span style="color: #cc66cc;">3</span>;
			temp.<span style="color: #006600;">paddingLeft</span> = <span style="color: #cc66cc;">3</span>;
			temp.<span style="color: #006600;">paddingRight</span> = <span style="color: #cc66cc;">3</span>;
			temp.<span style="color: #006600;">mxmlContent</span> = <span style="color: #66cc66;">&#91;</span>createBitmapImage<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, createLabel<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>;
			<span style="color: #b1b100;">return</span> temp;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> createBitmapImage<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : spark.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">BitmapImage</span>
		<span style="color: #66cc66;">&#123;</span>
			bitmapImage = <span style="color: #000000; font-weight: bold;">new</span> BitmapImage<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">return</span> bitmapImage;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> createLabel<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : spark.<span style="color: #006600;">components</span>.<span style="color: #006600;">Label</span>
		<span style="color: #66cc66;">&#123;</span>
			labelDisplay  = <span style="color: #000000; font-weight: bold;">new</span> Label<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			labelDisplay.<span style="color: #0066CC;">left</span> = <span style="color: #cc66cc;">10</span>;
			labelDisplay.<span style="color: #0066CC;">right</span> = <span style="color: #cc66cc;">10</span>;
			labelDisplay.<span style="color: #006600;">top</span> = <span style="color: #cc66cc;">2</span>;
			labelDisplay.<span style="color: #006600;">bottom</span> = <span style="color: #cc66cc;">2</span>;
			labelDisplay.<span style="color: #006600;">maxDisplayedLines</span> = <span style="color: #cc66cc;">1</span>;
			labelDisplay.<span style="color: #0066CC;">setStyle</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;textAlign&quot;</span>, <span style="color: #ff0000;">&quot;center&quot;</span><span style="color: #66cc66;">&#41;</span>;
			labelDisplay.<span style="color: #0066CC;">setStyle</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;verticalAlign&quot;</span>, <span style="color: #ff0000;">&quot;middle&quot;</span><span style="color: #66cc66;">&#41;</span>;
			labelDisplay.<span style="color: #006600;">id</span> = <span style="color: #ff0000;">&quot;labelDisplay&quot;</span>;
			<span style="color: #b1b100;">return</span> labelDisplay;
		<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Now, notice that we did not populate the <code>source</code> of the <code>bitmapImage</code>. The reason is that by diving into ActionScript we lost &#8220;luxury&#8221; of state-related code generation for &#8220;source.up&#8221;,  &#8220;source.over&#8221; and &#8220;source.down&#8221;. To complement this we have to listen to &#8220;stateChanging&#8221; event and adjust the source ourselves:<em><br />
</em></p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p627code12'); return false;">PictureButton skin inherited from ButtonSkin: state management</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p62712"><td class="code" id="p627code12"><pre class="actionscript" style="font-family:monospace;"> 	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PictureButtonSkin <span style="color: #0066CC;">extends</span> ButtonSkin
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> PictureButtonSkin<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>StateChangeEvent.<span style="color: #006600;">CURRENT_STATE_CHANGING</span>, onStateChanging<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
                .  .  .  .
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onStateChanging<span style="color: #66cc66;">&#40;</span>event:StateChangeEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">newState</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;down&quot;</span>:
					bitmapImage.<span style="color: #006600;">source</span> = hostComponent<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;bitmapImageDown&quot;</span><span style="color: #66cc66;">&#93;</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;over&quot;</span>:
					bitmapImage.<span style="color: #006600;">source</span> = hostComponent<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;bitmapImageOver&quot;</span><span style="color: #66cc66;">&#93;</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;default&quot;</span>:
					bitmapImage.<span style="color: #006600;">source</span> = hostComponent<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;bitmapImageUp&quot;</span><span style="color: #66cc66;">&#93;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>And that is pretty much it.<br />
<em><br />
</em><br />
<strong>Conclusions</strong></p>
<p>Programmatic extension of skins is not that hard. As a developer, I prefer the OOP way to copy/paste.<br />
I am well aware that it breaks the Designer/Developer separation of concerns as it is currently (I stress, currently) envisioned by Adobe.<br />
I am well aware that using non-vector graphics in the first place, instead of Rect and Line primitives, has it&#8217;s own drawbacks.<br />
Yet, being realistic, most often than not I will not have a designer to draw for me.<br />
Neither do I get paid for drawing: I am a coder.</p>
<p>Why I like OOP? Less code.</p>
<p><a href="http://flexblog.faratasystems.com/images/627/PictureButtonDemo.html">Demo Application</a><br />
<a href="http://flexblog.faratasystems.com/images/627/srcview/index.html">SourceView</a></p>
<p>I&#8217;d like to use this opportunity and invite Flex developers living in Europe to attend our <a href="http://www.eventbrite.com/event/527934065">Advanced Flex Master Class in Brussels, Belgium on March 1 and 2, 2010</a>.</p>
<p>Victor Rasputnis</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/02/17/using-flex-4-skin-inheritance-to-make-picturebutton-component/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Avoiding pitfalls of Flex RSL with Self Initialized Libraries</title>
		<link>http://flexblog.faratasystems.com/2010/01/27/taming-flex-rsl</link>
		<comments>http://flexblog.faratasystems.com/2010/01/27/taming-flex-rsl#comments</comments>
		<pubDate>Wed, 27 Jan 2010 23:55:31 +0000</pubDate>
		<dc:creator>Victor Rasputnis</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[dynamic instantiation]]></category>
		<category><![CDATA[Flex4]]></category>
		<category><![CDATA[FlexModuleFactory]]></category>
		<category><![CDATA[monkey paching]]></category>
		<category><![CDATA[RSL]]></category>
		<category><![CDATA[self initialized library]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=585</guid>
		<description><![CDATA[Flex RSLs are notoriously naive in regards to dynamic object instantiation. Consider the following code snippet when the actual class descends Panel or it is a remoting DTO with the [RemoteClass] annotation:
var className:String = &#34;some.flex.class&#34;;
var clazz : Class = loaderInfo.applicationDomain.getDefinition(className) as Class;
var instance: Object = new clazz();

In either case, well being of the class is [...]]]></description>
			<content:encoded><![CDATA[<p>Flex RSLs are notoriously naive in regards to dynamic object instantiation. Consider the following code snippet when the actual class descends Panel or it is a remoting DTO with the <code>[RemoteClass]</code> annotation:</p>
<div class="quickcodenoclick"><code>var className:String = &quot;some.flex.class&quot;;<br />
var clazz : Class = loaderInfo.applicationDomain.getDefinition(className) as Class;<br />
var instance: Object = new clazz();<br />
</code></div>
<p>In either case, well being of the class is based on <strong>mixins</strong> &#8211; decorator classes generated by Flex compiler. Mixins carry obligatory <code>init(o:Object/*systemManager or moduleFactory*/)</code> method and get called to decorate startup class of the application (SystemManager) or the module (ModuleFactory). For instance, a class with <code>[RemoteClass(&quot;foo.Bar&quot;)]</code> annotation contributes  a similar looking fragment to the mixin class <code>_YourApplicationName_FlexInit</code>:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p585code20'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p58520"><td class="code" id="p585code20"><pre class="actionscript" style="font-family:monospace;">  <span style="color: #0066CC;">try</span> <span style="color: #66cc66;">&#123;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">getClassByAlias</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;foo.Bar&quot;</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
          flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">registerClassAlias</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;foo.Bar&quot;</span>, flex.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #0066CC;">with</span>.<span style="color: #006600;">RemoteClassAnnotation</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span> <span style="color: #0066CC;">catch</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:<span style="color: #0066CC;">Error</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
          flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">registerClassAlias</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;foo.Bar&quot;</span>, flex.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #0066CC;">with</span>.<span style="color: #006600;">RemoteClassAnnotation</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Similarly, a class that descends from a Panel depends on mixin <code>[_YourApplicationName]_Styles</code> to carry the following:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p585code21'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p58521"><td class="code" id="p585code21"><pre class="actionscript" style="font-family:monospace;">        .  .  .
        <span style="color: #808080; font-style: italic;">// spark.components.Panel</span>
        selector = <span style="color: #000000; font-weight: bold;">new</span> CSSSelector<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;spark.components.Panel&quot;</span>, conditions, selector<span style="color: #66cc66;">&#41;</span>;
        mergedStyle = styleManager.<span style="color: #006600;">getMergedStyleDeclaration</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;spark.components.Panel&quot;</span><span style="color: #66cc66;">&#41;</span>;
        style = <span style="color: #000000; font-weight: bold;">new</span> CSSStyleDeclaration<span style="color: #66cc66;">&#40;</span>selector, styleManager, mergedStyle == <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;
        . . .</pre></td></tr></table></div>

<p>Now, here is the problem. If you hide your class behind <code>getDefinition()</code> Flex compiler does not contribute to either _FlexInit or _Styles mixins. In other words, your RSL may contain 100 classes, all of them will be loaded, but they will be lacking proper initialization if you did not explicitly reference them in the application.<br />
<em><br />
</em><br />
<strong>Problem Illustration</strong></p>
<p>Let&#8217;s illustrate.  On the left is the application that on button click &#8230; fails to dynamically instantiate a custom panel from standard Flex RSL. On the right we show working application AFTER the solution has been applied (Patience, reader, patience!)<br />
<img class="aligncenter" src="http://flexblog.faratasystems.com/images/407/bad_app_good_app.png" alt="Sample application with problem before and after treatment" /><br />
Here is the application code:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p585code22'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p58522"><td class="code" id="p585code22"><pre class="mxml" style="font-family:monospace;">	<span style="color: #000000;">&lt;!<span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span></span>
<span style="color: #000000;">			import mx.core.IVisualElement;</span>
<span style="color: #000000;">			private var visualElement:IVisualElement;</span>
<span style="color: #000000;">			//import spark.components.Panel;Panel; // That would be too simple :<span style="color: #66cc66;">&#41;</span></span>
<span style="color: #000000;">			private function createComponent<span style="color: #66cc66;">&#40;</span>componentName:String<span style="color: #66cc66;">&#41;</span> : void <span style="color: #66cc66;">&#123;</span></span>
<span style="color: #000000;">				var clazz : Class = loaderInfo.applicationDomain.getDefinition<span style="color: #66cc66;">&#40;</span>componentName<span style="color: #66cc66;">&#41;</span> as Class;</span>
<span style="color: #000000;">				visualElement = IVisualElement<span style="color: #66cc66;">&#40;</span>new clazz<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;</span>
<span style="color: #000000;">				addElement<span style="color: #66cc66;">&#40;</span>visualElement<span style="color: #66cc66;">&#41;</span>;</span>
<span style="color: #000000;">			<span style="color: #66cc66;">&#125;</span></span>
<span style="color: #000000;">	<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #0033ff;">&gt;</span></span></pre></td></tr></table></div>

<p><em><br />
</em>The very custom panel is hosted by a separate Flex Library Project &#8211; ComponentLibrary:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p585code23'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p58523"><td class="code" id="p585code23"><pre class="mxml" style="font-family:monospace;">		public static var count:int;
       [Bindable] private var instanceNumber:int;</pre></td></tr></table></div>

<p>Make sure the link type of the ComponentLibrary is set to &#8220;RSL&#8221;. Run the application, click on the Button &#8211; you won&#8217;t see any panels. Better yet, Debug (instead of Run) and you will notice console trace statements of the panels actually being created. However, custom panel is not shown, because _Styles mixin lacks section for ancestor &#8211; Spark Panel.<br />
<em><br />
</em><br />
<strong>Solution</strong></p>
<p>So what is the solution? Obviously, the Adobe RSL SWF has to be replaced by something else. By default, ComponentLibrary.swf get extracted from ComponentLibrary.swc on every build of the application. But, if we turn off the &#8220;AutoExtract&#8221; checkbox, we are free to replace it with the SWF of our own making.  Which one? A sub-application SWF.  Instead of a headless, single framed RSL SWF, we will use double framed application SWF adding a descendant of the mx.core.SimpleApplication as a head class. Within such head class we can statically reference all library classes. As a result, compiler will generate required mixins within the &#8220;library&#8221; SWF. That is why in Farata we coined the term   <strong>self-initialized library</strong>, meaning that classes in our library do not need external initialization by the Flex compiler:<br />
<em><br />
</em></p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p585code24'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p58524"><td class="code" id="p585code24"><pre class="actionscript" style="font-family:monospace;">package <span style="color: #66cc66;">&#123;</span>
  <span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">core</span>.<span style="color: #006600;">SimpleApplication</span>;
  <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> LibraryHead <span style="color: #0066CC;">extends</span> SimpleApplication <span style="color: #66cc66;">&#123;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;">// List all library classes here, so Flex compiler will take care of them</span>
        <span style="color: #0066CC;">import</span>  com.<span style="color: #006600;">farata</span>.<span style="color: #006600;">samples</span>.<span style="color: #006600;">CustomPanel</span>;com.<span style="color: #006600;">farata</span>.<span style="color: #006600;">samples</span>.<span style="color: #006600;">CustomPanel</span>; 
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> LibraryHead<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// Custom library initialization code may go here</span>
		<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Self-initialized library has been loaded&quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>As a matter of fact, the last drop required to force Flex compiler into mixin generation is to use a MXML extension of the LibraryHead as the compilation <strong>target</strong>:</p>
<p>Importantly, we use Ant scripts to build self-initialized libraries, since out of the box Flex library project is not positioned to produce SWFs:</p>
<p>Wait! There is more. In Flex 3 making and using self-initialized library would be enough. In Flex 4, however, we have to replace single line of code that applies the mixins in the <code>mx.core.FlexModuleFactory</code>, ancestor of the SimpleApplication. In place of</p>
<div class="quickcodenoclick"><code><br />
c[&quot;init&quot;](this);<br />
</code></div>
<p>we should put more sophisticated code that instead of decorating the factory class of the loaded library decorates the factory class of the entire application, i.e.   SystemManager:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p585code25'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p58525"><td class="code" id="p585code25"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> mixinTarget:<span style="color: #0066CC;">Object</span>;
	 <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span> is FlexApplicationBootstrap<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">//aka self initialized library</span>
		mixinTarget = SystemManagerGlobals.<span style="color: #006600;">topLevelSystemManagers</span><span style="color: #66cc66;">&#91;</span>
                     SystemManagerGlobals.<span style="color: #006600;">topLevelSystemManagers</span>.<span style="color: #006600;">length</span>-<span style="color: #cc66cc;">1</span>
                <span style="color: #66cc66;">&#93;</span>;
	 <span style="color: #b1b100;">else</span>
                mixinTarget = <span style="color: #0066CC;">this</span>;
	 c<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;init&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#40;</span>mixinTarget<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>Add this class to the application sources and &#8230; it won&#8217;t be considered by the SWF. For one thing, if you did not explicitly reference a variable of this class (or use -includes compiler switch) it will not make into SWF at all. Even if you did, however, remember that Flex SWF links the minimal number of classes to the first frame (FlexModuleFactory is NOT among them) and all the rest &#8211; to the second. In between (actually &#8211; under the control of the first frame&#8217;s code) Flex dynamically loads classes from RSLs, starting from signed RSLs and ending with your custom ones. By the time ComponentLibrary.swf get loaded, class definition of the <code>mx.core.FlexModuleFactory</code> will already be grabbed from &#8220;earlier&#8221; framework.swc. That&#8217;s a known challenge of Flex &#8220;monkey patching&#8221;. The simplest way to overcome it is to overlap application sources with one of the classes that Flex <strong>must</strong> put in the first frame. It can be custom preloader or <code>mx.core.SystemManager</code> itself, however, in this context we prefer <code>mx.core.RSLListLoader</code>. Simply, add <code>import mx.core.FlexModuleLoader;mx.core.FlexModuleLoader;</code> anywhere in the modified <code>mx.core.RSLListLoader</code> and add it to the source path of your main application along with the modified FlexModuleFactory. Again, we use it to our advantage that all dependancies of SystemManager, including RSLListLoader get linked to the first frame:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p585code26'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p58526"><td class="code" id="p585code26"><pre class="actionscript" style="font-family:monospace;">    <span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">core</span>.<span style="color: #006600;">FlexModuleFactory</span>; mx.<span style="color: #006600;">core</span>.<span style="color: #006600;">FlexModuleFactory</span>; <span style="color: #808080; font-style: italic;">// WE ADDED THIS</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> RSLListLoader<span style="color: #66cc66;">&#40;</span>rslList:<span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
    	<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">this</span>.<span style="color: #006600;">rslList</span> = rslList;
    <span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Believe it or not, that&#8217;s it.</p>
<p>Here is the summary of the steps:<br />
1. Turn-off &#8220;autoextract&#8221; of the SWC<br />
2. Create self-initialized library SWF and place it into bin or bin-debug<br />
3. Add monkey-patched FlexModuleFactory and RSLListLoader into Flex sources<br />
4. Say good-bye to plain old Flex RSLs.</p>
<p>I&#8217;d like to use this opportunity and invite Flex developers living in Europe to attend our <a href="http://www.eventbrite.com/event/527934065">Advanced Flex Master Class in Brussels, Belgium on March 1 and 2, 2010</a>.</p>
<p>Victor Rasputnis</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/01/27/taming-flex-rsl/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>LCDS 3 Becomes Less Affordable</title>
		<link>http://flexblog.faratasystems.com/2010/01/27/lcds-3-becomes-less-affordable</link>
		<comments>http://flexblog.faratasystems.com/2010/01/27/lcds-3-becomes-less-affordable#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:26:46 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Clear Toolkit]]></category>
		<category><![CDATA[LCDS 3]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=577</guid>
		<description><![CDATA[A month ago I wrote a blog titled “The RoadMap for Adobe LCDS 3”.  I was so naïve suggesting cutting the prices for LCDS licenses!
The inexpensive ($6K per CPU) departmental license is discontinued. LCDS Express edition is gone.
Get ready to pay around $30K per CPU for Enterprise LCDS 3 license.  It’s really sad that Adobe [...]]]></description>
			<content:encoded><![CDATA[<p>A month ago I wrote a blog titled “<strong><a href="http://flexblog.faratasystems.com/2009/12/21/the-roadmap-for-adobe-lcds-3%E2%80%A8-model-driven-development">The RoadMap for Adobe LCDS 3</a></strong>”.  I was so naïve suggesting cutting the prices for LCDS licenses!</p>
<p>The inexpensive ($6K per CPU)<a href="http://www.adobe.com/products/livecycle/dataservices/faq/"> <strong>departmental license is discontinued</strong></a>. LCDS Express edition is gone.</p>
<p>Get ready to pay around $30K per CPU for Enterprise LCDS 3 license.  It’s really sad that Adobe marketing is killing a great product created by Adobe software engineers.</p>
<p>After reading the <a href="http://anilchannappa.org/2009/11/20/lcds-3-0-released"><strong>chain of comments to the blog</strong> </a>of Anil Channappa, LCDS and BlazeDS project manager,  it seems that Adobe does everything to ensure that our open source <strong><a href="http://sourceforge.net/projects/cleartoolkit/">Clear Toolkit </a></strong>with BlazeDS will become even more popular.</p>
<p>Clear Data Builder (the flagship piece of Clear Toolkit) generates both Flex and Java code from POJO or SQL, supports data sync between different users (yep, with ChangeObjects under the hood), does the server side data push over AMF, knows how to deal with master-detail (hierarchical) collections, supports transactions, has smart  DataForm and Validator components.  We also know how to make BlazeDS scale <strong><a href="http://flex.sys-con.com/node/856150">to support many concurrent users</a></strong>.</p>
<p>Almost forgot, we have generators for AS3 classes from their Java peers and a generator of ANT build scripts from your Flex Builder projects.</p>
<p>Do you know the cost of Clear Toolkit per CPU? You got it. It&#8217;s zero dollars, euros, rubles and rupees.</p>
<p>At the time of this writing Clear Toolkit doesn&#8217;t support Model-Driven development&#8230;Read my lips.</p>
<p>If there is a customer who wants to hire us and shell a little bit of cash for R &amp; D, we can add a support of RTMP too (shared copyright only).</p>
<p>Adobe also stopped offering commercial support of BlazeDS. Well, you know <strong><a href="http://flexblog.faratasystems.com/2009/11/17/farata-systems-offers-enterprise-support-for-blazeds">where to go for this</a></strong>.</p>
<p>Some companies have short memories. When Flex own by Macromedia, was server-side only and priced at $15K, nobody knew about this product. After the merger in late 2005, Adobe did a really smart move by moving this great tool to the client side with reasonably priced Flex Builder.  Now, it looks like Adobe re-hired those old Macromedia salesmen. Big mistake.Huge.</p>
<p>Yakov Fain<br />
P.S. I’d like to use this opportunity and invite Flex developers living in Europe to attend our <a href="http://www.eventbrite.com/event/527934065">Advanced Flex Master Class in Brussels, Belgium on March 1 and 2, 2010</a>. We still have a couple of seats available.</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/01/27/lcds-3-becomes-less-affordable/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unleashing the power of Flex,BlazeDS, and Java applications</title>
		<link>http://flexblog.faratasystems.com/2010/01/15/unleashing-the-power-of-flexblazeds-and-java-applications</link>
		<comments>http://flexblog.faratasystems.com/2010/01/15/unleashing-the-power-of-flexblazeds-and-java-applications#comments</comments>
		<pubDate>Fri, 15 Jan 2010 15:42:24 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[BlazeDS]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=572</guid>
		<description><![CDATA[First of all, Flex and  BlazeDS are open sourced and free, which is important for many IT shops even those from filthy rich Wall Street companies. Typically, an enterprise IT group has a limited budget, and even though a more advanced LiveCycle Data Services component offers you more options and better scalability than BlazeDS, [...]]]></description>
			<content:encoded><![CDATA[<p>First of all, Flex and  BlazeDS are open sourced and free, which is important for many IT shops even those from filthy rich Wall Street companies. Typically, an enterprise IT group has a limited budget, and even though a more advanced LiveCycle Data Services component offers you more options and better scalability than BlazeDS, for most of the applications using BlazeDS installed in any Java Servlet container is a very solid way of building RIA that are a lot more superior to those built on plain HTTP let alone SOAP Web Services.</p>
<p>The main power of BlazeDS is its binary AMF protocol that seamlessly serializes strongly typed data between Flex and Java. Just think of the typical use case described below.</p>
<p>A POJO on the server side gets a bunch of Customer.java records (say, ArrayList) from a data source and needs to display them as a grid in a Web Browser. With a regular HTML/JavaScript Web application you’d need to convert the customers’ data into some kind of text representation (losing the data types information of customer data), then GZip the data, send them to the client, and using JavaScript manipulations convert the data into appropriate data types for further processing.</p>
<p>You don’t need to do any of these while sending the data from Java on the server to Flex on  the client. The ArrayList of customers gets serialized/deserialized into an ActionScript ArrayCollectoin of strongly typed data transfer objects defined in the class Customer.as.</p>
<p>HTTP batching and streaming is a combination of few technologies with a close resemblance to how car traffic is controlled on some highways. There are dedicated lanes for high-occupancy vehicles (HOV) that move faster during the rush hours. Such HOV lanes can be compared to the<br />
HTTP channels opened for streaming. For example, you can program network communications in such way that one channel allows only two data pushes per second (a guaranteed QoS), while the other channel will try to push all the data, which may cause network congestion, delays, and queuing. </p>
<p>With AMF, the data gets loaded faster than with nonbatched requests/responses. And it plays nicely with the typical infrastructures that use firewalls as it piggybacks on the existing browser HTTP requests. </p>
<p>However, for critical HTML/JavaScript applications a problem remains: there is no QoS provided by HTTP protocol, which may become a showstopper. For example, think of a financial application that sends real-time price quotes to the users. The server keeps sending messages, regardless of the current throughput of the network, which in case of network congestion will be causing problems with queues overruns or lost packages.</p>
<p>Recently released LCDS 3 has introduced features to support reliable messaging and throttling, while BlazeDS won’t have it. This is when opensourceness of Flex and BlazeDS becomes handy, because it allows you to customize communication protocols to perfectly meet all the needs of your application and squeeze out a lot more performance from BlazeDS than it’s advertised by Adobe.</p>
<p>How do you even start customizing network protocols? Even the idea of doing this sounds scary, right? It won’t be, if you’ll attend our Master Class in Brussells, Belgium in March: <a href="http://www.eventbrite.com/event/527934065">http://www.eventbrite.com/event/527934065</a>.  We are planning to run a couple of more if these events in the USA too. Let me throw in some technical terms now since not everyone can appreciate the quality of the Belgium beer yet.</p>
<p>If you open the server-side configuration file services-config.xml that comes with BlazeDS, you’ll find declarations of several communication channels there, for example:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p572code28'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p57228"><td class="code" id="p572code28"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;channel-definition</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;my-amf&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;mx.messaging.channels.AMFChannel&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;endpoint</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;http://{server.name}:{server.port}/{context.root}/messagebroker/amf&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;flex.messaging.endpoints.AMFEndpoint&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/channel-definition<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>This is an example of configured AMF communication channel. There are three important notions to understand here.</p>
<p>1. AMF operates using messaging under the hood. When you make an  RPC call to a remote Java class (a.k.a. destination). Flash Player sends messages to the server,  and you can change the way messages are being formed or processed. </p>
<p>2. On the client side (Flex) the ActionScript class a.k.a. channel can be  customized, if need be. In the example above this would be the class  mx.messaging.channel.AMFChannel.</p>
<p>3. On the server side, there are two Java classes that can be customized: an endpoint (see above flex.messaging.endpoints.AMFEndpoint) and adapter.</p>
<p>Let’s say, you want to ensure that every message header includes a userID that  has been authenticated during the logon process, you can do it by customizing the channel and the endpoint classes. This way you won’t need to pass the user ID with every application-specific RPC call.</p>
<p>Two years ago, one of our financial clients was concerned with potential out-of-sequence messages in a trading workflow.  Back than it was the application based on LCDS 2.5, which didn’t offer any support in this area. We’ve customized the channel and adapter to provide this functionality. We’ve also implemented throttling to slow down the message pushes in congestion situations. The same things can be implemented with BlazeDS.</p>
<p>Or let’s take another real-world situation when an extra security is required: the client’s workstation has to be automatically logged off and disconnected, if the server didn’t respond during a specified time interval. To put it simple, we need to implement some kinds of heartbeats. Yes, you can customize the AMF protocol so it’ll process heartbeats between the Flex client and Java server. </p>
<p>Didn’t respond to my heartbeat within 20 second? You’re a dead man! The user get’s logged out of the system.</p>
<p>Need better performance with BlazeDS? Introduce a non-blocking I/O.<br />
How about an idea of a reverse RPC call? I mean what I mean. A Java server calls a specified function on the user’s (Flex) application passing whatever arguments are required by the function. </p>
<p>“You may say, I’m a dreamer. But I’m not the only one”, sang John Lennon.</p>
<p>For some reason, most of the RIA developers are into flashy UI as it’s considered to be uber cool. But don’t underestimate the power of the networking protocols in general and of AMF in BlazeDS in particular.  At least I know, where the power of Flex and Java EE application is hidden.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/01/15/unleashing-the-power-of-flexblazeds-and-java-applications/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Using Custom Type Marshallers in BlazeDS</title>
		<link>http://flexblog.faratasystems.com/2010/01/09/custom-type-masrhaller-in-blazeds</link>
		<comments>http://flexblog.faratasystems.com/2010/01/09/custom-type-masrhaller-in-blazeds#comments</comments>
		<pubDate>Sat, 09 Jan 2010 13:28:49 +0000</pubDate>
		<dc:creator>Victor Rasputnis</dc:creator>
				<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Data Management]]></category>
		<category><![CDATA[Data Services]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[NaN]]></category>
		<category><![CDATA[serialization]]></category>
		<category><![CDATA[type-marshaller]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=555</guid>
		<description><![CDATA[In my previous post I pointed to the BlazeDS classes that need to be replaced in order to prevent ActionScript Number.NaN from turning into Long or Integer zeroes on the MessageBroker side. The recommendation boiled down to re-jaring flex-messaging-core.jar or placing the modified classes somewhere earlier in the application server&#8217;s classpath. If neither option is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flexblog.faratasystems.com/2010/01/07/how-to-keep-numeric-null-value-from-turning-into-zeros-in-blazeds">In my previous post</a> I pointed to the BlazeDS classes that need to be replaced in order to prevent ActionScript Number.NaN from turning into Long or Integer zeroes on the MessageBroker side. The recommendation boiled down to re-jaring flex-messaging-core.jar or placing the modified classes somewhere earlier in the application server&#8217;s classpath. If neither option is allowed, you may configure your endpoint with the custom type marshaller, like the one below:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p555code31'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p55531"><td class="code" id="p555code31"><pre class="xml" style="font-family:monospace;">        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;channel-definition</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;my-amf&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;mx.messaging.channels.AMFChannel&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;endpoint</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;http://{server.name}:{server.port}/{context.root}/messagebroker/amf&quot;</span> </span>
<span style="color: #009900;">            <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;flex.messaging.endpoints.AMFEndpoint&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/endpoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>	
	            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;serialization<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;type-marshaller<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.farata.messaging.io.CustomTypeMarshaller<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/type-marshaller<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/serialization<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>	
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/channel-definition<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>In BlazeDS 4 you will base your type marshaller on flex.messaging.io.ASTranslator, in BlazeDS 3 they already have one level of extension called Java15TypeMarshaller, so build on top of that one:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p555code32'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p55532"><td class="code" id="p555code32"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.farata.messaging.io</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.farata.messaging.io.amf.translator.decoder.NumberDecoder</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">flex.messaging.io.amf.translator.decoder.DecoderFactory</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// For BlazeDS 4 you should extend flex.messaging.io.ASTranslator</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CustomTypeMarshaller <span style="color: #000000; font-weight: bold;">extends</span>
		flex.<span style="color: #006633;">messaging</span>.<span style="color: #006633;">io</span>.<span style="color: #006633;">Java15TypeMarshaller</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> NumberDecoder numberDecoder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> NumberDecoder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> convert<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> source, <span style="color: #000000; font-weight: bold;">Class</span> desiredClass<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> DecoderFactory.<span style="color: #006633;">isNumber</span><span style="color: #009900;">&#40;</span>desiredClass<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    		<span style="color: #000000; font-weight: bold;">return</span> numberDecoder.<span style="color: #006633;">decodeObject</span><span style="color: #009900;">&#40;</span>source, desiredClass<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    	<span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
    		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">convert</span><span style="color: #009900;">&#40;</span>source, desiredClass<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>This route does not require neither server-level deployment nor modification of the flex-messaging-core.jar.<br />
Please note that in my example I repackaged NumberDecoder as <strong>com.farata</strong>.messaging.io.amf.translator.decoder.NumberDecoder</p>
<p>I&#8217;d like to use this opportunity and invite Flex developers living in Europe to attend our <a href="http://www.eventbrite.com/event/527934065">Advanced Flex Master Class in Brussels, Belgium on March 1 and 2, 2010</a>.</p>
<p>Victor Rasputnis</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/01/09/custom-type-masrhaller-in-blazeds/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Prevent Flex numeric nulls from turning to zeros in BlazeDS</title>
		<link>http://flexblog.faratasystems.com/2010/01/07/how-to-keep-numeric-null-value-from-turning-into-zeros-in-blazeds</link>
		<comments>http://flexblog.faratasystems.com/2010/01/07/how-to-keep-numeric-null-value-from-turning-into-zeros-in-blazeds#comments</comments>
		<pubDate>Thu, 07 Jan 2010 18:24:26 +0000</pubDate>
		<dc:creator>Victor Rasputnis</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[marshalling]]></category>
		<category><![CDATA[serialization]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=515</guid>
		<description><![CDATA[This question we get on almost every new client project: &#8220;We’re struggling with handling of null values for numeric data types in Flex/Java projects. Every time there’s an update, we end up replacing the original nulls with zeros when the user didn’t actually change that value.  Have you guys come up with a silver bullet [...]]]></description>
			<content:encoded><![CDATA[<p>This question we get on almost every new client project: <em>&#8220;We’re struggling with handling of null values for numeric data types in Flex/Java projects. Every time there’s an update, we end up replacing the original nulls with zeros when the user didn’t actually change that value.  Have you guys come up with a silver bullet for handling numeric nulls?&#8221;</em><br />
<em><br />
</em> Consider a Java method with a Double parameter. You pass uninitialized ActionScript Number, that is, Number.NaN. What will BlazeDS deserialize (unmarshal)? Double.NaN. At this point your Java code may use something like <code>(value==Double.NaN)?null:value</code>, capitalizing on the fact that information about special value of NaN had been delivered from your client code to your server code. Now, let&#8217;s assume you change the signature of the Java method to accept Long instead of Double. You pass NaN and you get &#8230; 0! The same happens with marshaling ActionScript object that carries Number.NaN properties: they turn into 0, if, god forbid, their Java counterparties are declared as Long or Integer.<br />
<em><br />
</em> The reason is that while Java has <code>Double.NaN</code> it does not support either <code>Long.NaN</code> or <code>Integer.NaN</code>. Looking at the following snippet of code you can see how differently <code>Double</code> and <code>Long</code> variables get treated by Java:<br />
<em><br />
</em></p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p515code35'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p51535"><td class="code" id="p515code35"><pre class="java" style="font-family:monospace;">		 <span style="color: #003399;">Double</span> dbl <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Double</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Double</span>.<span style="color: #006633;">NaN</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// We emulate incoming numeric null</span>
		 <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>dbl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//prints NaN, cause dbl &quot;knows&quot; it came from null</span>
		 <span style="color: #000066; font-weight: bold;">long</span> l <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span>dbl.<span style="color: #006633;">longValue</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Double</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Double</span>.<span style="color: #006633;">NaN</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		 <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Oops, prints 0!</span></pre></td></tr></table></div>

<p>Unfortunately,  native BlazeDS <em>flex.messaging.io.amf.translator.NumberDecoder</em> falls into this trap. So, what is to be done? Luckily, BlazeDS is an open source product and this class  has to be slightly modified.</p>
<p>Figure 1 illustrates the changes required to protect <em>null</em>-ability of your <code>Long, Integer, etc</code> values, except Double (we explain what to do with Double-s a bit later):</p>
<p><img class="aligncenter" src="http://flexblog.faratasystems.com/images/407/NumberDecoder.png" alt="Modified NumberDecoder class  under Deltawalker" /></p>
<p>Figure 1.  Modified NumberDecoder. Farata modification is on the left, canonical BlazeDS class is on the right.<br />
<em><br />
</em> Now, after you make the changes and compile the class against the rest of the flex-messaging-*** jars you can re-jar your own flex-messaging-core.jar.<br />
Better yer, place this class in the common server folder so that it positively affects classpath of all applications on the server.<br />
From now on, Number.NaN will come as Long null, or Integer null &#8211; whatever you decide on the Java side.</p>
<p>It this sounds like to big of a deal to you, keep using Double values and convert Double.NaN to null yourself, when appropriate.<br />
<em><br />
</em><br />
Finally, if you would also like to see Double.NaN automatically converted to null, you will have to substitute one more BlazeDS class &#8211;  <em>flex.messaging.io.amf.translator.NativeDecoder</em>. Explanation:  it&#8217;s just so happens that BlazeDS marshalling ignores the NumberDecoder when the source (Number, aka Double) and target (Double) types are the same. Here we come and force BlazeDS to use NumberDecoder with numbers no matter what:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p515code36'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p51536"><td class="code" id="p515code36"><pre class="java" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> NativeDecoder <span style="color: #000000; font-weight: bold;">extends</span> ActionScriptDecoder
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> decodeObject<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> shell, <span style="color: #003399;">Object</span> encodedObject, <span style="color: #000000; font-weight: bold;">Class</span> desiredClass<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    	 <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> DecoderFactory.<span style="color: #006633;">isNumber</span><span style="color: #009900;">&#40;</span>desiredClass<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    		 NumberDecoder numberDecoder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> NumberDecoder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         	 <span style="color: #000000; font-weight: bold;">return</span> numberDecoder.<span style="color: #006633;">decodeObject</span><span style="color: #009900;">&#40;</span>encodedObject, desiredClass<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    	 <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span>
    		 <span style="color: #000000; font-weight: bold;">return</span> encodedObject<span style="color: #339933;">;</span>      <span style="color: #666666; font-style: italic;">// the sole original BlazeDS line</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Source code:<br />
<a href="http://flexblog.faratasystems.com/images/407/NumberDecoder.java">NumberDecoder.java modified by Farata</a><br />
<a href="http://flexblog.faratasystems.com/images/407/NativeDecoder.java">NativeDecoder.java modified by Farata</a></p>
<p>I&#8217;d like to use this opportunity and invite Flex developers living in Europe to attend our <a href="http://www.eventbrite.com/event/527934065">Advanced Flex Master Class in Brussels, Belgium on March 1 and 2, 2010</a>.</p>
<p>Victor Rasputnis</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/01/07/how-to-keep-numeric-null-value-from-turning-into-zeros-in-blazeds/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Master Class on Adobe Flex in Brussels and more</title>
		<link>http://flexblog.faratasystems.com/2010/01/05/master-class-on-adobe-flex-in-brussels-and-more</link>
		<comments>http://flexblog.faratasystems.com/2010/01/05/master-class-on-adobe-flex-in-brussels-and-more#comments</comments>
		<pubDate>Tue, 05 Jan 2010 18:08:29 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Advanced Flex Training]]></category>
		<category><![CDATA[AIR]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=512</guid>
		<description><![CDATA[After teaching our popular advanced Flex master class in New York, Boston, Toronto, London, and Moscow we are hitting the beer capital of the world: Brussels, Belgium. This class is scheduled for the first days of March, and we hope that Flex 4 will be officially released by this date. Our book Enterprise Development with [...]]]></description>
			<content:encoded><![CDATA[<p>After teaching our popular advanced Flex master class in New York, Boston, Toronto, London, and Moscow we are hitting the beer capital of the world: Brussels, Belgium. This class is scheduled for the first days of March, and we hope that Flex 4 will be officially released by this date. Our book Enterprise Development with Flex should hit the book stores by then too.</p>
<p><span><span>To take advantage of the early bird prices register early at </span></span><span><span> <a rel="nofollow" href="http://bit.ly/59DdIU" target="_blank">http://bit.ly/59DdIU.</a></span></span></p>
<p>If you can&#8217;t make it to Brussells, I&#8217;ll be glad to meet with you at <a href="http://www.360flex.com/">360 Flex </a>in San Jose, CA on March 7-10, where I&#8217;ll be presenting on one of the topic from this master class.</p>
<p>If you can&#8217;t make it to San Jose, I&#8217;ll be very happy to meet you at <a href="http://flashandthecity.com/">Flash and the City </a>conference in May in New York City. Most likely I&#8217;ll show you a really cool way of embedding a Flex application into a PDF file to be played by Acrobat Reader.</p>
<p>If none of these dates/locations work for you, you can always invite us to teach this class privately on site in your organization almost anywhere on the planet Earth.</p>
<p><span><span>Yours<br />
Yakov Fain<br />
</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/01/05/master-class-on-adobe-flex-in-brussels-and-more/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Roadmap for Adobe LCDS 3 </title>
		<link>http://flexblog.faratasystems.com/2009/12/21/the-roadmap-for-adobe-lcds-3%e2%80%a8-model-driven-development</link>
		<comments>http://flexblog.faratasystems.com/2009/12/21/the-roadmap-for-adobe-lcds-3%e2%80%a8-model-driven-development#comments</comments>
		<pubDate>Mon, 21 Dec 2009 14:15:27 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[LCDS3]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=498</guid>
		<description><![CDATA[I had a dream. I had a dream that Adobe’s CTO gave me a call saying, “Yakov, can you help us with writing a roadmap for LiveCycle Data Services for 2010?”
I said, “Piece of cake, Kevin. Just give me a half an hour”. This is what I came out with.
1.    Give a serious bonus to [...]]]></description>
			<content:encoded><![CDATA[<p>I had a dream. I had a dream that Adobe’s CTO gave me a call saying, “Yakov, can you help us with writing a roadmap for LiveCycle Data Services for 2010?”<br />
I said, “Piece of cake, Kevin. Just give me a half an hour”. This is what I came out with.</p>
<p>1.    Give a serious bonus to software engineers who created Fiber, a set of goodies behind model-driven development.  Way to go!</p>
<p>2.    Fire that guy who already reached his level of incompetency and said, “If one salesman can sell LCDS licenses for $20K a CPU, everyone can do it”. This  guy is simply killing the product by making it unreachable for lots and lots of corporate clients. Change your state of mind from “these filthy rich Wall Street client should pay” to “each RIA project manager has limited budget”. BTW, have you heard of recession that we are still in? Remember, when Adobe purchased Macromedia and changed the Flex pricing policy from $15K per server to $700 per IDE people actually started using the product? Why not trying the old trick again?</p>
<p>3.    Charge LCDS evangelists with changing their main message from “Look Ma, No Hands” to “Unleash the superpower of RTMP and custom adapters”. Today, they are preaching to the wrong crowd. Flex enthusiasts who don’t know Java and are developing cool Web sites for their cousins’ video stores won’t be buying LCDS licenses no matter how high you jump. They’ll be happy to use the new Modeler in Flash Builder 4 as a cookie cutter, with free LCDS express edition.</p>
<p>4.    Invest more money in QA to ensure that Fiber’s code generators are not just well written, but are of superb quality. It’s great that you’ve eliminated the need to write Java and configure destinations on the server – people who are not capable of learning Java will applaud you. But generating the in-memory-only code and not giving developers a chance to debug it (if something goes wrong in the generated code) requires top notch quality code interpreter and code generators.  In the 90th, I’ve had excellent experience with  PowerBuilder (Sybase) that did a great job in this department where everything worked as the doctor ordered. But I also had bad experience with BEA System’s Java Workbench IDE that at some point started giving null pointers in the code that was not written by me and was not accessible by debugger.</p>
<p>5.    Usually, enterprise Flex/LCDS developers have to work with existing persistence layers. In Java world, Hibernate and EJB dominate there. Fiber also uses Hibernate in the model-driven development workflow. But what if developers are not allowed to work with DBMS directly and have to use a pre-existing Hibernate layer? It&#8217;s not clear how Fiber will  use an existing Hibernate configuration vs. generating a new one.</p>
<p>6.     Ensure that enterprise RIA architects are familiar with such advantages of LCDS over BlazeDS as duplex-by-nature RTMP, reliable messaging, and throttling.  BTW, did I mention that you need to lower the price of the enterprise LCDS license to $5K a CPU?</p>
<p>7.    Start promoting the importance of the load testing on early phases of any RIA project and explain how to use of the new LCDS Java NIO testing tool. Use the lose-weight selling strategy: show the picture of a Flex/LCDS application Before and After.</p>
<p>8.    Purchase Charles monitoring tool and enhance it to allow enterprise  developers to monitor and dissect RTMP calls.</p>
<p>9.    Allow your Flex evangelists publicly admit that even though developer can use MVC Flex frameworks even with Model-driven workflow where the application is generated automatically, it doesn’t bring much value. Really.</p>
<p>10. Ask LCDS evangelists to create a reference implementation of the popular among Java developers Pet Store. Get the existing version <a href="http://java.sun.com/developer/releases/petstore/">over here</a> and do a facelift using Flex and LCDS 3. But make it real including the coverage of all little details that Java EE developers want to know (i.e. how to integrate the new application with existing authentication/authorization service like SiteMinder).</p>
<p>“Wow, Yakov, you came up with a really nice laundry list! What do I owe you?”<br />
“Kevin, if you still have some money left after acquiring Omniture, please send a case of <a href="http://en.wikipedia.org/wiki/Louis_XIII_de_R%C3%A9my_Martin">Louis XIII cognac</a> my way. But if you are still recovering, I understand. A case of  <a href="http://www.romate.com/files/brandy_cardenal_mendoza.jpg">Cardenal Mendoza</a> is just fine”.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2009/12/21/the-roadmap-for-adobe-lcds-3%e2%80%a8-model-driven-development/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New knowledge exchange for Flex/Flash/AIR developers</title>
		<link>http://flexblog.faratasystems.com/2009/11/24/new-knowledge-exchange-for-flexflashair-developers</link>
		<comments>http://flexblog.faratasystems.com/2009/11/24/new-knowledge-exchange-for-flexflashair-developers#comments</comments>
		<pubDate>Tue, 24 Nov 2009 16:22:38 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=493</guid>
		<description><![CDATA[There are about 250K developers working with Flex and AIR. If you add an army of ActionScript developers, this number will grow substantially. Where do you go if you have a technical issue while developing RIA? As of today, there no one place to ask questions and get answers.  A respected forum flexcoders uses the [...]]]></description>
			<content:encoded><![CDATA[<p>There are about 250K developers working with Flex and AIR. If you add an army of ActionScript developers, this number will grow substantially. Where do you go if you have a technical issue while developing RIA? As of today, there no one place to ask questions and get answers.  A respected forum flexcoders uses the outdated and hard to follow Yahoo! groups.  Some people try to find answers visiting blogs they trust. Some developers post their questions on Twitter.</p>
<p>About a year ago Joel Spolsky and Jeff Atwood released a well designed and easy to follow knowledge exchange stackoverflow.com, where people earn reputation by suggesting the right solutions to people’s problems. Flex/Flash/Air developers started to post their questions there among the plethora of questions on other technologies and programming languages.</p>
<p>Joel and Jeff went one step further and are offering the engine (stackexchange) for creation of similar knowledge exchanges for discussion any kinds of subjects. Using this engine is not free, but our company, Farata Systems continues contributing to Flex community and will pick up the cost involved with running the knowledge dedicated to RIA technologies that produce applications to be deployed with Flash Player.</p>
<p>We are just starting and created a an exchange Built4Flash on stackexchange engine and would like to invite Flex, Flash, AIR, and Coldfusion developers to post questions there and provide answers to others. The URL of the Web site is <a href="http://built4flash.stackexchange.com">http://built4flash.stackexchange.com</a>.</p>
<p>Your questions and answers not only will help others in solving their issues, but you’ll also have a chance to  become visible and reputable person in this lively and Flashy community.</p>
<p>I really hope you’ll support this initiative.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2009/11/24/new-knowledge-exchange-for-flexflashair-developers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I’m Cairngorm!  </title>
		<link>http://flexblog.faratasystems.com/2009/11/17/i%e2%80%99m-cairngorm%e2%80%a8%e2%80%a8</link>
		<comments>http://flexblog.faratasystems.com/2009/11/17/i%e2%80%99m-cairngorm%e2%80%a8%e2%80%a8#comments</comments>
		<pubDate>Tue, 17 Nov 2009 17:51:12 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Cairngorm]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=488</guid>
		<description><![CDATA[First, let me ask Java developers a question. Imagine that one day you wake up and read the following announcement, “As of today, Spring framework is the foundation for delivering of successful J2EE projects. In contrast to earlier versions, many parts apply across frameworks. So, if you are using Struts, JSF, and especially Tapestry, just [...]]]></description>
			<content:encoded><![CDATA[<p>First, let me ask Java developers a question. Imagine that one day you wake up and read the following announcement, “As of today, Spring framework is the foundation for delivering of successful J2EE projects. In contrast to earlier versions, many parts apply across frameworks. So, if you are using Struts, JSF, and especially Tapestry, just forget about all these complex to pronounce names. From now on, no matter what framework you use, you are actually using Spring’.</p>
<p>Some of you would think, “Yakov is either out of his mind or is writing this blog sitting in one of the coffeshops in Amsterdam”. Wrong! I’m just reading an announcement about the upcoming release of the popular Adobe framework Cairngorm 3: <a href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm+3">http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm+3</a></p>
<p>Based on this announcement, even if you are using PureMVC, Swiz, Mate, or whatever else will be invented in the future, you are using Caingorm. Basically, instead of addressing issues of the Cairngorm 2 framework, someone decided to reuse a well recognized brand in rather small Flex community (about 250K developers) and turn it into a set of guidelines.</p>
<p>The Getting Started document reads, “The original Cairngorm library remains a part of Cairngorm 3, but has not been updated for this release.” Two paragraphs down it states, “To migrate from Cairngorm 2 to 3, you should first read the Cairngorm Guidelines to understand how your existing client-side architecture might be improved. This could involve introducing an inversion-of-control container or simply refining the way you use the original Cairngorm library.”</p>
<p>Now I’m confused. If Cairngorm 2 was a framework and Cairngorm 3 is not, what this improvement from 2 to 3 means? Introduction of IoC simply means throwing away Cairngorm 2 in favor of Parsley, Swiz or Mate. Am I missing something?<br />
Cairngorm 3 includes the following libraries: Observer, Popup, Task, Validation, Integration, Module, Navigation.  Several of them “are implemented as extensions of Parsley Application Framework. In order to take advantage of these libraries, you also need to use Parsley”. Wait a minute. Do I need to use both Cairngorm and Parsely on top of Flex framework? If before, you should’ve added to the project one swc of the selected framework, now you’ll need to add a bunch of them. Are we going to build a pyramid of frameworks or something?<br />
Cairngorm tools include Flex Builder (I assume Flash Builder too), Cairngorm 2, FlexCover, FlexPMD, Flex-Mojo for Maven… What if they decide to use our open source ANT script generator Fx2Ant and include it in Cairngorm too? Is this a good thing?</p>
<p>Yesterday, I’ve attended an interesting presentation about disruptive thinking, where presenter kept asking, “What if you could fly?” Applying the same technique, I’m asking myself,  “What if I’m Cairngorm?”</p>
<p>Tried it several times. It doesn’t work so far. Sure, I’ve gained some weight, but it’s too soon to call myself a mountain. But I’ll be there! I can do it! We need a change! For now, I’ll just use this word as my middle name:</p>
<p><em>Yakov Cairngorm Fain.<br />
</em><br />
Sounds good, isn’t it?</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2009/11/17/i%e2%80%99m-cairngorm%e2%80%a8%e2%80%a8/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Farata Systems offers enterprise support for BlazeDS</title>
		<link>http://flexblog.faratasystems.com/2009/11/17/farata-systems-offers-enterprise-support-for-blazeds</link>
		<comments>http://flexblog.faratasystems.com/2009/11/17/farata-systems-offers-enterprise-support-for-blazeds#comments</comments>
		<pubDate>Tue, 17 Nov 2009 04:39:59 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[BlazeDS enterprise support]]></category>
		<category><![CDATA[BlazeDS support]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=484</guid>
		<description><![CDATA[Recently, Adobe decided to stop offering enterprise support for BlazeDS. Here’s an extract from BlazeDS FAQ http://bit.ly/17uzhn:
“Does Adobe provide enterprise support for BlazeDS? 
We have seen tremendous adoption growth with BlazeDS. However, feedback suggests that the support offerings did not meet the needs of our customers. Therefore, we are no longer offering subscription support for [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, Adobe decided to stop offering enterprise support for BlazeDS. Here’s an extract from BlazeDS FAQ http://bit.ly/17uzhn:</p>
<p><em>“<strong>Does Adobe provide enterprise support for BlazeDS? </strong><br />
We have seen tremendous adoption growth with BlazeDS. However, feedback suggests that the support offerings did not meet the needs of our customers. Therefore, we are no longer offering subscription support for BlazeDS. Instead, customers who require maintenance and support can purchase LiveCycle Data Services ES2. Current customers under a valid support subscription of BlazeDS will have the option to trade up to LiveCycle Data Services ES2 when their maintenance and support agreement comes to an end.”</em></p>
<p>Over the last two years, Farata Systems was offering various solutions based on BlazeDS often enhancing and extending capabilities of BlazeDS. We are very familiar with the source code of BlazeDS and our Flex and Java experts can support all the needs of your organization around BlazeDS. Support options include all range of services starting from training and first level support to bug fixing and feature enhancements.</p>
<p>Your organization can provide the first level support for the users of the application built with BlazeDS, and Farata Systems takes care of the second level technical support. </p>
<p>Farata Systems can offer your organization the following services:<br />
 &#8211; a dedicated personnel – 24&#215;7 with limited number of issues/contacts at your organization<br />
 &#8211; Prepaid blocks of time in 40-hour increments for access to out Flex networking specialists on priority basis<br />
-  Customization of the BlazeDS communication protocols if need be<br />
-  Increasing of the performance and scalability of BlazeDS-based applications, for an example,<br />
    read <a href="http://flex.sys-con.com/node/720304">the following article</a><br />
-  Guaranteed support for 1 year based on product development, with fixed support price thereafter</p>
<p>For more details please fill out the Contact Us form at <a href="http://www.faratasystems.com">http://www.faratasystems.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2009/11/17/farata-systems-offers-enterprise-support-for-blazeds/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
