<?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 &#187; Yakov Fain</title>
	<atom:link href="http://flexblog.faratasystems.com/author/yakov/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>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>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>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>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('p1165code5'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p11655"><td class="code" id="p1165code5"><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('p1165code6'); return false;">View Code</a> </span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p11656"><td class="code" id="p1165code6"><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>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>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>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>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>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>
		<item>
		<title>Flex Camp Wall Street &#8211; next Monday</title>
		<link>http://flexblog.faratasystems.com/2010/11/09/flex-camp-wall-street-next-monday</link>
		<comments>http://flexblog.faratasystems.com/2010/11/09/flex-camp-wall-street-next-monday#comments</comments>
		<pubDate>Tue, 09 Nov 2010 10:20:08 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=937</guid>
		<description><![CDATA[A good mix of practitioners and Adobe Evangelists will be presenting on various topics related to using Adobe Flex in the real-world projects. Farata Systems will be represented by Victor Rasputnis and myself. Hope to see you there.
Victor will show you how to generate complete CRUD Adobe Flex/BlazeDS applications based on  Hibernate framework on [...]]]></description>
			<content:encoded><![CDATA[<p>A good mix of practitioners and Adobe Evangelists will be presenting on various topics related to using Adobe Flex in the real-world projects. Farata Systems will be represented by Victor Rasputnis and myself. Hope to see you there.</p>
<p>Victor will show you how to generate complete CRUD Adobe Flex/BlazeDS applications based on  Hibernate framework on the Java server side. Clear DataBuilder Eclipse  plugin will assist us in annotating Java interface without the need to  do manual coding and configuration. You will see remote lazy loading of  the collections, server-less transactions controlled from the client  and,  integration with Adobe Fiber &#8211; a model-driven development  environment of Adobe LCDS&#8230; but with BlazeDS.<br />
I&#8217;ll talk about making networking of Wall Street applications reliable with BlazeDS. Loosing a trade order is not an option. But using free and open source BlazeDS for Flex/Java communications doesn’t guarantee 100% of all your clients’ orders will reach the destinations. This talk is an overview of networking problems of Flex-BlazeDS enterprise applications with the demo of the error-emulating protocol, which concludes with introducing of reliable AMF channels.</p>
<p>Visit the Web page of <a href="http://www.flexcampwallstreet.com/">Flex Camp Wall Street</a> for more details.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/11/09/flex-camp-wall-street-next-monday/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Will teach Public Java class in New York City</title>
		<link>http://flexblog.faratasystems.com/2010/10/17/933</link>
		<comments>http://flexblog.faratasystems.com/2010/10/17/933#comments</comments>
		<pubDate>Sun, 17 Oct 2010 17:14:56 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=933</guid>
		<description><![CDATA[I&#8217;ll be teaching a hands-on Java/Java EE class in December in New  York City. If you know any other programming language, this may become  your chance to jump into the enterprise Java development. It won&#8217;t be  easy to get from zero to hero in just five days, but it&#8217;s doable with  [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be teaching a hands-on Java/Java EE class in December in New  York City. If you know any other programming language, this may become  your chance to jump into the enterprise Java development. It won&#8217;t be  easy to get from zero to hero in just five days, but it&#8217;s doable with  the right motivation. During the first three days you&#8217;ll be learning the  Java language as it&#8217;s used for programming for the client side (Java  SE), and the last two days are for developing on the server side with  the latest Java EE 6 technologies.</p>
<p>If interested, register <strong><a href="http://www.eventbrite.com/event/948790859">here</a></strong>. While you&#8217;ll be enjoying my class, your spouse will enjoy Christmas shopping in New York City.</p>
<p>If you want me to teach this class privately on-site in your organization, send me an email at yfain at faratasystems.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/10/17/933/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JavaOne != javaone</title>
		<link>http://flexblog.faratasystems.com/2010/09/23/javaone-javaone</link>
		<comments>http://flexblog.faratasystems.com/2010/09/23/javaone-javaone#comments</comments>
		<pubDate>Fri, 24 Sep 2010 01:37:52 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[javaone]]></category>

		<guid isPermaLink="false">http://flexblog.faratasystems.com/?p=923</guid>
		<description><![CDATA[Tonight I’m going back home after attending JavaOne 2010. These are my fresh notes about this event.
If  you are reading this, you know something about Java. At the very least  you know that this is a case-sensitive programming language and the HelloWorld is not the same as helloworld. If you don’t know this [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight I’m going back home after attending JavaOne 2010. These are my fresh notes about this event.<br />
If  you are reading this, you know something about Java. At the very least  you know that this is a case-sensitive programming language and the <em>HelloWorld</em> is not the same as <em>helloworld</em>. If you don’t know this much, consider listening my new audio podcasts “<a href="http://nobsit.libsyn.com/">Java for Blondes</a>&#8220;.</p>
<p><strong>Attendance</strong></p>
<p>On  the same note, Sun’s JavaOne was not the same as Oracle’s javaone. This  year it’s a small conference. It felt small. Even though it’s a part of  the huge Oracle Open World conference (41 thousand attendees), JavaOne  crowd was modest. I don’t have the numbers, but based on my past  experience. It seems that only between three and four thousands of Java  people are here.  At the end of 90th, the peek attendance at JavaOne  allegedly was around 15K, and in 2006 &#8211; 12K.</p>
<p>Forget about  technical session attended by 500+ developers. Most of the auditoriums  were for 100 or less attendees. Javaone 2010 had obvious symptoms of men  disorder called <a href="http://www.youtube.com/watch?v=8DoARSlv-HU">Shrinkage</a> .</p>
<p><strong>Lawyers<br />
</strong><br />
The  other thing I miss was the excitement. Didn’t feel it. Oracle is about  business. I got a feeling that lawyers run Oracle, not engineers. Just  read these evidences I’ve collected during these three days.</p>
<p>1.  To get the wi-fi access, you’d have to read and agree to the following  statement, ”Use of this Internet connection is intended solely for  Oracle OpenWorld, Java One and Oracle Develop attendees. Unauthorized  access or use may result in termination of your access, disciplinary  action and/or civil or criminal penalties. To the extent permitted by  law, your use may be monitored.” But guess what, Internet connection  really worked! Now I know, that the wi-fi issues on other conferences  are caused by criminal bastards that are sneaking into the event venues  and perform unauthorized access.</p>
<p>2. Every slide deck of the  presenters working for Oracle had a slide that started like this  “The  preceding is intended to outline our general product directions. It is  intended for information purposes only&#8230;” Basically they didn’t live me  a chance to sue them if the syntax of closures in the project Lambda  will change between now and release of Java 8 in 2012.</p>
<p>3. Before  the Java keynote on Monday night, the voice have read pretty long  message from the lawyers. This message was also conveniently displayed  on the screen for deaf people.</p>
<p>4. Oracle employees are trained  to say “No comments” to strangers. First, one of the Oracle people told  me this at a party, and then, executive VP of product development has  demonstrated this technique when asked about Gosling’s initiatives <a href="http://www.computerworld.com/s/article/9187080/Oracle_silent_on_Gosling_s_Java_initiative?source=CTWNLE_nlt_dailyam_2010-09-22">by Computer World</a>.</p>
<p><strong>Session Scheduling<br />
</strong><br />
I  don&#8217;t know if Sun Microsystems made any profit on previous JavaOne&#8217;s,  but for Oracle this conference is clearly business.  I’m not even  talking about the airline-quality lunches. They wanted to save money on  the venue. The rooms for presentations were smaller than needed and  people who didn’t pre-registered for the talk routinely were standing in  lines hoping to get in. I wouldn’t think it take a rocket scientist to  predict that Brian Goetz will easily fill the room. Apparently I was  wrong. After waiting in line for 15 minutes into the presentation I gave  up.</p>
<p>People who planned the room/talks had no clue who is who in  the Java community. Because of this, lots of talks were rescheduled . If  you didn’t pre-register, upon arrival you could find out that this  session is not here any longer. Where? Sorry apparently it was  cancelled.  The scheduling and notification systems were poorly done.</p>
<p>One  hands-on lab (was there more than one lab?) was rescheduled 20 minutes  before it was supposed to start, and two hours later went as an  instructor’s demo because of some technical issues. Unpreparedness.</p>
<p><strong>The bright side<br />
</strong><br />
I  didn’t pay for the conference pass. My kudos to Oracle for giving free  passes to all Java Champions from around the world who wanted to come. I  also enjoyed preferred seating at the JavaOne, private meeting with  Olympic Champion Apolo Ohno, party with JUG leaders, and nice jacket  with the JC logo. My special thanks to people at Oracle who are  responsible for JUGs and Java Champions programs.</p>
<p><strong>Cinderella</strong></p>
<p>When I was walking to the Hilton hotel to register at JavaOne, I noticed these <a href="http://files.blog-city.com/files/M05/130614/p/f/javaone.jpg">colorful pavement signs</a>.  Did you get the message? I did. Oracle Develop and JavaOne are moving  in opposite directions. Yes, JavaOne was Cinderella at Oracle’s ball.  But the Cindirella story had a happy end, remember? Pretty soon expect  to see an online post addressed to Oracle regarding the future of  JavaOne. Something’s gotta give.</p>
<p>Yakov Fain</p>
]]></content:encoded>
			<wfw:commentRss>http://flexblog.faratasystems.com/2010/09/23/javaone-javaone/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Clear Data Builder 4.0 doc</title>
		<link>http://flexblog.faratasystems.com/2010/08/26/new-clear-data-builder-4-0-doc</link>
		<comments>http://flexblog.faratasystems.com/2010/08/26/new-clear-data-builder-4-0-doc#comments</comments>
		<pubDate>Thu, 26 Aug 2010 15:39:38 +0000</pubDate>
		<dc:creator>Yakov Fain</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[CDB]]></category>

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

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

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

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

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

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

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

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

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

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

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

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

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

