<?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>Thu, 02 Feb 2012 20:21:49 +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>Enterprise Development: Flex or HTML5?</title>
		<link>http://flexblog.faratasystems.com/2012/01/27/enterprise-development-flex-or-html5</link>
		<comments>http://flexblog.faratasystems.com/2012/01/27/enterprise-development-flex-or-html5#comments</comments>
		<pubDate>Fri, 27 Jan 2012 06:57:30 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1330</guid>
		<description><![CDATA[This article is a transcript from a recorded conversation I had with Anatole Tartakovsky and Victor Rasputnis &#8211; my business partners at Farata Systems. This conversation took place on the mountain after the day of skiing.

Yakov. There are many ways of creating Web applications and creating them for the enterprises is not the same as [...]]]></description>
			<content:encoded><![CDATA[<p>This article is a transcript from a recorded conversation I had with Anatole Tartakovsky and Victor Rasputnis &#8211; my business partners at <a href="http://faratasystems.com">Farata Systems</a>. This conversation took place on the mountain after the day of skiing.</p>
<p><a href="http://yakovfain.files.wordpress.com/2012/01/3g.jpg"><img src="http://yakovfain.files.wordpress.com/2012/01/3g-e1327616617196.jpg" alt="" title="3g" width="700" height="937" class="aligncenter size-full wp-image-7093" /></a></p>
<p><strong>Yakov.</strong> There are many ways of creating Web applications and creating them for the enterprises is not the same as developing a Web site for a pizzeria in your neighborhood. During the last five years we’ve been using mainly Adobe Flex for development of the front end of Web applications. Flex applications work in a well known and predictable run-time environment called Flash Player. The code is compiled and you have convenient tools for development. </p>
<p>Flex is undergoing &#8220;Under New Management&#8221; transformations these days. Even though Flex remains the best framework for development of Web applications, you can feel the pressure of HTML5. But using just HTML5 is not enough for development of Web applications – you’ll need the same old Dynamic HTML – HTML, JavaScript, CSS, and XMLHttpRequest object.</p>
<p>Anatole, we did it in the past and it seems that we’re entering the same waters again. Is it still the same river 7-8 years after?</p>
<p><strong>Anatole. </strong>DHTML has been introduced in the Internet Explorer 5, and several years later it was renamed to AJAX.</p>
<p><strong>Y.</strong> Back in 1999 Microsoft created XMLHttpRequest object to allow their Web version of the mail client Outlook to update the browser’s window without the need to refresh the entire page. Is this right?</p>
<p><strong>A.</strong> Partially. IE5 also had the XSL transformation tool for HTML generation and sopported development of custom plugins. The market share of IE5 was about 90%, but in enterprises it was literally the only approved browser.</p>
<p><strong>Victor.</strong> At the same time, IE5 supported the model of HTML components called HTC. It allowed you to create htc files containing your own custom components with properties and methods, which were visible in the Web browser’s DOM with all these properties.  </p>
<p><strong>A.</strong> In fact, this was a more progressive model than what’s offered by today’s frameworks supporting HTML5, because you could use a markup language combined with JavaScript to support your components. This model was similar to what Flex offers. Today, we see some kind of a plugin environment (a lowest denominator between the Web browsers) that allows using various frameworks. The situation is this field didn’t get any better. </p>
<p>On the positive side, the Web browsers have changed and performance of JavaScript improved substantially. The browsers support 6-8-12 connections per domain (as opposed to 2 five years ago), which gave a performance boost to AJAX applications.</p>
<p><strong>Y.</strong> But let’s get practical. Say, I’m an enterprise IT manager with a limited budget and a 5-men team that has to develop a Web application. If I’d be using a predictable VM-based environment like Flex or Java with good tooling (IDE, compilers, debuggers, profilers) my job would be easier. But with JavaScript, the situation is different. First, the development cycle with JavaScript is longer (read more costly). </p>
<p>Second, not only I need to find skilled AJAX developers, but they’d need to know a bunch of modern JavaScript frameworks. Third, compilers are not catching programmers errors so I’ll need to allocate more time for testing. Victor, what’s your take on this?</p>
<p><strong>V.</strong> If you ask me what has changed the most – it’s perception. In the beginning of this century we worked in the DHTML environment. Only a small number of developers was involved with this “suspicious” development. Enterprise architects had hard time adopting this pre-AJAX model and often asked the same question, “This is not J2EE, right?” We’d answer, “No, it’s not”. Then it was clear to the architects that it’s some amateurish offering that could be ignored.</p>
<p>During the last six years, development with Flex slowly became an approved enterprise technology – it’s compiled and controlled environment with good performance, testing tools, and internationalization support. Then, Adobe turned its back on Flex.</p>
<p><strong>Y. </strong>And the way they did it could be included in the Bad PR section in textbooks. Instead of starting Adobe MAX conference in October of 2011 with a proud announcement that Adobe is donating Flex to Apache Foundation, which would get a standing ovation, they waited a month and made the same announcement right after declaring that they wouldn’t support Flash Player (Flex runtime) on the mobile devices. This sounded as if they wanted to kill Flex. But we know that Flex is alive!</p>
<p><strong>V.</strong>  Yes, it’s alive. Technically it remains the best environment for development of Web application, but politically it became the product of the past.</p>
<p><strong>Y.</strong> And now many enterprise architects will say, “We told you to stay with JavaScript 5 years ago…” But I’d like to get your opinion about the cost of development using Flex vs. JavaScript. What’s more expensive?</p>
<p><strong>V.</strong> It depends on the type of the person who’ll be managing this project. Is it a corporate or a startup manager? A corporate manager is a temporary person. He works 6-12 months and the either gets transferred to another position or leaves the company. He’s not really interested in the end result. He can stay within the budget during specific period of time, but the project may fail in the long run. </p>
<p>The hourly rates of JavaScript developers are smaller than of those who know Flex. And development with Flex is easier, the results usually look better comparing to today’s JavaScript-based applications. Development with Flex may be more costly initially, producing better results, which is not that important to the corporate managers.</p>
<p><strong>Y.</strong> Yes, the main goal of the corporate managers is to climb up the corporate ladder and earn good bonuses and pensions rather than creating advanced applications.</p>
<p><strong>V.</strong> They don&#8217;t always climb up the ladder. Sometimes they move sideways to another firm, where the same position brings more money or other career opportunities. That’s why the success of a specific project may have a lower priority to these managers.</p>
<p><strong>Y.</strong> So what’s more expensive – Flex or JavaScript projects?</p>
<p><strong>V.</strong> As you know, we develop in Flex all internal projects at Farata Systems. But if the clients are ready to open their wallets for JavaScript development, we gladly help them.</p>
<p><strong>A. </strong>If you want to develop two identical projects in Flex and HTML5, there is a high probability that the HTML5 project will be more expensive. But I doubt that anyone will even try to reach the Flex-level quality in an HTML5 project. Any HTML5 enterprise project will have lower requirements in the first place. From the very beginning parameters like reliability, ability to adapt to different the screen sizes and densities will be simplified. Instead of implementing these features, the functional specification will include testing under seven browsers, and developers will spend most of their time in the debugger. </p>
<p>You’ll save on the compilation time but will spend more time testing during the runtime. The final deliverable of an HTML5 project may have as low as half of the functionality comparing to the same project developed in Flex.  But you’ll gain a little better Web adaptability, easier implementation of full text search and mashups. The integration with other technologies will also become easier with HTML/JavaScript.  You have to decide if all these advantages are important to your application. If they are &#8211; choose HTML5. </p>
<p>But often the HTML part this is just a tip of the iceberg. The base functionality is usually developed in Java or .Net, and back-office applications should be using Flex for UI anyway.</p>
<p><strong>Y. </strong> All these people marching undwr the HTML5 flags will gladly start new JavaScript projects because it’s available everywhere, it&#8217;s free, the frameworks are open sourced and don&#8217;t belong to these filthy rich corporations like Adobe. In the past, it was cool to hate Microsoft, and in early 2012 is cool to hate Adobe. Do anything you can, cut any corners, lose functionality but don’t start a new project using Flex. This way we’ll belong to the mainstream – we’ll develop in JavaScript.</p>
<p><strong>A.</strong> Yes, but JavaScript will enforce its limitations on any serious and complex enterprise project. You can develop a number of fairly independent windows, but creating a well debugged application (not a site) in HTML won’t be easy. </p>
<p>Now let’s return to the premise that performance of the browsers is substantially improved. Since JavaScript frameworks have to support various browsers from the same code base the size of their code increases, which lowers the performance and overall user experience if you compare similar Flex and JavaScript applications. I recommend establishing well defined boundaries between front and back office applications. You don’t worry that much about the productivity of the external end users. But if we talk about the internal enterprise users (back office), each of them is a salaried employee and they’d better be productive. </p>
<p>We spent more than six years in DHTML. We wrote our own framework and implemented DHTML enterprise applications for the Fortune 100 companies. We know all the loopholes in these environments and which ones still remain unpatched. As of today, you can’t compare Flex and DHTML. But there are some narrow fields, where you must complement Flex applications with DHTML.<br />
Most enterprise applications have front end, back end, and back office (support, error fixes, et al.). The front end tier can consist of DHTML and Flex parts because today it’s hard to develop front and back office application in the same environment.</p>
<p><strong>Y.</strong> Let’s talk about the situation on the market of JavaScript frameworks. There were about 200 such frameworks five years ago. In 2012 the situation is a little bit different – we’re talking about dozens of JavaScript frameworks. But still, there is no one framework that could cover all the needs of your Web application. Victor, what’s your take on this?</p>
<p><strong>V.</strong> After Adobe has shaken the Flex world, I was shocked for a while. But then I realized that any good tool or environment should be replaced with the newer one some day. After spending some time researching the modern market of JavaScript frameworks I noticed that there are two main categories of frameworks:</p>
<p>a) Those that allow you to take an existing Web site and, by a magic wand, add new attributes to all
<div> or other tags so they would start shining, blinking, or do some other fun stuff. Such frameworks don’t promote component-based development. They may not include navigation components, grids, trees, which are pretty typical for any UI of the corporate tasks or back office as Anatole called them.  </p>
<p>b) The frameworks that are similar to Flex in that they offer high-level components, which may be based on
<div> tags, and even allow you to dig deep inside such components whenever you need to know the internals of Flash Player while coding in Flex. But overall, such components are meant to solve different problems – highlighting and CSS are less important here. Mainly these components process some events,  offer support of the Model-View-Controller and so on.</p>
<p>After further analysis I’ve learned that the framework Ext JS by Sencha is close to what Flex offers, but without compilation, data binding, and with less control.<br />
I often use an example of a cat running over the keyboard of my laptop while a JavaScript file was opened in a text editor. Even if I didn’t notice this, I could successfully check in this file into a code repository, but it may not work afterward. Un-compiled environment is a dangerous place to be. </p>
<p><strong>Y.</strong> Would your example work the same way for developers who have dogs?</p>
<p><strong>V.</strong> Yes, but the number of errors will increase.</p>
<p><strong>Y.</strong> Currently, the legions of developers are moving in the direction of JQuery framework. But we are moving perpendicularly. As you stated earlier, JQuery is good for improving an existing JavaScript site. With Ext JS you start with designing your application’s UI as close as possible to object-oriented principles. Ext JS has rich set of UI components, loader, offers an event model – it’s a different and better approach, right Anatole?</p>
<p><strong>A.</strong> Today I lead projects that use both frameworks. JQuery is a light framework (code wise) and it can be used to program about 80% of a Web site. You should use it for the look and feel support, which is what it’s meant for. But you can’t use it for building your application component model. The component model of Ext JS is applicable in about 20% of a Web site, which includes an application piece rather than just being a set of Web pages. Typically it’s a serious view navigator or a wizard to implement a serious business process or a workflow that includes a client’s part.</p>
<p><strong>Y.</strong> Data grid, of course…</p>
<p><strong>A.</strong> Yes, high-level components and a workflow because often the user needs to perform several steps to complete a business process. And these 20% of an application will require 80% of the project time of complex development. So you won’t need to choose between these two frameworks. My main problem with AJAX projects is not how to pick THE best framework for development, but finding the right software developers. It’s hard to find people who don’t have cats around and can concentrate.</p>
<p><strong>V.</strong> Absolutely, an extreme concentration and attention is a must.</p>
<p><strong>Y.</strong> Or you can use one more framework that will take care of testing.</p>
<p><strong>V.</strong> Absolutely everything must be thoroughly tested over and over again. Refactoring in JavaScript is a nightmare.</p>
<p><strong>A.</strong> A software developer has to remember everything &#8211; all unfinished pieces of code. Many things that we take for granted in a compiled language are simply not supported in JavaScript.<br />
It’s worth mentioning another type of frameworks that use Java for development with further generation of JavaScript, which is a controversial idea, because after writing the code you’ll need to debug it. This is when you’ll meet JavaScript, which is a foreign language for you.</p>
<p><strong>Y.</strong> I guess, you mean GWT. There is one more reason of why this is a stillborn idea. The ideology and psychology of programming in JavaScript and Java are different. Five years ago I’ve written <a href="http://yakovfain.sys-con.com/node/275643">an article</a> demonstrating how Cobol, Java, and Lisp programmers solve the same task differently. I guess, it’s time to add a JavaScript version to this example.</p>
<p><strong>A.</strong> A person who writes in Java/GWT has to know how to read and interpret the JavaScript code in the debugger.  Besides, GWT hides a large portion of JavaScript functionality.</p>
<p><strong>Y.</strong> Plus Java doesn’t support dynamic programming…</p>
<p><strong>A.</strong> Not too many people use dynamic programming, but it would be nice to change the language. Twenty years ago there were mixed languages that would allow using the dot notation to request some code fragments to call dynamically and some statically. We had a choice to either compile an operator or interpret it during the runtime. It was up to the developer. I won’t have peace of mind until JavaScript will support this. </p>
<p><strong>V.</strong> Anatole, how many years should pass till people will accept the notion of compiled language running inside the browser (JavaScript, ActionScript, et al) along with an interpreted language?<br />
<strong>A.</strong> These questions were raised many years ago – remember the languages like curl? These languages were in R&amp;D…</p>
<p><strong>V. </strong>But they never became standardized for the use in Web browsers. </p>
<p><strong>A.</strong> Exactly! Apple didn’t let Flash Player in their popular devices, and this became a huge obstacle for the evolution of Flex. The same thing may happen if some vendor decides to not allow any other language or environment in their devices killing these new ideas. For example, Google came up with a new language called Dart, but Microsoft says, &#8220;<a href="http://news.cnet.com/8301-30685_3-57330431-264/microsoft-shoots-down-googles-dart-language/">No, we&#8217;ll be improving JavaScript.</a>&#8221; </p>
<p><strong>Y.</strong> JavaScript frameworks promise to hide from you all incompatibilities and take care of the cases when a vendor won’t let some features in their environment.</p>
<p><strong>A.</strong> I don’t think anyone will be able to translate the world literature into the language of the tribe Tumba-Yumba with very limited expressiveness. There are reasons why some languages are better then other for different tasks or application sizes. JavaScript is a very basic language.</p>
<p><strong>V.</strong> But if you take Ext JS, their documentation suggests to use ext.create instead of the operator new. Technically they are extending or replacing the constructs of the JavaScript itself extending the alphabet. Any framework architect who wants to create a controlled environment will run into a JavaScript wall.</p>
<p><strong>A.</strong> Partially this is correct. If you want to create a real dynamic or static language with the error checking and runtime compilation, you’ll have to substitute their constructors with the strongly-type ones that can throw exceptions.</p>
<p>C++ supports operator overloading and people used this feature for some time. But it didn’t last long &#8211; they realized that it’s hard to read and understand their own code. If a language allows you to write a code fragment that’s hard to understand – it’s better to remove this code.</p>
<p><strong>V.</strong> I’d like to add to the subject of comparison of the JavaScript and ActionScript… I feel uncomfortable thinking that someone else will read, support, and refactor my JavaScript code. Actually, I’m not comfortable refactoring my own JavaScript code a couple of months later.  In a non-compiled environment it’s tough. I don’t remember what’s the type of the parameter that’s given to the particular function. </p>
<p>In the compiled environment I’d always known each type and if an object still had certain properties or they were removed. But there is nothing like this in interpreted environment.</p>
<p><strong>A.</strong> You can research the code, open each base class and check the references and find out what the properties are – the language will help you with this. I liked dynamic languages when I was 26 years old. A development manager will also have to hire young and very enthusiastic but inexperienced developers.  </p>
<p><strong>V.</strong> Today’s labor market consists of such people – inexpensive, enthusiastic, and inexperienced.</p>
<p><strong>A.</strong> On AJAX projects such a developer will spend the first two months studying, on the third month he’ll start working, and in six months he quits for a simple reason – development is hard and the project arrived to a dead end. When the code base of such project reaches critical mass, the development process gets stuck.</p>
<p><strong>V.</strong> The developer will quit not necessarily because the project got stuck. This developer will get more rewarding offers on the job market. </p>
<p><strong>A.</strong> In other words, the project stops in 5-6 months &#8211; it becomes unmanageable because of its size. That’s why I’d like to stress that there is big difference between  AJAX projects and those that are being developed in a compiled environment like ActionScript.</p>
<p><strong>Y.</strong> I’d like to return to the question of JavaScript frameworks and browser compatibility.  I like the analogy with TV sets. Even if I have the latest and greatest 3D LCD HD TV set and you have a 30-year old black and white television, we both can watch the same movie even though the quality of the picture will be different. In modern terms, you can say “The user experience will be different.”</p>
<p>Now let’s talk about the browsers. You use the latest Google Chrome, but I’m a corporate user who must use IE 6. Is it possible to ensure that the same JavaScript application works in both browsers?</p>
<p><strong>V.</strong> The core part of frameworks try to address browser compatibility. They try to ensure that the page works as good as possible in every browser within its limit. But the script will work.</p>
<p><strong>A.</strong> I don’t agree. In my opinion you can achieve browser compatibility not on the framework level, but by testing and adjustment of your application in different browsers. The statement that it’ll work somehow is an exaggeration.  The chances are that you’ll have to fix the framework.</p>
<p><strong>V.</strong> True. I already started making some changes in the framework even without developing overly complicated code. Maintaining compatibility is a huge challenge for any vendor that supports a framework. I remember our XMLSP framework that we created in the beginning of this century. We had a client form Great Britain who said, “This product is bigger than your company”. If I’m not mistaken, there were five of us who worked on XMLSP.</p>
<p>I’m sure, Sencha has more developers who work on Ext JS, but the framework is a lot bigger than we had. Most likely the code base and the task they are trying to achieve are comparable to Adobe Flex. No wonder that any such framework will always need some fixes and improvements.</p>
<p>I have no hard feelings when I make fixes in someone’s framework. I understand that these guys simply didn&#8217;t have time to fix everything. You need to form an attitude that a JavaScript framework is similar to a good Legos set that will require your creativity too. Don’t get angry. Cure the framework. Spend some time working on the framework, and then work on your application code. At least this is how I see the current state.</p>
<p><strong>A.</strong> To rephrase what Victor said, either work with the simplest framework components that don’t give you compatibility problems or get ready to roll up your sleeves, learn what’s under the framework’s hood and staff your project with not not only application developers, but with systems engineers too who will spend half of their time on customizing the framework.</p>
<p><strong>V.</strong> At this point the framework becomes your product too.  I wouldn’t agree that half of the time should be spent on customization of the framework. It all depends on the long term plans. If you bet on a particular framework and plan to use it for years, than invest into its improvements But if this framework just had to address the needs of one project, just apply some patches and move on. In most projects patching a framework will suffice.</p>
<p><strong>Y.</strong> To summarize, JavaScript developers will need to solve the same task as Java, JavaFX, Silverlight, or Flex developers face:</p>
<p>  &#8211; Reliability of communications. What if the data never arrive from/to the server? Is it possible to recover the lost data? Where they got lost? Can we re-send the lost data? What to do with duplicates?<br />
- Modularization of your application. If a user never clicked on a certain menu item on the main screen, don’t even load the code that should process this menu.<br />
- How quickly the main window of your application is loaded to the user’s computer? How heavy is the framework’s code base?<br />
- Where to store the application state – on the server or on the client?<br />
- Does the framework offer a rich library of components?<br />
- Does the framework support creation of loosely coupled application components? Is the event model well designed?<br />
- Does the framework of your choice cover most of the needs of your application or you’ll need to use several frameworks?<br />
- Is well written documentation available?<br />
- Is there an active community that can help you with technical questions?</p>
<p>I can keep adding items to this laundry list. So if the words HTML5 easily get you excited, calm down. It’s not just about adding a tag video to a Web page. It’s a hard work with JavaScript.  It seems that our company will have a lot of interesting and challenging projects in the foreseeable future, and we don’t complain. </p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2012/01/27/enterprise-development-flex-or-html5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Immersing into JavaScript Frameworks</title>
		<link>http://flexblog.faratasystems.com/2012/01/10/immersing-into-javascript-frameworks-2</link>
		<comments>http://flexblog.faratasystems.com/2012/01/10/immersing-into-javascript-frameworks-2#comments</comments>
		<pubDate>Tue, 10 Jan 2012 21:52:47 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1325</guid>
		<description><![CDATA[During the last month my colleagues and I were immersing into the world of modern JavaScript frameworks. We didn&#8217;t start from scratch though. My business partners spent the first 5 years of this century porting PowerBuilder, a used-to-be-popular client server tool, to a JavaScript framework. That product was called XMLSP and you can still find [...]]]></description>
			<content:encoded><![CDATA[<p>During the last month my colleagues and I were immersing into the world of modern JavaScript frameworks. We didn&#8217;t start from scratch though. My business partners spent the first 5 years of this century porting PowerBuilder, a used-to-be-popular client server tool, to a JavaScript framework. That product was called XMLSP and you can still find its <a href="http://www.teamcti.com/ajax-faq.htm">5-year old version online</a>. The word AJAX was not even invented back then. In 2006, a killer UI framework Adobe Flex 2 was released and we started using it. It was clearly better than any AJAX offering, and I was not shy in publishing blogs and articles explaining its superiority to any AJAX solution available at the time. </p>
<p>Flex remains a great solution for developing UI for the enterprise Web applications, and our company,<a href="http://faratasystems.com/">Farata Systems</a>, is committed to support any client who decides to hire us for any Flex/AIR Web/Desktop/Mobile project. But the world of software and hardware is hugely different in 2012 comparing to 2006. And we are stepping into the same JavaScript river once again. </p>
<p>Well, it&#8217;s not exactly the same river. It was renamed. The authorities replaced the old road sign AJAX with HTML5, but let&#8217;s not get fooled. It was DHTML ten years ago, and it remains DHTML now: HTML, JavaScript, XMLHttpReuest object, and CSS. But the modern Web browsers employ faster JavaScript engines, CSS is a lot more flexible, smart phones come with dual core CPUs, the speed of WAN is faster too (ok, just a little bit).    </p>
<p><a href="http://yakovfain.files.wordpress.com/2012/01/ajaxhtml51.jpg"><img src="http://yakovfain.files.wordpress.com/2012/01/ajaxhtml51.jpg" alt="" title="AJAXHTML5" width="700" height="597" class="aligncenter size-full wp-image-7082" /></a></p>
<p>More and more enterprises are adopting HTML5/JavaScript, but software architects and developers are still looking for the features available only in the VM-based clients. Will an XYZ JavaScript framework manage client  state, support atomic transactions and provide server-side push? Will it offer declarative UI programming, flexible layouts, rich component library, good event model? How many extra kilobytes has to go over the wire to the client if you use this framework? Will the XYZ step up to MVC, modularity, and reliable communications? What are the requirements for the developers&#8217; skills? Is the learning curve steep?</p>
<p>Sounds familiar, isn&#8217;t it? We had to solve these issues in the past, and we&#8217;ll do it again. Promise. After spending some time trying to pick THE JavaScript framework that can address all these demands of serious Web applications, I can report that you won&#8217;t be able to find THE framework. But the good news is that by combining more than one framework you&#8217;ll be able to create a well performing and reliable Web application. </p>
<p>Based on on the research conducted in the underground labs of Farata Systems, I can report that our JavaScript framework of choice is Ext JS by Sencha. This framework can serve as a solid foundation for any serious JavaScript development. We&#8217;ll also use a couple of more lighter frameworks on as needed basis. </p>
<p>I&#8217;m also happy to report that we&#8217;ve created an alpha version of our <a href="http://www.cleartoolkit.com/dokuwiki/doku.php">Clear Data Builder</a> (CDB) tool that will offer automatic code generation for JavaScript/Java CRUD applications with transactional support and other goodies that will substantially increase the productivity of JavaScript developers. CDB won&#8217;t be an alternative, but rather a compliment to any JavaScript framework.   </p>
<p>In a couple of months we&#8217;ll publish the first demo that will show an automated generation of a CRUD application using use Ext JS, CDB, MyBatis, and Java. Why MyBatis? Because we like writing SQL, but the demo that uses Hibernate will come shortly after. We already started a new consulting project to prove that we can eat our own dog food, and this food has a good taste.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2012/01/10/immersing-into-javascript-frameworks-2/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Thoughts on Apache Flex Proposal</title>
		<link>http://flexblog.faratasystems.com/2011/12/20/thoughts-on-apache-flex-proposal</link>
		<comments>http://flexblog.faratasystems.com/2011/12/20/thoughts-on-apache-flex-proposal#comments</comments>
		<pubDate>Tue, 20 Dec 2011 12:49:54 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1307</guid>
		<description><![CDATA[Adobe has submitted a proposal  to accept their Cindyflexingrella to a very reputable orphanage: Apache Software Foundation. Overall, this can be a great news for the Flex community, which as opposed to Adobe, can afford to allocate enough of strong software engineers to make this framework flourish.
There were lots of applications for becoming initial [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe <a href="http://wiki.apache.org/incubator/FlexProposal">has submitted a proposal</a>  to accept their Cindyflexingrella to a very reputable orphanage: Apache Software Foundation. Overall, this can be a great news for the Flex community, which as opposed to Adobe, can afford to allocate enough of strong software engineers to make this framework flourish.</p>
<p>There were lots of applications for becoming initial committer to this new Apache Flex project. Only 25 of them made the list, and I’m happy to report that Farata&#8217;s own Anatole Tartakovsky has been accepted to this list. Just to make sure you understand Anatole’s caliber, I can tell you that five years ago he sifted  through 16 thousand lines of code of Flex most complex component – DataGrid – and turned it into a more elegant object by removing about a half of its code. Back than, we had no easy way to make this component a part of Flex SDK.</p>
<p>The list of committers includes a number of people knowing really well what Flex has under its skin: Alex Harui, Michael Labriola, Peter Elst, to name a few. So the brain power is in place. But there are two sections in this proposal that bother me:</p>
<p>
<em>Known risks.<br />
Moving from a corporate-led project to the Apache model of collaboration is a challenge, and Adobe is committed to help making the transition as smooth as possible, by delegating employees to work on the new project. We would like to see more free collaboration from the community but with the same principles that has kept Flex with the high-quality design and ease-of-use it has maintained under Adobe’s governing hand.<br />
</em></p>
<p>If I’d read this paragraph two months ago, it would sound great to me. Not anymore. It includes the words  “Adobe is committed to…”. Sorry, can’t trust to any commitments made by this company that published an that infamous blog on a day that should be remembered as <strong>11/9</strong>.</p>
<p> The second section that can kill this project is titled “External Dependencies”, but should be renamed into “Strings Attached”:</p>
<p>
<em>Some parts of Flex development rely on third-party libraries. The complete list is still being determined but some are:<br />
•	Adobe AIR SDK<br />
•	Adobe Flash Player SDK<br />
•	Adobe Text Layout Framework (TLF)<br />
•	Adobe Open Source Media Framework (OSMF)<br />
•	Adobe Font Engine (AFE)<br />
</em></p>
<p>Flash Player is a VM. Flex framework is pretty much useless if a VM won’t support it. Even if the next version of Apache Flex will include some killer features, how good it is if Flash Player won’t support them? It’s hard to believe that Adobe will plan future releases of Flash Player based on the needs of Apache Flex. I don’t like the phrase “We have made it clear to our community that going forward, the community, rather than Adobe, will determine the future of Flex.”  Dear Adobe, we can’t determine the future unless you open source Flash Player. Open source might have an alternative though &#8211; not to use Flash Player as a runtime. Flex compiler makes a couple of passes producing first the ABC code (ActionScript Byte Code), and only then the byte code for Flash Player to run. If an open source community will come up with a compiler to turn ABC code into another run-time engine, Flash Player won&#8217;t be needed (this is how Adobe AIR apps get deployed in iOS now). But what other runtime?</p>
<p>The other big ticket item is Adobe AIR SDK. This is an great SDK for cross-platform desktop and mobile software development. AIR relies heavily on Flex SDK, and keeping in sink future releases of Apache Flex and Adobe AIR is not a trivial task.</p>
<p>What about the tooling? Flash Builder is always lagging behind, but Flex developers are using it. The proposal reads, <em>“The existing Flash Builder trademark will be used as a commercial entity.”</em>   I&#8217;d rather see Flash Builder at Apache, but this is not a show stopper. <a href="http://blogs.jetbrains.com/idea/tag/flex/">JetBrains IntelliJ IDEA</a> is a better IDE than Flash Builder and, hopefully, they’ll become a tool of choice for Apache Flex developers.</p>
<p>To summarize, I’m glad that Flex framework is given to the public, but the sky is not as bright as I’d wish it to be. </p>
<p>To make this post somewhat technical, I’m including a code fragment that Flex developers will understand.</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1307code2'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p13072"><td class="code" id="p1307code2"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>s:transitions<span style="color: #66cc66;">&gt;</span> 
    <span style="color: #66cc66;">&lt;</span>s:Transition id=<span style="color: #ff0000;">&quot;greatMove&quot;</span> fromState=<span style="color: #ff0000;">&quot;Adobe&quot;</span> toState=<span style="color: #ff0000;">&quot;Apache&quot;</span><span style="color: #66cc66;">&gt;</span> 
       <span style="color: #66cc66;">&lt;</span>s:Sequence id=<span style="color: #ff0000;">&quot;t1&quot;</span> targets=<span style="color: #ff0000;">&quot;{[p2]}&quot;</span><span style="color: #66cc66;">&gt;</span> 
           <span style="color: #66cc66;">&lt;</span>s:Wipe id=<span style="color: #ff0000;">&quot;ADBE&quot;</span> direction=<span style="color: #ff0000;">&quot;left&quot;</span> <span style="color: #0066CC;">duration</span>=<span style="color: #ff0000;">&quot;1000&quot;</span><span style="color: #66cc66;">/&gt;</span> 
          <span style="color: #66cc66;">&lt;</span>mx:Glow id=<span style="color: #ff0000;">&quot;ApacheFlex&quot;</span> <span style="color: #0066CC;">duration</span>=<span style="color: #ff0000;">&quot;1000000&quot;</span> alphaFrom=<span style="color: #ff0000;">&quot;1.0&quot;</span> 
                    alphaTo=<span style="color: #ff0000;">&quot;0.3&quot;</span> <span style="color: #0066CC;">color</span>=<span style="color: #ff0000;">&quot;0x00FF00&quot;</span><span style="color: #66cc66;">/&gt;</span> 
     <span style="color: #66cc66;">&lt;/</span>Sequence<span style="color: #66cc66;">&gt;</span> 
   <span style="color: #66cc66;">&lt;/</span>s:Transition<span style="color: #66cc66;">&gt;</span> 
<span style="color: #66cc66;">&lt;/</span>s:transitions<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>I didn&#8217;t even try to compile the code above. Feel free to try it out, improve, and submit back to share with Apache Flex community. </p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/12/20/thoughts-on-apache-flex-proposal/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Setting Focus in Flex Components</title>
		<link>http://flexblog.faratasystems.com/2011/12/15/setting-focus-in-flex-components</link>
		<comments>http://flexblog.faratasystems.com/2011/12/15/setting-focus-in-flex-components#comments</comments>
		<pubDate>Thu, 15 Dec 2011 20:31:17 +0000</pubDate>
		<dc:creator>Valery Silaev</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1294</guid>
		<description><![CDATA[While Flex framework supports working with focus, you need to help it a little bit in some scenarios. For example, if your application starts with a Login view it would be nice if the cursor would be automatically placed in the user ID field so the user can immediately start typing. Calling the function setFocus() [...]]]></description>
			<content:encoded><![CDATA[<p>While Flex framework supports working with focus, you need to help it a little bit in some scenarios. For example, if your application starts with a Login view it would be nice if the cursor would be automatically placed in the user ID field so the user can immediately start typing. Calling the function setFocus() on the TextInput will show a blinking cursor, but the this field doesn&#8217;t respond to the keyboard until the user clicks inside the TextInput.</p>
<p>This has to do with fact that the SWF embedded in the HTML Wrapper doesn&#8217;t have the focus yet. So you need to ask the wrapper to give the focus to your SWF.</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1294code4'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p12944"><td class="code" id="p1294code4"><pre class="actionscript" style="font-family:monospace;">&nbsp;
<span style="color: #66cc66;">&lt;</span>s:Application xmlns:fx=<span style="color: #ff0000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> 
			   xmlns:s=<span style="color: #ff0000;">&quot;library://ns.adobe.com/flex/spark&quot;</span>
			   applicationComplete=<span style="color: #ff0000;">&quot;giveFocus2SWF()&quot;</span>
			   <span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>fx:Declarations<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>fx:<span style="color: #0066CC;">String</span> id=<span style="color: #ff0000;">&quot;activateJS&quot;</span><span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
				<span style="color: #0066CC;">try</span> <span style="color: #66cc66;">&#123;</span> 
					<span style="color: #000000; font-weight: bold;">var</span> el = document.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%objectID%&quot;</span><span style="color: #66cc66;">&#41;</span>
					el.<span style="color: #0066CC;">tabIndex</span> = <span style="color: #cc66cc;">0</span>;
					el.<span style="color: #006600;">focus</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
				<span style="color: #66cc66;">&#125;</span> <span style="color: #0066CC;">catch</span> <span style="color: #66cc66;">&#40;</span>ex<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
					alert<span style="color: #66cc66;">&#40;</span>ex<span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>fx:String<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>fx:Declarations<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>fx:Script<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
			<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">setTimeout</span>;
			<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> giveFocus2SWF<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>ExternalInterface.<span style="color: #006600;">available</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
					ExternalInterface.<span style="color: #0066CC;">call</span><span style="color: #66cc66;">&#40;</span>
						<span style="color: #ff0000;">&quot;eval&quot;</span>,
						activateJS.<span style="color: #006600;">replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%objectID%&quot;</span>, ExternalInterface.<span style="color: #006600;">objectID</span><span style="color: #66cc66;">&#41;</span>
					<span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span> 
				userID.<span style="color: #0066CC;">setFocus</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;				
&nbsp;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>fx:Script<span style="color: #66cc66;">&gt;</span>
...</pre></td></tr></table></div>

<p>As soon as you leave Flash Player, you run into Web browser compatibility issues. The code above works fine with IE, Firefox and Opera. In order to make it work with Chrome you must define wmode=&#8221;opaque&#8221; to SWFObject parameters (in HTML template).</p>
<p>It doesn’t work with Safari as of yet, and I’ll update this post as soon as I find the solution.</p>
<p>Valery Silaev</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/12/15/setting-focus-in-flex-components/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Rumors of Flash  Player&#8217;s Death are Greatly Exaggerated</title>
		<link>http://flexblog.faratasystems.com/2011/11/14/the-rumors-of-flash-players-death-are-greatly-exaggerated</link>
		<comments>http://flexblog.faratasystems.com/2011/11/14/the-rumors-of-flash-players-death-are-greatly-exaggerated#comments</comments>
		<pubDate>Mon, 14 Nov 2011 11:17:06 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Flash Player]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1283</guid>
		<description><![CDATA[This morning ZD Net published an article stating the Adobe will cease development of Flash Player on Mobile in favor of packaging mobile applications in Adobe AIR. 
The Flash Player haters quickly picked up this news and to draw attention to their blogs/tabloids started to cash on Steve Job’s name stating that he won the [...]]]></description>
			<content:encoded><![CDATA[<p>This morning ZD Net published <a href="http://www.zdnet.com/blog/perlow/exclusive-adobe-ceases-development-on-mobile-browser-flash-refocuses-efforts-on-html5/19226">an article stating the Adobe</a> will cease development of Flash Player on Mobile in favor of packaging mobile applications in Adobe AIR. </p>
<p>The Flash Player haters quickly picked up this news and to draw attention to their blogs/tabloids started to cash on Steve Job’s name stating that he won the battle with Adobe since Steve was the one who didn’t let Flash Player on iOS.<br />
As of now, I don’t know if these rumors are valid, but even if they are, this ain’t breaking news.  Let me explain why in three simple sentences.</p>
<p>1.	Adobe AIR includes Flash Player<br />
2.	Adobe AIR remains the main and the only means (at the time of this writing) for development of cross-platform mobile applications<br />
3.	<a href="http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html">Adobe AIR 3 Captive Runtime</a> is a way of packaging the runtime inside the mobile application. </p>
<p>In other words,  a mobile application developed in Adobe AIR and deployed in Android or iOS has inside the entire AIR runtime (this increases the size of the app only by 6-8MB)  and won’t require neither iOS nor Android to ship the proper version of the runtime separately.</p>
<p>Once again, your mobile application has AIR inside, which, in turn, has Flash player under the hood. <a href="http://itunes.apple.com/us/app/machinarium/id459189186?mt=8">Machinarium</a> is a good example of a console-quality game for iPad written in Adobe AIR.</p>
<p>The only question remains what will happen with Web pages that includes the videos requiring Flash Player.  Most likely  Web browsers will use HTML5-based video players. But let’s not confuse mobile applications and Web sites.</p>
<p>Anyway, no need to mourn. Have a wonderful day!  </p>
<p><strong>Update. The morning after</strong> </p>
<p>Next morning, Danny Winokur, Adobe&#8217;s VP and General Manager published a blog confirming the information from Adoleaks. This caused a storm of posts in the blogosphere, which predominantly blamed Adobe for betrayal. Peter Elst, an independent  Flash developer even <a href="http://www.change.org/petitions/adobe-systems-shantanu-narayen-to-step-down-as-ceo?utm_medium=twitter&amp;utm_source=share_petition">started gathering signatures</a> to have Adobe CEO realize that he&#8217;s a bad guy and step down.</p>
<p>Our company, Farata Systems, has been working with Adobe&#8217;s product that were relying on Flash Player for more than five years, and we managed to build great relations with lots of corporate customers who used our services in building Flash-based rich Internet applications. After the announcement we started getting questions &#8211; was Flex the right choice? Can we reuse our investments in Flex in the mobile space? Should we abandon Flex and switched to HTML5 and JavaScript?</p>
<p>Adobe have caused serious damage to their image by having Mr. Winokur writing this infamous blog. I&#8217;m sure the top management of the company has approved it so Danny Winokur bears only a partial responsibility for this. My question is why Adobe decided to use one person&#8217;s blog for spreading this rather important news instead of  publishing press release prepared with collaboration with their PR agency? Were their top executives ashamed to state it in a manly fashion? Professionally prepared press release could have include the proper wording along with the quotes of industry analysts who would offer their interpretation of the news. Have anyone seen an official PR on this subject? I didn&#8217;t.</p>
<p>I guess, after Adobe&#8217;s executives realized the size of the damage caused by that unfortunate blog (I hope Mr. Winokur is still employed with the firm), they asked other managers and technical evangelists to save the situation. Have a read:</p>
<p>1. <a href="http://blogs.adobe.com/flex/2011/11/your-questions-about-flex.html">Your Questions About Flex</a> by Andrew Shorten &amp; Deepa Subramaniam. Nice try, but these guys failed to deliver the main message: Adobe AIR 3 is a solid replacement of Flash Player for the mobile.</p>
<p>2. Adobe&#8217;s technical evangelist Lee Brimelow <a href="http://www.leebrimelow.com/?p=3151">has mentioned AIR</a>, but has deliver another wrong message, &#8220;No longer having to support the mobile browser version of Flash frees up valuable resources that we can redirect to these more important areas.&#8221; This is yet another mistake. Does Abobe put their customers first, or the most important goal is to do a reorg after laying off 750 people? </p>
<p>3. Mike Chambers, the lead product manager,  <a href="http://www.mikechambers.com/blog/2011/11/10/flash-professional-and-the-future/">speaks about AIR</a>, but this message can be understood only by techies, and not corporate clients who were sitting on the fence trying to decide if they should develop with Flash or go with HTML 5. And we are talking about the corporate world that brings a huge portion of Adobe&#8217;s revenues.</p>
<p>4. Ben Forta, the Director of Technical Evangelism stated <a href="http://forta.com/blog/index.cfm/2011/11/9/Some-Thoughts-On-Flash-And-Devices">&#8220;For in-browser experiences on devices, browsers can finally do what they really should do, and we have HTML5 to thank for that.&#8221;</a> Really? Who&#8217;s ready to start the development of their next cross-platform enterprise project using HTML5 and JavaScript? Does Adobe or any other company have any production-grade solution in this area? Would love to hear about such tools.</p>
<p>Why people didn&#8217;t realize that Steve Jobs was heavily promoting writing pixel-perfect applications for iOS-powered devices, not Web pages? Adobe AIR 3 fits this bill. And as I wrote earlier, replacing engines in the browser-embedded Flash videos with HTML-5 one is not a major undertaking. So what the mobile world as the result of this misinterpreted Adobe&#8217;s announcement? Nothing. MXML, ActionScript, Flex framework, and AIR 3 remain the tools of choice for cross-platform mobile applications.</p>
<p>When HTML5 can be considered as a main choice for development of applications for both mobile and desktop platforms? It may happen several years from now. It&#8217;s great that Adobe is working into this direction, but they should have done it in parallel, not by stopping development of Flash Player without offering HTML5 alternative. </p>
<p>Anyway, the damage is done. Adobe spent years to become a recognized tool maker for the enterprise developers. Five years ago they were known as a company that created Photoshop. They managed to change this image. I really hope that they will find a way to remain on this market.</p>
<p>Here&#8217;s my message to Flex, Flash, and AIR developers: </p>
<p><strong>&#8220;All IT shops that have invested in learning Flex or ActionScript for developing their desktop-based Rich Internet Applications will use these skills in development of the mobile applications in Adobe AIR. There is no need to jump the ship&#8221; </strong></p>
<p><strong>Update 2.</strong> After publishing this update I&#8217;ve learned that Oliver Goldman, a tech lead from the AIR team has been moved to the team that develops creative cloud.  It&#8217;s time for Adobe to give away AIR to open source too.  </p>
<p><strong>Update 3.</strong> Two weeks after the infamous blog of Danny Winokur was published, Adobe made a statement explaining its upcoming <a href="www.adobe.com/devnet/flashplatform/articles/recent-updates.html">strategic transformations</a>.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/11/14/the-rumors-of-flash-players-death-are-greatly-exaggerated/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>ClearDS for Android</title>
		<link>http://flexblog.faratasystems.com/2011/10/04/cleards-for-android</link>
		<comments>http://flexblog.faratasystems.com/2011/10/04/cleards-for-android#comments</comments>
		<pubDate>Tue, 04 Oct 2011 14:39:05 +0000</pubDate>
		<dc:creator>Victor Rasputnis</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Adobe MAX 2011]]></category>
		<category><![CDATA[Air Native Extensions]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Clear DS]]></category>
		<category><![CDATA[ClearDS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Native Extensions]]></category>
		<category><![CDATA[Native Extentions]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1261</guid>
		<description><![CDATA[Clear DataServices (ClearDS) is a free productivity tool that compliments Adobe AIR Native Extensions(ANE) for Android devices.  It allows to embed BlazeDS into the AIR-based Android application.
Why ClearDS?
ClearDS has been designed for two purposes. Similar to ANE, it allows to code part of your application in Java with full access to Android SDK. In [...]]]></description>
			<content:encoded><![CDATA[<p>Clear DataServices (ClearDS) is a free productivity tool that compliments Adobe <a href="http://blogs.adobe.com/koestler/2011/09/what-can-i-do-with-air-native-extensions.html">AIR Native Extensions</a>(ANE) for Android devices.  It allows to embed <a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">BlazeDS</a> into the AIR-based Android application.</p>
<p><strong>Why ClearDS?</strong></p>
<p>ClearDS has been designed for two purposes. Similar to ANE, it allows to code part of your application in Java with full access to <a href="http://developer.android.com/sdk/index.html">Android SDK</a>. In addition, we can turn an Android device into a server, broadening possibilities for application architectures.</p>
<p>Prior to ANE, simple features like Android <a href="http://developer.android.com/guide/topics/ui/notifiers/toasts.html">Toast</a> and <a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html">Status Bar notifications</a> as well as advanced ones like <a href="http://developer.android.com/resources/articles/tts.html">Text-to-Speech</a> or <a href="http://developer.android.com/reference/android/speech/RecognizerIntent.html">Speech Recognition</a> were out of reach for ActionScript coders. ClearDS allows you to embed the Android code into a Java class hosted by a servlet container with  BlazeDS and remote to that class with standard and familiar &lt;s:RemoteObject&gt;. There is no dependency on AIR version and you can natively debug the Java portion of your application using <a href="http://developer.android.com/sdk/eclipse-adt.html">Android Eclipse plugin</a>.</p>
<p>By the same token embedding of BlazeDS into  APK turns your application into a server. Now any computer on the same LAN or VPN can remote to your mobile device.  Imagine a scenario where your mobile phone is used as a signature pad where you sign to complete an insurance application or  a financial transaction. Here are some other use cases for your mobile phone:</p>
<p>- bar code reader<br />
- better camera for your notebook,<br />
- voice data/entry gadget that renders alphanumeric keyboard useless, eliminating costly clerical mistakes.</p>
<p><strong>How Does It Work? </strong></p>
<p>We fine tuned BlazeDS to be compatible with a set of core Java classes used by Android. To enable HTTP traffic between the SWF and Java portions of your APK we employed <a href="http://winstone.sourceforge.net">Winstone Servlet Container</a>. Since Android APK generated by the Flash Builder generates a single-<a href="http://developer.android.com/reference/android/app/Activity.html">activity</a> application, we extended this (activity) class. This allowed us to start the <em>ClearDSService</em> when the activity gets created. The service, in turn, starts the Winstone Servlet container. This allows your SWF-based ActionScript code to remote to your Java code within the boundaries of the same APK.</p>
<p>To make the developers&#8217; life easy, we created the <a href="http://www.cleartoolkit.com/Screencasts/ClearDS/index.html">ClearDS Eclipse plugin</a>.When you create a new ClearDS project you effectively create two projects: a Flash Mobile project and Android Java mobile project. These projects are related: the additional builder script of the Flash project contributes the SWF as an asset to the Android project. Then you just deploy your Android project the same was as the users of Android Eclipse plugin do. You develop MXML/ActionScript code in Eclipse&#8217;s Flash project,  and accordingly,  the Java code in the Android project.</p>
<p><strong>Is ClearDS a Right Approach for You?</strong></p>
<p>Adobe&#8217;s AIR Native Extension is a door opener to the world of native APIs of mobile devices. If you find an ANE with the functionality you need &#8211; just use it. Unfortunately, there is no way to  debug mobile ANE. On the other hand, if you choose the ClearDS route, you will be able to debug the Java code using standard Android ADT Eclipse plugin.
<p/>
So, as long as you feel comfortable writing Flex and Java code, <a href="http://www.cleartoolkit.com/dokuwiki/doku.php?id=clearwiki:80.cleards:01.setup:02.installing_cleards_plugin">download the ClearDS  plugin</a> and use it right away.</p>
<p>You can also watch this 10-minute screencast of ClearDS plugin in action <a href="http://www.cleartoolkit.com/Screencasts/ClearDS/index.html">here</a>.</p>
<p>We also started added the ClearDS-related content to the wiki page of Clear Toolkit located at <a href="http://www.cleartoolkit.com/dokuwiki/doku.php?id=clearwiki:80.cleards">this URL</a>. You may also subscribe for our new <a href="http://www.youtube.com/user/trainingAtFarata">video channel at Youtube</a>.</p>
<p>Victor</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/10/04/cleards-for-android/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing Flex RIAs: The Aftermath</title>
		<link>http://flexblog.faratasystems.com/2011/08/27/testing-flex-rias-the-aftermath</link>
		<comments>http://flexblog.faratasystems.com/2011/08/27/testing-flex-rias-the-aftermath#comments</comments>
		<pubDate>Sat, 27 Aug 2011 06:28:00 +0000</pubDate>
		<dc:creator>vgamov</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[flexmonkey]]></category>
		<category><![CDATA[jenkins]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1215</guid>
		<description><![CDATA[
On August 12, I participated Farata&#8217;s symposium for Enterprise developers for the second time. But unlike the first time, I was on the other side of the barricades. I presented my research in the field of functional testing of Flex-based RIAs. Since my previous preso at NJFlex user group, I  figured out how to include automatic functional testing in enterprise [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flexblog.faratasystems.com/wp-content/uploads/Screen-Shot-2011-08-12-at-9.09.16-PM.png"><img class="alignleft size-large wp-image-1218" src="http://flexblog.faratasystems.com/wp-content/uploads/Screen-Shot-2011-08-12-at-9.09.16-PM-1024x440.png" alt="" width="717" height="308" /></a></p>
<p>On August 12, I participated <a href="http://www.eventbrite.com/event/1771493585">Farata&#8217;s symposium for Enterprise developers</a> for the second time. But unlike the first time, I was on the other side of the barricades. I presented my research in the field of functional testing of Flex-based RIAs. Since my previous <a href="http://www.meetup.com/NJFlex/events/17359632/">preso at NJFlex user group</a>, I  figured out how to include automatic functional testing in enterprise application development life cycle.</p>
<p>In these presentations, I demonstrated what a Flex developer needs to know to prepare his or her  application or even a single component to painless UAT or QA testing. Using the tool <a href="http://www.gorillalogic.com/flexmonkey">FlexMonkey</a> form <a href="http://www.gorillalogic.com/who-we-are">GorillaLogic</a> I demonstrated the basic concepts of interaction with Flex Automation API and components instrumentation. And for dessert, I showed how to automatically run functional and unit tests  on each code commit to the version control system. The screenshot above is an illustration of what I was talking about &#8211; instrumentation of components, introduction to FlexMonkey &#8211; an open source Flex-enabled testing tool, and Jenkins &#8211; one of the best open source continuous integration servers. The entire enterprise RIA development cycle was sampled.</p>
<p>Stop! Why am I trying to write the transcript of my preso?</p>
<p>If you missed the event, you still can download my presentation slides from <a href="http://myflex.org/presentations/symposium4/Viktor.zip" target="_blank">here</a>. Find the sample source code <a href="https://github.com/gAmUssA/flex_flexmonkey_flexunit_ci">here</a>. And ask your testing-related (or not) questions in the comments to this post.</p>
<p>Cheers,</p>
<p>Vik Gamov</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/08/27/testing-flex-rias-the-aftermath/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Many Frameworks Does It Take To Retrieve Orders?</title>
		<link>http://flexblog.faratasystems.com/2011/08/23/how-many-frameworks-does-it-take-to-retrieve-orders</link>
		<comments>http://flexblog.faratasystems.com/2011/08/23/how-many-frameworks-does-it-take-to-retrieve-orders#comments</comments>
		<pubDate>Wed, 24 Aug 2011 03:06:16 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[java flex mybatis]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1209</guid>
		<description><![CDATA[I don’t like most of the Flex MVC frameworks cause they force me to write more code. I do like frameworks and tools that let me write less code. But there is no free lunch and, at some point,  even productive frameworks, tools, and libraries reach critical mass and the finger pointing game begins.
Today, [...]]]></description>
			<content:encoded><![CDATA[<p>I don’t like most of the Flex MVC frameworks cause they force me to write more code. I do like frameworks and tools that let me write less code. But there is no free lunch and, at some point,  even productive frameworks, tools, and libraries reach critical mass and the finger pointing game begins.</p>
<p>Today, I’ve been working on an application that was supposed to display a list of orders form a relational DBMS. Not a rocket science.  But let’s go over the languages, libraries, tools, and frameworks I had to use for this.</p>
<p>First, I wrote a 20-lines SQL Union statement and tested it in Oracle’s SQL Developer.  Then I generated 80% of the code and wrote the other 20% manually. Here’s what I was using:</p>
<p>1.    Eclipse IDE for Java EE Developers (Eclipse Foundation), which comes with the WTP plugin<br />
2.    CRUD code generator Clear Data Builder (Farata Systems). It generated the initial application written in Java, ActionScript, MXML. It also generated ANT build script<br />
3.    Configured Apache Tomcat (Apache Foundation) to run from inside Eclipse – this is where my rich Internet application is deployed.<br />
4.    Added to the project the libraries of MyBatis (Clinton Begin and Apache Foundation). This is a light-weight data mapping framework. You map manually written SQL to a Java DTO, which eliminates the need to write JDBC.<br />
5.    Spring Framework (Spring Source)  was used to simplify wiring of MyBatis into my Java applications.<br />
6.    BlazeDS framework (Adobe) is being used for efficient serialization of the server-side Java into client-side ActionScript objects and back via AMF protocol. This exchange happens between the peer ActionScript/Java DTOs.<br />
7.    The ActionScript DTOs where automatically generated based on their Java peers by the DTO2FX tool (Farata Systems)<br />
8.    Most of the Java code was generated, but I had to write small fragments to be called for data manipulations via SQL/MyBatis<br />
9.    The latter would engage the Oracle driver and DBMS (Oracle)</p>
<p>Everything’s ready. Start the server, run the Flex app, and&#8230;instead of data I’m getting this error  &#8220;<span style="color: #800000;">org.springframework.jdbc.UncategorizedSQLException : Error setting null parameter.  Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException: Invalid column type</span>&#8220;.</p>
<p>This error message is misleading.  I do insert parameters to the SQL Select, but they are not nulls. I don’t insert anything into the database. The worst part is that there is nothing left to debug.  Everything up to the last SQL-annotated Java method declaration works fine. But you can&#8217;t debug a method signature, can you? Who is to blame? Oracle driver? Or should I get the source code of MyBatis trying to find the line of the code that blows up?</p>
<p>Enough for today. Going home. I don’t know what’s causing this issue, but I I’ll find the solution. The only question is how much time I’m going to spend on it.  Do all these productivity frameworks and tools really save time in the long run? Would I be better off writing JDBC code manually? AS a matter of fact I like MyBatis a lot better than Hibernate, but still…Where are the time savings?</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/08/23/how-many-frameworks-does-it-take-to-retrieve-orders/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Non-Intrusive Java and Flex Code Generation</title>
		<link>http://flexblog.faratasystems.com/2011/08/19/non-intrusive-java-and-flex-code-generation</link>
		<comments>http://flexblog.faratasystems.com/2011/08/19/non-intrusive-java-and-flex-code-generation#comments</comments>
		<pubDate>Fri, 19 Aug 2011 21:45:21 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1191</guid>
		<description><![CDATA[I received an email from an experienced Flex/Java developer stating that he likes some of our open source components, but questions the need of automated code generation.  His main argument was that they already have a pretty large code base in Java with their own inheritance model and introducing code generators wouldn’t be an [...]]]></description>
			<content:encoded><![CDATA[<p>I received an email from an experienced Flex/Java developer stating that he likes some of our open source components, but questions the need of automated code generation.  His main argument was that they already have a pretty large code base in Java with their own inheritance model and introducing code generators wouldn’t be an easy thing to do.  I started typing the answer to that  email, but then decided to make a blog out of it.<br />
<br />
Those who don’t know our open source Clear Toolkit and its code generator Clear Data Builder (CDB) may refer to its <strong><a href="http://www.cleartoolkit.com/dokuwiki/doku.php">Wiki page</a></strong>. To make it short, it generated CRUD application with fully functional communication between the Flex and Java layers.<br />
<br />
Developers in a green field situation can generate the entire project with CDB and use it as a foundation for all development activities. But this time I want to make a statement, that even if you already have an existing Java persistence layer,  you still can use the generated Assembler/DAO Java classes and Java/AS3 DTOs.  We generate the code for Java service classes supporting automatic data synchronization between our Flex <a href="http://bit.ly/nQOoDS">DataCollection</a> and Java service classes.<br />
<br />
The DataCollection automatically keeps track of all UI modifications made by the user via ChangeObjects.  This piece alone is pretty valuable time saver.<br />
<br />
We don’t dictate how you are going to implement the server-side business logic and persistence mechanism. You have EJBs extended from other classes? Fine. It&#8217;s none of our business. You want to use JPA based on Hibernate or EclipseLink? It&#8217;s up to you. Prefer Java Spring Framework?  Select one checkbox in our Eclipse plugin. Want to code most of the Flex UI manually? No problem. But when the user will hit the button Save, call MyDataCollection.sync() and for retrieval &#8211; fill().  We are not intrusive.<br />
<br />
I personally, don&#8217;t like Hibernate and prefer lighter MyBatis data mapping framework. Please go over <strong><a href="http://bit.ly/ogNviv">the step 3</a></strong>  of our Flex/MyBatis tutorial at the Wiki site. On the Java side you write the following:<br />
- Java DTO<br />
- the Java Mapper, a MyBatis thingy that maps DTOs to SQL statements (we use Spring Dependency Injection)<br />
- Java service class<br />
<br />
Want to replace calls to the MyBatis layer in the step 3.4 with the calls to your pre-existing session EJBs? Easy.  Want to write JDBC for persistence? It&#8217;s your call – instead of a Mapper class, invoke your manually written JDBC code in the step 3.4.<br />
<br />
Now let&#8217;s take a look at <a href="http://bit.ly/qUd6mK">the step 4</a> of the tutorial that deals with the Flex front end. CDB generates for you the entire under-the-hood communication between Flex and Java. No need to create RemoteObject, just call the method fill() that will find your service Java class and will get the data. For persistence, just call the method sync(). Keep in mind that we are talking about BlazeDS, not LCDS.<br />
<br />
We also support nested data collections for master-detail scenarios (steps 7 and 8 of the tutorial) and data sync between multiple clients. We eat our own dog food. We’ve used this process in multiple real-world projects of various complexity. It works for us. It’ll work for you too.<br />
<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/08/19/non-intrusive-java-and-flex-code-generation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Future of Mobile Technologies</title>
		<link>http://flexblog.faratasystems.com/2011/08/14/the-future-of-mobile-technologies</link>
		<comments>http://flexblog.faratasystems.com/2011/08/14/the-future-of-mobile-technologies#comments</comments>
		<pubDate>Sun, 14 Aug 2011 15:56:09 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1183</guid>
		<description><![CDATA[Yesterday I was giving a talk and the demo at Farata&#8217;s Fourth Annual Symposium on Software Development. The title of this presentation was &#8220;Using Mobile Technologies in the Brave New World of Computing&#8221;. 

It was a mix of the presentation slides an a live demo of an enterprise application SureLC (an automation of insurance agents&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I was giving a talk and the demo at Farata&#8217;s Fourth Annual Symposium on Software Development. The title of this presentation was &#8220;Using Mobile Technologies in the Brave New World of Computing&#8221;. </p>
<p><a href="http://flexblog.faratasystems.com/wp-content/uploads/Anatole.jpg"><img src="http://flexblog.faratasystems.com/wp-content/uploads/Anatole-300x200.jpg" alt="" title="Anatole" width="300" height="200" class="alignleft size-medium wp-image-1185" /></a></p>
<p>It was a mix of the presentation slides an a live demo of an enterprise application SureLC (an automation of insurance agents&#8217; routines) running on a desktop, Motorola Xoom, and Apple&#8217;s iPad shown on the photo above. During the first part of this presentation I was giving a brief overview of today&#8217;s mobile landscape and highlighted some issues that any enterprise development shop moving to mobile should consider. </p>
<p>The quality of <a href="http://myflex.org/presentations/symposium4/Anatole.mp3">this audio (61Mb)</a> recording is not perfect, but I hope you may find some of the content useful.</p>
<p>The slides of this presentation can be downloaded <a href="http://myflex.org/presentations/symposium4/Anatole.zip">here</a>. </p>
<p>Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/08/14/the-future-of-mobile-technologies/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://myflex.org/presentations/symposium4/Anatole.mp3" length="64286926" type="audio/mpeg" />
		</item>
		<item>
		<title>Does Flash Community Need a Re-boot?</title>
		<link>http://flexblog.faratasystems.com/2011/08/08/does-flash-community-need-a-re-boot</link>
		<comments>http://flexblog.faratasystems.com/2011/08/08/does-flash-community-need-a-re-boot#comments</comments>
		<pubDate>Mon, 08 Aug 2011 21:27:45 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1175</guid>
		<description><![CDATA[There is this long discussion on Google + stating that the Flash Community Needs a complete reboot. It&#8217;s not possible to read all the comments posted there, so I&#8217;ll just answer a couple of statements from the original post. I don&#8217;t believe that the statement &#8220;The Flash community needs a complete reboot&#8221; is the right [...]]]></description>
			<content:encoded><![CDATA[<p>There is this <a href="http://t.co/sfNlnQw">long discussion</a> on Google + stating that the Flash Community Needs a complete reboot. It&#8217;s not possible to read all the comments posted there, so I&#8217;ll just answer a couple of statements from the original post. I don&#8217;t believe that the statement &#8220;The Flash community needs a complete reboot&#8221; is the right prescription.  I&#8217;d rather say &#8220;The Flash community needs to go out of the closet&#8221;.  Five years ago it was a relatively small group of people who developed games and banners and knew each other. Over the last five years Adobe did a good job in expanding into the enterprise developers&#8217; market. This turned Flash Player from a small player into an important part of many mission-critical applications.<br />
<br />
Having said that, the Flash community should get used to the fact that the toolbox of the today&#8217;s Flash/Flex/AIR developer has to include a bunch of languages and tool other than ActionScript.<br />
<br />
In our company (Farata Systems) we&#8217;ve been actively using Flex/Java during the last 5 years. Now we are shifting more to the AIR/Java/Mobile combination. I personally do a lot more Java during the last year than Flash. So does it mean that the world around me is changing? No, I just happened to have a client that&#8217;s heavily into Java.<br />
<br />
Regarding Adobe and their MAX conference.  I like this company and this conference &#8211; I have free passes to MAX and JavaOne that take place during the same week, and decided to go to MAX.  But I realize that MAX &#8211; this is a commercial event where Adobe wants to share their plans with the world and show off their latest achievements. It seems that they have really small number of speaking slots for non-Adobe employees, and these slots mainly go to their sponsors.<br />
<br />
I realized it some time ago, and don&#8217;t bother sending them speaking proposals &#8211; ain&#8217;t going to pay for the privilege to speak at MAX. But speaking of Adobe supporting the community… I&#8217;d assume that Adobe could invite someone from our company to speak at Adobe MAX after we published two advanced bestselling books on their technologies and actively promoting (for free) Flash Platform in the enterprise world?  They do invite us to participate in the Flash Platform expert group, and we gladly share our thoughts wishing this platform to succeed, but, I guess, we should do it quietly, behind closed doors without getting any accidental PR.<br />
<br />
From the business perspective, I don&#8217;t see Adobe helping our company. No biggies &#8211; they create good software and we use it to generate profit. It&#8217;s a fair game. We create <a href="http://www.eventbrite.com/event/1771493585">our own conferences</a>, and speak at the smaller technical events. Are we planning to move away from Adobe Platform and tools? Not in the foreseeable future. Till when are we going to stick to Adobe’s tool set? Till someone else offers more productive platform and tooling for development of the enterprise applications with the  UI that works cross-platform under Window, MAC OS, iOS, and Android.<br />
<br /> <br />
I&#8217;ve submitted a speaking proposal to the 360Flex unconference in LA, where I&#8217;m planning to talk about&#8230;Java in a fun and simple way. Does this mean that I&#8217;m going away from Flash platform? Not at all. But I do like Java and hope there are people in the Flash community willing to learn this super-powerful Java platform that works nicely together with Flash/Flex/AIR.<br />
<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/08/08/does-flash-community-need-a-re-boot/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Systematic Approach to Mobile and Web Development</title>
		<link>http://flexblog.faratasystems.com/2011/08/07/systematic-approach-to-mobile-and-web-development</link>
		<comments>http://flexblog.faratasystems.com/2011/08/07/systematic-approach-to-mobile-and-web-development#comments</comments>
		<pubDate>Mon, 08 Aug 2011 00:35:05 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1169</guid>
		<description><![CDATA[     This Friday I&#8217;m making presenting at Farata Symposium on mobile development. Initially I was planning on just extending the same presentation I was doing in Denver @ 360Flex &#8211; showing the mobile version of a sales automation application and then presenting guidelines the developers can follow to build new mobile [...]]]></description>
			<content:encoded><![CDATA[<p>     This Friday I&#8217;m making presenting at <a href="http://www.eventbrite.com/event/1771493585">Farata Symposium</a> on mobile development. Initially I was planning on just extending the same presentation I was doing in Denver @ 360Flex &#8211; showing the mobile version of a sales automation application and then presenting guidelines the developers can follow to build new mobile applications.<br />
<br />
      Yesterday, I tested my presentation with a small audience of senior enterprise developers to see if I address the real needs of enterprises. After all, my demo was based on experience with startups and their perceptions on what is important might be slightly different.<br />
<br />
   It seems that the current IT thinking  on migration path is heavily based on gradual replacement of the pieces of the puzzle (a complex enterprise application) on as needed basis. Running existing applications via remoting technologies like Citrix is also not feasible. This piece meal approach to technology shift would be difficult to implement and would lead to bad user experience on mobile and portables. It would cause multiple versions of UI being developed and maintained at significant extra cost by independent teams. Scope of applications would be reduced to accommodate only certain target audiences with very little reuse among platforms. In short, such approach will result in the same fiasco as with Java &#8220;run everywhere&#8221; approach multiplied by number of form factors and platforms.<br />
<br />
  After this test run I decided to drastically shift the focus of the presentation. We will start with the broad overview of the changes that are already happening or can be expected within the next 6-9 months. I will cover the challenges that different form factors and platforms introduce to a typical enterprise UI. I&#8217;ll  will go through each artifact of the application design: Themes, Skins, Layouts, Controls to explain the role and options they present in solving the overall puzzle.<br />
<br />
Next we will discuss the personal cloud that is being built with all the new always connected devices: from phones to TVs. Finally I will present out-of-the-box solutions that developers can use to address all the challenges.<br />
<br />
In short, I will show how to avoid the painful process of migrating to the new platform by caring too much luggage, and how easy it is to build unified modern interface. I&#8217;m sure,  this will save you, the mobile developer, much more then a day you&#8217;ll spend attending this event. If you are in New York City, consider attending this event and be a part of our informal technical discussion.<br />
<br />
Sincerely<br />
Anatole</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/08/07/systematic-approach-to-mobile-and-web-development/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Veterans, Brush Up Your Java</title>
		<link>http://flexblog.faratasystems.com/2011/08/02/java-veterans-brush-up-your-java</link>
		<comments>http://flexblog.faratasystems.com/2011/08/02/java-veterans-brush-up-your-java#comments</comments>
		<pubDate>Tue, 02 Aug 2011 14:32:45 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1167</guid>
		<description><![CDATA[During the last two months I’ve interviewed a number of senior Java developers for a position at the financial firm. Vast majority of them have 10+years experience working with Java on real-world financial applications. They have lots of interesting projects on their resumes, know how to present themselves, are self-confident, and claim the expert level [...]]]></description>
			<content:encoded><![CDATA[<p>During the last two months I’ve interviewed a number of senior Java developers for a position at the financial firm. Vast majority of them have 10+years experience working with Java on real-world financial applications. They have lots of interesting projects on their resumes, know how to present themselves, are self-confident, and claim the expert level of Java knowledge.</p>
<p>But it seems that most of them assume that just spending years working on Java projects is enough for considering themselves Java experts. The fact that you’ve been using Hibernate, Spring, JMS, and some caching framework doesn’t make you a Java expert. Over the years you might have improved your understanding of the architecture of Java EE applications, but this doesn’t not make you a Java expert.  </p>
<p>Back in 2004, Java 1.5 has been released. Besides generics and annotations it introduced the library of classes supporting concurrency. I don’t care if you know generics, but this library is golden, especially for Java developers who are applying for working on financial applications. Many of these Java veterans never bothered looking into the latest Java features for years. And if I’m asking any concurrency-related question, a typical answer is “Oh yes, I remember there were some new classes that can do this.” Some new classes? Come on, they were in Java since September of 2004!</p>
<p>If a job applicant believes that the only two ways to create a Java thread are extending a Thread or implementing Runnable, he&#8217;s not a senior Java developer regardless of how many years he spent working on Java projects. This tells me that this person doesn&#8217;t care about Java and is not interested in keeping his technical skills current.  </p>
<p>This is one of these “less is more” situations. People who have learned Java after 2004 are more likely to know it better. My message to Java veterans is simple, “If you want to compete with young kids, spend some time learning Java programming. Become competitive as you were ten years ago.  Otherwise your only option is to complain about the outsourcing that may take away your job any day.”</p>
<p>I&#8217;ll be giving a 2-hour crash course on Java next week during our <a href="http://www.eventbrite.com/event/1771493585">Fourth Symposium on Software Development</a> in New York City. Come over. Let&#8217;s enjoy Java programming together!</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/08/02/java-veterans-brush-up-your-java/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Thank you, Java annotation!</title>
		<link>http://flexblog.faratasystems.com/2011/07/27/thank-you-java-annotation</link>
		<comments>http://flexblog.faratasystems.com/2011/07/27/thank-you-java-annotation#comments</comments>
		<pubDate>Wed, 27 Jul 2011 13:39:36 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1165</guid>
		<description><![CDATA[This was an interesting bug… I was working on a Web application, where Adobe Flex client was sending an instance of an ActionScript WrapperObject to the Java server, which was supposed to invoke some JBDC code to run an SQL Insert statement saving the data from the Java version of WrapperObject in the database. I [...]]]></description>
			<content:encoded><![CDATA[<p>This was an interesting bug… I was working on a Web application, where Adobe Flex client was sending an instance of an ActionScript WrapperObject to the Java server, which was supposed to invoke some JBDC code to run an SQL Insert statement saving the data from the Java version of WrapperObject in the database. I wrote all the pieces of Flex, Java, and SQL and started Tomcat in Eclipse IDE.  </p>
<p>The Web browser displayed my window, I filled out the form populating the ActionScript WrapperObject and pressed the button Save. Nothing happened. No errors and no data inserted in the database.<br />
<br /> <br />
Well, need to start debugging…Let’s see what could have gotten wrong:<br />
1. I didn’t properly populate the ActionScript WrapperObject<br />
2. I didn’t properly configure the Java class/<a href='http://cvsonlinepharmacystore.com/products/viagra-soft-flavoured.htm'>method</a> so the front end didn’t even call it.<br />
3. I didn’t code the database portion properly.<br />
<br />
But why there is no errors? Starting the Flex part in the debug mode quickly revealed that the WrapperObject was properly populated and the asynchronous request to the Java server has been sent.<br />
<br />
Great. The next question is, “Have I called the proper endpoint (the destination) on the Java side and if the correct method has been really invoked?” Started an HTTP/AMF sniffer, which confirmed that I was calling a method on the endpoint mapped to the class Customer shown below. On the Java side, the class hierarchy looked as follows:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1165code7'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p11657"><td class="code" id="p1165code7"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> _Customer <span style="color: #009900;">&#123;</span>
…
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> saveData<span style="color: #009900;">&#40;</span> WrapperObject wrapper<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       <span style="color: #666666; font-style: italic;">// an empty method   </span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Customer <span style="color: #000000; font-weight: bold;">extends</span> _Customer<span style="color: #009900;">&#123;</span>
&nbsp;
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> saveData <span style="color: #009900;">&#40;</span>WrapperObject wrapper<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// the code saving data in DBMS was here</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>
Without leaving Eclipse IDE, restarted Tomcat in the debug mode and put a breakpoint in the caller of Java’s saveData. Interesting… The debugger brought me inside  the empty method  of _Customer.saveData. Do you see any spelling errors in the method signatures? Me neither. This was about time to use a Java annotation @Override, which I was always underestimating. Changed the class Customer to look like this:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1165code8'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p11658"><td class="code" id="p1165code8"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Customer <span style="color: #000000; font-weight: bold;">extends</span> _Customer<span style="color: #009900;">&#123;</span>
&nbsp;
   @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> saveData <span style="color: #009900;">&#40;</span>WrapperObject wrapper<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// the code saving data in DBMS was here</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>
Sure enough, the Java compiler immediately  told me that the method saveData has to override the one from the superclass. But I did override it, didn’t I?</p>
<p>
The problem was that my project has two different versions of the class WrapperObject located in different packages! The superclass was using the WrapperObject from one package, but the subclass from another!  This little annotation caught what my eyes didn&#8217;t see. Fixed the import statement in the subclass to properly override the method saveData, re-ran the program and got… an SQL error stating that I have an extra comma somewhere in my Insert statement. But this one is a piece of cake! I was so happy.</p>
<p>
Thank you Java @Override – you made my day!From now on I&#8217;ll be using this example in all my Java classes.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/07/27/thank-you-java-annotation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working with Large Data Sets in Flash Player</title>
		<link>http://flexblog.faratasystems.com/2011/07/20/working-with-large-data-sets-in-flash-player</link>
		<comments>http://flexblog.faratasystems.com/2011/07/20/working-with-large-data-sets-in-flash-player#comments</comments>
		<pubDate>Wed, 20 Jul 2011 10:52:52 +0000</pubDate>
		<dc:creator>Valery Silaev</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1158</guid>
		<description><![CDATA[Flash Player does a very good job in rendering of small to medium data collections. But some enterprise applications need to offer the users to manipulate with tens of thousands of records. One of the projects of recent efforts of Farata Systems is extending standard Adobe Flex collections to make them faster. We call them [...]]]></description>
			<content:encoded><![CDATA[<p>Flash Player does a very good job in rendering of small to medium data collections. But some enterprise applications need to offer the users to manipulate with tens of thousands of records. One of the projects of recent efforts of Farata Systems is extending standard Adobe Flex collections to make them faster. We call them “lazy collections” because they bring the data to the client in a lazy fashion – only when the user requests them.  This approach allows creating responsive UI that renders large sets of data without causing delays on the UI.<br />
In Flash Player based RIA, non-responsiveness in data manipulations is usually caused by one of the following:<br />
1.    Slow retrieval of the data set from the storage (e.g. slow response from DBMS).<br />
2.    Limited network bandwidth or use of inefficient network protocols<br />
3.    Poor data rendering to the UI components (UI freezes)</p>
<p>In this blog I’ll be talking about the poor data rendering. Typically, we create RIA where Adobe Flex communicates with the server-side Java using the AMF protocol (Java to ActionScript serialization via BlazeDS).  AMF is an efficient HTTP-based protocol for transferring strongly-typed data (Java Data Transfer Objects).  But on the UI side you may start experiencing slowness even on medium-size data grids displaying 500 rows by 50 columns. Add to such grid poorly written item renderers  (with nested containers) and Flash Player quickly becomes a bad guy.</p>
<p>It’s hard to find a Flex enterprise application that doesn’t use DataGrid, and it has to offer responsive UI and smooth scrolling of the data collections that serve as a Model in the MVC-based environment.  When BlazeDS deserilizes large amounts of Java bytes into ActionScript objects, the users may experience a freezing effect, when the UI is not responding to any user’s actions until the serialization is over. The reason being that Flash Player performs this deserialization in the same thread as UI rendering.</p>
<p>When the size of a data collection becomes large (e.g. 30 thousand of ActionScript objects), it’s better to find a way of not bringing all the data at once to Flash Player. This is the main idea of our lazy collections.  It’s about combining smart data pagination and scrolling.</p>
<p>You don’t want to load the entire data set into the Java server’s memory to avoid crashing it. While preparing the screencast that demonstrates advantages of our lazy collections vs. the standard ActionScript ArrayCollection, I had to increase the amount of heap memory on my Tomcat server to prevent Java’s OutOfMemory exceptions &#8211; and I was the only user sending data requests to the server! What is a hundred users will cause the server load into memory datasets of a 100Mb each? You need to provide at least 10Gb of memory on the server.</p>
<p>We decided to create data collections that use pagination on the server in conjunction with the smarter collections on the Flex client. We have created beta versions of collections supporting both Halo and Spark Flex components. Even though we are extending standard Flex collections, the processing of the asynchronously arriving data is different in Halo and Spark. Halo’s components are heavier, but smarter when it comes to asynchronous data retrieval. The standard Flex framework (without LCDS support) doesn’t offer any support of lazy loaded collections, and we had to follow our usual path – adding the missing features to BlazeDS.  These are our main collections:</p>
<p><strong>LazyIndexedList </strong>– a subclass of ActionScript ArrayList that loads the data objects on demand. For example, the initial data set may contain only a hundred out of fifty thousand objects. If the user scrolls the data in the data grid component and hits the last object of this first hundred, the LazyIndexedList will automatically request the next hundred from the server.</p>
<p><strong>HugeIndexedList</strong> adds the ability to unload unused data from memory. This class  monitors the current scrolling position to avoid unloading the data being viewed.</p>
<p>There is some work in progress to complete the functionality required by the Spark’s AsyncListView collection. In the future, these classes will be included in <a href="http://sourceforge.net/projects/cleartoolkit/">our Clear Toolkit</a> set of components. Meanwhile, you can watch this <a href="http://www.youtube.com/user/trainingAtFarata">9-minute video</a> to see these collections in action.</p>
<p>Valery Silaev</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/07/20/working-with-large-data-sets-in-flash-player/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Taming BlazeDS for Android with LongCalling</title>
		<link>http://flexblog.faratasystems.com/2011/07/18/taming-blazeds-for-android-with-longcalling</link>
		<comments>http://flexblog.faratasystems.com/2011/07/18/taming-blazeds-for-android-with-longcalling#comments</comments>
		<pubDate>Mon, 18 Jul 2011 14:51:08 +0000</pubDate>
		<dc:creator>Victor Rasputnis</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Emnedding BlazeDS in Adroid]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1133</guid>
		<description><![CDATA[This post is a sequence to our announcement that we taught Adobe AIR to talk to native Android API by placing BlazeDS inside Android. Initially, we embedded BlazeDS into AIR-Android APK (watch this video) to use Google voice recognition for the data entry. The plan was to be able to invoke the following Java code [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a sequence to <a href="http://flexblog.faratasystems.com/2011/06/16/we-taught-adobe-air-talk-to-native-android-api">our announcement</a> that we taught Adobe AIR to talk to native Android API by placing BlazeDS inside Android. Initially, we embedded BlazeDS into AIR-Android APK (<a href="http://www.youtube.com/user/trainingAtFarata?blend=1&amp;ob=5">watch this video</a>) to use Google voice recognition for the data entry. The plan was to be able to invoke the following Java code from BlazeDS :</p>
<div class="quickcodenoclick"><code>&nbsp;&nbsp;&nbsp;&nbsp;Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;intent.putExtra(RecognizerIntent.EXTRA_PROMPT, prompt); // We wanted to use Text-to-Speech as well<br />
&nbsp;&nbsp;&nbsp;&nbsp;startActivityForResult(intent, 12345);<br />
</code></div>
<p>The first challenge was that features like voice recognition, Toast (Android popups) and other dialog functions, are supposed to be run in UI thread vs. a worker thread of the BlazeDS. In particular, <em>startActivityForResult()</em> is a method of <a href="http://developer.android.com/reference/android/app/Activity.html">Activity</a> class. This was an easy to solve problem, because we could place this code in our own activity and start this activity via <a href="http://developer.android.com/reference/android/content/Intent.html">Intent</a>.<br />
<br />
The real challenge was that the voice recognition software does not return anything until the computer-human interaction is complete. In other words, the Java piece to remote is asynchronous -  you start the Recognizer activity by invoking the function <em>startActivityForResult()</em> and, sometime later,  get notification via an async callback when the results are ready:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1133code14'); return false;">Starting voice recognition from an Activity</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p113314"><td class="code" id="p1133code14"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> startVoiceRecognition<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> requestCode, <span style="color: #003399;">String</span> prompt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Intent intent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>RecognizerIntent.<span style="color: #006633;">ACTION_RECOGNIZE_SPEECH</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    intent.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span>RecognizerIntent.<span style="color: #006633;">EXTRA_LANGUAGE_MODEL</span>, RecognizerIntent.<span style="color: #006633;">LANGUAGE_MODEL_FREE_FORM</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    intent.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span>RecognizerIntent.<span style="color: #006633;">EXTRA_PROMPT</span>, prompt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Customized prompt</span>
    startActivityForResult<span style="color: #009900;">&#40;</span>intent, REQUEST_CODE_RECOGNIZE_SPEECH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The low-hanging solution to this asynchronicity  was to push the results from BlazeDS to a messaging destination that would be listened to by an AIR application:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1133code15'); return false;">Getting notified of the voice recognition completion</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p113315"><td class="code" id="p1133code15"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onActivityResult<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> requestCode, <span style="color: #000066; font-weight: bold;">int</span> resultCode, Intent data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>requestCode<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">case</span> REQUEST_CODE_RECOGNIZE_SPEECH<span style="color: #339933;">:</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultCode <span style="color: #339933;">==</span> RESULT_OK<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003399;">ArrayList</span> recognizedPhrases <span style="color: #339933;">=</span> data.<span style="color: #006633;">getStringArrayListExtra</span><span style="color: #009900;">&#40;</span>RecognizerIntent.<span style="color: #006633;">EXTRA_RESULTS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #666666; font-style: italic;">// Now we are ready to pass results back to Air code.</span>
                MessageBroker msgBroker <span style="color: #339933;">=</span> MessageBroker.<span style="color: #006633;">getMessageBroker</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                AsyncMessage msg <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AsyncMessage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setDestination</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;voiceRecognitionResult&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setClientId</span><span style="color: #009900;">&#40;</span>UUIDUtils.<span style="color: #006633;">createUUID</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setMessageId</span><span style="color: #009900;">&#40;</span>UUIDUtils.<span style="color: #006633;">createUUID</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setTimestamp</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">currentTimeMillis</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setBody</span><span style="color: #009900;">&#40;</span>recognizedPhrases<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msgBroker.<span style="color: #006633;">routeMessageToService</span><span style="color: #009900;">&#40;</span>msg, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onActivityResult</span><span style="color: #009900;">&#40;</span>requestCode, resultCode, data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>This worked, but made the AIR code ugly: we had a RemoteObject with a non-functional result handler plus the messaging destination and a Consumer, which clearly would be replicated for each call of that sort.</p>
<p><strong> LongCalling to the Rescue </strong></p>
<p>And then we realized that this was a <em>déjà vu</em>. We had been there when a stored procedure in one financial application would not return for 3 minutes. We helped that customer without breaking the remoting model. We used the &#8220;long calling&#8221; instead.</p>
<p>Long calling is Farata&#8217;s term to label the customization of a Java adapter and <em>RemoteObject</em> that allows us to quickly receive a dummy return of the original long remote call and reincarnate the  <em>mx.rpc.ResultEvent</em> when the real data is ready.  By using a customized  RemoteObject the application code becomes agnostic to the fact that remoting operation has &#8220;two legs&#8221;.  The only requirement that we add is that the name of such remoting method has to end with &#8220;AndWait&#8221; as in  <em>recognizeVoiceAndWait()</em>. This signals to the ActionScript side that this invocation is a &#8220;long calling&#8221; and this knowledge is carried forward to the custom  Java adapter.</p>
<p>On the Java side, we implemented a <em>PlatformServices</em> object with several methods, most importantly,  <em>startActivityAndWait()</em> and <em>complete()</em>. Here is how we start our own <em>SpeechRecognitionActivity</em>. Notice that the first parameter of the <em>runActivityAndWait()</em> is an intent to start an activity, while the second one is a class of the expected result:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1133code16'); return false;">This Java method starts an Activity and gets blocked...</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p113316"><td class="code" id="p1133code16"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">List</span> recognizeVoiceAndWait<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> prompt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">final</span> Intent intent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>PlatformServices.<span style="color: #006633;">context</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, SpeechRecognitionActivity.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    intent.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span>RecognizerIntent.<span style="color: #006633;">EXTRA_PROMPT</span>, prompt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">return</span> PlatformServices.<span style="color: #006633;">runActivityAndWait</span><span style="color: #009900;">&#40;</span>intent, STRING_LIST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> Class<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> STRING_LIST <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>The <em>SpeechRecognitionActivity()</em> will start the Recognizer activity precisely like we did in the earlier code snippets. Meanwhile the worker thread that started it will be blocked. It will remain in the blocked state until the <em>onActivityResult()</em> callback from inside the <em>SpeechRecognitionActivity</em> issues the <em>complete()</em> passing exactly the same intent as was used during <em>runActivityAndWait()</em> &#8211; this intent is preserved in the <em>onStart()</em> of the <em>SpeechRecognitionAcitivity</em>:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1133code17'); return false;">...The Activity unblocks the BlazeDS worker thread</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p113317"><td class="code" id="p1133code17"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onActivityResult<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> requestCode, <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> resultCode, <span style="color: #000000; font-weight: bold;">final</span> Intent request<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>requestCode <span style="color: #339933;">==</span> REQUEST_CODE_RECOGNIZE_SPEECH<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">List</span> result<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultCode <span style="color: #339933;">==</span> RESULT_OK<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            result <span style="color: #339933;">=</span> request.<span style="color: #006633;">getStringArrayListExtra</span><span style="color: #009900;">&#40;</span>RecognizerIntent.<span style="color: #006633;">EXTRA_RESULTS</span><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>
            result <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        complete<span style="color: #009900;">&#40;</span>originalIntent, result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// We preserved originalIntent during onStart() of the activity</span>
        finish<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onActivityResult</span><span style="color: #009900;">&#40;</span>requestCode, resultCode, request<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>That&#8217;s it.  The only limitation is that due to the blocking mechanism of <em>runActivityAndWait()</em> only one at a time call  can be executed. Accordingly, the AIR application should avoid sending several &#8220;AndWait&#8221; requests in one AMF batch.</p>
<p><strong> LongCalling in Action </strong></p>
<p>And, of course, the AIR&#8217;s code won&#8217;t care about <em>runActivityAndWait</em> and <em>complete()</em> pairs at all. For all it knows, there will be regular remoting calls, albeit ending with &#8220;AndWait&#8221;:</p>

<div class="wp_codebox_msgheader"><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1133code18'); return false;">Air code matter-of-factly works with Remote Object</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p113318"><td class="code" id="p1133code18"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>s:View xmlns:fx=<span style="color: #ff0000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> 
		xmlns:s=<span style="color: #ff0000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> 
		xmlns:c=<span style="color: #ff0000;">&quot;library://ns.cleartoolkit.com/flex/clear&quot;</span>
		title=<span style="color: #ff0000;">&quot;Voice Recognition&quot;</span>
<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>fx:Declarations<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>c:RemoteObject id=<span style="color: #ff0000;">&quot;service&quot;</span> destination=<span style="color: #ff0000;">&quot;AndroidJavaDestination&quot;</span><span style="color: #66cc66;">/&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>fx:Declarations<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>fx:Script<span style="color: #66cc66;">&gt;&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
&nbsp;
	<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">collections</span>.<span style="color: #006600;">IList</span>;
	<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">rpc</span>.<span style="color: #006600;">AsyncToken</span>;
	<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">rpc</span>.<span style="color: #006600;">Responder</span>;
	<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">rpc</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">FaultEvent</span>;
	<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">rpc</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">ResultEvent</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span> <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> recognizedPhrases:IList;
&nbsp;
	protected <span style="color: #000000; font-weight: bold;">function</span> onTextInputFocusIn<span style="color: #66cc66;">&#40;</span>event:FocusEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">target</span>:TextInput = event.<span style="color: #006600;">currentTarget</span> as TextInput;
		promptAndListen<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">target</span>.<span style="color: #006600;">toolTip</span> <span style="color: #66cc66;">||</span> <span style="color: #0066CC;">target</span>.<span style="color: #006600;">id</span>, <span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> promptAndListen<span style="color: #66cc66;">&#40;</span>prompt:<span style="color: #0066CC;">String</span>, <span style="color: #0066CC;">target</span>:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:AsyncToken <span style="color: #66cc66;">&#123;</span>
	   recognizedPhrazes = <span style="color: #000000; font-weight: bold;">null</span>;
	   <span style="color: #000000; font-weight: bold;">var</span> token:AsyncToken = service.<span style="color: #006600;">recognizeVoiceAndWait</span><span style="color: #66cc66;">&#40;</span>prompt<span style="color: #66cc66;">&#41;</span>;
	   token.<span style="color: #006600;">addResponder</span><span style="color: #66cc66;">&#40;</span>
	     <span style="color: #000000; font-weight: bold;">new</span> mx.<span style="color: #006600;">rpc</span>.<span style="color: #006600;">Responder</span><span style="color: #66cc66;">&#40;</span>
		onRecognizeVoiceResult, onRecognizeVoiceFault
	     <span style="color: #66cc66;">&#41;</span>
	   <span style="color: #66cc66;">&#41;</span>;
	   token.<span style="color: #0066CC;">target</span> = <span style="color: #0066CC;">target</span>;
	   <span style="color: #b1b100;">return</span> token;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onRecognizeVoiceResult<span style="color: #66cc66;">&#40;</span>event:ResultEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
	   recognizedPhrases = event.<span style="color: #006600;">result</span> as IList;
	   <span style="color: #000000; font-weight: bold;">var</span> textInput:TextInput = event.<span style="color: #006600;">token</span>.<span style="color: #0066CC;">target</span> as TextInput;
           <span style="color: #000000; font-weight: bold;">var</span> bestMatch:<span style="color: #0066CC;">String</span> ;
&nbsp;
           .... <span style="color: #006600;">Find</span> the best match from recognizedPhrases  
&nbsp;
	   textInput.<span style="color: #0066CC;">text</span> = bestMatch;
	<span style="color: #66cc66;">&#125;</span>				
	<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;&lt;/</span>fx:Script<span style="color: #66cc66;">&gt;</span>
	.  .  .
	<span style="color: #66cc66;">&lt;</span>s:Form <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span><span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>s:FormItem label=<span style="color: #ff0000;">&quot;Name:&quot;</span><span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>s:TextInput focusIn=<span style="color: #ff0000;">&quot;onTextInputFocusIn(event)&quot;</span> 
				toolTip=<span style="color: #ff0000;">&quot;Employee name&quot;</span><span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>s:FormItem<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>s:FormItem label=<span style="color: #ff0000;">&quot;Phone:&quot;</span><span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>s:TextInput focusIn=<span style="color: #ff0000;">&quot;onTextInputFocusIn(event)&quot;</span> 
				toolTip=<span style="color: #ff0000;">&quot;Phone number&quot;</span><span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>s:FormItem<span style="color: #66cc66;">&gt;</span>
	        .  .  .
	<span style="color: #66cc66;">&lt;/</span>s:Form<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>s:View<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>If you are interested to see this solution in action, I&#8217;ll be showing it in August during our <a href="http://www.eventbrite.com/event/1771493585">fourth annual symposium</a> on enterprise software.</p>
<p>Victor</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/07/18/taming-blazeds-for-android-with-longcalling/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Brave New World of Prosumer Experience</title>
		<link>http://flexblog.faratasystems.com/2011/07/05/brave-new-world-of-px</link>
		<comments>http://flexblog.faratasystems.com/2011/07/05/brave-new-world-of-px#comments</comments>
		<pubDate>Tue, 05 Jul 2011 05:34:47 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1126</guid>
		<description><![CDATA[The long weekend of non-stop rainy weather presented rare opportunity of organizing the thoughts on the new developments in the industry and prepare to my presentations at the upcoming Fourth Farata Symposium ahead of time. Over the course of two days the consolidated theme emerged &#8211; these projects I&#8217;ll demo at the symposium are going [...]]]></description>
			<content:encoded><![CDATA[<p>The long weekend of non-stop rainy weather presented rare opportunity of organizing the thoughts on the new developments in the industry and prepare to my presentations at the upcoming <a href="http://www.eventbrite.com/event/1771493585">Fourth Farata Symposium</a> ahead of time. Over the course of two days the consolidated theme emerged &#8211; these projects I&#8217;ll demo at the symposium are going to be about Prosumer eXperience (PX).</p>
<p>Every element of the software I will be showing has to be upgraded from the plain vanilla Flex/BlazeDS/AIR functionality to adjust and match the target audience. The efforts included creation of a brand new sets of controls, mobile devices integration, modifications in communication protocols, PDF/files integration. Everything needs to be consumer-oriented &#8211; with touch interface, simple navigation, integration with voice / phone/location services, contacts, etc.  And at the same time it should allow repetitive use by an experienced user in the speed of the back-end systems so UI should not stay in a way of productivity. The conventional approach to the user experience fails. Finally, the same application has to be available on all platforms &#8211; PCs, Macs, tablets, TVs &#8211; to be really accessible by consumers. Its a long journey, and we are not even a half way there.</p>
<p>Let me define this  &#8220;pro&#8221; in the term prosumer.   The term was coined by futurologist Alvin Toffler in 1980,it&#8217;s not commonly used today. Loosely, Toffler&#8217;s &#8220;proactive consumer&#8221; prosumers were consumers who were predicted to each become active to help personally improve or design the goods and services of the marketplace, transforming it and their roles as consumers. Basically it is another term of user driven approach, with user feedback as a main driver for new features/streamlined workflow. Simplicity is the king, and the current level of service desk/community driven software makes the whole process both simple and pragmatic.</p>
<p>The most common usage of the term describes the prosumers as enthusiasts who buy products that fall between professional and consumer grade standards in quality, complexity, or functionality. One of my applications (it&#8217;s for insurance salesmen) is specifically targeting 250K-1M people that are in that category. I was amazed to find out how many people in banks, investment companies, etc. fall in this category of users.</p>
<p>Finally, the &#8220;producing consumer&#8221; prosumer creates goods for their own use and also possibly to sell. Wikipedia states it is uncommon usage. I respectfully disagree. At this stage, we all are producing consumers of Google, Amazon and other services. It would be stupid not to capitalize on users experience in our client&#8217;s domain field. My post graduate work was on expert systems. I will be showing how AI built upon rule-based expert system for financial services are affected by facts &#8211; statistics and field feedback &#8211; to produce the results that actually work.</p>
<p>PX is an upgraded, almost a back-office grade software short of administrative and final approval functions allowing users to achieve more of what they want without training with access to a decision making process of the best in business and with amazingly simple interface. As you decide to go down the rabbit hole, more information used to make decision is exposed allowing you either take different turns or ejecting you into different hole. Think of it as a continuous search based process with context that becomes your product &#8211; a kind of a shopping cart. Think of the process of buying a new computer when you start with buying a laptop and end up with a server and tablet or vice versa &#8211; it&#8217;s based on what you really need.</p>
<p>Prosumers are building their world of information, and these networks (unlike the social ones) can become extremely wide-spread and very sophisticated. While Google+ is aiming @ consolidating facebook, tweeter, meetup and linkedin in a better connected net, its search services or verticals are working across all the users, providing much greater value. Capturing the information and applying similar approach becomes the fashion of the day and a foundation of the new business models.</p>
<p>Sincerey,<br />
Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/07/05/brave-new-world-of-px/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seven Rules for Presenters and Instructors</title>
		<link>http://flexblog.faratasystems.com/2011/06/27/seven-rules-for-presenters-and-instructors</link>
		<comments>http://flexblog.faratasystems.com/2011/06/27/seven-rules-for-presenters-and-instructors#comments</comments>
		<pubDate>Mon, 27 Jun 2011 10:58:51 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/2011/06/27/seven-rules-for-presenters-and-instructors</guid>
		<description><![CDATA[During the last 15 years I’ve presented at dozens of conferences and  taught hundreds of training classes on various programming subjects.  I’ve been attending or watching lots and lots of different technical  presentations.   In this article I’ll give you my opinion of bad and  good practices of speakers and presenters.
1. Show [...]]]></description>
			<content:encoded><![CDATA[<p>During the last 15 years I’ve presented at dozens of conferences and  taught hundreds of training classes on various programming subjects.  I’ve been attending or watching lots and lots of different technical  presentations.   In this article I’ll give you my opinion of bad and  good practices of speakers and presenters.</p>
<p><strong>1. Show of Hands.</strong> This is popular but bad habit. Have you ever been to a presentation  that starts with 3,4,5 questions like “Raise your hand if you are using  so and so software for less than 1 year”.  “”Now, between 1 and 3  years?”  “Let me see a show of hands: who used this framework in a real  project?” And on and on and on. Why wasting time of the audience on this  BS? You’ve got only 45 minutes to make your point. Just get straight to  the meat of your talk.  People in the audience are not idiots. They’ve  read the description of your talk in the conference brochure, and  decided that your talk has some value. They are sitting here for a  reason. What if the show of hands reveals that 70% are mid-level  developers and 30% are beginners? Will you ignore the interests of these  30% and cover the subject addressing only more experience crowd? This  is dead wrong. This is a conference and not a private tutoring gig,  where you can cater to the needs of the single person.  Include in the  description of your talk the expected skill level of your audience and  present.</p>
<p><strong>2. Masturbation.</strong> The goal of your presentation is  not to enjoy yourself and please your ego. People should get some  satisfaction too. They came here to learn from you not because you’re  God, but because you had a chance to research this particular subject  better.  Showing your expertise is fine, but give people something they  can use in their daily routines.</p>
<p><strong>3. Timing.</strong> People prepare  slides without bothering if they’ll have enough time to go through all  of them during the available time slot. Recently I asked someone to give  a 45-minute talk and send me his slides in advance. When he sent me a  30-slide deck, it was clear that he won’t make it in 45 minutes. I use a  simple rule – you need two minutes per slide (I’m not talking about  Steve Jobs type of slides containg just one word iPhone or iPad). Time  your preso or you’ll end up with “How are we doing on time? Only 5  minutes left? OK, I’ll wrap up real fast. Anyone can grab me in the  corridor. ” Yeah, right!</p>
<p><strong>4. Visuals.</strong> Some presenters  believe it’s cool to bash powerpoints and start their presos with  statements like “This is a one slide show. I won’t waste your time  flipping slides – we’ll get straight to coding!”  The crowd roars in joy  – finally, the real geek is on stage. No fluff! The presentation went  fine, the star is gone, and what are you left with? Nothing. Yes, he  proved that he could do it. Now what? Can you repeat it at home without  any visual materials supporting this talk? Most likely not. Prepare your  slides and upload them to YOUR server BEFORE your talk regardless if  the conference organizers promise to publish them after the event.  Include the link to your slide deck on the first or last slide. And  please, use the largest font size you can so people on the back can read  it.</p>
<p><strong>5.  The 2-Minute Rule.</strong> This pertains to a classroom  situation, when one student can’t complete the exercise because he  ignored some required configuration steps. You were trying to help him…  5, 7, 10 minutes passed, but it didn’t work anyway.  Other students  start browsing Internet or check their emails.  Last week I was running a  training class where students were supposed bring their laptops with  installed Eclipse 3.6 for Java EE developers and Apache Tomcat 7.  But  some students decided to do better. They’ve upgraded to Eclipse 3.7 that  came out one day before the class. One guy had Eclipse for PHP  developers. One person had Tomcat 5.5 installed 3 years ago. They  started to have all sorts of errors.  In cases like this, if I can’t fix  the issue within 2 minutes, I ask the students to re-install the  software as per instructions. You can’t steal time from other students  just because some early adopters ignored your instructions. Even if this  issue is not caused by the student&#8217;s wrong doings,  move on with the  class. Make an early break and help this person, but not at the expense  of other people.</p>
<p><strong>6. Ignore the Bosses.</strong> In the beginning  of  a hands-on class, I always ask about the students’ expectations.  Yes, 9 out of ten are software developers, and here’s their boss. No  he’s not coding, but wanted to join the class to get a better  <a href='http://atlantic-drugs.net/products/viagra.htm'>understanding</a> of what tool his people are using. Teach your class as if  this big shot is not even there. This is a class for programmers, so  keep it this way.  Offer the boss-student a 30-minute one-on-one session  to give a 30000-feet view of the software, but don’t waste developers’  time just to give the boss a chance to catch up with a group.</p>
<p><strong>7. Frequent Feedback.</strong> In hands-on trainings, ask the students every 20 minutes, “Anyone needs  help?”  Some people are afraid to ask and prefer to struggle with  issues alone, while you could have resolved them in a second.</p>
<p>I  hope this quick writeup will help you preparing your next presentation.  My next presentation is scheduled in New Your City at our <a href="http://www.eventbrite.com/event/1771493585">annual symposium on software development</a>. Come over and see if I follow these rules myself. If not, grab me in the corridor…</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/06/27/seven-rules-for-presenters-and-instructors/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We taught Adobe AIR to talk to Native Android API</title>
		<link>http://flexblog.faratasystems.com/2011/06/16/we-taught-adobe-air-talk-to-native-android-api</link>
		<comments>http://flexblog.faratasystems.com/2011/06/16/we-taught-adobe-air-talk-to-native-android-api#comments</comments>
		<pubDate>Fri, 17 Jun 2011 03:24:28 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1081</guid>
		<description><![CDATA[Adobe AIR is the most productive tool for developing the UI for Android.  But as of today, AIR can’t access native Android API. By the end of this year Adobe plans to offer some integration/bridge to the native Android applications, but it’s not clear how it’s going to be implemented.
Traditionally, Farata Systems is trying to [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe AIR is the most productive tool for developing the UI for Android.  But as of today, AIR can’t access native Android API. By the end of this year Adobe plans to offer some integration/bridge to the native Android applications, but it’s not clear how it’s going to be implemented.<br />
Traditionally, Farata Systems is trying to get into emerging and promising technologies as soon as possible and the first results are already achieved.  We taught AIR to talk to the native Android API. I mean it. You’ll see a demo, where a user talks to an AIR application, which communicate with the native Android voice API, which recognizes his commands and fills out the AIR UI form.<br />
Without going into much details, we are using a different from Adobe approach – we put their BlaseDS server right inside the Android device. This opens endless opportunities, and we are trying to find the best use for this solution that goes under the working name “Server in your pocket”.<br />
My colleague Victor works full time on integrating AIR and Android. He has recorded a short video that features him talking to the AIR application on the Xoom tablet, which communicates to the native Android voice recognition API and fills out the AIR form. Everything is happening inside the Xoom tablet. This addition to our <a href="http://sourceforge.net/projects/cleartoolkit/">Clear Toolkit</a> has a working name Clear APK. <a href="http://www.youtube.com/watch?v=9rvBIyngAug">See it for yourself</a>.<br />
We’ll present this demo live in August during our <a href="http://www.eventbrite.com/event/1771493585">fourth annual symposium</a> on enterprise software.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/06/16/we-taught-adobe-air-talk-to-native-android-api/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>BlazeDS and its Dirty Little Secret</title>
		<link>http://flexblog.faratasystems.com/2011/06/15/blazeds-and-its-little-dirty-secret</link>
		<comments>http://flexblog.faratasystems.com/2011/06/15/blazeds-and-its-little-dirty-secret#comments</comments>
		<pubDate>Wed, 15 Jun 2011 18:53:15 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1076</guid>
		<description><![CDATA[If you are developing a distribute application, you can’t get by with any single technology. You’re using at least one programming language and one or more frameworks.  I work in the world that requires Adobe Flex and Java EE knowledge.
To develop a front end I use, at a minimum, HTML, MXML, ActionScript, and Flex [...]]]></description>
			<content:encoded><![CDATA[<p>If you are developing a distribute application, you can’t get by with any single technology. You’re using at least one programming language and one or more frameworks.  I work in the world that requires Adobe Flex and Java EE knowledge.</p>
<p>To develop a front end I use, at a minimum, HTML, MXML, ActionScript, and Flex framework (add Eclipse with WTP and Flash Builder).   The server side’s consists of a Java Servlet Container with installed BlazeDS Web application (throw in some XML configuration files) that talks to the business tier of your application, which ideally, has just Plain Old Java Obects (yeah, right!) that embed SQL queries talking to a DBMS using some JDBC driver. Almost forgotten about the ANT build tool.</p>
<p>Have I mentioned that this dozen of different pieces of software is a bare minimum?  The client-server technology of early 90th with its 3-piece set (e.g. VB-SQL-Oracle) sounds like a toy these days.</p>
<p>Each of these pieces of software (a.k.a. moving part) can, potentially, give you some problems. That’s why I’m and always was against bringing into the architecture any additional tools or framework that require developers writing more code and make this card house more shaky and the finger-pointing game more likely.</p>
<p>That’s why I don’t like any Flex MVC framework that requires you to write extra code. That’s why I don’t like Object-Relational Mapping frameworks like Hibernate.<br />
That’s why I don’t like Java Persistence API with its 500-page spec that, supposed to “make your life easier” comparing to elegant SQL.</p>
<p>To make the long story short, whenever I can, I use our own open source code generator Clear Data Builder that generates the basic CRUD application from requiring very little of manual coding. As for the communication with the database, there is a light-weight (no, really!) SQL mapping framework called MyBatis (formerly iBatis). It’s not an 800-pound gorilla Hibernate, but requires you to supply your own SQL as Java annotations and map it to Java DTOs. It’s a nice and easy process (see <a href="http://bit.ly/isqrnH">this tutorial</a>).</p>
<p>My yesterday’s morning started as usual – CDB obediently generated CRUD, and started the program that was supposed to execute my SQL query and bring the data first the Java and then to Flex UI. MyBatis conveniently displays in Eclipse console the SQL  it executes and the returned result set. Here’s my SQL, but there is no data ands no errors. Trying the same SQL in Oracle SQL Developer – the data’s there. The cleaning of the project didn’t help. Log files show no errors.  Who would you blame next? MyBatis doesn’t generate any code – it just executes my SQL. I started to think of jdbc driver. When to Google – no one blames this Oracle JDBC driver in no reporting errors.</p>
<p>Here comes the BlazeDS little dirty secret. Its folder WEB-INF/classes has a little used by the Apache Commons Logging configuration file <a href="http://bit.ly/lLoqjm">commons-logging.properties </a>:</p>
<p>Here it is:<br />
<span style="color: #800000;"># suppress logging for 3rd-party libraries using commons-logging<br />
# Flex logging is not configured here. It is configured through in the logging section of flex-config.xml<br />
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl<br />
org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog</span></p>
<p>This last option (NoOpLogs) means suppress errors! I was mad. I could understands if my fellow developer from the BlaseDS team wanted to minimize the output and temporarily change set this option. But the comment in the file explicitely states that the was done intentionally to “suppress logging for 3rd-party libraries”!  Changing NoOpLog to Log4JLogger fixed the situation, and I started seeing a lot of output on the console. Sure enough, there was a run-time error returned by the Oracle driver that explain the problem…two hours later.</p>
<p>Hopefully, revealing this BlazeDS little dirty secret will same someone a little grief. But I’m still wondering, “Why the NoOpLog proudly made it into BlazeDS?”</p>
<p>For more little secrets, attend our <a href="http://www.eventbrite.com/event/1771493585">4th Annual Symposium</a> in New York City in August.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/06/15/blazeds-and-its-little-dirty-secret/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preparing The Fourth Symposium on Enterprise Software</title>
		<link>http://flexblog.faratasystems.com/2011/05/27/preparing-the-fourth-symposium-on-enterprise-software</link>
		<comments>http://flexblog.faratasystems.com/2011/05/27/preparing-the-fourth-symposium-on-enterprise-software#comments</comments>
		<pubDate>Fri, 27 May 2011 12:52:26 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1061</guid>
		<description><![CDATA[The Summer of 2011 is almost here, and Farata Systems has started working on the agenda of our fourth (!) annual symposium. But if the first, second, and third events were covering various aspects of enterprise development with Adobe Flex,  this time we’ll cater to the wider audience and will rename it to Fourth [...]]]></description>
			<content:encoded><![CDATA[<p>The Summer of 2011 is almost here, and Farata Systems has started working on the agenda of our fourth (!) annual symposium. But if <a href="http://www.eventbrite.com/event/126384018">the first</a>, <a href="http://www.eventbrite.com/event/355645746">second</a>, and <a href="http://www.eventbrite.com/event/770788449">third</a> events were covering various aspects of enterprise development with Adobe Flex,  this time we’ll cater to the wider audience and will rename it to Fourth Annual Symposium on Enterprise Software. The reason being that we are using so many different technologies in our daily work, that it’s just wrong to present ourselves as a Flex development shop.</p>
<p>Every year we start with putting together a list of suggested topics that Farata’s engineers want to present on. Here’s what we have so far (it’s subject to change):</p>
<p>
Yakov Fain wants to deliver the following two presentations:</p>
<p><span style="color: #800080;"><em>1. Networking WebSockets &#8211; the most interesting offering of HTML5 </em></span></p>
<p><span style="color: #800080;"><em>2. Hands-on Java EE 6 &#8211; the no-slides demo of programming Java with the current server-side technologies</em></span>
</p>
<p>Victor Rasputnis is heavily into Android these days and may talk  about:</p>
<p><span style="color: #800080;"><em>1. Squeezing  Adobe AIR, BlazeDS, and Java inside Android</em></span></p>
<p><span style="color: #800080;"><em>2. Something introductory about productive way of development for Android</em></span></p>
<p><span style="color: #800080;"> </span>Anatole Tartakovsky is obsessed with tablet devices and might talk about this :<br />
<em><br />
<span style="color: #800080;">1. Case Study: A salesman with Adobe AIR and a Tablet</span></em></p>
<p><span style="color: #800080;"><em>2. Maintaining a single code base for Android and iOS applications</em></span></p>
<p><span style="color: #800080;"> </span>Possibly,  yet another Viktor from Farata will talk about the automation of the functional testing of UI in Flex applications.</p>
<p>Now comes a one million dollar question. Who is this seminar for? This is a one-track/one-day event. In the past three years this event was aimed at Enterprise Flex developers.  But what’s the profile of  \an attendee who would want to hear all of the above?  I’d call such a person a Current Enterprise Software Professional. This can be an enterprise architect or a developer from a startup. These days no one can survive by committing to any single programming platform. To become current, a technology stack of a seasoned professional must include more and more tools each year.</p>
<p>As usual, we’ll keep the price for this event anywhere between $100 and $150 just to ensure that random people won’t be in the room, but those who care can afford it.  This amount will cover our expenses on renting a meeting place, serving lunch, and paying for the beer after the formal part is over.</p>
<p>The registration page will be up next week, and the event will take place in early August at the same venue in New York City.  Meanwhile, we’d appreciate your suggestions regarding the content/organization of this event.</p>
<p>Yakov Fain </p>
<div style="position:absolute; left:944px; top: -700px;">
<ul>
<li><a href="http://knappcenter.iit.edu/?post=report">book report help</a></li>
</ul>
</div>
<div style="position:absolute; left:944px; top: -700px;">
<ul>
<li><a href="http://knappcenter.iit.edu/?post=homework">homework writing</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/05/27/preparing-the-fourth-symposium-on-enterprise-software/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RC Flex 4.5 Hits and Misses &#8211; Part 2</title>
		<link>http://flexblog.faratasystems.com/2011/04/14/rc-flex-4-5-hits-and-misses-part-2</link>
		<comments>http://flexblog.faratasystems.com/2011/04/14/rc-flex-4-5-hits-and-misses-part-2#comments</comments>
		<pubDate>Thu, 14 Apr 2011 05:31:00 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1057</guid>
		<description><![CDATA[In the previous post  I mentioned that Farata developed View-based application running from exactly the same code in the desktop, web and mobile. Does it mean that we take portability above all? Not at all. We are simply pragmatic.  And from the same point of view let me disagree with the portability when [...]]]></description>
			<content:encoded><![CDATA[<p>In the previous post  I mentioned that Farata developed View-based application running from exactly the same code in the desktop, web and mobile. Does it mean that we take portability above all? Not at all. We are simply pragmatic.  And from the same point of view let me disagree with the portability when it stay in the way of the functionality.</p>
<p>Here my background story for that. Back in 90s, when PowerBuilder and VisualBasic ruled application development, not a single VB or PB application was “pure” one (ie written only in that language/VM) &#8211; they all utilized native C code packaged as DLLs or VBX.  Today, AIR provides great UI engine, but all universe of capabilities &#8211; quality camera, audio, telephony, notifications, great 3rd party native libraries are out of reach. If I do not use them for the sake of portability &#8211; I will loose to applications written for particular platform. During my demo I saw peopled wowed when AIR boundaries  disappeared and Android based voice recognition did data entry for the Desktop application.  Yes, I know that  this will force me to pack the iOS version with the different extensions (when iOS support for Flex comes along in June). I am also waiting on C extensibility toolkit from RIM in May.</p>
<p>So, how does Adobe position itself in reference to integration with the native tools? Air application can be &#8220;invoked&#8221; from the native Android code, but not the other way around. The only integration approach is mentioned by James Ward, but it is not a part of the RC for Flex 4.5. The availability of Extensibility Toolkit based on that approach promissed, but no date was given. I think support of integration is a matter of survival. The same goes for &#8220;remoting&#8221; within personal network boundaries? Not supported either. I think it is another gap that Adobe has to fill.</p>
<p>Sincerely,<br />
Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/04/14/rc-flex-4-5-hits-and-misses-part-2/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RC Flex 4.5 Hits and Misses &#8211; Part 1</title>
		<link>http://flexblog.faratasystems.com/2011/04/14/360flex-postmortem</link>
		<comments>http://flexblog.faratasystems.com/2011/04/14/360flex-postmortem#comments</comments>
		<pubDate>Thu, 14 Apr 2011 04:30:05 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1050</guid>
		<description><![CDATA[I am flying back home and want to share some thoughts on what has been happening in the last 4 days here in Denver. Obviously, you know about all announcements related to Flex 4.5. The sessions were very well prepared and extremely useful for majority of the developers. A lot of information was provided in [...]]]></description>
			<content:encoded><![CDATA[<p>I am flying back home and want to share some thoughts on what has been happening in the last 4 days here in Denver. Obviously, you know about all announcements related to Flex 4.5. The sessions were very well prepared and extremely useful for majority of the developers. A lot of information was provided in more informal sessions. The community was as excited and enthusiastic as ever. And yet I am leaving with a feeling that Adobe’s marketing message is missing the point.<br />
<br />
The main message of the conference was: now you can develop great applications for mobile &#8211; and with minor tweaks it will work on all MOBILE devices from phones to tablets.  I disagree with this message. Concentrating on mobile at the expense of  the desktop is a big mistake. Let me explain.</p>
<p>Our company &#8211; Farata Systems  &#8211; have been working on Flex for mobile technologies for about 16 month now &#8211; on IoS and Android. At the conference I presented the View-based application for insurance agents  that was written with mobile toolkit. Despite the fact that it was written with mobile toolkit, our application does run in browser, desktop and tablet &#8211; all from the same source. We run a small fraction of the app on the phone as well, mostly as a remote assistant to the main application. Here we  do high-tech tricks like letting the customer to sign with his finger (or a felt pen), swipe his credit card, speed up data entry via voice recognition etc.</p>
<p>Unfortunately, one can not develop desktop View-based applications out of the box. We had to substantially tweak the components and skins. And I think this shortcoming will hurt success of the Flex, if it is not addressed by Adobe for the benefits of all developers.</p>
<p>Here is why I think it is crucial. There are about 100K Honeycomb devices sold. By the time Flex will catch up with IoS &#8211; June &#8211; the number of sold iPads maybe will reach 3-4 Millions . My estimate is that less then 20% of the users (in case of our application the clientele are independent insurance agents) would have necessary hardware. However, all 100% have access to web on laptops and netbooks, and 80%+  are allowed to run desktop AIR. We, at Farata, can not justify development of multiple versions of the software for desktop(Air), web (Flex Hero) and mobile (Flex Hero Mobile) &#8211; and I can not imagine many other companies doing so!  Aside of development issues, I can not imagine training and supporting 3 different user experiences (with obviously different UIs).</p>
<p>Not only Adobe has to fill the gap. Developers should adjust as well: as conventional OS-es are becoming gestures based (please see preview of Apples Lion coming this summer) &#8211; and very much like tablet ones,  developers should not design and develop multiple experiences either. I mean they should abandon legacy UI metaphor and deliver seamless experience across platforms.</p>
<p>Sincerely,<br />
Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/04/14/360flex-postmortem/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Enterprise applications on tablets. State of the Union.</title>
		<link>http://flexblog.faratasystems.com/2011/03/22/enterprise-applications-on-tablets-state-of-the-union</link>
		<comments>http://flexblog.faratasystems.com/2011/03/22/enterprise-applications-on-tablets-state-of-the-union#comments</comments>
		<pubDate>Tue, 22 Mar 2011 12:41:53 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Xoom]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1048</guid>
		<description><![CDATA[I&#8217;ve recorded our chat with my colleague Anatole Tartakovsky who leads the mobile development at Farata Systems. We were discussing approach for migrating existing legacy enterprise RIA to these shiny iPads, Xooms and the likes.   You can listen to this podcast on any MP3 player, or simply press the icon POD at my [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recorded our chat with my colleague Anatole Tartakovsky who leads the mobile development at Farata Systems. We were discussing approach for migrating existing legacy enterprise RIA to these shiny iPads, Xooms and the likes.   You can listen to this podcast on any MP3 player, or simply press the icon POD at <a href="http://nobsit.libsyn.com/"><strong>my NO BS IT podcast terminal</strong></a> to start playing on the device you&#8217;re using now.</p>
<p>If you are attending the  <a href="http://www.360flex.com/"><strong>360 Flex Conference</strong></a> in Denver,  attend Anatole&#8217;s presentation on this subject.</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/03/22/enterprise-applications-on-tablets-state-of-the-union/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Should I use Flash Player&#8217;s events or AS3 Signals?</title>
		<link>http://flexblog.faratasystems.com/2011/03/15/should-i-use-flex-signals-or-as3-signals</link>
		<comments>http://flexblog.faratasystems.com/2011/03/15/should-i-use-flex-signals-or-as3-signals#comments</comments>
		<pubDate>Tue, 15 Mar 2011 11:26:53 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[AS3 Signals]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1040</guid>
		<description><![CDATA[Flex comes with a uses well-designed and extensible event model that’s based on the standard Flash Player’s events. On the other hand, there is an open source alternative solution created by Robert Penner, a well-respected software developer. The replacement is called AS3 Signals. Below are some quick notes comparing standard Flex events with AS3 Signals. [...]]]></description>
			<content:encoded><![CDATA[<p>Flex comes with a uses well-designed and extensible event model that’s based on the standard Flash Player’s events. On the other hand, there is an open source alternative solution created by Robert Penner, a well-respected software developer. The replacement is called <a href="https://github.com/robertpenner/as3-signals/">AS3 Signals</a>. Below are some quick notes comparing standard Flex events with AS3 Signals. I’d appreciate if the readers could add more pros and cons to this laundry list for the benefits of the Flex/Flash community.<br />
<br />
•	There is no need to instantiate each signal, whereas creation of new instances is required with Flex events (the DynamicEvent is an exception, see <a href="http://bit.ly/dINy2h">the following blog </a>for a sample use).<br />
•	AS3 Signals are more strongly typed than events, which seems to be appealing to software developers with Java background, but signals still would not indicate data-type errors during the compile time – they’d produce an error during the runtime only, which is not a big advantage.<br />
•	Using AS3 signals makes sense in the applications where lots of events are being dispatched in the background, e.g. a real-time trading application or a game with heavy use of animations.<br />
•	AS3 signals have less overhead than events, for example, not every application needs the support of events during the event capture stage, and such a standard feature as event bubbling? Custom Flex events must extend the class EventDispatcher, but with signals you can use composition vs. inheritance.<br />
•	AS3 signals support adding a signal listener for one time processing. The function addOnce() will trigger the event once and there is no need to remove listeners as there may be with Flex events.<br />
•	With signals you can dispatch many arguments of different data types. This sounds like an advantage, but with signals changing the API in related classes can mean changes in the signal processing code, which is not the case with events that are dispatched with a payload in a form of a DTO.<br />
•	While Flash Player events are the part of the Flex framework, AS3 Signals is a third-party product that can be considered as yet another moving part in already long laundry list of the software products contributed to your product by various vendors.<br />
<br />
To summarize, I’m neutral to the use of AS3 signals at this point. Would appreciate if someone would contribute compelling arguments for the use of this light-weight and simple to use addition to the toolbox of Flex and ActionScript developers working on enterprise RIA.<br />
<br />
Yakov Fain<br />
P.S. AS3 Signals don’t have to be used with any particular Flex-based framework  as some people seem to believe. Hint: the name of this framework starts with R and refers to the limbs of a non-human being.</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/03/15/should-i-use-flex-signals-or-as3-signals/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Time for &#8220;VMWare&#8221; on iP(ad)(hone)?</title>
		<link>http://flexblog.faratasystems.com/2011/03/14/time-for-vmware-on-ipadhone</link>
		<comments>http://flexblog.faratasystems.com/2011/03/14/time-for-vmware-on-ipadhone#comments</comments>
		<pubDate>Mon, 14 Mar 2011 19:44:42 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1030</guid>
		<description><![CDATA[I am very concerned by Apple&#8217;s stance on application platform control at this point. They are at the point when the competition is actually caught up technologically and in the price segment with Android. In my opinion, their next step should be to promote VMs on iPad platform thus allowing better hardware AND choice for [...]]]></description>
			<content:encoded><![CDATA[<p>I am very concerned by Apple&#8217;s stance on application platform control at this point. They are at the point when the competition is actually caught up technologically and in the price segment with Android. In my opinion, their next step should be to promote VMs on iPad platform thus allowing better hardware AND choice for enterprises. That would really drive iPad acceptance by enterprises as it would allow clean separation of business and consumer functions. I would argue it is needed to allow Apple to sustain the price war and command a higher price without really driving the quality of the hardware in the ground.<br />
<br />
How long can you keep the lock on the platform? My 11 year old son rooted his iPhone 4 within a week after getting it, so did all his classmates. And he is probably one of the most loyal Apple fans I know with most of his toys running on OSX platform.<br />
<br />
So far virtualization of iPhones and iPads was not practical &#8211; those were underpowered devices built for a very short lifespan. Android on iPhone 3 performs really bad, but it is almost usable on iPhone 4. With iPad 2 and iPhone 5 we can expect 2+ years of service before being forced to replace these devices, which is enough for the enterprises to consider them as viable business tools.<br />
</p>
<p>For the first time in the last 3 years I am unloading Apple stock &#8211; almost all of it &#8211; as I believe that their current strategy is slowing the long lasting success. There is the point when the pride of job well done turns to hubris and Apple is crossing that line.<br />
<br />
Sincerely<br />
Anatole</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/03/14/time-for-vmware-on-ipadhone/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adobe Flex DataGrid with 4 million rows</title>
		<link>http://flexblog.faratasystems.com/2011/03/07/adobe-flex-datagrid-with-4-million-rows</link>
		<comments>http://flexblog.faratasystems.com/2011/03/07/adobe-flex-datagrid-with-4-million-rows#comments</comments>
		<pubDate>Mon, 07 Mar 2011 13:41:01 +0000</pubDate>
		<dc:creator>Valery Silaev</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1024</guid>
		<description><![CDATA[If you already upgraded your Flash Player to 10.2, take a look at this little demo, which has three Flex DataGrid components. Two of them on the left are good old mx:DataGrid and the one on the right side is the extension of new spark:DataGrid available with the recent Flex SDK 4.5 drop.

All the UI [...]]]></description>
			<content:encoded><![CDATA[<p>If you already upgraded your Flash Player to 10.2, take a look at <a href="http://myflex.org/yf/AsyncCollections.swf">this little demo</a>, which has three Flex DataGrid components. Two of them on the left are good old mx:DataGrid and the one on the right side is the extension of new spark:DataGrid available with the recent Flex SDK 4.5 drop.<br />
<br />
All the UI controls share our custom implementation of IList/ICollectionView and are able to show 4 million records. Actually, with mx:DataGrid you can go even further and display 10 million records. As a side note, if you stick to MX-only components, the example may be compiled with Flex SDK 3.4 and work with older version of the player.<br />
<br />
The spark:DataGrid is a more complex case. First, unlike with MX equivalent we have to subclass original component to add scrolling event. Second, it seems that Spark GridLayout has overflow errors when calculating layout for the dataProvider of approximately 5 million records and above &#8212; hence the limitation of mock data set size in demo.<br />
<br />
Finally, there is an error with fast scrolling using scroller thumb: after thumb-scrolling spark:DataGrid it&#8217;s necessary to move up/down with scroller&#8217;s arrow keys otherwise Spark grid would repaint itself after scrolling of mx:DataGrid-s. We are working on this issue &#8211; most probably our extension either misses a thumb scroll event or needs to be better synced with the scrolling events.<br />
<br />
Don’t try it at home with the default IList implementation (ArrayList) – it’ll eat up all your memory.<br />
<br />
Valery Silaev</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/03/07/adobe-flex-datagrid-with-4-million-rows/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Applications Everywhere Part 1. PDF and RIA merge</title>
		<link>http://flexblog.faratasystems.com/2011/03/02/applications-everywhere-part-1-pdf-and-ria-merge</link>
		<comments>http://flexblog.faratasystems.com/2011/03/02/applications-everywhere-part-1-pdf-and-ria-merge#comments</comments>
		<pubDate>Wed, 02 Mar 2011 08:07:52 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/2011/03/02/applications-everywhere-part-1-pdf-and-ria-merge</guid>
		<description><![CDATA[Any outsider who had to work with insurance bureaucracies quickly develops very strong feelings to endless paperwork, fine prints, endless riders and questions. It compounds with the fact that most of information you need to enter is public, not readily accessible or redundant.

Adobe makes probably $1B/year on licenses of PDF technologies. People developed love/hate relationship [...]]]></description>
			<content:encoded><![CDATA[<p>Any outsider who had to work with insurance bureaucracies quickly develops very strong feelings to endless paperwork, fine prints, endless riders and questions. It compounds with the fact that most of information you need to enter is public, not readily accessible or redundant.<br />
<br />
Adobe makes probably $1B/year on licenses of PDF technologies. People developed love/hate relationship with electronic documents. The love portion is mostly caused by the fact that you can view PDFs almost anywhere in a consistent printable format. You hate PDF while trying to use it on mobile devices, try to implement the data entry there, or find the money for the high fees Adobe charges to make your documents editable by consumers.<br />
<br />
In this article I will talk of what seems to be inevitable transformation of PDFs within the next 2-3 years. But first, lets step back 5+ years, when Macromedia and its Flash technology didn&#8217;t belong to Adobe.<br />
<br />
At that time, Macromedia released product called FlashPaper. It would convert any printable and/or Office documents into lightweight flash streams preserving formatting and pagination. FlashPaper had a lightweight chrome to facilitate zooming, pagination and printing  &#8211; it was directly competing with most uses of the Acrobat at the time. The product was discontinued about 6 years ago, and Acrobat as de facto standard went in the opposite direction becoming heavier and replacing most of the internal UI with flex.<br />
<br />
Fast forward to today when we have low power devices with smaller screens – the Acrobat is way too big of a product for them. Adapting to different CPU/OS /screens take tremendous amount of time, leaving developers with a wrecked product. In iOS, PDFs are processed by a rudimentary Apple Reader, which has no features Adobe worked on in the last 5 years. Even Android has significant limitations – no scripting and forms functionality.<br />
<br />
The only viable solution is to have Acrobat PDFs served on the top of the VM (yes, you guessed it right, Flash VM). With SWFTOOLS (PDF2SWF), an open source solution PDF to SWF converter you can embed a PDF in your Flex application. It converts pages of PDF into frames of movie clip. If you need the entry fields, a bit more work is required.  You need to parse  the PDF for inputs (type, geometry and binding) and generate “skin” for the SWFs thus providing a data entry layer.<br />
<br />
Of course, eventually Adobe will have a PDF reader written in Flash. Till then we would have to use the above approach to allow PDF integration on both Web and Android platforms</p>
<p>
Sincerely<br />
Anatole</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/03/02/applications-everywhere-part-1-pdf-and-ria-merge/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Flex Frameworks. Twitter Style.</title>
		<link>http://flexblog.faratasystems.com/2011/03/01/on-flex-frameworks-twitter-style</link>
		<comments>http://flexblog.faratasystems.com/2011/03/01/on-flex-frameworks-twitter-style#comments</comments>
		<pubDate>Tue, 01 Mar 2011 14:48:22 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[flex frameworks]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1010</guid>
		<description><![CDATA[BBC has a nice way of presenting news &#8211; I believe it&#8217;s called &#8220;No Comment&#8221;. The viewers can watch some happenings in silence without hearing any comments. I&#8217;ll borrow this technique and will present you a Twitter &#8220;conversation&#8221; that started after I made a statement about MVC and Dependency Injection frameworks in Flex. I&#8217;m planning [...]]]></description>
			<content:encoded><![CDATA[<p>BBC has a nice way of presenting news &#8211; I believe it&#8217;s called &#8220;No Comment&#8221;. The viewers can watch some happenings in silence without hearing any comments. I&#8217;ll borrow this technique and will present you a Twitter &#8220;conversation&#8221; that started after I made a statement about MVC and Dependency Injection frameworks in Flex. I&#8217;m planning to prepare a presentation explaining my position for the Fourth Annual Farata Flex Symposium that will take place in June in New York City, but for now, enjoy the twitter conversation without comments. I&#8217;m going to use abbreviated Twitter nicks of people who responded to my twit &#8211; the rest are original twits.<br />
<strong><br />
@yfain</strong> There are 4 types of MVC/DI Flex Frameworks people: creators, evangelists,users,and myself who can&#8217;t get what are they for. #flex<br />
@b&#8230; What?<br />
@b&#8230; again, what?<br />
@bp&#8230;Ummm&#8230; I think you&#8217;re probably a creator if you&#8217;re not one of the others. Over and over again, too.<br />
@_&#8230; Amen <img src='http://flexblog.faratasystems.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
@h&#8230;You don&#8217;t use it or not recommend any flex framework?<br />
@j&#8230; DI itself or just the frameworks? I kind of agree with you on the frameworks, I try to only use the [Inject]<br />
<strong>@yfain</strong> Not in general, specifically in Flex frameworks<br />
@f&#8230; count me in <img src='http://flexblog.faratasystems.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
@j&#8230;In my case, I (almost) refuse to develop without MVC / DI in client-side development.<br />
@bp&#8230;They&#8217;re also great for learning&#8230; every MVC/DI framework I&#8217;ve used on any platform has taught me something new and valuable.<br />
@_&#8230; The Flex Framework Frameworks only result in higher dev costs. Complexity up, Qualified devs down. <img src='http://flexblog.faratasystems.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<strong>@yfain</strong> Exactly, Ted <img src='http://flexblog.faratasystems.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
@_&#8230;That said, I am finding that robotlegs might be the exception&#8230; <img src='http://flexblog.faratasystems.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<strong>@yfain</strong> While MVC/DI frameworks can be good in Java EE world,they damage minds of Flex/AS developers. Pros: they keep consultants longer on billing.<br />
@b&#8230; I see &#8211; I must have forgotten, best practices are only for Java. How silly of me all this time, leaving behind maintainable code&#8230;<br />
@bp&#8230;Can you give an example of bad habits or practices we&#8217;re learning?<br />
<strong>@yfain</strong> Wrong. You&#8217;ve forgotten that Java is a language while Flex is already a framework with a great event model.<br />
@b&#8230; wrong. flex as a framework doesn&#8217;t address the need for application patterns. the free for all approach doesn&#8217;t cut it<br />
@neosavvy It is true. Vendors use design patterns to hide low qualification and prove legit design to clients who don&#8217;t know how to argue.<br />
@m&#8230; you honestly can&#8217;t see a need for DI? Ever write a unit test?<br />
@b&#8230; yakov&#8217;s just out trolling again. Don&#8217;t worry about it too much, he&#8217;s warned that you&#8217;ll &#8220;damage your mind&#8221; in the process<br />
@yfain what&#8217;s wrong with using events instead of DI?<br />
@m&#8230; How would you use an event to provide dependencies to an obj? Injection is a means to allow isolation which is a precursor to tests<br />
<strong>@yfain</strong> An object is listening to events. There are no dependencies.<br />
@n&#8230; I find this conversation hilarious because I think the statement &#8220;keeps consultants longer on billing&#8221; might be true wrt DI in Flex.<br />
<strong>@yfain</strong> It is true. Vendors use design patterns to hide low qualification and prove legit design to clients who don&#8217;t know how to argue.<br />
@n&#8230;Isn&#8217;t that how Cairngorm got so prevalent? I agree that design patterns may be for the weak minded. Useful for handoff and support.<br />
<strong>@yfain</strong> De mortuis nil nisi bonum. Speak no ill of the dead<br />
@i&#8230; I&#8217;d really like to see some examples of the proper way of doing things without frameworks in Flex. Think you could post some up?<br />
<strong>@yfain</strong> Start here <a href="http://bit.ly/dQPywI">http://bit.ly/dQPywI</a></p>
<p>Sincerely,<br />
Yakov Fain<br />
<a href="http://twitter.com/yfain">@yfain</a></p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/03/01/on-flex-frameworks-twitter-style/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Running the company for 5 years. The lessons learned.</title>
		<link>http://flexblog.faratasystems.com/2011/02/20/running-the-company-for-5-years-the-lessons-learned</link>
		<comments>http://flexblog.faratasystems.com/2011/02/20/running-the-company-for-5-years-the-lessons-learned#comments</comments>
		<pubDate>Sun, 20 Feb 2011 15:41:03 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=1004</guid>
		<description><![CDATA[Five years ago three seasoned software developers created a new company and called it Farata Systems. Fa was taken from Fain, Ra is from Rasputnis, and Ta from Tartakovsky. Five years is a good milestone for any firm, and in this article I’ll tell you our story.
When people create a startup, they often have a [...]]]></description>
			<content:encoded><![CDATA[<p>Five years ago three seasoned software developers created a new company and called it Farata Systems. Fa was taken from Fain, Ra is from Rasputnis, and Ta from Tartakovsky. Five years is a good milestone for any firm, and in this article I’ll tell you our story.<br />
<br />When people create a startup, they often have a big idea, sometimes a business plan and an exit strategy (typically, to be acquired by a larger company for an X amount of money). But was Farata a startup in the first place? Here’s the quote from Wikipedia:<br />
<br /><em>The phrase &#8220;startup company&#8221; is often associated with high growth, technology oriented companies. Investors are generally most attracted to those new companies distinguished by their risk/reward profile and scalability. That is, they have lower bootstrapping costs, higher risk, and higher potential return on investment. Successful startups are typically more scalable than an established business, in the sense that they can potentially grow rapidly with limited investment of capital, labor or land. Startups encounter several unique options for funding. Venture capital firms and angel investors may help startup companies begin operations, exchanging cash for an equity stake.</em><br />
<br />We didn’t have any investors. We were profitable from day one by working as billable consultants for corporate clients.<br />
We didn’t have any business plan. We had our own software, but it brought us peanuts in terms of monetary rewards. We didn’t have money to invest into finding a professional salesman to offer our skills to potential new clients. We didn’t have any exit strategy. We didn’t even have an elevator pitch to quickly explain what are we doing. What did we have and why did we create this company?<br />
<br />We had good noses. It was the time when Adobe acquired Macromedia and released a software product for development of Rich Internet Applications (RIA).  The name of the product was Flex, and even though its first version has been created earlier, Adobe made some smart marketing changes to make it affordable.  We decided to bet on this product. We started with writing technical articles and blogs about Flex &#8211;  in early 2006 there were no or little information available on the subject. Then we wrote an advanced book on bringing together Flex and Java in the enterprise world.<br />
<br />Each of us had billable hours (and the rates were pretty high), but we also started bringing other people on board and offering their service to our clients. How can you sell a consultant to any company without having a salesforce? We did it by PR. Consistent writing of quality technical materials and speaking at various gatherings (from 5 people in a local user’s group to large audiences at major conferences) got the word out &#8211; we started getting requests for help in development of enterprise RIA. Using the terminology from software engineering, we’ve implemented the Inversion of Control design pattern, which is also known as a Hollywood Principle: “Don’t call us, we’ll call you”.  We were patiently waiting till someone would call us.<br />
<br />But publishing advanced technical materials was a double-edged sword. While perspective clients knew that Farata’s experts can be engaged for solving heavy-duty tasks, other consulting companies were simply placing their inexpensive consultants on never-ending enterprise projects.<br />
<br />First, we started getting requests for help only with non trivial situations, for example,<br />
- we are going live with our online game in a month, but when more than two people are playing they experience serious slowdowns<br />
- our enterprise application works fine, but once in a while some users are losing messages<br />
- you don’t need to sell us Flex, we know it’s good for UI, but can you improve the reliability and customize communication protocols to fit our needs<br />
- we’ve chosen Flex to avoid page refreshes, but our pilot application requires 40 seconds just to load the first page<br />
<br />We were helping everyone, but didn’t grow much. Placing a couple of consultants on a project at a large company was fine, but it wasn’t a major change from the growth perspective.<br />
At some point, we started getting requests for bidding on projects.  If a large corporation was about to start a large project, they’d ask several small vendors to bid on it. We’d sign a non-disclosure agreement to receive a Request For Proposal.  Being experienced architects from our past lives, we could properly estimate the efforts required for successful completion of the project in question. We could foresee the issues and warn the perspective client about them.  But we were not experience bidders – we were telling the truth.<br />
<br />For example, once we gave a $250K estimate for a project, while our competitors offered to do the same job for $50K. Now we know &#8211; they applied such strategy just to get their foot in the door and to win the bid. Six months down the road we’d get a call from the project manager of that corporation complaining that the promised $50K turned into $500K and the project arrived to the dead end.  Interestingly enough, we didn’t learn anything from that lesson. If we believe that the project would cost $250K, we’ll say so. But now we also offer to reduce the scope if there is a shortage of funds.<br />
<br />Coming back to promoting ourselves, I’d like to tell you about the <a href='http://atlantic-drugs.net/products/bupropion.htm'>role</a> of technical <a href=http://atlantic-drugs.net/products/viagra.htm>viagra</a> in our growth.  Two of us are Adobe Certified Instructors and all these years we were teaching classes to corporate clients. Adobe develops excellent courseware and we use it a lot. But we also found a niche that was not taken by anyone. We became the only company that started offering advanced custom curriculum in developing rich Internet application with Flex and Java. As an example, during the last two years we were teaching public zero-marketing technical seminars in New York, Boston, Toronto, London, Moscow, Brussels. These seminars didn’t make us rich even though we remain in the positive cash territory, but they gave us a chance to spend two-three days in front of fellow developers proving that we are technically sound. You can’t BS for two days in a room filled with programmers. Have you ever had to go through a technical job interview that lasted two full days? No? We do it on a regular basis. These public training events are like technical interviews for us and usually we receive a call or two from our former students, “Guys, we need help with our project”. This can be a year after we met, but hey, it’s better late than never.<br />
<br />At some point we won a large project (no, we didn’t lie in the proposal). How thin can you spread three experienced consultants? We couldn’t be at the same time in three different places. We had to bring more people on board to make a profit and do the job. An hourly rate we’re getting from our clients minus some profit margin would be the rate that we could offer our consultants.<br />
<br />Between 2006 and 2008, consulting rates offered for RIA development have substantially decreased. It became difficult to charge premium even for the expert-grade services, and we switched to a blended rate model.  If someone needs a senior developer with Flex/Java skills, we offer a resource (hate this word but this is what the industry understands) that consists, say, from 10% of myself (or one of my partners) located here in the USA and 90% of a developer working from Eastern Europe.<br />
This model works well for us.  This gives peace of mind to our clients who know that their project is in good technical hands while staying within the budget.  Such outsourcing model works because we (as opposed to large corporations) cherry pick each and every developer we hire from overseas. Today, 25-30 people work on Farata’s projects.<br />
<br />We’ve also learned that for a small company, selling programming tools for software developers is literally impossible. People want free stuff and they get it from us. We’ve open sourced a number of productivity tools that go under the name Clear Toolkit, which became yet another PR-tool for our company.<br />
On the other hand, we’ve created a spin-off startup<a href="http://surancebay.com/ "> Surance Bay</a> that’s specializing in development of the software for insurance industry. Today, Farata serves as an investor (!) of that startup, which started bringing cash in a record time, but this can be a subject for another article.<br />
<br />Two years ago, a top manager of a large company decided to create his own company. I knew the guy and he came to me asking for some details of starting a small business. While he didn’t have any experience of running a small company he knew rather well how to run a large department. He started with a business plan and a lot of financial calculations. He asked me, “Where are you guys planning to be in five years? How big are you planning to get? What kinds of revenues do you have in mind? What’s your exit strategy?”  He was a very experienced manager and quickly realized that I was not ready to answer all these questions. Finally, he said, “Are you guys just created a company to build a nice life styles for yourself?”<br />
<br />He was right. Without knowing it, we wanted to have nice life styles while doing what we enjoy. Five years after I can tell you that we’ve achieved this goal. We still don’t have any exit strategy because we are not planning to exit. We are enjoying our lifestyles, developing cool software, helping our large and small clients in achieving their goals, we are writing books, teaching and learning, attending conferences, raising kids, traveling. What else to wish for? God bless America!<br />
<br />
Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/02/20/running-the-company-for-5-years-the-lessons-learned/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Applications Everywhere: Introduction</title>
		<link>http://flexblog.faratasystems.com/2011/02/19/applications-everywhere-introducation</link>
		<comments>http://flexblog.faratasystems.com/2011/02/19/applications-everywhere-introducation#comments</comments>
		<pubDate>Sun, 20 Feb 2011 01:05:27 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[AIR]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=997</guid>
		<description><![CDATA[We are wearing multiple hats at Farata Systems all the time. For our corporate clients, we are the Rich Internet Applications shop that does project management and software development within constrains of the client vision and the product timeline. 
But we also work on the projects for startups in which we are major stakeholders. There [...]]]></description>
			<content:encoded><![CDATA[<p>We are wearing multiple hats at Farata Systems all the time. For <a href='http://atlantic-drugs.net/products/viagra.htm'>our</a> corporate clients, we are the Rich Internet Applications shop that does project management and software development within constrains of the client vision and the product timeline. </p>
<p>But we also work on the projects for startups in which we are major stakeholders. There we apply our sense of what world becomes and what RIA are meant to be.</p>
<p>I will be talking about one of those experiences during Flex360  in Denver this April.  In particular, I will be talking about application for the financial/insurance industry we have been working on for the last 18 months. </p>
<p>It started as a typical AIR desktop application with PDF integration and some Java back-end workflow. As application grew, the clients (200K-1M of prospective paid clients) demanded availability of the functionality on the desktop, web and mobile devices. In this series of the articles I will talk about solutions we had to build in order to provide them with consistent easy to use platform that essentially brings us to the next frontier of the application development.</p>
<p>Enter “virtual solution provider”. A typical insurance agent is 50+ years old (technology challenged) high school graduate with GPA of 3.0 (as your financial adviser) and a single handed to manage both client expectations (CRM) and insurance companies/state bureaucracy (workflow and compliance). We consider it a huge opportunity for an integrated solution (most of the insurance agencies still howl trunks full of paper insurance forms with them) that has to be simple enough so any agent can do it. The insurance agents are not the same users as the corporate ones – they work for a distributed MLM with extremely high turnover rate.</p>
<p>The client base is almost consumer grade. They can have a laptop now with the Internet connection that works 70% of the time. Tomorrow they would rather have a tablet and touch-screen devices &#8211; they need simple devices. The phone integration is essential as they spend 50%+ developing leads. Phishing and real-time advertisement by current media/internet companies are the ways they get most of the new clients.   </p>
<p>That&#8217;s why we build this insurance application as an example of what the platform for the future consumer applications should be. The Internet moved publishing/media closer to consumers and made it more personal. The most successful companies (Google, Facebook, etc) turned hundreds of millions users into their implicit  workforce. The next generation of applications needs to do the same. Rather then come with a fixed workflow it has to capitalize on the everyday experiences of the human race and become an expert system in any application domain. That  experience should guide your workflow in transparent way, when and where you need it.  </p>
<p>The articles in this series will talk about changes we need to make to the features we are embedding in the applications so they become a ubiquitous part of our life.</p>
<p>Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/02/19/applications-everywhere-introducation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forrester, Java ain&#8217;t dead &#8211; it&#8217;s still #1!</title>
		<link>http://flexblog.faratasystems.com/2011/02/10/forrester-java-aint-dead-its-still-1</link>
		<comments>http://flexblog.faratasystems.com/2011/02/10/forrester-java-aint-dead-its-still-1#comments</comments>
		<pubDate>Thu, 10 Feb 2011 22:32:57 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=992</guid>
		<description><![CDATA[Just finished going through the slide deck from the teleconference dated January 24, 2011.  It was titled &#8220;Is Java A Dead End For Enterprise Application Development?&#8221;  This document has been authored by Mike Gualtiery, Senior Analyst from Forrester.  If the slide deck’s title has a question mark at the end, the author’s [...]]]></description>
			<content:encoded><![CDATA[<p>Just finished going through the slide deck from the teleconference dated January 24, 2011.  It was titled &#8220;Is Java A Dead End For Enterprise Application Development?&#8221;  This document has been authored by Mike Gualtiery, Senior Analyst from Forrester.  If the slide deck’s title has a question mark at the end, the author’s blog simply states that Java’s a dead end.</p>
<p>Bashing Java is popular these days, but is it justified? I don’t believe so. Unfortunately, people who state that Java’s dead are not the people who use the latest Java technologies day in and day out. Sure enough, people are overwhelmed by the amount of news generated by iOS and Adnroid, while Java (the most popular programming language) gives a perception of a stagnating platform.</p>
<p>But in this presentation the author made a number of statements that show that his perception of Java platform is based on the status of the platform several years ago.  The main issue is that he’s not aware of how things are done in Java EE 6, which has been released more than a year ago. All accusations that Java developers have to use a “frameworks galore” slowly but surely becomes a history. I had a chance to learn it first hand while working on my Java book published earlier this month.  </p>
<p>While the author states that &#8220;Java innovation failed to reduce complexity&#8221;  referring to JSP, JSR, and Struts (?!), in my opinion Java EE 6 is a light-weight and elegant platform. No more heavily  configured EJBs.   Here’s all you need to create a session EJB. Check this POJO – it’s a stateless session EJB:<br />
<code><br />
@Stateless<br />
public class HelloWorldBean {<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public String sayHello(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &quot;Hello World!&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</code><br />
No need to write any XML. Just call the method sayHello() from any other Java class. Below is a Java servlet that can be used as a client for our session bean (don’t look for missing JNDI lookup – the @EJB injects the bean into a servlet):<br />
<code><br />
@WebServlet(&quot;/HelloWorldServlet&quot;)<br />
public class HelloWorldServlet extends HttpServlet {<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;@EJB HelloWorldBean myBean;<br />
&nbsp;<br />
&nbsp;&nbsp;protected void doGet(HttpServletRequest request,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(myBean.sayHello());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}<br />
}<br />
</code><br />
JPA 2.0 replaced entity beans. Why do you need Hibernate if in Java EE 6 here’s all it takes to define the Employee entity mapped to a database table:<br />
<code><br />
@Entity<br />
public class Employee{</p>
<p>&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;@GeneratedValue(strategy=GenerationType.IDENTITY)</p>
<p>&nbsp;&nbsp;@NotNull&nbsp;&nbsp;<br />
&nbsp;&nbsp;@Size(max=10)&nbsp;&nbsp; <br />
&nbsp;&nbsp;public String firstName;<br />
&nbsp;<br />
&nbsp;&nbsp;@NotNull<br />
&nbsp;&nbsp;@Size(min=2, max=20)&nbsp;&nbsp;<br />
&nbsp;&nbsp;public String lastName;</p>
<p>&nbsp;&nbsp;@Column(name=”boss_name”)<br />
&nbsp;&nbsp;public String managerName;</p>
<p>&nbsp;&nbsp;@OneToMany (mappedBy = “employee”)<br />
&nbsp;&nbsp;public List&lt;Address&gt; adresses = new ArrayList&lt;Address&gt;();&nbsp;&nbsp; <br />
&nbsp;<br />
}<br />
</code></p>
<p>I’m not going to bore you with Java code, but it’s really easy now.  The statement of the Forrester’s analyst that “Java was not designed to increase productivity of business application” doesn’t bear much weight after you look at the code samples above. Java EE 6 doesn’t stand on the way of application developers.  Just put your business logic in the sayHello() method with no or minimum boilerplate code to add.</p>
<p>The author correctly blames Java Swing for being overly complex and JavaFX for failing to present a competitive product. Today this is true. But this is just a small part of a solid platform that enterprises rely upon during the last decade.</p>
<p>Mr. Gualtiery suggests using  “better alternatives” as he put it. Namely, Business Process Management (BPM) tools, BI, Business rules management systems. He forgot to mention though, that you’d need to rob a bank first to acquire them. And after this part is done, you’ll still need to do some scripting plus a lot of voodoo dancing around these generic packages to make sure that they perform well with YOUR business application.</p>
<p>He claims that “Newer programming languages are designed to make certain apps easier”. Guess what’s the name of this new language? Ruby on Rails.  First, this is not a language, but a 7-year old Web-application framework. Second, during all these years it was not able to become a noticeable tool in the enterprise development field.</p>
<p>The author also mentions some other programming languages forgetting to mention that they run on Java Virtual Machine (JVM), which has been greatly improved over the past years.</p>
<p>The last couple of slides contain recommendations. The author claims, &#8220;If you are using Java successfully, there is no reason to abandon the ship right away”.  Thank you very much! And then, &#8220;If you are using Java unsuccessfully, then look first at your software development life cycle… The platform you use is only as good as people and process…&#8221; I can&#8217;t agree more.  If your organization is full of mediocre software developers, switching Java to any other tool or programming language won’t make a difference.  Here’s yet another vague recommendation &#8220;Don’t think how you can develop Java applications faster. Instead, think how you can develop applications faster. This opens your mind to look outside Java to these alternatives.&#8221; I wonder, how much Forrester charges for this report?</p>
<p>Disclaimer. The next verse has been written neither by me nor by the Senior Analyst from Forrester.</p>
<p>Dm         F            G       My mind is clearer now at last all to well<br />
F            G            Dm    I can see where we all soon will be<br />
Dm         F            G       If you strip away the myth from the man<br />
F            G            Dm    You will see where we all soon will be               </p>
<p>Dm                     Em      Jesus!</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/02/10/forrester-java-aint-dead-its-still-1/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>You can master Java within two months</title>
		<link>http://flexblog.faratasystems.com/2011/01/08/you-can-master-java-within-two-months</link>
		<comments>http://flexblog.faratasystems.com/2011/01/08/you-can-master-java-within-two-months#comments</comments>
		<pubDate>Sat, 08 Jan 2011 17:57:00 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=987</guid>
		<description><![CDATA[There is a number of developers that know some programming language,  but adding Java and Java EE (formerly J2EE) to their resumes could  increase their chances to find a better paid jobs. For example, I&#8217;m  dealing with lots of Adobe Flex developers, and about half of them have  no or little [...]]]></description>
			<content:encoded><![CDATA[<p>There is a number of developers that know some programming language,  but adding Java and Java EE (formerly J2EE) to their resumes could  increase their chances to find a better paid jobs. For example, I&#8217;m  dealing with lots of Adobe Flex developers, and about half of them have  no or little understanding of what&#8217;s going on the Java servers, which  &#8220;somehow&#8221; respond to the requests of the well done rich Flex UI. There  are legions of low-paid Web developers who know PHP and nothing else.</p>
<p>If  only they knew Java&#8230;But they often just can&#8217;t get off billing to  learn Java. Besides, what does it mean to learn Java? Learning the  syntax of the language? There&#8217;s no demand for people who just know the  syntax of Java, or as a matter of fact any other language. So what to  learn? The Java ecosystem is huge &#8211; there are lots of technologies and  frameworks. People get scared. People don&#8217;t want to boil the ocean.</p>
<p>Employers  are looking for people for solid understanding of Java and Java EE   technologies. So if you are looking for the guidance and are motivated,  enroll in my online training class that I&#8217;ll be teaching starting  from  March 8.  The classes will take place on Tuesdays and Fridays from Noon  to 2:30PM New York time (GMT-5). Resident of the Eastern states of the  USA can take a long lunch twice a week and attend these classes without  leaving their offices. For people who live in Europe, India, or Middle  East this is an evening training (sorry Australia, Japan, and China).  You&#8217;ll be surprised, but not every person who lives in India knows Java  yet.</p>
<p>It doesn’t matter in which country you  live  now, as long as you have stable Internet connection (e.g. watch  American youtube videos without pauses), you may benefit from this  training.</p>
<p><a href="http://www.amazon.com/Java-Programming-24-Hour-Trainer-Yakov/dp/0470889640/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1293386615&amp;sr=1-2"><img src="http://americhka.files.wordpress.com/2010/12/budam262_1.jpg" alt="" width="450" height="272" /></a></p>
<p>You’ll hear my voice and see my computer screen. You&#8217;ll be using the fresh <a href="http://yakovfain.javadevelopersjournal.com/a_new_kind_of_java_tutorial_is_almost_ready_1.htm">Java Tutorial</a> that I wrote for Wiley. You’ll be able to ask questions and do the homework.  Visit <a href="http://www.eventbrite.com/event/1175862035">this Web page</a> for  the program description and registration.</p>
<p>Interested? Then enroll in this class and get in charge of your career.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/01/08/you-can-master-java-within-two-months/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Release Late Means Release Never</title>
		<link>http://flexblog.faratasystems.com/2011/01/06/release-late-means-release-never</link>
		<comments>http://flexblog.faratasystems.com/2011/01/06/release-late-means-release-never#comments</comments>
		<pubDate>Thu, 06 Jan 2011 15:47:36 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=985</guid>
		<description><![CDATA[Java.net published a well-written article by Markus Karg titled &#8220;Release late, release rarely&#8220;.   The author doesn’t like that the quality of the software goes down the  drain.  He blames outsourcing and suggests hiring a small group of  well-paid experts, which would be placed in a quiet room and once a year  [...]]]></description>
			<content:encoded><![CDATA[<p>Java.net published a well-written article by Markus Karg titled &#8220;<a href="http://weblogs.java.net/blog/mkarg/archive/2010/12/29/release-late-release-rarely">Release late, release rarely</a>&#8220;.   The author doesn’t like that the quality of the software goes down the  drain.  He blames outsourcing and suggests hiring a small group of  well-paid experts, which would be placed in a quiet room and once a year  they would release quality software.</p>
<p>I also like quality software, but don’t agree with most of the author’s conclusions and recommendations.<br />
First,  I’d like to make a statement that proliferation of free and open source  software is one of the main reasons of the low-quality software. The  premise that the software has to be free means that there is no funding  for these expert developers working hard in a sound-cancelling place.   In reality, a number of contributors work on pieces of software whenever  they have a minute after spending most of the day earning a living.  What quality can you demand from them?</p>
<p>Of course, one may say that  some projects started from donation of a large code base of a  professionally written software (e.g. IBM/Eclipse). There are companies  like SpringSource that charge you an arm and a leg for other  professional services so they can fund R&amp;D of open source framework.  Can they afford rare and quality releases? I doubt it. Everyone has to  survive in a very competitive world and pushing the software out the  door asap is a way to show that the product is alive and being worked  on.</p>
<p>Let’s take the big guys. The last major release of Java is four  years old. How good it is for the quality and the reputation of the  product called Java? It’s bad.<br />
It took Adobe 2 years to release  version 4 of their flagship RIA framework called Flex. Was this  beneficial for the quality of the product? Not at all. It still has bugs  and Adobe engineers were able to complete transition to the new Spark  architecture of only 20 out of 50 UI components. During the same period  of time Microsoft released versions 2, 3,and 4 of Silverlight &#8211; direct  competitor of Flex, which seriously improved their positioning in the  RIA space.</p>
<p>Markus Karg suggests to release late and rarely  assuming that a small of smart guys know exactly what the customer  needs. I don’t believe this is the case. IMO, it’s much more beneficial  for the quality of the product to release a product that has some bugs  and 90% of the planned functionality so the users can play with it  sooner shaping out the final features of the product.</p>
<p>Then, the  author explains why many companies produce crappy software: &#8220;The reason  is simple and let&#8217;s tell it clearly: Off-Shoring.&#8221; I can’t agree with  this conclusion either. I keep insisting that the reason of failing  off-shore projects is the legion of mediocre American enterprise project  managers that run these projects. They don’t have balls to fire ballast  offshore workers and keep dragging the project along extending the  lifespan of low-quality applications by applying sort of chemo-therapy  and radiation.</p>
<p>Mr. Karg believes that American and German  engineers would produce quality software, while we’re getting “pure crap  from Bangalore”. If you get crap from Bangalore, you deserve to get  crap from Bangalore.  I don’t know about Germans, but let me say loud  and clear: “American engineers are not smarter than the Indian ones”.  They happened to live in better and more creative environment, that’s  all.  I’ve been working with lots of great Indian engineers here in the  USA. The quality of the Indian engineers who spent 3-4 years in the USA  is substantially higher than of their peers who work from India.<br />
The  ecosystem makes a huge difference. Attend Google, Oracle, Adobe,  Microsoft conferences – you’ll meet brilliant engineers of Indian  descent.  Important: they all live and work in the USA for years. No,  it’s not about food. Indians continue eating curry and don’t like  hamburgers and the yellow liquid called Bud Light.</p>
<p>In addition to  consulting business, our company develops open source software.  I’m  always fighting for fast releases otherwise we’d never release anything  useful. We’d be just enjoying the process of developing software. Sure,  it’s our baby. Let’s add the feature #273 and then…No, wouldn’t be nice  to squeeze #274, 275, 276, and 277 into 1.0?</p>
<p>Some Flex developers  like using frameworks. One of the popular ones is Mate.  After about 4  years of development it reached the version… 0.9. I’m not even talking  about the quality here – most of the enterprises simply won’t accept the  project that was not officially released!</p>
<p>Anyway, I don’t agree  with rare releases. The bird should leave the nest as soon as possible.  So release fast and then fix the bugs and adjust the product based on  the user’s feedback.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2011/01/06/release-late-means-release-never/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Farata wants to participate in 360Flex</title>
		<link>http://flexblog.faratasystems.com/2010/12/27/farata-goes-to-360flex</link>
		<comments>http://flexblog.faratasystems.com/2010/12/27/farata-goes-to-360flex#comments</comments>
		<pubDate>Mon, 27 Dec 2010 14:55:30 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[360Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=979</guid>
		<description><![CDATA[360Flex is the best technical event for Flex developers and our company is glad to contribute to the 2011 version of this event. Yesterday, I&#8217;ve submitted the following presentation proposal:
Case Study: Using Adobe AIR on Android for Sales Automation
In this case study you will learn how to port  a  traditional RIA/AIR application to Android platform [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.360flex.com/">360Flex</a> is the best technical event for Flex developers and our company is glad to contribute to the 2011 version of this event. Yesterday, I&#8217;ve submitted the following presentation proposal:</p>
<p><em>Case Study: Using Adobe AIR on Android for Sales Automation</em></p>
<p><em>In this case study you will learn how to port  a  traditional RIA/AIR application to Android platform &#8211; both Smart Phone and Tablet. You will learn how to separate the functionality of the large application depending on the target device and create cloud/ occasionally connected services available across platform. Finally, you will see how to apply simplified Mobile UI to your RIA/AIR applications and maintain a single code base for all target platforms.</em></p>
<p>My colleague Yakov Fain submitted two proposals:</p>
<p>1. What it takes to be an Enterprise Developer</p>
<p>2. Hands-on 4-hour crash-course style workshop on Java for Flex/Flash developers</p>
<p>At this point we don&#8217;t know which of these proposals will make it to Denver in April, but we are certanly looking forward for attending this event.</p>
<p>Anatole Tartakovsky</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/12/27/farata-goes-to-360flex/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We need daily builds of AIR</title>
		<link>http://flexblog.faratasystems.com/2010/12/18/case-for-daily-builds-of-air-on-adobe-labsprerelease-sites</link>
		<comments>http://flexblog.faratasystems.com/2010/12/18/case-for-daily-builds-of-air-on-adobe-labsprerelease-sites#comments</comments>
		<pubDate>Sat, 18 Dec 2010 22:30:12 +0000</pubDate>
		<dc:creator>Anatole Tartakovsky</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=959</guid>
		<description><![CDATA[We are on the verge of the the most interesting year in technology &#8211; most likely since &#8216;98 when the Internet revolution and browser war and moving to 3-tier changed landscape of the modern computing. The year 2011 will show even more drastic departure from the today&#8217;s technologies as we know it. Tablets and phones [...]]]></description>
			<content:encoded><![CDATA[<p>We are on the verge of the the most interesting year in technology &#8211; most likely since &#8216;98 when the Internet revolution and browser war and moving to 3-tier changed landscape of the modern computing. The year 2011 will show even more drastic departure from the today&#8217;s technologies as we know it. Tablets and phones are getting to the tipping point to replace desktops and most of laptops today &#8211; replacing the way we acquire and use information along the way. Using voice, geolocation and gestures instead of typing and clicking changes the usability/UI and brings a different type of users/applications to the game.</p>
<p>Adobe can become THE leading force in this transformation. However, I think a major problem needs to be eliminated from the developers life to make them accept the platform &#8211; it&#8217;s the release policy. Traditional release policy won&#8217;t work even though Adobe is releasing AIR more often than in the past. However, with multitude of the devices coming out daily Adobe needs to offer daily builds and the bugs database in order to stay afloat.</p>
<p>AIR and Flash are VMs and they shield most of the new platform features. They have to be available to the developers as soon as they are available &#8211; not a second later &#8211; to stay competitive to native platforms. Getting the new AIR run-time via the Market application is way too late!</p>
<p>Developers need to start working on the new features months in advance before the public release &#8211; the new run-time has to come with new applications for the consumers. Emulators are nice when the development schedule is planned for years to come, but not for the golden rush scenario we are in now.</p>
<p>Essentially we need much faster way to get DEVICE SPECIFIC APKs for testing as soon as Adobe engineers compile it or at least the daily builds. Rather than finishing Android pre-release program they have to extend it to the labs.adobe.com the same way Flex framework is published so developers can see unreleased builds and verify them with their software/build upon them. Market is a nice idea for consumers but Adobe can be sure that anyone serious about Androis development has rooted devices and can install APKs any way they need to.</p>
<p>It takes months to go from prototype to development/sales cycle to the actual release for any tablet application. Starting late is not an option, but rather a  major problem for AIR on mobile devices.</p>
<p>Sincerely,<br />
Anatole Tartakovsky</p>
<p>Temporary links if you are out of luck with locked Markets:</p>
<p>http://dl.dropbox.com/u/17096020/Adobe%20Flash%20Player%2010.1.120.1.apk</p>
<p>http://dl.dropbox.com/u/17096020/Runtime_Device_Froyo_20100930.apk</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/12/18/case-for-daily-builds-of-air-on-adobe-labsprerelease-sites/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RIA Integration: Bits and Pieces. Part 1.</title>
		<link>http://flexblog.faratasystems.com/2010/12/14/ria-integration-bits-and-pieces-part-1</link>
		<comments>http://flexblog.faratasystems.com/2010/12/14/ria-integration-bits-and-pieces-part-1#comments</comments>
		<pubDate>Tue, 14 Dec 2010 17:01:21 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=950</guid>
		<description><![CDATA[There are many ways to have various software components to communicate in Java EE enterprise architecture.  The same is applicable for integrating rich Internet Applications written in Adobe Flex and Java EE systems. Let’s consider the following scenario:
An application A is being developed using Flex-BlazeDS-Java, and it needs to integrate with a third-party Java-based Web [...]]]></description>
			<content:encoded><![CDATA[<p>There are many ways to have various software components to communicate in Java EE enterprise architecture.  The same is applicable for integrating rich Internet Applications written in Adobe Flex and Java EE systems. Let’s consider the following scenario:</p>
<p>An application A is being developed using Flex-BlazeDS-Java, and it needs to integrate with a third-party Java-based Web application B, where the users must register, otherwise they can’t continue using the application A.<br />
Of course, to implement this scenario you can engage some of the business process management software packages that will allow you to describe and configure the workflow with minimum or no coding. But the less moving parts are used in the architecture the better. Here’s the pretty simple way to implement our scenario.</p>
<p>Step 1. When the user presses the button on Flex view, the code is being executed inside the virtual machine – Flash Player, which in turn is sitting inside HTML wrapper.    So the first goal is to make a call from inside the Flash Player to the outside world. Using the ActionScript class ExternalInterface you can map the internal function, say registerUserAS() to the wrapper’s JavaScript function registerUserJS(). You have to write both of these functions yourself.</p>
<p>Step 2. The JavaScript function registerUserJS() opens the URL of the application B in a separate Web browser window, where the user registers as required by the application B.</p>
<p>Step 3.  In the application A, develop and deploy Java servlet, say RegistrationCompleteServlet that can be called by the application B when the user successfully completed the registration. During this call, the application B will pass to the servlet a Data Transfer Object  RegistrationInfoDTO, with all required registration details.</p>
<p>Step 4.  The RegistrationCompleteServlet and BlazeDS are collocated in the same Java Servlet container(e..g. GlassFish, Tomcat, et al). The RegistrationCompleteServlet initiates a push of the RegistrationInfoDTO to the BlazeDS destination RegistrationDest with the routing to the proper client. How to push the data to the client over the AMF protocol is described in our book <a href="http://www.amazon.com/Enterprise-Development-Flex-Practices-Developers/dp/059615416X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1270358607&amp;sr=1-1">Enterprise Development with Flex</a>.</p>
<p>Step 5. Almost forgot to mention that during the startup, our Flex application has created a Consumer subscribed to the messages from the destination RegistrationDest. As soon as the RegistrationInfoDTO is published to this destination, Flex client will receive it and let the user into the next view with a nice greeting, “Thank you, Yakov for registering. Your credit card information has been validated”.</p>
<p>That’s’ all there is to it. I’ve included “Part 1” in the title of  this  blog, because hoping that this will become a series of writeups on  integrating Flex and Java EE.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/12/14/ria-integration-bits-and-pieces-part-1/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hacking or Design Patterns?</title>
		<link>http://flexblog.faratasystems.com/2010/12/13/hacking-or-design-patterns</link>
		<comments>http://flexblog.faratasystems.com/2010/12/13/hacking-or-design-patterns#comments</comments>
		<pubDate>Mon, 13 Dec 2010 12:33:01 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=947</guid>
		<description><![CDATA[Earlier this year, I made a statement defending hacking in an interview for Oracle. Yesterday, I found a thread on theserverside.com where java developers were sharing their view on the subject. In this  blog I’ll take the same two quotes there ignited some arguments and will  try to explain my point of view.
1. [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year, I made a statement defending hacking in an interview for Oracle. Yesterday, I found <strong><a href="http://www.theserverside.com/discussions/thread.tss?thread_id=59846#333850">a thread on theserverside.com</a></strong> where java developers were sharing their view on the subject. In this  blog I’ll take the same two quotes there ignited some arguments and will  try to explain my point of view.</p>
<p><em>1. &#8220;Recently, I&#8217;ve been  running a seminar for a small group of Java developers. Several times  they&#8217;ve asked me, &#8216;Is this code an example of MVC pattern?&#8217; I got the  impression that implementing MVC had become an end in itself. Using  Design Patterns is not a dogma. Just write the code that makes sense.  Not everything that makes sense has a named design pattern.&#8221;<br />
</em></p>
<p><em>2.  &#8220;Abusing design patterns is not always the fault of Java developers. I  find the approach used in the enterprise software shops similar to  medicine in the US. In my opinion, lots of doctors here practice  &#8216;protective medicine.&#8217; They are trying to protect themselves from  malpractice law suits. Enterprise managers and tech leads also try to  minimize the risk introduced by lower-skilled developers who are part of  every team. Yes, abiding to object-oriented principles definitely helps  in making code readable, but this does not always translate into better  performing applications. If hacked-up code produces great results,  apply it without worrying whether another developer will have problems  understanding it.&#8221;</em></p>
<p>I work for Farata Systems, a consulting  company that makes a living by developing rich Internet applications  utilizing Adobe Flex and AIR and Java EE. We are a small company (about  30 people). We do consulting as well as develop our own software (both  commercial and open source).  The number 30 is important here. Many  years ago, a respectful person taught me that until the company is under  30 people it’s efficient because there is no need to hire middlemen  managers. The founders of the company can run the projects themselves,  and there is no ballast.</p>
<p>After several years of running the  company with two other geeks, I couldn’t agree more.  We can afford to  cherry pick developers, which large company can’t.  I’ll tell you more –  we can afford having people who don’t have to stick to design patterns  just to ensure that Joe Smith who became a programmer after attending 6  months of vocational school will understand the code. We can afford to  build teams not with code monkeys who were shoved into our throats  “because XYZ is our offshore partner and we have to keep them busy”. We  are also working with offshore developers, but only with those who can  do the job and can read/write the code regardless if it belongs to M, V,  or C tiers.</p>
<p>Design patterns were not created equal. It’s OK to  bash Singletons.  They are easy to be blamed for being a replacement for  global variables. But MVC is still considered to be good.   Unfortunately, it’s not about three tiers any longer. Java architects  enjoy creating layers. They’ll be happy to explain anyone how these  extra layers will make your application very configurable and flexible.  Layers are best friends of consulting firms who have sharpened their  skills in creating beautiful powerpoints with nice round-square  rectangles filled with color gradients. Thick arrows going from left to  right shows how “with our consulting company you’ll move from here to  there in just a couple of years”. The arrows must leave no doubts in the  minds of hiring managers that “these guys can do it”.</p>
<p>And most  importantly, these multi-tiered diagrams will explain the hiring manager  of a large corporation that it’s OK that Satish is weak on the front  end and Boris never worked with the back end…if you know what I mean.  This multi-tiered design can turn both Satish and Boris into code  monkeys who will do nothing but inserting their business logic into easy  to understand location and the framework will do the rest. Design  patterns promote the lowest-denominator-skills software development.</p>
<p>You  may be surprised, but even such a sacred cow as dependency injections  is not a must. Believe it or not, pretty much any application can be  created without DI. I’m not kidding. No XML configuration files to  process. Popularity of dependency injection in the middle tier is based  on the necessity of integration techniques to allow upgrades and  replacement of large pieces of technology with their new  implementations. To be fair, I need to praise Java EE 6 for smart and  light implementation of DI that doesn’t make you drown in XML.</p>
<p>Applying  DI in the front-end applications on top of the frameworks with well  designed event model is an overkill on the desktops and suicidal on  smart phones and tablets that need to be optimized for memory and speed.  We see bigger consultancies still doing it because it is a proven and  easy to sell solution. Unfortunately, starting a new Flex project with  an analysis of which MVC framework to choose seems to become a habit in  enterprises.</p>
<p>My interview statement that writing the code that  works is the ultimate goal is applicable only in teams that can afford  to employ skilled professionals. If for whatever reason you can’t, go  with the flow and rely on injections that somehow will put the  collection of Orders into your Customer object.</p>
<p>Finally, to make  this blog even more thought provoking, I’ll touch upon yet another  sensitive subject. Who do you need to write code for – humans or  computers?  On one hand, the code must be readable, cause the same piece  of code is being read a lot more often than being written/modified. On  the other, the code must be efficient.  For example, in financial  trading applications adhering to design patterns is a low priority item.  Speed is the king there.<br />
Recently, I showed one chapter of my new  Java tutorial to a very experienced Java developer. He was surprised  that I included an example of BitSet there. This is what he said – word  for word, “Perhaps your experience is different than mine, but I don&#8217;t  think I&#8217;ve ever seen this class used in practice. It really feels a bit  old-fashioned, and C-like. In 2010 I&#8217;m not sure anyone writing code in  Java really worries about this level of saving bits. Maybe it still  relevant in some embedded systems, but do those systems actually run  Java?”</p>
<p>Ten years ago I was working on developing an equity trading  system for a Wall Street company.  It was a J2EE application with a  heavy use of messaging. A trading order had to be sent to a queue, and  this was an object with about 50 fields with yes/no values.  Using  BitSet for sending a set of flags (bits that are set to 1 or 0) instead  of text or numbers is the most economical way to do this. Did I care  that a programmer who’d be reading my code a year from now won’t  immediately understand that just a couple of bytes carried had tons of  information about the order? I did not. This piece of code was not  readable, but efficient.</p>
<p>IMO, in the ideal world of inhabited by  skilled software engineers, the code has to be written for computers.  But we don’t live in the perfect world. So I don’t insist.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/12/13/hacking-or-design-patterns/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Attending Adobe and RIM Playbook seminar</title>
		<link>http://flexblog.faratasystems.com/2010/12/08/attending-adobe-and-rim-playbook-seminar</link>
		<comments>http://flexblog.faratasystems.com/2010/12/08/attending-adobe-and-rim-playbook-seminar#comments</comments>
		<pubDate>Thu, 09 Dec 2010 02:32:18 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/2010/12/08/attending-adobe-and-rim-playbook-seminar</guid>
		<description><![CDATA[I spent a day today attending Adobe and RIM (producer of  all-over-the-place Blackberry) seminar about developing software for the  upcoming Playbook tablet.  If you haven’t heard about the Playbook yet,  it’s a 7” dual-core 1Ghz machine with 1Gb of RAM, two video cameras,  and multi-tasking.
I was there for a very practical [...]]]></description>
			<content:encoded><![CDATA[<p>I spent a day today attending Adobe and RIM (producer of  all-over-the-place Blackberry) seminar about developing software for the  upcoming Playbook tablet.  If you haven’t heard about the Playbook yet,  it’s a 7” dual-core 1Ghz machine with 1Gb of RAM, two video cameras,  and multi-tasking.</p>
<p>I was there for a very practical reason trying to evaluate this  hardware to be a platform for the mobile version of our software product  – <a href="http://surancebay.com/">Licensing and Contracting</a> for insurance agents. The desktop version of this product is a pretty  advanced Adobe AIR application that automates processing of lots of PDF  forms, engages OCR technologies, uses Web Services, et al.</p>
<p>While we are already working on creation of the Android of this  product and have concrete plans for iPads,  it would be simply wrong to  ignore the company that have already sold 115 millions of Blackberries  and is about to release a tablet that will compliment their hugely  popular smart phone.</p>
<p>Adobe and RIM work very closely on this device. All applications  that come with Playbook are written in Adobe AIR. Flash Builder Burrito  IDE streamlines creation of the mobile application s in general and for  the Playbook tablet in particular.  Of course, the entire platform has a  room to grow, but I have no doubts that next year AIR will feel at home  on the Playbook’s OS called QNX.</p>
<p>The tablet looks likes a smaller version of iPad. The screen resolution  is 1024&#215;600. The 600 seems a bit low for the enterprise applications  though.  The video rendering is really fast. Flash Player 10.1 is  supported.</p>
<p>Based on the needs of our insurance application, we’ll have to  wait and see, because today’s Playbook doesn’t support working with PDF,  which is crucial for us. Next year this device will support Blackberry  Java Development Environment.</p>
<p>Overall, it’s a nice device.  Currently there are no fees for  joining  Blackberry Application World, where early adopters can get all  required software for the creation of applications for Playbook. Adobe  evangelists have already created a handful of applications demoing  features of this new device.</p>
<p>I have one more concern related to development under MAC OS (based on my  observations, 50% of developers who work with Adobe software are  carrying MacBooks). The requirement to have a full version of VMWare  Fusion will make development for Playbook not overly productive unless  you have 8Gb or RAM.</p>
<p>The Spring of 2011 will be a very exiting time for those who  already understand that tablets are the new trend. Variety of new  devices are going to be released soon, and don’t forget about Apple  engineers, who I’m sure, are working hard on a dual CPU successor of the  iPad.</p>
<p>Next year, we’ll definitely release a new version of our  application &#8211; an insurance agent will be selling you term life carrying a  small tablet talking to a cloud in occasionally connected environment.  The trucks full of paper forms will become history. We’ll just need to  decide, which tablet will become our pilot.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/12/08/attending-adobe-and-rim-playbook-seminar/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A new Kind of Java Tutorial is Almost Ready</title>
		<link>http://flexblog.faratasystems.com/2010/11/27/a-new-kind-of-java-tutorial-is-almost-ready</link>
		<comments>http://flexblog.faratasystems.com/2010/11/27/a-new-kind-of-java-tutorial-is-almost-ready#comments</comments>
		<pubDate>Sat, 27 Nov 2010 22:22:11 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=939</guid>
		<description><![CDATA[During the last six months I had a pet project for Wiley Publishing.  I’ve been writing a new Java tutorial. It’ll teach Java programming in a  little bit different style than traditional Java books. But let me tell  you what’s the title of the book: &#8220;Java Programming 24-Hour Trainer&#8221;.  I  can [...]]]></description>
			<content:encoded><![CDATA[<p>During the last six months I had a pet project for Wiley Publishing.  I’ve been writing a new Java tutorial. It’ll teach Java programming in a  little bit different style than traditional Java books. But let me tell  you what’s the title of the book: &#8220;Java Programming 24-Hour Trainer&#8221;.  I  can almost hear the voices, &#8220;Yeah, yeah, yeah…Yet another promise to  teach me Java in no time. How about teaching me Java in 24 minutes?&#8221;</p>
<p>This is not to state that you can learn the software covered in this  book within 24 hours of studying. This is about having a trainer that’s  with you 24 hours a day. This book is a set of short chapters with  minimum amount of theory but with an instructional DVD, with screencasts  recorded by yours truly. There is a screencast for each lesson except  the last one.<br />
This relatively small 500-page book consists  of 38 lessons and covers both Core Java and Java EE 6.  Each lesson is  from 10 to 15 pages long so you won’t even have time to fall asleep.  Each screencast is from five to ten minute long so you won’t have time  to get bored. At the end of this lesson is an assignment to complete. In  this book I use Eclipse IDE and GlassFish v3 is the application server  that I like.</p>
<p>Just look at these thirty eight lesson titles and  give me a good reason why you shouldn’t be pre-ordering this book. Know  Java already? Doesn’t really matter. I thought I knew it too before I  started writing this book. Now I know it better. It’ll help the newbie’s  to learn and seasoned Java programmers to refresh their knowledge,  especially when it’s time to make a career move. These are the lesson  titles:</p>
<p>1    Introducing Java<br />
2    Eclipse IDE<br />
3    Object-Oriented Programming<br />
4    Class Methods<br />
5    Back to Java Basics<br />
6    Packages, Interfaces and Encapsulation<br />
7    Programming with Abstract Classes and Interfaces<br />
8    Introducing the Graphic User Interface<br />
9    Event Handling in UI<br />
10    Introduction to Java Applets<br />
11    Developing a Tic-Tac-Toe Applet<br />
12    Developing a Ping-Pong Game<br />
13    Error Handling<br />
14    Introduction to Collections<br />
15    Introduction to Generics<br />
16    Working with Streams<br />
17    Java Serialization<br />
18    Network Programming<br />
19    Sending E-mails with Java<br />
20    Introduction to Multi-threading<br />
21    Digging Deeper into Concurrent Execution<br />
22    Working with Databases Using JDBC<br />
23    Swing with JTable<br />
24    Annotations and Reflection<br />
25    Remove Method Invocation<br />
26    Java EE 6 Overview<br />
27    Programming with Servlets<br />
28    JavaServer Pages<br />
29    Developing Web Applications with JSF<br />
30    Introducing JMS and MOM<br />
31     Introducing JNDI<br />
32    Introduction to Enterprise JavaBeans<br />
33    Introduction to Java Persistence API<br />
34    Working with RESTful Web Services<br />
35    Introduction to Spring MVC Framework<br />
36    Introduction to Hibernate Framework<br />
37    Bringing JavaFX to the mix<br />
38    Java Technical Interviews</p>
<p>This book will hit the bookstores in February and you can pre-order it on Amazon at <strong><a href="http://amzn.to/eP6UKy">this address</a></strong>. I hope you’ll enjoy reading this book as much as I enjoyed writing it.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/11/27/a-new-kind-of-java-tutorial-is-almost-ready/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

