I am speaking at 360|Flex San Jose in August and you should come! 360|Flex is a great conference that really supports the Flex community. It's a great place to meet other developers (and even some designers), to learn, and to have a great time. I'll be talking about the Flex SDK source code and how to improve your development by reading it (and understanding it).

I'll be discussing the class hierarchy, the internal compositional classes, and the importance of interfaces. I will tear apart some components and offer suggestions on using them and better ways to design similar components. I will touch on the Flex component lifecycle, skinning, inheritance, custom components, list classes, and containers.

Lastly, I will discuss the Flex SDK API, how it is written today, how it will be evolving in Flex 4/Gumbo and what else Adobe needs to change! I will explain ways to use more DRY (don't repeat yourself) development practices using better componentization and compositional classes.

I plan to post some more teasers on my blog (http://jonathanbranam.net) so people who don't know who I am or what I'm talking about can get a better sense of the session and why they should (or shouldn't) come.

This is an application I built that functions as an address book, a phone using Ribbit, and a 3d Mii Editor (like on the Nintendo Wii) for the people in your address book. The address book can also load your contacts from Facebook using the "Little People" application that I wrote. The Miis are rendered in full 3d using a custom combination of Degrafa and Papervision3d.

This is the MiiCall application.

Further implementation details in the full post.

This is an implementation that brings Degrafa geometry into Papervision3d. I implemented a new Renderable in Papervision org.papervision3d.core.render.command.RenderDegrafa which transforms a set of Degrafa definitions into 3d render commands. These are located in the org.papervision3d.core.geom.renderables package.These are then rendered at runtime (as vectors, not using bitmaps at all) by the org.papervision3d.materials.special.DegrafaMaterial. I also implemented an early version of the Degrafa Transformations to support various modifications of the geometry at runtime.

The demo application for both is DegrafPaper3d and Degrafa Transformations Demo. A (slightly) more beautiful example is the Mii Call demo, which uses this technology to draw the features on the Mii's faces.

Read the full post for more implementation details and the story behind this.

Problem:

You have an AdvancedDataGrid which is highlighting the wrong row when you navigate using the mouse or keyboard.

Solution:

It is likely that you have put duplicate data in the dataProvider for your AdvancedDataGrid. It is illegal to put the same instance anywhere in the hierarchy of data that you assign to the dataProvider property. The regular DataGrid also has this limitation, which you can read about in the DataGrid highlights wrong row Solution. You can objects with identical data, but they must be different instances of the same object.

The only solution is to create unique objects for any data you want to display in an AdvancedDataGrid.

Further explanation, along with a SWF example and source code:

Problem:

You have a DataGrid which is highlighting the wrong row when you navigate using the mouse or keyboard.

Solution:

It is likely that you have put duplicate data in the dataProvider for your DataGrid. It is illegal to put the same instance into the collection of data that you assign to the dataProvider property. You can create duplicate objects, but they must be different instances of the same object. It is valid if the fields are identical, but not the objects themselves.

The only solution to this is to create unique objects for your DataGrid.

Further explanation, along with a SWF example and source code:

Problem:

You have some custom initialization that you need to perform every time a component is added using a State, such as setting focus in a particular field. You need a reliable method of determining that the component has been added.

Solution:

There are two solutions that I've found to work in this case. This first is to add a new public method to the component called activate() and then call it from a handler on the enterState Event. The second is to listen to the addedToStage and updateComplete events, set a flag in addedToStage that you check in updateComplete to run your initialization.

Here is the code, example app, and more detailed explanation.

Problem:

You have a component which supports a style and you want to check if the style has been set in a style sheet or on the component directly.

Solution:

When you get the value of the style, you need to store it in an untyped variable. This will allow you to check for undefined. If you store the value in an int, uint or Boolean, for example, it will be converted from undefined to the default value of that type (0, 0, or false, respectively).

Problem

You want to apply a filter function to a HierarchicalCollectionView to filter some data that is only in the parent or only in the children.

Solution

Any function applied to the filterFunction of HierarchicalCollectionView is applied to all of the elements in the collection. It can filter items at different levels of the hierarchy as long as the method itself understands the hierarchy.

This commercial plays at the end of some of the TED Talks. What I noticed was the way the video performs transitions between shots. I like the clean colored text and the outline which then becomes a portal to a different scene. This is a nice way to do cuts and something that could be used in a Flash/Flex website or application.

Interactive Information Design Patterns for RIAs

Designing applications which convey rich information to users is difficult. We now have at our hands the ability to display massive amounts of data using rich graphics in a web browser. Unfortunately, most designs end up as a series of line charts or data grids. We need to develop and learn a new library of interactive information design patterns that facilitate a two-way conversation between users and the application.

Search Great Flex/Flash Sites