« Palm Pre - finally a substantial iPhone competitor?Armani Exchange new branding »

12 comments

Comment from: Eric A. Gravel [Visitor]
Interesting post.

Btw, your last paragraph says:

"As a result, I plan on working with stateful skins ..."

Do you mean "stateful" or "stateless"? I would think you meant to say the latter since the problem is with stateful CSS, correct?


Anyway, I'm trying to push our team, which is primarly Java focused, to consider implementing a very large application in Flex. I've been pushing it since I think it could meet our no more than 1 second screen refresh/transition requirements and ease of development, and such.

I'm starting to wonder if their concerns are justified. How large is your application? Do you have any books, articles, and such to guide me in architecting such large applications to be performant and scalable?

One of the things I started doing to allow parallel development is to break the code in module (as I would do in Java/Servlet/JSP) but I'm running in the problem of having to create a TON of namespace. Anyone to avoid this when using packages such as:

com.company.project.events.module1
com.company.project.events.module2
com.company.project.maps.module1
com.company.project.maps.module2
com.company.project.managers.module1
com.company.project.managers.module2
com.company.project.views.module1
com.company.project.views.module2


If I need views from module1 and module2 then I need to create a namespace for both... quite annoying.
03/05/09 @ 16:08
Comment from: artistiq [Member] Email
Yes, I meant stateless - I did correct it - Thank you.

I forwarded your reply to a developer that I work with, Sean Christmann, who would be a lot more qualified to help you out with your question.

Greg Owen, who also posted about this subject, may get back to you as well.

I'm primarily a designer who messes around with some development, but only to a certain extent.

Sean Christmann's blog:
http://www.craftymind.com/

Thanks
03/05/09 @ 17:14
Comment from: Sean Christmann [Visitor] · http://www.craftymind.com
Eric

When addressing performance on large scale applications you will need to lean heavily on the power of ViewStacks. These are usually linked pretty tightly to whatever navigational elements you use whether its a tab navigator, accordion or tree navigation. Controlling how views load in and out of viewstacks is going to cover most of your performance concerns as an application-wide policy.

Modules are not a good solution for managing developer workflow, they're better for managing application architecture. Modules work well where there is a logical separation of different areas of the app(like portal apps), they don't work well when you want to have 2 different developers working in the same area. Otherwise, like you've noted, you just end up bloating your namespaces
03/05/09 @ 17:44
Comment from: ZaBlanc [Visitor] · http://raptureinvenice.blogspot.com/
Eric,

If you're doing module development, each module would only use the views and event, etc., necessary for that module, so there should be no namespace bloat.

From the main app point of view, you shouldn't be referencing the modules. The modules should be written in a generic way, built on an abstract architecture.

Why are you referring to specific module classes from the main app? You shouldn't know, or care, about specific module implementations.
03/12/09 @ 15:16
Comment from: lcdazo [Visitor] · http://lcdazo.wordpress.com
:) just for clarification, this kind of problem is for stateful skins using graphical skinning? :D

coz im using degrafa for my skins.. :D
and im a bit concerned too.. :D
03/23/09 @ 20:57
Comment from: artistiq [Member] Email
You are correct.

This post only addresses concerns and issues that we have seen with stateful graphical skins in Flash to Flex workflow.

We have not seen any alarming impact using Degrafa, so at this point, I think you're good.

You can download the source Flex test app and try to use a Degrafa skin for the CheckBox we threw in for a test and see.

If I get some time this week, I'll mess with that too.
03/24/09 @ 10:20
Comment from: lcdazo [Visitor] · http://lcdazo.wordpress.com
:D

but actually i have trouble skinning checkbox using degrafa..
since u actually need to draw the icon of the checkbox.. and i dont know how to do it with degrafa


so i just used the flash drawing tool of flex. :D

Anyway, your blog is enlightening..

I wish you have more to share regarding flex skinning.. :D More power
03/24/09 @ 19:43
Comment from: artistiq [Member] Email
You can solve this issue and still use Degrafa in a couple ways.

1) You can just use a bitmap image of the checkMark icon and throw that into your skin as an external image.

2) You can draw the checkMark icon in another tool like Adobe Illustrator, and then export the SVG path data and take than into Degrafa.

http://www.degrafa.org/samples/
and scroll down to the Dynamic Graphics section. There are some examples using SVG path data to draw complex shapes and imagery.

I will definitely try to post as much as I can about skinning/styling in Flex.

Also, have you visited http://www.scalenine.com ?
There are some great resources from Juan Sanchez about Flex skinning there. He is also one of the designers behind Degrafa, along with a coworker of mine.
03/25/09 @ 08:04
Comment from: lcdazo [Visitor] · http://lcdazo.wordpress.com
the things is, i avoid using external graphic image.

what i actually dont know is how to point the icon style attribute to a GraphicBorderSkin (Degrafa).

or if there is another way.. I dont know how.. :)


wow.. so you personally know juan sanchez? :D
amazing.. :)

ive visited scalenine a couple of times and i really like their skins. Thanx a bunch!
03/25/09 @ 19:38
Comment from: artistiq [Member] Email
Yeah - using external images is a good idea, but you cannot always avoid them or the scenarios.

As for your question, you should be able to do this in the CSS. If the component has an icon attribute, then you can set that in the CSS for that style - possibly make a separate name_icon.mxml file just for the icon and keep it separate.

Working with Juan Sanchez has been awesome! I have learned SO much from him and he is a very humble, creative, smart, and a talented designer/developer - not to mention hilarious. I have the honor of sitting a few feet away from him in the Denver Effectiveui office!

03/25/09 @ 21:11
Comment from: mounir [Visitor] · http://formo.be
Hi,

when you say that the flex component kit is bad do you mean only the component kit for flash or also the others (for illustrator & photoshop)

I have a project that has animated buttons. The animation occurs when the states changes. Does somebody know what the best way is to implement these. first I was thinking about using the flex component kit for flash but it seems that this is bad. So I gues the best way would be to generate an flex component form flash and use the swc in flex. Or is there an other better (for performance) way.


05/25/09 @ 20:15
Comment from: artistiq [Member] Email
I'm not saying that the Flex Component Kit is completely negative, but I am saying in some instances, it can be bad and take a hit on your CPU.

I think I should clarify a little more on the kit and what it consist of.

Stateless
Stateless skins can be created using Photoshop, Illustrator, and/or Flash using the templates provided by the Flex component kit, but do not rely on the Flex Component Base item in the library of Flash like Stateful skins, nor do they rely on the kit. You can create stateless skins without the kit or templates and you would not need anything special or additional to get them to work except for the correct URL/path in the CSS. Each state of a stateless skin is a separate image (bitmap), or symbol in a swf which is published as AS 2.0.

Stateful
Stateful skins are created in Flash using the Flex Component Kit where it adds the Flex Component Base item in the library which introduces the UIMovieClip Class and produces a swc to be used in Flex. This also must be published as AS 3.0 and each item has a Base Class of UIMovieClip.

We have shown that using the kit with Flash using the STATEFUL technique (swc), can cause some performance issues. If your application is not very large, the performance hit may not be that big of a deal or a concern.

The Kit
So, the kit for using stateless skins in Ai, PS, Flash (swf NOT swc) is great, in regards tot he templates that it provides, but again, you do not need the templates or kit to create the stateless graphical skins.

Unfortunately, you will not be able to get animated transitions using these techniques. You could manipulate the stateless skins in Flash and maybe obtain some animations, but they won't be as robust or manageable as in a stateful set.

Animations and complex skinning
If you require transitions and animations, then you may want to look into using Degrafa. It is a third party Declarative Graphics Framework, similar to the new FX-G in Flex 4. It is a programmatic approach to skinning rather than using graphics, but it is very robust and allows for a variety of options including many that cannot be obtained using graphical skinning.

Degrafa
You should view some examples from their samples section:
http://www.degrafa.org/samples/
http://www.degrafa.org/source/ButtonLoader/ButtonLoader.html

Multiple skinning approaches for a single application
Also, you can combine up your skinning assets into various external files an techniques, and do the basic ones in the more traditional stateless manner, and only use stateful for the animated items. Hopefully that may not cause such a large impact on your application's performance. You could also combine Degrafa into this equation as well for the more complex items.

Hope this helps. Feel free to hit me up if you have any further questions.
05/25/09 @ 23:24

Leave a comment


Your email address will not be revealed on this site.

Your URL will be displayed.
(Line breaks become <br />)
(Name, email & website)
(Allow users to contact you through a message form (your email will not be revealed.)
This is a captcha-picture. It is used to prevent mass-access by robots.
Please enter the characters from the image above. (case insensitive)