Skip to content

Farata Systems
Syndicate content
A blog about our experience with Adobe Flex
Updated: 3 hours 49 min ago

Notes of a lifelong IT student

Wed, 07/21/2010 - 04:34

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 write a sequel from the student’s point of view. You got it.

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.

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.
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.
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.

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.

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.

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.

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.

Check the training catalogs of your local universities, where evening classes in schools of continuing education are often taught by practitioners.

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.

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.

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: Java One by Oracle and Adobe MAX, 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 Third Annual Flex Symposium here in New York City.  I like being in classrooms.

Yakov Fain

Categories: Companies

Enterprise Development with Flex

Sun, 07/11/2010 - 15:12

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 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.

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.

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.

Our praise goes to the O’Reilly cover designers who correctly visualized three authors of this book without ever meeting them in person.

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.

Your truly,
Yakov Fain

Categories: Companies

Disappointed with Adobe

Wed, 06/23/2010 - 05:05

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 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.
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.

Let me build the case. Slowly.
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.

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.

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.

But Adobe didn’t have competition in the area of enterprise rich Internet applications in 2006, 2007, 2008… 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.

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?

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.
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”.

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.
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.

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?
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?

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.

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.

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.

Yakov Fain
P.S. This is my personal opinion. My employer may think differently.

Categories: Companies

Disappointed with Flex 4

Tue, 06/22/2010 - 20:05

After spending some time working with Flex 4 on a real project, I can’t say I’m happy with this product. My list of complains  is based on moderate sized project, 5 months, 4 developers, WebService-only back-end.

1. Flash Builder 4 has lots of issues – more than Flex Builder 3. AS of today it has lots of bugs:
-it doesn’t release resources;
-debugger does not allow to run several instances and consumes a lot of resources;
-debugger intercepts all network calls and the debugging proxy is terribly slow and inefficient;
-code navigation between several projects is absolutely impossible;
-compiler is unpredictable and slow;
-it periodically tries to do incremental compilation, even if you explicitly tell it not to do so — and you have to disable incremental compilation, because it’s slower than full rebuild of all related projects with Maven.
-Help system is not well designed — Adobe moved help to a separate AIRr application, in-place contextual help is non-existent; search always shows one link — “yes, there are probably some topics for your query — open separate application to search again”

2. Flex compiler is broken
It’s slow. It’s slower than any previous version I’ve used. And it’s buggy. Periodically it shows some cryptic messages like “there is no x or y or width or height properties on UIComponent”. It never points to exact source of problem — and I doubt it exists. Because sometimes fix is to set “-keep-generated-actionscript” flag on. And sometimes off. And if it doesn’t help then the fix is to reorder attributes in MXML tags. Just insane. And I can’t find the exact root of these messages, the only thing I can say for sure that they are caused by new MXML skins — no skins, no errors.

3. The new Spark library is over-engineered.
I worked on some Java Swing projects some time ago. It seems that Adobe takes the Swing route, however Flex becomes popular just because of the opposite — it was way far simpler than Swing. Flex ideology was “keep simple things simple, make complex things possible”. Now it turns to be the Swing ideology: framework usage is irrelevant, the only relevant thing is framework per se, and it should be perfect.

I can’t do a lot of things with Spark I was able to do with MX. Icons in buttons? Develop descendant component of Button, define new parts and develop separate skin. ComboBox where items in drop-down are large than input field? Develop own skin — just copy-paste and tweak a bit. Paddings? What paddings? It’s not a css attribute any longer, extend and develop own skin. Left/right/top/bottom? You can’t customize this via css, or develop your skin if you truly need this option.

But architecturally Spark is beautiful, no doubt. Astronauticaly beautifull architecture, if Joel Spolsky permits me to use this term.

4. New Spark library is incomplete.
Yes, this statement doesn’t contradict with [3]. Being overdesigned it’s missing a lot of functionality from MX: no Calendar, no DateInput, no ColorPicker, no PopUpButton etc. No clone for MX SWFLoader/Image. There is no complex containers at all (like Accordion and TabNavigator) Needless to say, there is no advanced controls like DataGrid and the supplied “proxies” for ItemRenderers confirm that there are will be none any time soon.

5. New states engine encourages unmaintainable code
Previously we have states with explicit overrides. All data related to override was co-located, so it was easy to see what and when changes. There were inheritance of states, and it was sufficient. There were no groups, but when you need state groups — then 99.9% of times you in fact have to extract part of component as sub-component, and coordinate isolated state changes there. But now the great property.inStateFoo=”xyz” notation comes.

Now you have to scan over tens or hundreds of lines of code and check all and every includeIn / excludeFrom attribute and decompose them back to the very same old “overrides”. In short, when you are debugging states you have to do job of compiler but without the help of compiler. And the existence of state groups multiples the complexity by the factor of ten. It’s a Ruby-way productivity — it’s easy to develop a sketch / prototype, it’s a nightmare to polish this sketch to be a real product and it’s absolutely impossible to support it. But sure, you can start quickly, who cares about the rest…

6.  Vectors (Flash-10 related, not just Flex 4)
Vector is a canonical example of a half-pregnant woman. Hey, developers! Use new features -  Vectors and Generics (or this is templates??? we are not sure on our own). Yep, it’s cool, Vector is a parametrized type. Though, there is no type covariance/contr-variance and no type bounds in syntax. So you have to cast data Vector whenever it’s declared as parameter or as a return value. But who cares?

7. Text engine (Flash-10 related, not Flex 4 only)
It’s great that “Gordon works on text”, and new engine is indeed superior. But may we have both Spark and MX on same engine by default without the dual way to embed fonts and dual size of embedded fonts?

Am I missing something?

Valery Silaev

Categories: Companies

Four-day Advanced Flex Master Class

Tue, 06/15/2010 - 01:48

We’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

Categories: Companies

A Quick Tutorial on Casting

Thu, 06/10/2010 - 17:46

Recently, I’ve been teaching a class and one of the students stopped by after the class and said, “I’m just learning object-oriented programming, can you explain me the benefits of casting?”. 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’ve been using example from Java language here, but all this apply to other object-oriented languages too.

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.

NJTax myTax1 = new NJTax();
Tax myTax2 = new NJTax(); // upcasting
Object myTax3 = new NJTax(); // upcasting

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?

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?

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:

Person workers[] = new Person [100];
workers[0] = new Employee(“Yakov”, “Fain”);
workers[1] = new Employee(“Mary”, “Lou”);
workers[2] = new Contractor(“Bill”, “Shaw”);

Of course, you could’ve created two separate arrays for employees and contractors, but I’m laying the foundation here for explaining polymorphism – a powerful concept of object-oriented languages.

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.

for (int i; i<20; i++){
Employee currentEmployee;
Contractor currentContractor;

if (worksers[i] instanceof Employee){
currentEmployee = (Employee) workers[i];
// do some employee processing here
} else if (worksers[i] instanceof Contractor){
currentContractor = (Contractor) workers[i];
// do some contractor processing here
}
}

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.
If a class implements an interface, you can cast it to this interface. Say, a class Employee implements Payable, Insurable, Pensionable interfaces:

class Employee implements Payable, Insurable, and Pensionable {
// implementation of all interfaces goes here
}

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.

Insurable currentEmployee;

if (worksers[i] instanceof Employee Insurable){
currentEmployee = (Insurable) workers[i];
// do some insurance-specific processing here
}

Is it clear enough? I’d appreciate your feedback.

Yakov Fain

Categories: Companies

Think twice before declaring a Java method as final

Mon, 06/07/2010 - 17:24

If you create classes that may be used by other developers, declaring methods as final will make them not overridable in the subclasses.

 

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’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?
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.

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.

 

Originally, Java compiler was optimizing (inlining) final methods. Today I’ve learned (thank you, Heinz) that Java compiler doesn’t do it anymore, and they are optimized by the Hotspot JVM:

http://www.javaspecialists.eu/archive/Issue157.html

http://www.javaspecialists.eu/archive/Issue158.html

Who are these guys we’re protecting from by using final? BTW, I also believe that the keyword protected is equally useless.

 

Yakov Fain

Categories: Companies

Few notes on iPhone replacement

Wed, 06/02/2010 - 03:29

As many Flex developers waiting for release of Flex on iPhone for over a year, last 2 months were Denial, Anger, Bargaining, Depression and finally Acceptance. The acceptance came in the form of the Android phone and new battlefields/pastures.

Apple and Google are in open war right now – over tv/media, virtual assistants, navigation and ads. Lately it became obvious that workspace and social networking are also becoming part of the battle – and that is the fields we specialize, so we need to adopt.

I picked up Nexus One recently to do some research work. N1 is a bit better as research device then particular carriers ones as you can share the same providers card with your iPhone (no extra contract). I am quite used of swapping AT&T cards from iPhone with other phones (50$ Samsung phone +iPhone account = better phone + bluetooth/usb network hotspot, etc). It also has no provider’s protection so updating software and rooting is a bit simpler.

Let’s make sure you have been warned: N1 is not a replacement for iPhone for consumer or either status seekers/heavy phone users. It has some significant pluses – better Navigation, voice integration and web experience are superb. Hardware spec beats 3GS easily, but the actual hardware quality is sub par:
- quality of the phone subsystem (signal reception, sound quality, integration with provider) is much lower
- quality of the screen is bad ( easily greased, bad touchscreen recognition, predictable typing is not working as expected)
- touchscreen and buttons do not always respond as expeced.

Once you accept that Google phone is development device and not your primary phone, you can appreciate really great features it provides for software enthusiasts:
- open development environment including AIR with reasonable debugging and diagnostics
- top of the line hardware stack including fast CPU
- standard open OS

The last few weeks spent with physical device were a lot of fun. The development cycle is much faster then with iPhone and the applications perform MUCH better. There are quite few adjustments you need to make to your development in order to deploy application on the phone, but I will talk about it in the next post. For now, grab your Android phone and experience new platform for yourself.

Sincerely,
Anatole Tartakovsky

Categories: Companies

Where to find enterprise Flex developers?

Fri, 05/28/2010 - 12:13

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.

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.

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.

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.

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.

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.

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…

Anyway, are you looking for senior enterprise Flex developers? Me too.

Yakov Fain

Categories: Companies

Upcoming public Flex training and New Jersey User Groups

Fri, 05/21/2010 - 12:48

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 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.
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.
5.    Recruiters have hard times finding developers with Flex/Java skills.
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.
7.    My role is to bring qualified presenters and present myself on the subjects that interest enterprise Flex and Java Developers.
8.    All of the above is a just part of my contribution to Flex and Java community.
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 visit this site.
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 the registration page.

11. In August-September I’ll be running a week of online live Intro to Java class – stay tuned.

That’s all folks. See you in one of the meeting rooms.

Yakov Fain

Categories: Companies

How the Flex Framework Cairngorm 2 Died

Wed, 05/19/2010 - 17:38

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 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’s the just one of of these occasions – a video of the panel on enterprise frameworks at Adobe MAX 2008 (after this blog, I doubt that I’ll ever be approved as a MAX speaker again).

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.

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).

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.

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.

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.

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.

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.

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.
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.”

Will it happen? Let’s wait and see.

Yakov Fain
P.S. The views and opinions expressed in this blog are purely my own and don’t represent views of my employer

Categories: Companies

Presentation slides from Flash and the City 2010

Sun, 05/16/2010 - 14:57

Yesterday, I’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’ve demonstrated our new Flex 4 spark-based DataForm container with convenient layout manager, data provider and both form and form item level validators.

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’s hard to get support from Adobe. If you don’t know what unreliable AMF messaging is, read this post. We already had a number of projects started form a phone call, “One of our clients doesn’t receive responses to RemoteObject requests…once in a while. Others seems to be fine. Can you help?” Yes we can.

You can download the presentation slides here.
There were no video recording crew at the conference, but due to multiple requests, I’ll record this presentation and publish it as a screencast in early June.

My special thanks to Adobe for raising LCDS prices – this means more business for us as more and more corporate clients are looking for reasonably priced solution and architect their projects using BlazeDS.
Farata Systems will gladly help our clients in building robust, scalable, and reliable Flex-BlazeDS-Java applications.

If you are new to Flex, consider taking this 5-day live online training course.

Yakov Fain

Categories: Companies

Missing AMF requests/responses

Sat, 05/15/2010 - 19:03

Every month we get calls from new Flex clients with exactly the same question: can we help to fix strange networking problems. The application they fully tested exhibits very strange problems for some users once released in the wild. Here is a brief list of the problems they have seen:
1. Missing packages coming from client going to the serer (majority of the problem cases)
2. Missing responses ( coming from server to client)
3. Out of sequence execution of the server calls
4. Duplicate requests to the server
Interesting enough, the popular belief is that TCP/IP protocol takes care of all these problems and it is not responsibility of the developers to deal with these issues.

Unfortunately, living with the problems above is a typical WAN way of life, and TCP/IP protocol provides reliability on LANs only. To make the matters worse, applications are tested on LANs and extremely reliable “local WANs”. As a result, they are not tested at all for this type of the issues. And with thousands of small AMF requests per session even fraction of percent of lost packages affects the reliability of application.

Once application is in this state, typical response from development teams is to add application error handling and do more testing. Unfortunately, this testing is also done on LAN, and reliable WANS. Plus due to the non-deterministic nature of the lost packages conventional testing does not help much.

The advice I usually give to our clients is to fix the problem on communication protocol level (in a layer between the Flex Framework and Application) rather then in the application code. Usually it involves creation “ReliableAMFChannel” ActionScript class on the client side and customized Java Endpoint on the server side. These classes are primarily responsible for the following:
1. Keeping copies of the original requests(client) and responses (server) till they are confirmed or answered by the other side.
2. Managing resending of unconfirmed requests/responses after certain timeout.
3. Filtering out duplicate/already executed requests/responses
4. Fixing the order of requests/responses to prevent execution “out of order”

Usually it is implemented as 5-10 days project to integrate reference implementation code with the client codebase, provide resynchronization logic (login/reconnect) and timeouts’ optimization. I usually recommend to move long running requests to messaging as a part of the same effort as those have a long list of their own related issues, which I’ll cover in the next post.

If you are new to Flex, consider taking this 5-day live online training course.

Sincerely,
Anatole Tartakovsky

Categories: Companies

Getting Overloaded With Training Requests

Thu, 04/29/2010 - 16:56

For some (good) reason we are getting bombarded with Flex training requests of various kinds. Not sure if this is a side effect of our recently released book Enterprise Development with Flex (it stays in the Amazon’s bestsellers list in several categories) or maybe it’s just something in the air…

 

Here’s my current calendar:

 

April 26-30: Teaching a week of Flex intro at Home Depot, Atlanta, GA
May 10-14, Teaching Adobe Certified Flex 4 (!) class at AT&T, New Jersey
May 15, Speaking at Flash and the City in New York on LCDS alternatives.
May 17, Teaching a one-day workshop on modularization of Flex applications (btw, if you enter discount code saynotowifi you’ll get $100 off the price)
May 20-21, Teaching a 2-day Advanced Flex seminar at AT&T in New Jersey
May 24-28, Teaching an intro Flex class at Home Depot in Atlanta, GA
June 7-8, Teaching a 2-day Advanced Flex seminar for a private client in
Casablanca, Morocco.
June 21-25, Teaching an Intro Flex class to a private client.

My colleague Victor is finishing consulting project and will be running two two-weeks training engagements for a private Middle-East client. This will be a a mix of formal classes and one-on-one mentoring sessions.

On our waiting list, we have two requests for a one-day Modularization workshop from and two-day Flex overview from private clients. They want me it in May…

Also, we’re planning to start running online live Flex and Java training classes, but that’s in July.

And let me tell you, I love being overloaded with training requests!

Yakov Fain

Categories: Companies

We’ll help with your Flex problem, and you pay whatever you feel is fair

Tue, 04/20/2010 - 04:11

We’re proud to announce  a new consulting service by Farata Systems:

We suggest a solution to your Flex problem within two business days. You pay us after that whatever you feel is fair.

 

Here’s how it works:

1. You contact us explaining the issue your enterprise Flex RIA is facing.

2. We analyze your issue and within two business days suggest a solution to your problem.  Most likely we’ll either need to review your code or will ask for a test application that reproduces the issue you’re having.

3. We’ll send you a link to pay for the service with an empty field “Amount”. You enter the amount and pay whatever you feel is fair. No matter what amount you are going to enter (including $0), we’ll take it, no questions asked.

 

This offer is valid only to enterprise teams working on Flex/Java projects. This is not an offer for fix bugs of every software developer working with Flex .

 

Why have we decided to announce this new service? Well, technically it’s not new. Pretty often we are presented with a problem by a perspective client, then we spend some time finding the proper remedy, present it to the requester, which pretty often turns into a new contract. It just seemed the right thing to explicitly offer this service when many project managers may not even know that there is an affordable solution to their problem.

 

Too good to be true? Try it. Fill out the Contact Us form at faratasystems.com. New clients only.

Categories: Companies

Oops, Apple did it again

Sun, 04/11/2010 - 17:03

Here it goes – Apple officially locked itself out from majority of development community again. While people are trying to find justification for such move ( http://www.taoeffect.com/blog/2010/04/steve-jobs-response-on-section-3-3-1/ ) and while it came as a shock to some Adobe developers ( http://theflashblog.com/?p=1888 ) I actually have deja vu of 1991 / NeXT Computer fiasco. NeXT was the best PC of 1991. First browsers/servers were developed on NeXT platform. I took time to learn Objective-C and developed for that platform. But proprietary language and hardware lock drove the company in the ground. The truth being told, people make the same mistakes again and again, and Steve Jobs is no different. So the only question remains – will it will be fixed soon enough via Adobe/Apple negotiations and public outrage or Apple will win this battle and loose the war to Google, RIM and Microsoft.

Technically Apple’s terms and reasonings are absurd. The quality of the code is not related to the language. Specialized p-code languages sometimes outperform native ones by highly optimizing (even writing in assembly for specific CPUs) critical parts. In case of Flash/AIR a lot was done to support GPU that would take ages for regular C++ developers to even approach. P-code toolkit can include generation of C/C++ code – however it would be just a waste of developers time to do so.

I have been using Apple products exclusively for the last 3 years and I really enjoyed ability not to deal Windows problems during the development process and still reliably deploy (thanks to Adobe) on 100% of PCs regardless of OS. Performance was never an issue for our apps, and we had steady job helping others to achieve good/excellent performance.

Apple has 3 month to fix this mistake. After that developers will make choice – Adobe or Apple. It will mean significant boost for Google, RIM and Microsoft – and end of Apple growth. At that time, if not resolved, I will be selling my Apple stock. Reasons are simple : in the last 3 years I personally spent about $15K on Apple products, planning to spend at least the same amount over the next 3 years. I was planning to replace my development machine Mac Pro dual Xeon/20GB/10TB for faster one by the end of the summer – looks like it will be Linux server as without platform neutrality it will be easier to at least have development and deployment platforms the same. With developers fallout getting tools and new software for OSX will be even more difficult, so developers need to move toward growing platform. It is really a shame, as Apple really had a chance to become the biggest player in the new market.

In meanwhile, it is time to shop for Nexus phone and Linux development machine.

Sincerely
Anatole Tartakovsky

Categories: Companies