You can stop waiting, its been released.

I'm a bit late in releasing this news, but our "Flex 3 Training from the source book" was released last week, and is now available from our publisher, as well as the major online bookstores such as Amazon, and Barnes and Noble. Speaking of Amazon, we are currently the #843 best selling of all their books, #15 in the Computers and Internet / Software category, and #8 in Computers and Internet / Programming. Thanks to all of you who have bought our book, and pushed the sales ranks so high.

Anyhow, I know folks have been asking me for months when this book would finally be released, and the answer is, last week.

Enjoy.

CFUnited Europe, AJAXWorld, and more conference stuff...

Next week I'm off to London to speak at CFUnited Europe, and the following week, I'll be speaking at AJAX World East.  In both places, I'll be speaking about the joy that is Flex 3 in all its forms.  The CFUnited talk is more focused on how Flex can improve the lives of CF Developers, while the AJAX World one is more focused on how Flex can help RIA developers increase their real world Retursn On Investment from RIA's.  On another note, CFUnited has just released the session schedule for their Washington DC Conference in June, and rumor is that the session schedule for WebManiacs should be available shortly.

My Speaking Engagements for the first half of 2008

1/18 - Flex Camp Chicago

1/24 - Flex Camp Omaha

2/24-2/27 - Flex 360 Atlanta

3/12-3/13 - CFUnited Europe

5/1-5/4 - CF.Objective()

5/19-5/23 - WebManiacs

6/25-6/28 - CFUnited

Hey, what am I doing on blogs.digitalprimates.net?

I've been a bit slow in getting this announcement out, as I see several other bloggers have already posted on this, but the rumors are true.  Tapper, Nimer and Associates. Inc. has teamed up with Digital Primates Inc.    Some of you may recall, it was just over a year ago that I teamed up with Mike Nimer to form Tapper, Nimer and Associates.  It's quite an odd experience for me to go from a solo propietorship to a team of 15 or so developers in about 16 months.   With all the great minds from both our companies working together, we will be able to help more customer on bigger and better projects.  

Many of you probably know Mike Labriola for his work on custom Flex Components, he has extended the Flex framework in ways that the developers at Adobe never even imagined.  He is also frequently speaking at conferences and User groups.  Both Nimer and I ran across him at dozens of speaking events across the country, and as we talked, we found there were far more similarities between us then differences. 

One of our first meetings at a conference ended up with him as a co-author on the Flex 2 book.  A year and a half of meeting at conferences later, and we were helping each other out on projects so frequently that it made sense to explore further integrating our companies.  When the opportunity for Nimer and I to join forces with him and his company, it was much too enticing to pass up.

We are looking forward to doing great work together, continuing to build cutting-edge applications for our clients, continuing to teach the world to build better RIAs, and continuing to serve the community. 

CFUnited Europe

I've been asked to speak at the first ever CFUnited Europe this year.  CFUnited, which has been running each year in the Washington DC area (earlier under the name CFUN) for the past 9 years, is branching out, and hosting the conference in Europe as well. The conference will be on March 12th and 13th in London.  Hope to see you there!  I hope to be presenting on Flex 3 for ColdFusion developers.

Reflecting an image in Flex

Increasingly, clients have been asking for a "reflection" effect, showing a vertically flipped image of a component next to the actual component.  After reinventing the wheel on this several times, I came up with this simple reusable component:

package com.tappernimer.components{
import mx.containers.Canvas;
import mx.core.UIComponent;
import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.display.IBitmapDrawable;
public class VerticalReflection extends Canvas{
private var _component:UIComponent;
public var trans:Number=.5;
public var filterArray:Array=new Array();
public var skewY:Number=0;
public var skewX:Number=0;
public function get component():UIComponent{
return _component;
}
public function set component(c:UIComponent):void{
this._component = c;
// hack to work around issue with component being 
// a dynamically loaded image its possible for the 
// image to be fully loaded, but its height or width 
// not yet set this call later, keeps retrying until 
// the values are set.
if(c.width ==0 || c.height==0){
callLater(resetComponent,[c]);
return;
}
doReflection();
}
private function resetComponent(c:UIComponent):void{
this.component = c;
}
private function doReflection():void {
// create bitmap object
var bmpData:BitmapData = new BitmapData(
	component.width,component.height);
// create matrix
var invertMatrix:Matrix = new Matrix(1,skewY,skewX);
// set matrix to invert vertically, but normal horizontally
invertMatrix.scale(1, -1);
// move matrix, so top is at bottom, and vice versa
invertMatrix.translate(0, component.height);
// draw component flipped
bmpData.draw(component as IBitmapDrawable,invertMatrix);
// create a new holder for the image
var ref:UIComponent = new UIComponent();
// match new holders size to the original
ref.setActualSize(component.width,component.height);
// fill the new component with the image
ref.graphics.beginBitmapFill(bmpData);
ref.graphics.drawRect(0, 0, 
	component.width, component.height);
ref.graphics.endFill();
// set the transparency
ref.alpha = trans;
// apply any filters
ref.filters = filterArray;
// add image to stage
addChild(ref);
} 
}
}

This component can then be passed any other component to reflect, accepting filters (filterArray), alpha value (trans), and arguments to allow you to skew the reflection.  In fact, using it can be as simple as this:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml 
xmlns:c="com.tappernimer.components.*" 
layout="absolute">
<mx:Image id="image" source="images/tn_logo_full.jpg"/>
<c:VerticalReflection id="ref" 
component="{image}" 
x="{image.x}" y="{image.height}" 
filterArray="{new Array(new BlurFilter())}"/>
</mx:Application>
Here is the code running:
 
 

Java Swing (re-)enters RIA space

It seems Sun is interested in re-gaining some of the market share it one had in the Rich Application space.  The annual JavaOne conference is underway, and there seems to be quite a bit of buzz surrounding the upcoming annoucement of the JavaFX project.  It seems that JavaFX is looking to compete directly with Microsoft's Silverlight and Adobe's Flex/Apollo initiatives, as developers will be able to target Desktop, Web and Mobile applications from this single platform.  Ultimately, it seems that this is largely going to be done by vastly simplifying Swing development, with the use of JavaFX as a declaritive programming model, on top of the existing Swing framework.

Ultimately, its good for everyone, developers and consumers alike to have more competition in the Rich Applicaiton space.  This will surely lead to greater innovations for applications, and more choices for developers.

You can find more on this at infoworld and infoq.

Open Source Flex 3 SDK

At midnight, Thursday April 26th at Midnight, Adobe officially announced that the Flex 3 SDK, will be released as an open source project under the Mozilla Public License.  The actual timeline for the release looks like this:

Summer 2007 - Daily builds of the Flex 3 SDK will be provided.  Online access to the bug base will be publicly available.

Fall 2007 - Flex 3 launches.

December 2007 - After the release of Flex 3,  adobe will be posting all software assets into a public Subversion repository for public access. 

More information on this can be found in the FAQ, the press release, and the discussion group

Many have asked the questions: "Why would Adobe do this?" and "how is Adobe is going to keep making money from Flex?"  While I dont have any inside information about either of these, i do have come conclusions I've drawn on these two...

Why would Adobe do this

The easy, marketing friendly answer to this question is "to grow the platform."  Of course, Adobe wants more and more people using the Flex Platform, as it enables them to sell more copies of Flex Builder, Flex Charting, Flex Data Services, etc.  Of course, I suspect this may be a bit of a defensive move as well, as it comes on the heels of Microsoft annoucing SilverLight.    As Ted Patric notes, Adobe is taking the gloves off in its battle against SilverLight.  I think its safe to assume that by open sourcing flex, more developers will adopt it, and it will set a much higher bar for MS.

How is Adobe is going to keep making money from an Open Source Flex 3?

The reality as far as product sales goes, is this is no different than flex 2.  In flex 2, there was already a free SDK, which included everything a developer would need  to build flex  apps.  This open source project will provide the same free SDK, just under a different license.  As I mentioned before, if Open Sourcing the project attracts new developers, then, additional sales of the commercial flex products (Builder, Charting , Data Services, etc) will likely follow.

 

 

Public Alpha of Apollo now available on Adobe Labs

Since it was mentioned and demo'd at the MAX conference in Las Vegas last year, I've been incredibly excited about the upcoming Apollo product from Adobe.  Apollo promises to allow web developers to build real desktop applications, using technologies we know today, namely HTML, JavaScript, MXML and ActionScript.

If your interested in learning more, you can find the bits and more information on Adobe Labs.

Flex 2 Training from the source Errata

While the official errata site from PeachPit press is not yet available, the authors have put together one of our own here.  Feel free to contact us with any additional problems you find in the book, and we will post them to the site.

More Entries

BlogCFC was created by Raymond Camden. This blog is running version 5.9.001.