<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6843566830671277353</id><updated>2012-01-25T07:24:23.836-08:00</updated><category term='flash'/><category term='air'/><category term='java'/><category term='Drunk on Software'/><category term='graphics'/><category term='UI'/><category term='book'/><category term='demo'/><category term='flex'/><category term='presentation'/><category term='mxml'/><category term='effects'/><category term='interview'/><category term='android'/><category term='flexbuilder'/><category term='t-shirt'/><category term='flex 4'/><category term='animation'/><category term='video'/><category term='article'/><category term='code'/><category term='actionscript'/><category term='conferences'/><category term='announcements'/><category term='humor'/><title type='text'>Codedependent</title><subtitle type='html'>Graphics geek, performance pusher, animation animal</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default?start-index=101&amp;max-results=100'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>165</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-234478442663300991</id><published>2012-01-04T09:49:00.000-08:00</published><updated>2012-01-04T09:49:33.960-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Curved Motion in Android</title><content type='html'>The animation support &lt;a href="http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html"&gt;added in Android 3.0&lt;/a&gt; and &lt;a href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html"&gt;enhanced since then&lt;/a&gt; is useful, allowing a flexible system of property animation to animate literally anything you want. Like a store going out of business: if it ain't nailed down, it's up for grabs.&lt;br /&gt;
&lt;br /&gt;
But that doesn't mean we're done yet; there are many things that we'd like to do to keep improving the animation system and making Android animations easier to write and more powerful. One of those things is curved motion.&lt;br /&gt;
&lt;br /&gt;
Right now, if you animate something between a start and end point, it will move in a straight line between those values. For example, a translation animation, where the object moves from one (x, y) location to another, will move in a straight line beween those points. You can (and should) use non-linear timing for these animations, and the animation framework uses ease-in/ease-out timing by default. But the actual spacial movement is linear; there is no way for you to specify a curved path for an object to take between the end values of an animation.&lt;br /&gt;
&lt;br /&gt;
Even if you use a multi-point keyframe animation, where you specify several intermediate points for the animation to pass through along the way, you are still going to move linearly between each of those points.&lt;br /&gt;
&lt;br /&gt;
One goal with animations is to make them feel as natural as possible. And just as motion in the real world (you know, the one we have to use as we move between the machines of our lives) is not linear, animations in our GUIs should not be limited to linear. For example, f a view moves from corner of the screen to the opposite corner, wouldn't it be nice to have the option to give it a little curve in and out at both ends, instead of being locked into a straight-line movement?&lt;br /&gt;
&lt;br /&gt;
We'd like to add this kind of capability to the animation system in a future release; it needs to be easy to create such animations, we just have to provide the APIs and functionality to let you do it.&lt;br /&gt;
&lt;br /&gt;
As I was looking into the problem, I created some prototype code using the existing animation APIs and realized that there's nothing stopping you from having this capability already. The flexibility of the Animator APIs allow you to do exactly the kinds of operations you need to get curved motion. You just need a little more code to do it.&lt;br /&gt;
&lt;br /&gt;
I thought it would help to post some of my prototype code to show you how. In particular, I thought this sample was interesting because it shows:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;How to move things along curves and complex paths&lt;/li&gt;
&lt;li&gt;How to use the Animator APIs to do more than what the base library supports. In particular, how to use TypeEvaluator to animate custom types.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Some notes and caveats before we begin:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;This is a prototype only, and does not necessarily represent the way it would appear in any final API. It's just a sample program, and a pretty simple one at that.&lt;/li&gt;
&lt;li&gt;Simply computing the location based on the fraction time elapsed in a curve interval is probably not the motion you want. It will give the mathematically correct motion along that path, but the time spent traveling along any particular length of that curve is dependent on the structure of the curve. Basically, you'll end up with slower and faster portions of the curve. This problem is admirably described &lt;a href="http://www.planetclegg.com/projects/WarpingTextToSplines.html"&gt;on this blog&lt;/a&gt;. A more complete solution flattens the curve and ensures uniform speed. But again, it's just a simple demo, so I'll leave correct path-time-distance navigation as an exercise for the reader (and for the writer, since this would be a part of any future implementation in the SDK).&lt;/li&gt;
&lt;li&gt;The timing of the animation along a multiple-point path such as the one in the demo app is not as flexible as I'd like it to be. Basically, you end up with something that gives equal time in the overall animation to each individual interval. In addition, any "move" operations in the middle of the path cause the animation to wait at that location for that interval's equal slice of the duration. &lt;a href="http://2.bp.blogspot.com/-3rGwpYgEm3E/TwRrkvVXfyI/AAAAAAAABfY/S8yqCr-rPvw/s1600/Screen+shot+2012-01-04+at+7.06.54+AM.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-3rGwpYgEm3E/TwRrkvVXfyI/AAAAAAAABfY/S8yqCr-rPvw/s1600/Screen+shot+2012-01-04+at+7.06.54+AM.png" /&gt;&lt;/a&gt;It should be possible, in a more complete implementation, to define the time associated with any particular interval.&lt;/li&gt;
&lt;li&gt;This description assumes a foreknowledge of Bézier curves; if you have no idea what I'm talking about, you might want to go look them up (such as on the blog linked above or various other places on the web, such as &lt;a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve"&gt;Wikipedia&lt;/a&gt;). Or you can just read along, refer to the mathematically imprecise sketch to the right, and hopefully not get too lost.&lt;/li&gt;
&lt;li&gt;The code as written requires Android 4.0 to build. Actually, it's mostly compatible back to 3.0, but the PathEvaluator class uses a generic specification for TypeEvaluator that was introduced in 4.0 (not necessary, just convenient when I wrote the code).&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
On with the code.&lt;br /&gt;
&lt;br /&gt;
The activity code is in PathAnimationActivity.onCreate(). First, we set up the path itself:&lt;br /&gt;
&lt;pre&gt;AnimatorPath path = new AnimatorPath();
    path.moveTo(0, 0);
    path.lineTo(0, 300);
    path.curveTo(100, 0, 300, 900, 400, 500);
&lt;/pre&gt;
Here, we are constructing an AnimatorPath (which is part of the demo project that we'll see below) and supplying it with operations that will become points in the path, along with the operations to navigate the intervals up to those points. The first operation defines where the path starts, (0, 0). Then we move in a straight line to (0, 300). Finally, we move along a curve (a cubic Bézier curve, to be precise) to the point (400, 500), using control points (100, 0) and (300, 900) along the way.&lt;br /&gt;
&lt;br /&gt;
Next, we set up an ObjectAnimator to animate this path:&lt;br /&gt;
&lt;pre&gt;    final ObjectAnimator anim = ObjectAnimator.ofObject(this, "buttonLoc", 
            new PathEvaluator(), path.getPoints().toArray());
&lt;/pre&gt;
This animator uses a new PathEvaluator object (introduced below). It also queries the AnimatorPath object to get an array of PathPoint (covered below) objects; these will become the points in the animation that define the intervals that we animate between. The animator will send the animated values to the &lt;code&gt;this&lt;/code&gt; object, which is the activity instance itself. We implement the setter below to receive those values and pass them along to the actual Button object that we want to move on the screen:&lt;br /&gt;
&lt;pre&gt;    public void setButtonLoc(PathPoint newLoc) {
        mButton.setTranslationX(newLoc.mX);
        mButton.setTranslationY(newLoc.mY);
    }
&lt;/pre&gt;
&lt;br /&gt;
The AnimatorPath class referred to above stores information about the overall path. Its API consists of everything seen above:&lt;br /&gt;
&lt;pre&gt;public void moveTo(float x, float y);
    public void lineTo(float x, float y);
    public void curveTo(float c0X, float c0Y, float c1X, float c1Y, float x, float y);
    public Collection&lt;pathpoint&gt; getPoints();
&lt;/pathpoint&gt;&lt;/pre&gt;
&lt;br /&gt;
Internally, AnimatorPath uses PathPoint to store the information at each point along the path. The PathPoint class is a simple data structure that just holds an x/y location, optional control point information (for curves), and the operation that tells the path containing that path point how to nagivate the interval leading up to that point. There are three factory methods that AnimatorPath uses to construct PathPoints as its API is called:&lt;br /&gt;
&lt;pre&gt;    public static PathPoint moveTo(float x, float y);
    public static PathPoint lineTo(float x, float y);
    public static PathPoint curveTo(float c0X, float c0Y, float c1X, float c1Y, float x, float y);
&lt;/pre&gt;
&lt;br /&gt;
All of the logic of actually animating between points along the path (besides that in the Android Animator engine itself) is in the class PathEvaluator. This class implements the single method in the TypeEvaluator interface, evaluate():&lt;br /&gt;
&lt;pre&gt;    public PathPoint evaluate(float t, PathPoint startValue, PathPoint endValue) {...}
&lt;/pre&gt;
The return value of evaluator() depends on the operation described by the endValue PathPoint object.&lt;br /&gt;
&lt;br /&gt;
For curves, we calculate the x/y values given the anchor points (the location at startValue and endValue) and control points (both control points are stored in the endValue structure).&lt;br /&gt;
&lt;pre&gt;    if (endValue.mOperation == PathPoint.CURVE) {
        float oneMinusT = 1 - t;
        x = oneMinusT * oneMinusT * oneMinusT * startValue.mX +
                3 * oneMinusT * oneMinusT * t * endValue.mControl0X +
                3 * oneMinusT * t * t * endValue.mControl1X +
                t * t * t * endValue.mX;
        y = oneMinusT * oneMinusT * oneMinusT * startValue.mY +
                3 * oneMinusT * oneMinusT * t * endValue.mControl0Y +
                3 * oneMinusT * t * t * endValue.mControl1Y +
                t * t * t * endValue.mY;
    }
&lt;/pre&gt;
For lines, we perform a simple linear interpolation between the start and end points:&lt;br /&gt;
&lt;pre&gt;    else if (endValue.mOperation == PathPoint.LINE) {
        x = startValue.mX + t * (endValue.mX - startValue.mX);
        y = startValue.mY + t * (endValue.mY - startValue.mY);
    }
&lt;/pre&gt;
For moves, we simply jump to the location defined by the end value:&lt;br /&gt;
&lt;pre&gt;    else {
        x = endValue.mX;
        y = endValue.mY;
    }
&lt;/pre&gt;
Finally, we create a new PathPoint with this calculated xy information, which will be passed to the setButtonLoc() method seen above:&lt;br /&gt;
&lt;pre&gt;    return PathPoint.moveTo(x, y);
&lt;/pre&gt;
&lt;br /&gt;
... and that's it. There's really not much to it, which was the whole point of posting this code. If you want to add curved motion to your animations, you can wait for the framework to do it for you... or you can take what I've done here and modify it to suit your needs. Yay, TypeEvaluator!&lt;br /&gt;
&lt;br /&gt;
I've posted the code on code.google.com; &lt;a href="http://code.google.com/p/android-path-animation"&gt;check it out for yourself&lt;/a&gt;. Or you can download the Eclipse project (including the pre-built apk) &lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/android-path-animation.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-234478442663300991?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/234478442663300991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=234478442663300991' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/234478442663300991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/234478442663300991'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2012/01/curved-motion-in-android.html' title='Curved Motion in Android'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-3rGwpYgEm3E/TwRrkvVXfyI/AAAAAAAABfY/S8yqCr-rPvw/s72-c/Screen+shot+2012-01-04+at+7.06.54+AM.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2582025260570075641</id><published>2011-12-14T14:58:00.001-08:00</published><updated>2011-12-14T14:58:25.768-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>Video: SF Android User Group Talks 11/11</title><content type='html'>Last month, &lt;a href="http://www.curious-creature.org/"&gt;Romain&lt;/a&gt; and I once again braved Bay Area rush hour traffic and gave a couple of talks at the SF Android user group. Those talks were recorded and are now posted online:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://marakana.com/forums/android/general/566.html"&gt;An Introduction to Ice Cream Sandwich (Android 4.0)&lt;/a&gt;&lt;br /&gt;
This talk overviews some of the user and developer features of the new Android 4.0 release, through slides and demos. We also got side-swiped by a massive Q&amp;amp;A phase in the middle; always interesting to see what's on peoples's minds (and maybe even answer those questions sometimes).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://marakana.com/forums/android/general/570.html"&gt;Sticky GUIs&lt;/a&gt;&lt;br /&gt;
This talk discusses some principles, approaches, and techniques in graphics, animation, layouts, and performance that may help you create better and more usable UI applications.&lt;br /&gt;
&lt;br /&gt;
(The ICS recording has interesting audio. It reminds me of early efforts at "stereo" with the Chet instrument coming out of your left speaker and the Romain instrument coming out of your right speaker. But the recordings are very good otherwise. And maybe it's better this way - you can just mute one of the speakers and mute the speaker you're tired of).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2582025260570075641?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2582025260570075641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2582025260570075641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2582025260570075641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2582025260570075641'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/12/video-sf-android-user-group-talks-1111.html' title='Video: SF Android User Group Talks 11/11'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6519957126992175583</id><published>2011-11-22T15:05:00.001-08:00</published><updated>2011-11-22T15:51:56.479-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>#DevoxxBlog: Of Slides and Such</title><content type='html'>I spent last week at &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt;, giving several talks with &lt;a href="http://curious-creature.org/"&gt;Romain Guy&lt;/a&gt; about Android (graphics, GUIs, performance, the latest developer features ... the usual). Now that I've recovered from a total system collapse over the weekend (apparently the body does insist on getting a little sleep now and then), I thought I'd post some thoughts and also the slides from our presentations.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Thoughts&lt;/span&gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; is my favorite developer conference. It is a perfect mix of highly technical (focused on developers, not business/marketing/PR), inexpensive (at 350-700 Euros, it's quite a deal for 2-5 days of full technical content of this caliber, even at the current exchange rate of 1 Euro == $97,000.02), and personal (it's a relatively small, single venue, so you're all together there in the talks, in the lobby, in the hallways, and on the show floor). And it's in an interesting venue (Antwerp, while not balmy in November, is a far more interesting location to return to than, say, San Jose). Oh, and the beer is quite nice.&lt;br /&gt;
&lt;br /&gt;
The conference is well run, the talks are professionally recorded and viewable on the excellent &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt; website, and the beer is tasty. Parleys, and its free subscription for conference attendees, is particularly crucial since the comfortable theater seating guarantees that you'll have to catch up on at least some of the talks later.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Content&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Romain and I gave several talks this year, not all of which have accompanying slides:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;University: Android Awesomeness&lt;/b&gt;&lt;br /&gt;
This vaguely-titled 3-hour talk on Monday was in two parts. In the first half, Romain and I did a very quick introduction to the Android 4.0 release, then Philip Milne (another engineer on the Android framework team) followed up with a deep-dive into the GridLayout class that is new in the 4.0 release. The second half was more interactive, as we showed how we use the tools that ship with the SDK to debug performance, memory, and UI issues.&lt;br /&gt;
You can download the slides for this talk here: &lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B4UFoayBOKIZMjM4ZDg1OTktZjY5Yy00OGU5LTkwMGUtZTAwZjU5NTk4MTIy"&gt;Part 1&lt;/a&gt; and &lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B4UFoayBOKIZZTJkMGM4YjgtYTljYS00ZDVlLTkxMDItNjY1MDgyODZmOWIx"&gt;Part 2&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Lab: Just Desserts: Developing with the Latest Features from Honeycomb and Ice Cream Sandwich&lt;/b&gt;&lt;br /&gt;
This was a 3-hour lab on Tuesday morning in which we showed how to use some of the new features like fragments, TextureView, layers, and animations. No slides for this one; you had to be there. (I may post code projects later once I whip the code into presentable shape).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Session: Graphics Goodies&lt;/b&gt;&lt;br /&gt;
Wednesday's talk was an updated version of the Android Accelerated Rendering talk we did at Google IO.&lt;br /&gt;
&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B4UFoayBOKIZZDQ0NGUxMDctMzM3OC00NTg0LTgzYWUtZGQ3ZmJkZmNjY2Iy"&gt;Here are the slides&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Session: Sticky GUIs&lt;/b&gt;&lt;br /&gt;
This presentation on Thursday was a collection of techniques and principles for creating GUI applications that will make your users stick: graphics, performance, animations, GUIs; they're all important.&lt;br /&gt;
&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B4UFoayBOKIZMDU5MWJhNGMtMzM4My00ZTI4LWEwNDktN2I3ZGMzYWI0OTMw"&gt;Here are the slides&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Android Awesomeness, Graphics Goodies, and Sticky GUIs were all recorded and will be available soon on the &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt; website. You may get more out of the full presentations than from just the slides. In fact, I hope you do, because otherwise I don't know why we traveled that far to present them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6519957126992175583?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6519957126992175583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6519957126992175583' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6519957126992175583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6519957126992175583'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/11/devoxxblog-of-slides-and-such.html' title='#DevoxxBlog: Of Slides and Such'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7966527997592151369</id><published>2011-11-05T08:23:00.000-07:00</published><updated>2011-11-05T08:23:48.153-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Devoxx: Then and Now</title><content type='html'>I'm starting to prepare presentations for the ~8 hours of talks that &lt;a href="http://curious-creature.org/"&gt;Romain&lt;/a&gt; and I are giving at &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; in a couple of weeks. "Preparing" generally entails mostly worrying, followed by a mad rush of writing slides and code at night, on the long flight, after beers, between talks, and sometimes during the talks. It's a busy time of year.&lt;br /&gt;
&lt;br /&gt;
I realized that the organizers of &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; had recently released all of the recorded talks from last year into the wild (read: they're free on &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt;), so it seemed worth linking to them in case anyone wanted to see what we had to say last time around.&lt;br /&gt;
&lt;br /&gt;
I'll give a plug for the &lt;a href="http://devoxx.com/"&gt;conference&lt;/a&gt; and the &lt;a href="http://parleys.com/"&gt;Parleys&lt;/a&gt; site here. If there were an ad banner, it'd go here. Not because I'm paid (I would make a poor ad salesman, apparently), but because I think that both the conference and the parleys site rock. The organizers do a great job of putting it all together, and the recordings and presentation of the talks on &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt; is the best I've seen by far of any conferences I've spoken at.&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-OOMM5eHUMek/TrVTw6yWMjI/AAAAAAAABD4/bxD5VIUgmoM/s1600/PICT2812.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/-OOMM5eHUMek/TrVTw6yWMjI/AAAAAAAABD4/bxD5VIUgmoM/s200/PICT2812.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Yes, that young man on the pedestal is&lt;br /&gt;
throwing a hand. It's an Antwerp thing.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;a href="http://parleys.com/"&gt;Parleys&lt;/a&gt; is a subscription site; after the annual conference, you can join for the year (for a fee of 79 Euros) to watch all talks given at the conference. During that year, the talks are made freely available, one by one, then at the end they are all free. That year has passed, so the 2010 talks are all available now for free. If you enjoy them, consider joining parleys next time around to see them earlier. Or better yet, join us in balmy Antwerp, where the beer is good and so are the fries.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.parleys.com/#st=5&amp;amp;id=2191"&gt;Dive into Android, Part 1&lt;/a&gt;&lt;br /&gt;
Romain talks about layout. This talk includes live-coding a custom layout, which is a good lesson in how to do it yourself (although you probably don't need to do it on stage in front of the cameras to make it work the way you want).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.parleys.com/#st=5&amp;amp;id=2194"&gt;Dive into Android, Part 2&lt;/a&gt;&lt;br /&gt;
I talk about custom graphics. This is kind of a Filthy Rich Client talk, but more focused on the core principles and approaches of doing custom graphics in Android applications. nothing over-the-top filthy, just good stuff to know about Android GUI development.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.parleys.com/#st=5&amp;amp;id=2110"&gt;Android Graphics and Animations&lt;/a&gt;&lt;br /&gt;
We cover lots of architectural details about the Android platform, including the view hierarchy, classes used in custom graphics, and pre-3.0 animations (remember: this talk was given before Android 3.0 (Honeycomb) was released). &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.parleys.com/#st=5&amp;amp;id=2115"&gt;Android UI Development: Tips, Tricks, &amp;amp; Techniques&lt;/a&gt;&lt;br /&gt;
This talk consists of a smattering of tips that will help you write efficient Android applications. We discuss the various tools that you should use, techniques for avoiding unnecessary garbage creation, and various performance tips. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.parleys.com/#st=5&amp;amp;id=2161"&gt;Flex 4 Fun&lt;/a&gt;This is my swan song for the platform that I worked on prior to Android, and for my &lt;a href="http://www.amazon.com/Flex-4-Fun-Chet-Haase/dp/0981531628"&gt;Flex 4 Fun&lt;/a&gt; book that was published last year. I cover various things from the book, including graphics objects, filters, states and transitions, component skinning, and (of course) animation effects (the area I worked on for Flex 4). Lots of demos and code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7966527997592151369?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7966527997592151369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7966527997592151369' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7966527997592151369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7966527997592151369'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/11/devoxx-then-and-now.html' title='Devoxx: Then and Now'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-OOMM5eHUMek/TrVTw6yWMjI/AAAAAAAABD4/bxD5VIUgmoM/s72-c/PICT2812.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-58885915132375949</id><published>2011-11-01T09:08:00.000-07:00</published><updated>2011-11-01T09:08:20.277-07:00</updated><title type='text'>Android 4.0 Graphics and Animation</title><content type='html'>&lt;a href="http://curious-creature.org/"&gt;Romain&lt;/a&gt; and I wrote this article for the Android developer blog about 
graphics and animation features (what else?) in the latest Android 
release.&lt;br /&gt;&lt;br /&gt;Enjoy...&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://android-developers.blogspot.com/2011/11/android-40-graphics-and-animations.html"&gt;http://android-developers.blogspot.com/2011/11/android-40-graphics-and-animations.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-58885915132375949?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/58885915132375949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=58885915132375949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/58885915132375949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/58885915132375949'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/11/android-40-graphics-and-animation.html' title='Android 4.0 Graphics and Animation'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3901987724650624192</id><published>2011-09-16T11:19:00.000-07:00</published><updated>2011-09-16T11:19:12.607-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Old Views Don't Die; They Just Fade Away</title><content type='html'>One of the app developers here on Android asked me about the best way to animate adding and removing items from a UI. Specifically, he wanted to fade items in and out as they became visible/invisible.&lt;br /&gt;
&lt;br /&gt;
So I wrote up a sample activity that used &lt;a href="http://graphics-geek.blogspot.com/2011/06/introducing-viewpropertyanimator.html"&gt;ViewPropertyAnimator&lt;/a&gt;, showing how to set the visibility at the right time (making it visible before fading it in, listening for the onAnimationEnd() to set it invisible after fading it out). Pretty straightforward, but if you haven't played around a lot with the new animation classes yet (WHY HAVEN'T YOU?!?!), it's probably not obvious:&lt;br /&gt;
&lt;br /&gt;
To make it invisible:&lt;br /&gt;
&lt;pre&gt;invisibleButton.animate().alpha(0f).setListener(new AnimatorListenerAdapter() {
                    public void onAnimationEnd(Animator animation) {
                        invisibleButton.setVisibility(View.INVISIBLE);
                        invisibleButton.setAlpha(1f);
                        invisibleButton.animate().setListener(null);
                    }
                });
&lt;/pre&gt;
To make it visible again:&lt;br /&gt;
&lt;pre&gt;invisibleButton.setAlpha(0);
                    invisibleButton.setVisibility(View.VISIBLE);
                    invisibleButton.animate().alpha(1);
&lt;/pre&gt;
&lt;br /&gt;
I sent the sample application along to the developer. &lt;br /&gt;
&lt;br /&gt;
Then I thought I'd add to that sample and show how to also add/remove views, or set them to View.GONE as well as View.INVISIBLE.&lt;br /&gt;
&lt;br /&gt;
I sent that updated sample to the developer as well. &lt;br /&gt;
&lt;br /&gt;
Then I thought I might as well show how you'd do the same thing with &lt;a href="http://graphics-geek.blogspot.com/2011/02/animation-in-honeycomb.html"&gt;ObjectAnimator&lt;/a&gt;. It's a little more code than ViewPropertyAnimator, but still pretty straightforward. For example, fading the object out and making it invisible looks like this:&lt;br /&gt;
&lt;pre&gt;                ObjectAnimator anim = ObjectAnimator.ofFloat(invisibleButton1, "alpha",0);
                anim.addListener(new AnimatorListenerAdapter() {
                    public void onAnimationEnd(Animator animation) {
                        invisibleButton1.setAlpha(1);
                        invisibleButton1.setVisibility(View.INVISIBLE);
                    }
                });
                anim.start();
&lt;/pre&gt;
&lt;br /&gt;
I sent this further updated sample to the developer. &lt;br /&gt;
&lt;br /&gt;
Then I thought I'd poke at a utility class that's been on my mind for a while. We have all of these new animation capabilities as of the Honeycomb release, but I'd still like it to be simpler to run these kinds of animations, especially ones that involve several actions like this: &lt;i&gt;fade&lt;/i&gt; this view out, then &lt;i&gt;remove&lt;/i&gt; it. So I wrote up a Fade class that has utility methods in it for fading/adding/removing/etc. I enhanced the sample to use the new Fade utilities. Now making a view invisible is just one step:&lt;br /&gt;
&lt;pre&gt;                fade.hide(invisibleButton2, View.INVISIBLE);
&lt;/pre&gt;
Similarly, making that view visible again is a single call:&lt;br /&gt;
&lt;pre&gt;                fade.show(invisibleButton2);
&lt;/pre&gt;
&lt;br /&gt;
I sent this latest version of the sample to the developer. He was getting pretty tired of hearing from me by this time.&lt;br /&gt;
&lt;br /&gt;
Then I tweaked the Fade class to have a duration property.&lt;br /&gt;
&lt;br /&gt;
I was going to send this final (ha!) update to the developer, but I didn't want him to call security on me. I think he got what he needed the first time around. So rather than continue to bury him in yet more ways to accomplish this simple task, I thought I'd publish it here.&lt;br /&gt;
&lt;br /&gt;
Check out the &lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/Fader.zip"&gt;sample code&lt;/a&gt; for FaderActivity, which shows all of these things: ViewPropertyAnimator, ObjectAnimator, and this new Fade utility class. I hope that something like the Fade class and other higher-level animation classes will make it into the SDK eventually, but in the meantime, Fade should simplify fading tasks.&lt;br /&gt;
&lt;br /&gt;
There are a couple of things to note about fading animations. One thing is that there is an abrupt 'pop' when an item is removed from or added to a layout that is affected by that change. For example, the LinearLayout used in the example expands or contracts when the first button is removed or added or when the last button is set to VISIBLE or GONE (although you can't see that change since it's the last item in that layout). There's nothing to be done about this problem right now, although you might play with the LayoutTransition class available in 3.0, which animates the layout changes as well.&lt;br /&gt;
&lt;br /&gt;
It's also worth noting that the Fade class is great at fading things out from their current alpha and then back to an alpha value of 1 (fully opaque). It does not compensate for in-between alpha values that your views might want to persist between fades. That logic could be added, but there's some tedious logic around knowing when an in-between value is coming from the view itself vs. some other fade animation that happens to be running when you start the new one (for example, you fade an item out and then, halfway through, you fade it back in). The Fade class is great for the common case where views are typically just opaque (alpha == 1). But it seemed worth mentioning.&lt;br /&gt;
&lt;br /&gt;
You can grab a zipped version of the Eclipse project with the source for the example activity and the utility Fade class &lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/Fader.zip"&gt;here&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3901987724650624192?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3901987724650624192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3901987724650624192' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3901987724650624192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3901987724650624192'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/09/old-views-dont-die-they-just-fade-away.html' title='Old Views Don&apos;t Die; They Just Fade Away'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3047124683122277495</id><published>2011-08-24T07:21:00.000-07:00</published><updated>2011-08-24T11:39:29.785-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>The Mysterious Behavior of fillBefore, fillAfter, and fillEnabled</title><content type='html'>&lt;p&gt;A bug was filed on &lt;a href="http://code.google.com/p/android/issues/list"&gt;android.com&lt;/a&gt; recently that had me poring through the code and docs to understand three boolean flags in the old Animation class: &lt;code&gt;fillBefore&lt;/code&gt;, &lt;code&gt;fillAfter&lt;/code&gt;, and &lt;code&gt;fillEnabled&lt;/code&gt;. On the surface, these properties don't seem that difficult to understand; they control how animations behave before and after they run. But between some complicated interactions of the properties and some, er, inaccuracies in the reference docs, it turned out to be somewhat tricky to understand how they work and how they're supposed to work. Once I got through that exercise (including fixing the docs - look for those fixes in a future release), I thought it might be helpful to explain how these flags really work.&lt;/p&gt;

&lt;p&gt;First, let's cover the behavior of &lt;code&gt;fillBefore&lt;/code&gt; and &lt;code&gt;fillAfter&lt;/code&gt;. We'll get to &lt;code&gt;fillEnabled&lt;/code&gt; and it's, um, special behavior after that.&lt;/p&gt;

&lt;h2&gt;Before and After&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;fillBefore&lt;/code&gt; and &lt;code&gt;fillAfter&lt;/code&gt; are pretty simple, conceptually; they define how an animation behaves before and after it runs. &lt;code&gt;fillBefore&lt;/code&gt; controls whether the initial value of the animation is applied before its start time and &lt;code&gt;fillAfter&lt;/code&gt; controls whether the animation's ending value persists after it ends. There are a couple of important nuances to understand, however.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;start time: The starting time of an animation, for the purposes of &lt;code&gt;fillBefore&lt;/code&gt;, is not the time when you call &lt;code&gt;startAnimation()&lt;/code&gt; on a View. Rather, it's the time that the animation will actually start running. These two times are the same if there is no &lt;code&gt;startOffset&lt;/code&gt; set on the animation, but if you want to delay your animation, you might set a &lt;code&gt;startOffset&lt;/code&gt; value to achieve that delay. &lt;code&gt;fillBefore&lt;/code&gt; controls whether the animation will use the initial value of the animation during that startOffset phase.&lt;/li&gt;
	&lt;li&gt;AnimationSet: If you want to control the fill behavior of an animation that is inside an AnimationSet, it is certainly possible to do this. But if you want to control what happens outside the runtime of that AnimationSet, then you need to set the fill behavior on the set itself. For example, the &lt;code&gt;fillAfter&lt;/code&gt; flag controls whether a ScaleAnimation's end value is used after it ends. But if the animation you set on your View is actually an AnimationSet containing that inner ScaleAnimation, then you need to set &lt;code&gt;fillAfter&lt;/code&gt; on the AnimationSet if you want the value to persist after the AnimationSet ends. You can think of the fill behavior flags as having scope, which is either global (when not contained in an AnimationSet) or local to the AnimationSet in which their contained. Or you can just play with them enough to get the hang of it, like I did. It's also worth noting, as stated in the docs (correctly this time) that if you set the value of &lt;code&gt;fillBefore&lt;/code&gt; or &lt;code&gt;fillAfter&lt;/code&gt; these values will override those in the child animations of the set.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default values for these flags are &lt;code&gt;true&lt;/code&gt; for &lt;code&gt;fillBefore&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; for &lt;code&gt;fillAfter&lt;/code&gt;. So by default, animations will set their initial value immediately when the animation starts (regardless of &lt;code&gt;startOffset&lt;/code&gt;), but will not persist those values after they end.&lt;/p&gt;

&lt;p&gt;So that's all there is to those flags: you set or unset them according to whether you want the animation values to be used outside of when the animation is actually running. Well, sort of...&lt;/p&gt;

&lt;h2&gt;The Enabler&lt;/h2&gt;

&lt;p&gt;Here's where the other flag, &lt;code&gt;fillEnabled&lt;/code&gt;, comes in. This flag controls when the other flags are actually taken into account. Or that's what some of the docs would have you believe. In actual fact, this flag controls &lt;i&gt;only the behavior of &lt;code&gt;fillBefore&lt;/code&gt;&lt;/i&gt;, and essentially leaves &lt;code&gt;fillAfter&lt;/code&gt; to its own devices.&lt;/p&gt;

&lt;p&gt;Here's how the value of &lt;code&gt;fillEnabled&lt;/code&gt; works:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;false&lt;/b&gt;: If &lt;code&gt;fillEnabled&lt;/code&gt;is false (which it is by default), then the value of &lt;code&gt;fillBefore&lt;/code&gt; will be ignored. That's right, you can set or unset it all you want, but it will ignore your wishes and will essentially assume that &lt;code&gt;fillBefore&lt;/code&gt; is true.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;true&lt;/b&gt;: When &lt;code&gt;fillEnabled&lt;/code&gt; is true, the value of &lt;code&gt;fillBefore&lt;/code&gt; will be taken into account to determine whether to apply the animation before it begins. The value of &lt;code&gt;fillAfter&lt;/code&gt;, as I said earlier, will be used as-is, regardless of the value of &lt;code&gt;fillEnabled&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this means that the only way to get an animation to &lt;i&gt;not&lt;/i&gt; persist its starting value before it actually starts running is to set &lt;i&gt;both&lt;/i&gt; &lt;code&gt;fillEnabled&lt;/code&gt; to true and &lt;code&gt;fillBefore&lt;/code&gt; to false. Any other combination will result in the animation being applied before its starting time. Meanwhile, the value of &lt;code&gt;fillAfter&lt;/code&gt; is applied directly, regardless of the value of &lt;code&gt;fillEnabled&lt;/code&gt;. I believe it is this asymmetric behavior (coupled with an unfortunately generically named "fillEnabled" property and some, well, bugs in the docs) that made these three variables particularly difficult for some people to understand. Some people like me.&lt;/p&gt;

&lt;p&gt;At this point, you might be asking yourself why these variables were created and defined in this way. All I can say is, welcome to the wonderful world of API development, where behavior needs to evolve while compatibility is preserved. In any case, I hope this explanation helps those who needed it.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;p.s. For those starting to use the &lt;a href="http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html"&gt;new animation system introduced in Android 3.0&lt;/a&gt;, you can forget about all of this; there is no fill behavior (before, after, or enabled) for Animator-based animations.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3047124683122277495?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3047124683122277495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3047124683122277495' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3047124683122277495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3047124683122277495'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/08/mysterious-behavior-of-fillbefore.html' title='The Mysterious Behavior of fillBefore, fillAfter, and fillEnabled'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2899293055739509748</id><published>2011-08-04T08:56:00.001-07:00</published><updated>2011-08-04T09:12:46.231-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>DroidFlakes: An Android Animation Demo</title><content type='html'>&lt;p&gt;Here's a simple app that I wrote recently to see how background processing affects frame rate. There's nothing too complicated going on in the app, but it seemed worth publishing to show how to do various things in Android, such as:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Using a single ValueAnimator (3.0+ API) to animate several objects independently&lt;/li&gt;&lt;li&gt;Manipulating the transform of Canvas to move/rotate objects&lt;/li&gt;&lt;li&gt;Using the GPU to provide faster rendering (3.0+ capability)
&lt;/li&gt;&lt;li&gt;Tracking the current frames per second performance
&lt;/li&gt;&lt;/ul&gt;Here's a video of the running application, captured using HDMI on a 3.1 tablet. You can see how the More, Less, and GPU controls affect what's going on in the app. Note that it starts out with no GPU acceleration and bogs down when we have lots of flakes on the screen. Then see how the frame rate improves once the GPU box is checked. The app is accelerated by default; non-GPU rendering is performed by setting a software layer on the view, which forces rendering to happen in software to a bitmap, which is then copied into the view.&lt;p&gt;&lt;/p&gt;

&lt;iframe src="http://www.youtube.com/embed/_hCfvYuHOTY?hl=en&amp;amp;fs=1" allowfullscreen="" frameborder="0" height="349" width="425"&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/Droidflakes.zip"&gt;Here's the code&lt;/a&gt; (a zipped Eclipse project for the app). You should be able to build/run it for any 3.0+ target device.
&lt;/p&gt;&lt;p&gt;
Note: this is not the Renderscript app that I showed in &lt;a href="http://marakana.com/forums/android/general/381.html"&gt;a recent user group talk&lt;/a&gt;. That other app is based on this one, but uses Renderscript to animate and draw the droidflakes. This version just uses the standard Canvas API to draw bitmaps. I'll post the Renderscript version soon.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2899293055739509748?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2899293055739509748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2899293055739509748' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2899293055739509748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2899293055739509748'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/08/droidflakes-android-animation-demo.html' title='DroidFlakes: An Android Animation Demo'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/_hCfvYuHOTY/default.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8368761966808144817</id><published>2011-06-29T07:48:00.000-07:00</published><updated>2011-06-29T13:48:31.043-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Video: Android UI: Tips, Tricks, and Techniques</title><content type='html'>&lt;p&gt;&lt;a href="http://www.curious-creature.org/"&gt;Romain&lt;/a&gt; and I gave several talks at the excellent &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; conference in balmy Antwerp last November. The video of one of these talks, &lt;a href="http://www.parleys.com/#st=5&amp;amp;id=2115"&gt;Android UI Development: Tips, Tricks and Techniques&lt;/a&gt;, has just been published for free on the &lt;a href="http://parleys.com/"&gt;Parleys.com&lt;/a&gt; site. All of the conference talks have been available for months to subscribers (79 Euros), but for those who haven't gotten around to registering &lt;span style="font-style: italic;"&gt;quite&lt;/span&gt; yet, the talks are published incrementally for free throughout the year, and our UI Tips talk is now available.&lt;/p&gt;

&lt;p&gt;This talk covers a mix of topics, from "Garbage Zero" (techniques to avoid producing garbage when it matters) to an exploration of various tools and performance techniques that we use to produce better Android code.&lt;/p&gt;

&lt;p&gt;Check out the video here: &lt;a href="http://www.parleys.com/#st=5&amp;amp;id=2115"&gt;Android UI Development: Tips, Tricks and Techniques&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8368761966808144817?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8368761966808144817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8368761966808144817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8368761966808144817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8368761966808144817'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/06/video-android-ui-tips-tricks-and.html' title='Video: Android UI: Tips, Tricks, and Techniques'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3664950331852690240</id><published>2011-06-23T11:22:00.000-07:00</published><updated>2011-08-08T06:56:30.792-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='article'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android Rendering Options</title><content type='html'>&lt;p&gt;I've given some talks about Android graphics recently, and the same questions keep coming up: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;What is Renderscript appropriate for?&lt;/li&gt;&lt;li&gt;Is it a replacement for OpenGL rendering?&lt;/li&gt;&lt;li&gt;How do I access Renderscript from NDK code?&lt;/li&gt;&lt;li&gt;When do I choose between the different rendering options?&lt;/li&gt;&lt;li&gt;Can I have a free tablet?&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;It seemed to me that a brief article might help. In particular, I wanted to write something that lays out the various rendering options that Android provides and describes how we envision developers using them (and how we use them ourselves in the applications that we ship) so that you might better understand how and when to use them in your applications. Of course you're not bound to what we think; if you come up with new ways to use what the platform provides, all the better. But we can at least provide a little guidance to help you navigate the myriad of options. Hopefully this article will help answer the questions above. Except for the last question about the free tablet - I can't help you there.&lt;/p&gt;

&lt;p&gt;First, I should explain what I mean by &lt;i&gt;rendering&lt;/i&gt;, for everyone reading this that's not a graphics geek. "Rendering" is a synonym for drawing. Rendering is also defined as the process of turning an animal carcass into fat and other component pieces... but that's not what I'm talking about here. This article is about is all of the ways, in the Android platform, of drawing things onto the display. For example, you might have a drawing application, or a photo album, or a game, or a reading program, or anything else that needs to draw its content to the screen. If you're just using the SDK components (ImageView, Button, TextView, and so on), then we handle the rendering of these components internally. But if you have custom components that draw their own graphical elements, or if you're writing a fullscreen game that draws everything itself, then you need to know how to draw those items onto the device screen so that the user can see and interact with them.&lt;/p&gt;

&lt;p&gt;There are two options for writing Android applications, each with their own ways of rendering graphics. I'll cover each of these in the following sections.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;SDK&lt;/li&gt;
&lt;li&gt;NDK&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;The Android SDK&lt;/h1&gt;

&lt;p&gt;The SDK is the typical, default approach for most GUI applications. You write your application using the Java programming language and the libraries that the SDK provides. Most of the graphics on the screen are drawn by the framework for the standard View objects such as Button, TextView, ListView, and so on. If you create custom Views or have customized rendering that you want to do for your application, then you need to know about the rendering options available to SDK applications. There are basically three options:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The Canvas API&lt;/li&gt;
&lt;li&gt;Renderscript&lt;/li&gt;
&lt;li&gt;OpenGL wrappers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;The Canvas API&lt;/h3&gt;

&lt;p&gt;What I mean by "Canvas API" is the standard rendering for a typical SDK application that uses View objects (standard and custom) and performs and rendering by calling the various methods in the Canvas class. The rendering process of the Android view hierarchy consists of calls to each View's &lt;code&gt;onDraw()&lt;/code&gt; method. This method takes a single parameter, Canvas, which is the object used by the view to draw its content. For example, a &lt;code&gt;Button&lt;/code&gt; might tell its background Drawable to draw itself into the Canvas and then draw its label with a call to &lt;code&gt;Canvas.drawText()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you have a custom View, in which you implement the &lt;code&gt;onDraw()&lt;/code&gt; method and draw your own graphic elements, then you would typically call methods in the Canvas object passed in to the &lt;code&gt;onDraw()&lt;/code&gt; method. For example, you might draw lines with &lt;code&gt;Canvas.drawLine()&lt;/code&gt; and circles with &lt;code&gt;Canvas.drawCircle()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This approach to rendering is typical for most GUI applications, and is fine for most purposes when you just need standard GUI components and graphics and for which the performance of your application is not an issue. With the GPU acceleration that we added in Android 3.0, the performance for the Canvas API is even better than it used to be. As discussed in the article &lt;a href="http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html"&gt;Android 3.0 Hardware Acceleration&lt;/a&gt;, all rendering done by the SDK now happens via OpenGL calls to the GPU. This level of hardware acceleration for standard as well as custom views and graphics can provide excellent performance and allows for parallelism by offloading rendering work from the CPU onto the GPU.&lt;/p&gt;

&lt;p&gt;But sometimes you may want to go beyond what the Canvas API provides, either in terms of the graphics functionality you need or the performance that your particular situation requires. For example, the Canvas API does not provide complete 3D rendering capabilities. In these situations, you might want to look beyond the Canvas API to the other options available in the SDK.&lt;/p&gt;

&lt;h3&gt;Renderscript&lt;/h3&gt;

&lt;p&gt;The Renderscript API was introduced in Android 3.0. Renderscript was actually in use in an earlier form long before this release; the Live Wallpapers that shipped with earlier releases were written using Renderscript. But Android 3.0 introduced the first public form of the API and the runtime library. Describing what Renderscript is and how to use it is beyond the scope of this article. Instead, I'll just refer you to Jason Sams's introductory articles, &lt;a href="http://android-developers.blogspot.com/2011/02/introducing-renderscript.html"&gt;Introducing Renderscript&lt;/a&gt; and &lt;a href="http://android-developers.blogspot.com/2011/03/renderscript.html"&gt;Renderscript Part 2&lt;/a&gt;. Very briefly, Renderscript is a language, API, and runtime library that you can use to achieve high performance rendering and computation for Android applications.&lt;/p&gt;

&lt;p&gt;An application using Renderscript is an SDK application, using any of the SDK APIs and facilities provided at that level, with addition pieces of the application written using the Renderscript language. These scripts are initialized from Dalvik code. The scripts automatically provide glue code that wraps fields at the Renderscript level, so that SDK code can set values in Renderscript code by calling simple methods. Renderscript has a reference to a drawing surface that it renders to in a thread that is separate from the UI toolkit thread. It handles its own rendering and the timing of when that rendering happens.&lt;/p&gt;

&lt;p&gt;One of the things that makes Renderscript compelling is that it can determine, at runtime, the best way to achieve high performance for a particular operation. For example, it might send graphics operations down to the GPU, or it might parcel out independent computations to separate cores in a multi-core device. All of this is transparent to the application; it simply starts the script, sets the values, and lets it go.&lt;/p&gt;

&lt;p&gt;An important use case for Renderscript arises for SDK applications that need functionality or performance that cannot be had through the SDK directly. For example, your application may need to perform 3D graphics operations or heavy computation that takes too much time at the SDK level. You might consider taking these portions of your application and farming them out to Renderscript to do the work there instead.&lt;/p&gt;

&lt;p&gt;An important consequence of the Renderscript approach using SDK and runtime-compiled code is that Renderscript applications are fully portable between devices. That is, you only need to compile your application once, not per-architecture (as you must do with the NDK).  This single apk is then runnable on any device that supports the SDK level that you compiled for (3.0 and above, since 3.0 is the first Android release to support Renderscript).&lt;/p&gt;

&lt;p&gt;Examples of Renderscript in Android 3.0 include the Live Wallpapers, the video wall view in the YouTube application, and the Books application (including that beautiful page-turn effect). Other examples can be found in the SDK samples; you should check these out to understand how to write Renderscript as well as how to initialize and interact with the scripts from SDK applications.&lt;/p&gt;

&lt;h3&gt;OpenGL Wrapper Functions&lt;/h3&gt;

&lt;p&gt;Android also provides wrappers for OpenGL APIs at the SDK level. That is, you can write an application using the SDK, with full access to usual SDK APIs and functionality, and still use OpenGL ES 1.x and OpenGL ES 2.0 APIs, by calling the wrapper functions in GLES10 or GLES20 classes. These wrappers call the underlying OpenGL APIs at the native level for those versions of OpenGL ES.&lt;/p&gt;

&lt;p&gt;For casually exploring or using OpenGL, this may be a reasonable option. But while this approach works, it's not a recommended practice as a general approach for complex scenes that require high-performance graphics. For one thing, it is difficult to achieve high performance levels equivalent to native access to OpenGL due to the overhead of calling down from the SDK to the native level for every OpenGL call.&lt;/p&gt;

&lt;p&gt;The Music application that shipped with Android 3.0 used this approach. The application was an SDK application which needed some simple 3D graphics operations, such as the carousel view of albums. The main reason that it uses the SDK/OpenGL approach is because it is an unbundled application (not dependent upon a particular release of the SDK) and needed to work on releases back to 2.2. It therefore used APIs that were available on those previous releases.
&lt;/p&gt;

&lt;h1&gt;NDK&lt;/h1&gt;

&lt;p&gt;The NDK exists to provide an easy porting layer for existing applications written in native code, or which use native libraries. Porting might be more easily and quickly accomplished by using the NDK than by converting existing code to the language and APIs used by the SDK.&lt;/p&gt;

&lt;p&gt;The NDK does not provide the rich GUI toolkit of the Android platform at the native level, so developers do not have access to the View objects, or the events, or the rest of the infrastructure that is provided in the SDK APIs. But there is a graphics environment at the NDK level that is sufficient for some specific purposes. In particular, game developers that simply want a fullscreen game experience can find what they need with OpenGL. This API provides low-level graphics functionality that lets applications display 2D and 3D graphics using the GPU for maximum graphics performance.&lt;/p&gt;

&lt;p&gt;One important restriction of the NDK to keep in mind is that it compiles applications to specific CPU architectures. This means that if you only build your application for one specific chip, then the application will not work on Android devices that do not have that chip architecture. This is particularly important in the broad and growing Android ecosystem where new devices are coming out all the time. You probably want your application to work as well on new chips as it did on the ones you used to develop the application. So while the NDK OpenGL solution provides a reasonable route to fast graphics performance, it does so at the cost of the portability that other solutions offer.&lt;/p&gt;

&lt;p&gt;One of the questions that came up about Renderscript when I talked to developers was how to access it from the NDK. This is not currently possible. Renderscript is specifically created to be a companion to SDK applications. We envision users of Renderscript as SDK applications that use Renderscript for their high-performance graphics or computation needs. These applications might be primarily SDK applications, with GUIs and interaction and most other facilities provided by the SDK APIs and small but important pieces of functionality provided by Renderscript, such as graphics effects that would otherwise not be possible or not perform as well. Or these applications might use Renderscript for most of what they do, just using the SDK to initialize the scripts and letting Renderscript take over from there.&lt;/p&gt;

&lt;h2&gt;And So...&lt;/h2&gt;

&lt;p&gt;I've tried to explain and categorize the different rendering options that we provide in the Android platform. What may seem confusing at first, because of the potential overlap, is actually simple once you understand how these libraries differ from each other in their purpose, their use, and their advantages. Here's one last brief take at a breakdown of when you might consider the various options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SDK Canvas API&lt;/span&gt;: If you're writing a normal GUI application, using the SDK and the Canvas API is probably the most sensible option. If you need custom 2D graphics, there is plenty of power and reasonable performance in the Canvas API.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SDK Renderscript&lt;/span&gt;: If you want a fully portable, SDK application with access to the power, speed, and functionality of the Renderscript library and underlying GPU and multi-core CPU architectures, then it's worth exploring this new feature of Android.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SDK OpenGL Wrappers&lt;/span&gt;: If you are writing an SDK application and want to sprinkle in some 3D effects with OpenGL, you could see whether the OpenGL wrapper functions suit your needs.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;NDK OpenGL&lt;/span&gt;: If you are porting your application from a different platform or existing native code and are looking for the fastest way to get it up and running on Android, then using the NDK with OpenGL is worth considering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whatever your rendering need, Android has something for you. So keep those cool graphics applications coming! (Sorry I still can't help you with the free tablet, though. There were tablets given away at Google I/O this year, so you could get one of those if you can travel back in time. I think there's an app for that. It probably uses Renderscript.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3664950331852690240?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3664950331852690240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3664950331852690240' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3664950331852690240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3664950331852690240'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/06/android-rendering-options.html' title='Android Rendering Options'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-4971097699975090430</id><published>2011-06-01T10:45:00.000-07:00</published><updated>2011-06-01T10:45:16.001-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='article'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Introducing ViewPropertyAnimator</title><content type='html'>&lt;p&gt;The property animation capabilities that are in Android 3.0 (described in the article &lt;a href="http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html"&gt;Animation in Honeycomb&lt;/a&gt;) represent a good building block for powerful animation capabilities in the platform. But we're not stopping there. One minor addition to the platform was added in the 3.1 release, ViewPropertyAnimator. This class allows very easy and efficient one-liner animations of some of the new View properties like alpha, rotation, and scaleX/Y.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html"&gt;Introducing ViewPropertyAnimator&lt;/a&gt; article on the Android developer blog for more about this new API. In the meantime, enjoy this teaser trailer that shows the demo described in the article. The interesting part is the code (shown in &lt;a href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html"&gt;the article&lt;/a&gt;, not here). And the soundtrack, of course: turn up your speakers.&lt;/p&gt;

&lt;iframe src="http://www.youtube.com/embed/abfLUJCCxsw" allowfullscreen="" width="560" frameborder="0" height="349"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-4971097699975090430?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/4971097699975090430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=4971097699975090430' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4971097699975090430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4971097699975090430'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/06/introducing-viewpropertyanimator.html' title='Introducing ViewPropertyAnimator'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/abfLUJCCxsw/default.jpg' height='72' width='72'/><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6657516160094524748</id><published>2011-05-13T10:12:00.000-07:00</published><updated>2011-05-13T10:20:28.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>IOU IO Slides and Videos</title><content type='html'>&lt;p&gt;I had the chance to speak at &lt;a href="http://www.google.com/events/io/2011/"&gt;Google I/O&lt;/a&gt; this week, giving two talks with &lt;a href="http://curious-creature.org/"&gt;Romain Guy&lt;/a&gt;, &lt;a href="http://www.google.com/events/io/2011/sessions/honeycomb-highlights.html"&gt;Honeycomb Highlights&lt;/a&gt; and &lt;a href="http://www.google.com/events/io/2011/sessions/accelerated-android-rendering.html"&gt;Android Accelerated Rendering&lt;/a&gt;. The talks were fun, as were the conversations with the developers that came by our Android Office Hours. The conference was enjoyable and relaxing; I'm looking forward to my system recovering by sometime in June of 2012.&lt;/p&gt;

&lt;p&gt;Google's pretty good at posting content online (surprise, surprise), and I/O is no exception. Our Honeycomb talk was available on YouTube as we were giving it (nothing like streaming live to the world to keep the nervous tension alive), and I hope to see the Rendering talk posted there soon. In the meantime, Romain provided links to the all of the video, slide, and demo resources for our talks; check out &lt;a href="http://www.curious-creature.org/2011/05/12/android-presentations-at-google-io-2011/"&gt;his blog&lt;/a&gt; for all of the details. And hopefully see you at some future I/O or other Android-related conference!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6657516160094524748?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6657516160094524748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6657516160094524748' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6657516160094524748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6657516160094524748'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/05/iou-io-slides-and-videos.html' title='IOU IO Slides and Videos'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6289739134035816595</id><published>2011-03-09T16:20:00.000-08:00</published><updated>2011-03-09T16:35:34.161-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>AnDevCon Slides</title><content type='html'>&lt;p&gt;Here are the slides from our presentations at &lt;a href="http://andevcon.com/"&gt;AnDevCon&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/AnDevConHCKeynote.pdf"&gt;Android 3.0: Honeycomb and Get It&lt;/a&gt;. This presentation, with &lt;a href="http://www.curious-creature.org"&gt;Romain Guy&lt;/a&gt;, was an overview of some of the highlights in the 3.0 release, for users and for developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/Androidimation.pdf"&gt;Androidimation: Animation in Android&lt;/a&gt;. This presentation discussed how to use the animation APIs in Android, including the animation classes in the SDK before 3.0 and the new animation system in 3.0.&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6289739134035816595?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6289739134035816595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6289739134035816595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6289739134035816595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6289739134035816595'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/03/andevcon-slides.html' title='AnDevCon Slides'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5710733071568030356</id><published>2011-02-24T11:39:00.000-08:00</published><updated>2011-02-24T14:37:57.283-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Recording Animations via HDMI</title><content type='html'>&lt;p&gt;I've gotten some questions about how the video in &lt;a href="http://graphics-geek.blogspot.com/2011/02/http://http://graphics-geek.blogspot.com/2011/02/animation-in-honeycomb.html"&gt;my recent animation article&lt;/a&gt; as well as the &lt;a href="http://www.curious-creature.org/2011/02/18/android-3-0-animations-demo/"&gt;video of Romain's excellent photo viewing app&lt;/a&gt; were created. I thought I'd spend a few words on it in case anyone else wants to do something similar.&lt;/p&gt;

&lt;p&gt;I can tell you how I did it, but it'll cost you. About $200, in fact; that's how much I paid Amazon for the setup I used.
&lt;/p&gt;

&lt;p&gt;First, the reasons I wanted the device:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Debugging animations is hard: So many of the issues I chase with animations are timing-dependent. So the typical approach of step-debugging doesn't work; as soon as you stop in the debugger, you've lost the stream of whatever is causing the issue.. Nor does it help to hack the code and add tracing output everywhere, because sometimes you can't easily access the code in question (although this is what I end up doing in many cases where I can change the code). Sometimes it helps to dramatically sloooooooow down the animations, so that you can see it unfold instead of trying not to blink and miss the action.

But what would be really nice is to be able to catch the actual animation, at speed, and then be able to see it played back in slow motion. That's what HDMI recording gives me. I thought about getting a high-speed camera, but between the cost, the reliance on a lot of light for each frame, and the setup for any shot, that didn't seem like a great general solution.&lt;/li&gt;
&lt;li&gt;Screencasting: I've been wanting to do more blogging about Android development. In particular, I'd like to post some video tutorials, something like I did in a previous life. I find that forum to be very efficient, once I get into the groove. I can talk through a demo, show the demo, and show the code, and do so in far less time than it takes me to write an article, for example. But that means I'll need some way to screencast from the device that's running the animation code that I'll be talking about. I could take a video of me playing with the device, but it's more of a hassle to set it up, and the quality of the video just isn't as good.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;The solution: an HDMI recorder. The Xoom device on which I recorded the video has an HDMI output port. So all I needed was a device on the other end of the HDMI cable to record that output stream. I picked up an Intensity Pro PCI Express card by Blackmagic, and that did the trick. I installed the card in my Mac Pro, installed the software that came with the device, and it was a simple matter of running the capture software to capture the actual video stream. You can also use other capture software, such as Adobe Premiere, but I found the software that came with the device sufficient for my needs. I did notice an occasional dropped frame (I had to set a setting in the software to not stop recording when there is a dropped frame), but overall it seems fine, at least for my use cases.&lt;/p&gt;

&lt;p&gt;Here's a picture of the recorder's box (the card is in my machine and I didn't feel like taking it out). I like the sheer recursiveness here: it's a picture taken with the device of the recorder, uploaded via HDMI from the device to the recorder. I've put some other completely random objects on the shelf with it to give you a sense for its size (small).&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Jx54Nzjtxs8/TWbWbuMjw9I/AAAAAAAAAdY/bJmRa2QqGFA/s1600/IntensityPro.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 225px;" src="http://2.bp.blogspot.com/-Jx54Nzjtxs8/TWbWbuMjw9I/AAAAAAAAAdY/bJmRa2QqGFA/s400/IntensityPro.jpg" alt="" id="BLOGGER_PHOTO_ID_5577380960290456530" border="0" /&gt;&lt;/a&gt;

&lt;p&gt;I'm sure there are other solutions out there, but this setup works for me.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5710733071568030356?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5710733071568030356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5710733071568030356' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5710733071568030356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5710733071568030356'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html' title='Recording Animations via HDMI'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Jx54Nzjtxs8/TWbWbuMjw9I/AAAAAAAAAdY/bJmRa2QqGFA/s72-c/IntensityPro.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3560406904973720831</id><published>2011-02-24T11:33:00.000-08:00</published><updated>2011-05-09T06:42:45.430-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Animation in Honeycomb</title><content type='html'>&lt;p&gt;I've posted an article, &lt;a href="http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html"&gt;Animation in Honeycomb&lt;/a&gt;, on the &lt;a href="http://android-developers.blogspot.com/"&gt;Android Developers blog&lt;/a&gt;. The article gives an overview of the new property animation system in Android 3.0. &lt;a href="http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html"&gt;Check it out&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And while you wait, &lt;a href="http://youtu.be/-9nxx066eHE"&gt;here's the demo reel for the article&lt;/a&gt;. I wanted to show some of the home screen interactions and API demos from the SDK that take advantage of the new animation framework. The sound track has nothing whatsoever to do with Android, but the video seemed to want audio. It was a sound decision.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3560406904973720831?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3560406904973720831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3560406904973720831' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3560406904973720831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3560406904973720831'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/02/animation-in-honeycomb.html' title='Animation in Honeycomb'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6342154175535133547</id><published>2011-02-16T06:53:00.001-08:00</published><updated>2011-05-09T07:36:05.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Flex 4 Fun: The International Tour</title><content type='html'>&lt;div style="float: right; text-align: right; font-style: italic;"&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The international book tour for &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; began last November in Antwerp, Belgium (the home of diamonds, chocolate, and GUI toolkit programming books). It was a gray a rainy day, which is unusual for Antwerp except for the months between September and June.
&lt;/p&gt;&lt;p&gt;
The tour began as all such things do: parties dripping with scantily-clad programming celebrities, mobs of teeming fans fighting for autographs and shreds of clothing, and all-night hacking orgies. It was unforgettable, it was a blur of over-caffeinated memory, it was ... just another book tour.
&lt;/p&gt;&lt;p&gt;
The tour came to an abrupt end. I can't confirm that it was because of overcrowded venues and rabid crowds that overwhelmed Interpol forces. I can only say that I had to leave the town anonymously, quickly, and with only 10 pounds of chocolate as a memory of the experience.
&lt;/p&gt;&lt;p&gt;
&lt;span style="font-style: italic;"&gt;Or...&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
I gave a talk on &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; at &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt;. The presentation gave an overview of some of the graphics and animation features in Flex 4, and worked through an example of skinning a component to show some of these new features. This was one of several talks I gave that week, although this was the only one on Flex. In fact, it's probably the last such talk, since I don't have a lot of opportunity to do Flex development in my new Androidal life. Call it my final Flex fling ... 4 fun.
&lt;/p&gt;&lt;p&gt;
Instead of embedding the video, I'll encourage you to go to &lt;a href="http://parleys.com/#st=5&amp;amp;id=2161&amp;amp;sl=1"&gt;Parleys.com&lt;/a&gt; to watch the presentation, and to check out the many other videos from the &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; conference. Parleys has a subscription model (79 Euros to watch all videos from Devoxx 2010), but there are a few talks available for free now (like this one) to whet your appetite.
&lt;/p&gt;&lt;p&gt;
Enjoy the video while I continue to recover from the tour.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6342154175535133547?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6342154175535133547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6342154175535133547' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6342154175535133547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6342154175535133547'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/02/flex-4-fun-international-tour.html' title='Flex 4 Fun: The International Tour'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6939182467226034059</id><published>2011-01-15T11:34:00.001-08:00</published><updated>2011-01-15T11:38:17.392-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='t-shirt'/><title type='text'>CodeDependent: The Clothing Line</title><content type='html'>&lt;p&gt;(Cross-post with &lt;a href="http://chetchat.blogspot.com/"&gt;my humor blog&lt;/a&gt;; I figured this content would wear well on my geek blog, too).&lt;/p&gt;&lt;p&gt;For no good reason at all, I decided that geeks need more T-shirts and that I need to provide them. Fortunately, I don't have to pit my sewing skills against such a high goal; I'll just let &lt;a href="http://www.cafepress.com/codedependent"&gt;CafePress&lt;/a&gt; do it for me.&lt;/p&gt;&lt;p&gt;Here's the first such effort, especially topical for this blog, "&lt;span class="Apple-style-span"&gt;&lt;b&gt;codedependent&lt;/b&gt;&lt;/span&gt;" (available in various colors/styles - see the &lt;a href="http://www.cafepress.com/codedependent"&gt;site&lt;/a&gt; for the full array):&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cafepress.com/codedependent"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 394px; height: 400px;" src="http://2.bp.blogspot.com/_l1oSIKeXdHo/TTHvRFJWSZI/AAAAAAAAAc8/AqxvepMMMt0/s400/Codedependent-tee.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5562490091497474450" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6939182467226034059?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6939182467226034059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6939182467226034059' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6939182467226034059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6939182467226034059'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/01/codedependent-clothing-line.html' title='CodeDependent: The Clothing Line'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_l1oSIKeXdHo/TTHvRFJWSZI/AAAAAAAAAc8/AqxvepMMMt0/s72-c/Codedependent-tee.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2516804979261934094</id><published>2011-01-04T10:39:00.000-08:00</published><updated>2011-01-05T07:38:30.922-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Reflections on Android</title><content type='html'>&lt;p&gt;&lt;a href="http://chetchat.blogspot.com/2011/01/when-i-am-king-solving-resolving.html"&gt;Everyone's supposed to make a resolution&lt;/a&gt; on New Years, so here's mine: post more articles/blogs/videos about Android development. Starting with today's video tutorial.&lt;/p&gt;
&lt;p&gt;Here's the first in what I hope will be a series of video tutorials on anything ranging from graphics to animation and back to graphics (hey, it's my show and I might as well talk about the things I enjoy).&lt;/p&gt;

&lt;p&gt;For the &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; conference last November, I developed a simple picture-viewing application to demonstrate various facets of UI development that &lt;a href="http://www.curious-creature.org/"&gt;Romain Guy&lt;/a&gt; and I were talking about that week. You can see the presentations online at &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt; (you'll have to register for 79 Euros to get access to them for now). But I wanted to deep dive into particular aspects of this application for my blog. Here's the first of these tutorials, in which I talk about the simple reflection effect used in the application. By the way, credit for the beautiful pictures goes to &lt;a href="http://www.flickr.com/photos/romainguy/"&gt;Romain&lt;/a&gt;, my source for all of my, er, borrowed images.
&lt;/p&gt;

&lt;p&gt;The video is in two parts (because YouTube thinks that I talk too much, so I had to split it). This first part introduces the show and talks about the effect at a high level:&lt;/p&gt;

&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/N9xI5GQf4OA?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/N9xI5GQf4OA?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Part 2 dives into the code that makes the reflection effect work:&lt;/p&gt;

&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-wuDDbP6tBo?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/-wuDDbP6tBo?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;The code in the video is a tad blurry (given the resolution of the video compared to the size of the IDE window), so here's the code from PictureView.java that I walk through for your reading pleasure (note that this code looks slightly different than that in the video due to formatting for a smaller line wrap. Also, the blurryBitmap image is now created to be only as high as the reflection height, as described in the comments):&lt;/p&gt;
&lt;pre&gt;
private Bitmap getReflection(Bitmap bitmap) {
    Bitmap reflection = reflections.get(bitmap);
    if (reflection == null) {
        // We're cropping the height of the reflection to 80
        int reflectionH = 80;
        reflection = Bitmap.createBitmap(bitmap.getWidth(),
                reflectionH, Bitmap.Config.ARGB_8888);

        Bitmap blurryBitmap = Bitmap.createBitmap(bitmap, 0,
                bitmap.getHeight() - reflectionH,
                bitmap.getWidth(), reflectionH);
        // cheap and easy scaling algorithm; down-scale it, then
        // upscale it. The filtering during the scale operations
        // will blur the resulting image
        blurryBitmap = Bitmap.createScaledBitmap(
                Bitmap.createScaledBitmap(
                        blurryBitmap,blurryBitmap.getWidth() / 2,
                        blurryBitmap.getHeight() / 2, true),
                blurryBitmap.getWidth(), blurryBitmap.getHeight(), true);
        // This shader will hold a cropped, inverted,
        // blurry version of the original image
        BitmapShader bitmapShader = new BitmapShader(blurryBitmap,
                TileMode.CLAMP, TileMode.CLAMP);
        Matrix invertMatrix = new Matrix();
        invertMatrix.setScale(1f, -1f);
        invertMatrix.preTranslate(0, -reflectionH);
        bitmapShader.setLocalMatrix(invertMatrix);

        // This shader holds an alpha gradient
        Shader alphaGradient = new LinearGradient(0, 0, 0, reflectionH,
                0x80ffffff, 0x00000000, TileMode.CLAMP);

        // This shader combines the previous two, resulting in a
        // blurred, fading reflection
        ComposeShader compositor = new ComposeShader(bitmapShader,
                alphaGradient, PorterDuff.Mode.DST_IN);

        Paint reflectionPaint = new Paint();
        reflectionPaint.setShader(compositor);

        // Draw the reflection into the bitmap that we will return
        Canvas canvas = new Canvas(reflection);
        canvas.drawRect(0, 0, reflection.getWidth(),
                reflection.getHeight(), reflectionPaint);
    }
    return reflection;
}
&lt;/pre&gt;
&lt;p&gt;And finally, &lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/PicSure.zip"&gt;here's the Eclipse project&lt;/a&gt; complete with source code, images, and everything you need to build and run the application. The app is targeted at Android 2.2 (Froyo) (and probably could work on earlier versions as well), so you should be able to run it on the emulator or any appropriate device. Note that it's just a demo and not really a full-featured photo viewer; it was written to demonstrate particular effects and techniques, not to be a real application.&lt;/p&gt;

&lt;p&gt;Now that my New Year's resolution is fulfilled, I should go back to working on Android framework code...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2516804979261934094?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2516804979261934094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2516804979261934094' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2516804979261934094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2516804979261934094'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2011/01/video-reflections-on-android.html' title='Video: Reflections on Android'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-4635971957214002526</id><published>2010-12-02T16:40:00.000-08:00</published><updated>2010-12-02T17:03:42.347-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Slides from Recent Android Presentations</title><content type='html'>&lt;p&gt;Here are slides for two of the approximately 871 talks that Romain Guy and I gave at &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; last month (and again at the &lt;a href="http://www.sfandroid.org/"&gt;SF Android User Group&lt;/a&gt; meeting a couple of days ago).&lt;/p&gt;

&lt;p&gt;Videos of all of the Devoxx sessions are already posted on the excellent &lt;a href="http://parleys.com"&gt;Parleys&lt;/a&gt; site for a small subscription fee, and should be made freely available sometime in the next few months. You probably want to check out those videos for the complete details. But in case you were at the talks, are sick of listening to us speak, or simply want to peruse the slideware, here you go...&lt;/p&gt;
&lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/GraphicsandAnimations-Devoxx2010.pdf"&gt;
&lt;/a&gt;&lt;p&gt;&lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/GraphicsandAnimations-Devoxx2010.pdf"&gt;Android Graphics and Animation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sites.google.com/site/androidcontentfromchet/downloads/UITipsTricksTechniques.pdf"&gt;Android UI Development: Tips, Tricks and Techniques&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-4635971957214002526?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/4635971957214002526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=4635971957214002526' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4635971957214002526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4635971957214002526'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/12/slides-from-recent-android.html' title='Slides from Recent Android Presentations'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2185101476684934558</id><published>2010-11-27T06:59:00.000-08:00</published><updated>2010-11-29T10:15:45.708-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Flex 4 Fun 4 Kindle</title><content type='html'>&lt;div style="float: right; text-align: right; font-style: italic;"&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;By popular demand, &lt;a style="font-style: italic;" href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; is now available for the Kindle!&lt;/p&gt;&lt;p&gt;If you order the eBook on the &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Artima&lt;/a&gt; site, you can download the Mobi as well as the PDF version. In fact, if you already bought the eBook, you can log into your Artima account and download the new Mobi version. Once you have the .mobi file, you can copy/email it to your Kindle device and start reading.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2185101476684934558?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2185101476684934558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2185101476684934558' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2185101476684934558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2185101476684934558'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/11/flex-4-fun-4-kindle.html' title='Flex 4 Fun 4 Kindle'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-4856394155187802781</id><published>2010-11-21T15:02:00.001-08:00</published><updated>2010-11-21T15:18:56.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Shaka Devoxx</title><content type='html'>&lt;p&gt;I'm back from the annual &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; conference, a fun and thoroughly exhausting week in Antwerp spent presenting, attending, and generally hanging out. It's always a great time, despite the weather and the overall grayscale cityscape.&lt;/p&gt;

&lt;p&gt;This picture from the show was taken during one of my sessions when I was either talking about a GUI frame or saying hello to my Hawaiian friends.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_ZrYb6GjXXeM/TOUkXMEdc6I/AAAAAAAAKl0/Fkgt-NLyhH0/s800/DSC_0258.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 266px;" src="http://lh3.ggpht.com/_ZrYb6GjXXeM/TOUkXMEdc6I/AAAAAAAAKl0/Fkgt-NLyhH0/s800/DSC_0258.jpg" alt="" border="0" /&gt;&lt;/a&gt;

&lt;p&gt;I presented in several sessions, including 4 sessions with &lt;a href="http://www.curious-creature.org/"&gt;Romain Guy&lt;/a&gt; about Android and UI programming and one on topics from my book, &lt;a href="http://artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;. I spent most of the week either on stage or writing slides and demos to present on stage. There's nothing like procrastination to keep you busy at the last minute.&lt;/p&gt;

&lt;p&gt;For anyone that missed the presentations, see below about their availability on &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt;. We may also post the slides someday, although it's always better to get the full deal (slides+audio+video). Also, I intend to post a couple of the demos I showed in the Android talks (the Flex demos are already available on the book site).&lt;/p&gt;

&lt;p&gt;The sessions this year were, as always, recorded and will be released on &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt;, an excellent site for viewing presentations with lots of content from previous years as well as other developer forums. The talks are released incrementally during the year for free, or you can buy a subscription to view them all for 79 Euros. In fact, parleys just announced that the 2009 recordings are now all available and all free. The talks and the recordings are of very high quality, so you should check out the site..&lt;/p&gt;

&lt;p&gt;Anyway, thanks to Stephan Janssen for another great conference. Shaka!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-4856394155187802781?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/4856394155187802781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=4856394155187802781' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4856394155187802781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4856394155187802781'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/11/shaka-devoxx.html' title='Shaka Devoxx'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_ZrYb6GjXXeM/TOUkXMEdc6I/AAAAAAAAKl0/Fkgt-NLyhH0/s72-c/DSC_0258.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5144991727518292281</id><published>2010-10-29T07:44:00.000-07:00</published><updated>2010-10-29T07:59:18.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Amazon Restocks Massive Shelves</title><content type='html'>&lt;div style="float: right; text-align: right; font-style: italic;"&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/a&gt;&lt;/div&gt;&lt;a style="font-style: italic;" href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; is finally, once again, in stock at &lt;a href="http://www.amazon.com/gp/product/0981531628?ie=UTF8&amp;amp;tag=filriccli-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0981531628"&gt;Amazon.com&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=filriccli-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0981531628" alt="" style="border: medium none ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;. It's been "Temporarily out of stock" for the past coupjle of weeks for reasons that escape me, but which are probably one of these two possibilities:
&lt;ul&gt;&lt;li&gt;Amazon is really new at this business of selling books and is still learning how to keep appropriate amounts of inventory on-hand.&lt;/li&gt;&lt;li&gt;They lost all the copies they had and had to rewrite the book from scratch, based purely on the cover picture on their website. I hope their version is as gripping as the original.&lt;/li&gt;&lt;/ul&gt;In any case, you can now order it in peace.

At the same time, they bumped the price a bit, to $26.60. This is &lt;span style="font-style: italic;"&gt;fantastic&lt;/span&gt; news, of course, for two reasons:
&lt;ul&gt;&lt;li&gt;The book now costs just about a cup of coffee more than it used to on Amazon. This means that you may have to forego that cup when you read it, thus preventing unfortunate spills and mess.&lt;/li&gt;&lt;li&gt;Even better, the new price means that the book is just over Amazon's Free Shipping limit here in the U.S. That's probably the thing that a lot of you were waiting for in order to finally purchase it.&lt;/li&gt;&lt;/ul&gt;So go ahead. It's ready. Now. Go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5144991727518292281?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5144991727518292281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5144991727518292281' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5144991727518292281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5144991727518292281'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/10/amazon-restocks-massive-shelves.html' title='Amazon Restocks Massive Shelves'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5240411828754994699</id><published>2010-10-09T08:16:00.000-07:00</published><updated>2010-10-09T08:36:30.022-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Speaking of Flex...</title><content type='html'>&lt;div style="float: right; text-align: right; font-style: italic;"&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I'll be joining Jacob Surber from Adobe this week to speak to the local Flex user group, &lt;a href="http://www.silvafug.org/"&gt;SilvaFUG&lt;/a&gt; (which I think stands for "Silicon Valley Flex User Group." Or maybe it's "Silver and Fugly"). We'll be in San Francisco on Tuesday evening (the 12th) and San Jose on Thursday evening (the 14th).&lt;/p&gt;
&lt;p&gt;The topic is "Fun with Flex Skinning." I'll start off with an overview of the visual aspects of Flex 4 (which, by bizarre coincidence, are &lt;span style="font-style: italic;"&gt;exactly&lt;/span&gt; the topics covered by &lt;a style="font-style: italic;" href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;. Funny how that worked out). Then I'll walk through an extended example of skinning a simple component to show how these visual elements are used to enable easy development of very custom-looking components. I promise there will be much more code than bullet-points. Jacob will then go into more detail about skinning, including possible workflows and tools for design and development of custom components.&lt;/p&gt;
&lt;p&gt;More information about the events can be found on the &lt;a href="http://www.silvafug.org/"&gt;SilvaFUG&lt;/a&gt; site.&lt;/p&gt;
&lt;p&gt;I hope to see you there; it should be a &lt;s&gt;Flex 4 &lt;/s&gt;Fun evening. Both times.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5240411828754994699?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5240411828754994699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5240411828754994699' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5240411828754994699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5240411828754994699'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/10/speaking-of-flex.html' title='Speaking of Flex...'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-373791510133228472</id><published>2010-09-27T07:21:00.000-07:00</published><updated>2010-09-27T07:55:33.145-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Flex 4 Fun: Only n left-- order soon!</title><content type='html'>&lt;div style="float: right; text-align: right; font-style: italic;"&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;/a&gt;&lt;/div&gt;&lt;a style="font-style: italic;" href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; is finally available for purchase at &lt;a href="http://www.amazon.com/gp/product/0981531628?ie=UTF8&amp;amp;tag=filriccli-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0981531628"&gt;Amazon&lt;/a&gt;. First, it went from looking like this on their site (with the depressing "Temporarily out of stock" message):&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCqF6tf_KI/AAAAAAAAAXs/oIUk2JRP9_E/s1600/Screen+shot+2010-09-19+at+12.04.43+PM.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 121px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCqF6tf_KI/AAAAAAAAAXs/oIUk2JRP9_E/s400/Screen+shot+2010-09-19+at+12.04.43+PM.png" alt="" id="BLOGGER_PHOTO_ID_5521600161792392354" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;to looking like this, after they were finally ready to ship it out (I figure they probably wanted to dust off the copies first, then put them on the shelves to see &lt;a href="http://graphics-geek.blogspot.com/2010/09/done-done-its-here.html"&gt;how nice they looked&lt;/a&gt;):&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCsUDQuRxI/AAAAAAAAAYU/YjzLMl5AdMU/s1600/Screen+shot+2010-09-20+at+10.25.35+AM.png"&gt;&lt;img style="cursor: pointer; width: 347px; height: 62px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCsUDQuRxI/AAAAAAAAAYU/YjzLMl5AdMU/s400/Screen+shot+2010-09-20+at+10.25.35+AM.png" alt="" id="BLOGGER_PHOTO_ID_5521602603629037330" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Then for the past few days, the amount of stock appears to continuously change. In fact, they seem to have a hard time figuring out how much stock to  keep on hand. Here are some screenshots from the Amazon page over the past few days. (Not that I've visited the site that many times  or anything. After all, I already have a copy, so why would I need to? That would be silly.)
&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_l1oSIKeXdHo/TKCsoHnoYJI/AAAAAAAAAY8/2GE3dTLtzhg/s1600/Screen+shot+2010-09-21+at+12.47.41+PM.png"&gt;&lt;img style="cursor: pointer; width: 354px; height: 67px;" src="http://3.bp.blogspot.com/_l1oSIKeXdHo/TKCsoHnoYJI/AAAAAAAAAY8/2GE3dTLtzhg/s400/Screen+shot+2010-09-21+at+12.47.41+PM.png" alt="" id="BLOGGER_PHOTO_ID_5521602948396245138" border="0" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_l1oSIKeXdHo/TKCsn0R8zNI/AAAAAAAAAYs/ovAgU-Z2UIo/s1600/Screen+shot+2010-09-22+at+8.55.58+AM.png"&gt;&lt;img style="cursor: pointer; width: 352px; height: 68px;" src="http://2.bp.blogspot.com/_l1oSIKeXdHo/TKCsn0R8zNI/AAAAAAAAAYs/ovAgU-Z2UIo/s400/Screen+shot+2010-09-22+at+8.55.58+AM.png" alt="" id="BLOGGER_PHOTO_ID_5521602943205035218" border="0" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCsnYc5LkI/AAAAAAAAAYk/Hfm0JAhOy5E/s1600/Screen+shot+2010-09-22+at+10.02.14+AM.png"&gt;&lt;img style="cursor: pointer; width: 349px; height: 68px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCsnYc5LkI/AAAAAAAAAYk/Hfm0JAhOy5E/s400/Screen+shot+2010-09-22+at+10.02.14+AM.png" alt="" id="BLOGGER_PHOTO_ID_5521602935734742594" border="0" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCsnYxp98I/AAAAAAAAAYc/n6HoFsSdcLk/s1600/Screen+shot+2010-09-27+at+6.48.27+AM.png"&gt;&lt;img style="cursor: pointer; width: 345px; height: 71px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCsnYxp98I/AAAAAAAAAYc/n6HoFsSdcLk/s400/Screen+shot+2010-09-27+at+6.48.27+AM.png" alt="" id="BLOGGER_PHOTO_ID_5521602935821825986" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;Get yours soon. Who knows when they're going to run out completely?&lt;/p&gt;&lt;p&gt;Oh, and don't forget about that free shipping for orders over $25 thing. Amazon toyed briefly with a price just over $26. And I mean briefly. I saw it at that price just once over the past two weeks. Now it's down at $24.39 (below the $24.93 price before it was in stock, in the first image above). Apparently the book is like pork bellies or flax futures and the price fluctuates with demand. Or their clerks just get the numbers transposed occasionally. Since it's so close to the free shipping limit of $25, you'll probably want to bundle it with another relevant, yet highly affordable book, like &lt;a style="font-style: italic;" href="http://www.amazon.com/gp/product/1440466971?ie=UTF8&amp;amp;tag=filriccli-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1440466971"&gt;When I am King...&lt;/a&gt;. I'm just saying....
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-373791510133228472?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/373791510133228472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=373791510133228472' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/373791510133228472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/373791510133228472'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/09/flex-4-fun-only-n-left-order-soon.html' title='Flex 4 Fun: Only n left-- order soon!'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_l1oSIKeXdHo/TKCqF6tf_KI/AAAAAAAAAXs/oIUk2JRP9_E/s72-c/Screen+shot+2010-09-19+at+12.04.43+PM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3412750691648339011</id><published>2010-09-11T09:27:00.000-07:00</published><updated>2010-09-11T14:34:16.688-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Book Montage</title><content type='html'>&lt;p&gt;I ran across &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;i&gt;Flex 4 Fun&lt;/i&gt;&lt;/a&gt; in the wild this weekend and managed to get some photographs. I thought that it might help you to understand how you might benefit from the book. Here are some ways that others have found it useful.&lt;/p&gt;
&lt;p&gt;First of all, the book makes a lovely &lt;em&gt;objet d'art&lt;/em&gt;, and was being displayed alongside other great works of art when I encountered it here:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_l1oSIKeXdHo/TIuvn5y_M2I/AAAAAAAAAWs/gdAlSTp9_Jo/s1600/P1050501-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/TIuvn5y_M2I/AAAAAAAAAWs/gdAlSTp9_Jo/s400/P1050501-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695268709741410" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It also makes a nice decoration for some household areas, such as this aquarium:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_l1oSIKeXdHo/TIuv2iUTBLI/AAAAAAAAAXM/bO2snuzsAxc/s1600/P1050507-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_l1oSIKeXdHo/TIuv2iUTBLI/AAAAAAAAAXM/bO2snuzsAxc/s400/P1050507-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695520105039026" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This person apparently found the code recipes useful in the kitchen:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_l1oSIKeXdHo/TIuvmUtf2fI/AAAAAAAAAWk/quVrQqAr-QI/s1600/P1050500-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_l1oSIKeXdHo/TIuvmUtf2fI/AAAAAAAAAWk/quVrQqAr-QI/s400/P1050500-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695241574734322" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At 280+ pages, the book is a perfect size for some household tasks, such as leveling this piece of furniture:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_l1oSIKeXdHo/TIuv1xwlUoI/AAAAAAAAAW8/GDsJ-W6beN8/s1600/P1050503-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_l1oSIKeXdHo/TIuv1xwlUoI/AAAAAAAAAW8/GDsJ-W6beN8/s400/P1050503-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695507070341762" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A good graphics algorithm is always music to the ears:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_l1oSIKeXdHo/TIuv1QtpSxI/AAAAAAAAAW0/9rfC3CTYpi4/s1600/P1050502-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/TIuv1QtpSxI/AAAAAAAAAW0/9rfC3CTYpi4/s400/P1050502-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695498199649042" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This family apparently found the book more interesting to watch on a Friday night than television or a movie:&lt;/p&gt;
&lt;p&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/TIuvkn89oLI/AAAAAAAAAWU/fsQyEHCqdyw/s1600/P1050495-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/TIuvkn89oLI/AAAAAAAAAWU/fsQyEHCqdyw/s400/P1050495-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695212380135602" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And of course the book looks great on a bookshelf, where it fits naturally with both the great works of literature:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/TIuvlfXGJ8I/AAAAAAAAAWc/lIWVVIuPwDY/s1600/P1050497-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/TIuvlfXGJ8I/AAAAAAAAAWc/lIWVVIuPwDY/s400/P1050497-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695227253696450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and the less great works of children's literature:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/TIuv2PDHyXI/AAAAAAAAAXE/9xCg8nlGMOw/s1600/P1050504-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/TIuv2PDHyXI/AAAAAAAAAXE/9xCg8nlGMOw/s400/P1050504-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695514932726130" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But the book won't stay on that kids' shelf for long:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_l1oSIKeXdHo/TIuv3ZdA4jI/AAAAAAAAAXU/1zoJmHb4j5A/s1600/P1050511-crop-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 328px;" src="http://3.bp.blogspot.com/_l1oSIKeXdHo/TIuv3ZdA4jI/AAAAAAAAAXU/1zoJmHb4j5A/s400/P1050511-crop-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695534905549362" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_l1oSIKeXdHo/TIv0Zy4fCuI/AAAAAAAAAXk/5mihi_WUCP4/s1600/P1050512.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/TIv0Zy4fCuI/AAAAAAAAAXk/5mihi_WUCP4/s400/P1050512.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515770892637899490" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even the family pet may enjoy the book - everyone wants to be an RIA developer:&lt;/p&gt;
&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_l1oSIKeXdHo/TIuvjsizRDI/AAAAAAAAAWM/bzPJ6mggONM/s1600/P1050494-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_l1oSIKeXdHo/TIuvjsizRDI/AAAAAAAAAWM/bzPJ6mggONM/s400/P1050494-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515695196432712754" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And finally, this Flex developer was so excited by the book's arrival that he bought two:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_l1oSIKeXdHo/TIuv7ixO3FI/AAAAAAAAAXc/PpB4YGKJ9qU/s1600/Truman.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_l1oSIKeXdHo/TIuv7ixO3FI/AAAAAAAAAXc/PpB4YGKJ9qU/s400/Truman.jpg" alt="" border="0" id="BLOGGER_PHOTO_ID_5515695606125747282" style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" /&gt;&lt;/a&gt;
&lt;p&gt;As you can see, there are plenty of uses for the book. What will you do with yours?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3412750691648339011?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3412750691648339011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3412750691648339011' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3412750691648339011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3412750691648339011'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/09/book-montage.html' title='Book Montage'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/TIuvn5y_M2I/AAAAAAAAAWs/gdAlSTp9_Jo/s72-c/P1050501-1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1651803345110666712</id><published>2010-09-09T20:40:00.000-07:00</published><updated>2010-09-09T21:31:09.639-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Done? Done. It's Here.</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;For anyone that doubted the outcome (including me), I offer the following physical proof that &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; exists. I received a few of the early copies today, and I took a picture of one in its natural habitat. I wanted to capture how nice the book would look on a random bookshelf. Here, you can see it surrounded by a few of my other favorite books:&lt;/div&gt;&lt;div style="text-align: center;"&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_l1oSIKeXdHo/TImpl32rhuI/AAAAAAAAAWE/MkT-kK48mSo/s1600/hardcopyOnBookshelf.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://2.bp.blogspot.com/_l1oSIKeXdHo/TImpl32rhuI/AAAAAAAAAWE/MkT-kK48mSo/s400/hardcopyOnBookshelf.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5515125686805432034" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;This is probably as good a time as any to call out to some of the many people that supported me in this huge and questionable effort:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Romain Guy: Thanks for the ideas, the help, the beautiful pictures (including the lovely and bizarre sea dragon on the cover), the foreword, and the encouragement. I only regret that you didn't actually &lt;i&gt;write&lt;/i&gt; the book with me instead of just making me get started on it to begin with. But I'm learning that there's not a lot of time outside of Android development to take on that kind of project...&lt;/li&gt;&lt;li&gt;Daniel Steinberg: Thanks for helping me get the project rolling at first and giving me some great advice and editing assistance. I'm sure it's a better book for your help.&lt;/li&gt;&lt;li&gt;Bill Venners (a.k.a., the publisher): Thanks for taking the book on and getting it out there in very quick order. Making it available early in online form that close to the Flex 4 release was important, albeit painful and nearly impossible.&lt;/li&gt;&lt;li&gt;The academy: For voting for me and sucking up to me throughout my Hollywood career, I thank you most of all. Always thank the academy.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The books are being sent out to distributors starting this week. &lt;a href="http://www.amazon.com/gp/product/0981531628?ie=UTF8&amp;amp;tag=filriccli-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0981531628"&gt;Amazon still shows the book&lt;/a&gt; as "Available for pre-order", but I expect that to change next week as they start receiving their copies. Assuming they can bear to part with the little darlings.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;(By the way, this blog entry is reminiscent of &lt;a href="http://weblogs.java.net/blog/2007/08/07/done-done-its-here"&gt;an earlier one&lt;/a&gt;. My, how the time flies when you're too dang busy working on code and writing books about it...)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1651803345110666712?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1651803345110666712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1651803345110666712' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1651803345110666712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1651803345110666712'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/09/done-done-its-here.html' title='Done? Done. It&apos;s Here.'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_l1oSIKeXdHo/TImpl32rhuI/AAAAAAAAAWE/MkT-kK48mSo/s72-c/hardcopyOnBookshelf.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8463858621280496464</id><published>2010-09-01T18:43:00.000-07:00</published><updated>2010-09-01T19:00:53.158-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Final Article: Effect Choreography in Flex 4</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/effect_choreography_in_flex_4.html"&gt;Effect Choreography in Flex 4&lt;/a&gt; for an introduction to using composite effects in Flex 4 to create more complex animations.&lt;/p&gt;&lt;p&gt;For anyone that's tired of seeing Flex content on my blog, you're in luck: this is probably the last bit of such material for the foreseeable future. This article is the eighth and last in a series of articles that were, er, borrowed from the book.&lt;/p&gt;&lt;p&gt;(Then again, if you're tired of my Flex content, I have no idea what you're doing reading this blog to begin with).&lt;/p&gt;&lt;p&gt;If, instead, you're pining for more content, might I suggest picking up &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex for Fun&lt;/a&gt;?&lt;/i&gt; The &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;online version&lt;/a&gt; is done and the &lt;a href="http://www.amazon.com/gp/product/0981531628?ie=UTF8&amp;amp;tag=filriccli-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0981531628"&gt;printed version &lt;/a&gt; is so close I can almost taste it (although I hope it reads better than it tastes).&lt;/p&gt;&lt;p&gt;If you're hoping to see some Android content, be patient. I'll get there eventually. I'm a tad swamped in actually writing SDK code and learning the platform first. I'll eventually come around to posting some geeky how-to developer content here. Because that's what this blog is all about.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8463858621280496464?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8463858621280496464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8463858621280496464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8463858621280496464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8463858621280496464'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/09/final-article-effect-choreography-in.html' title='Final Article: Effect Choreography in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5450524257797972677</id><published>2010-08-30T07:21:00.000-07:00</published><updated>2010-08-30T07:25:02.973-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Skinning Components in Flex 4</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/skinning_components_in_flex_4.html"&gt;Skinning Components in Flex 4&lt;/a&gt; for an overview of the awesome new component/skinning architecture in Flex 4. &lt;/p&gt;&lt;p&gt;&lt;i&gt;Flex 4: Get some skin in the game...&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5450524257797972677?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5450524257797972677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5450524257797972677' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5450524257797972677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5450524257797972677'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/skinning-components-in-flex-4.html' title='Skinning Components in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1950963638254984476</id><published>2010-08-24T07:09:00.000-07:00</published><updated>2010-08-24T07:12:32.106-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Linear Gradients in Flex 4</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/linear_gradients_in_flex_4.html"&gt;Linear Gradients in Flex 4&lt;/a&gt; for an overview of using linear gradients in the new graphic primitives in Flex 4.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1950963638254984476?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1950963638254984476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1950963638254984476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1950963638254984476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1950963638254984476'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/linear-gradients-in-flex-4.html' title='Linear Gradients in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2357826220251388110</id><published>2010-08-17T17:52:00.000-07:00</published><updated>2010-08-17T17:53:22.083-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Flex 4 Fun: Amazon Existence Proof</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=filriccli-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0981531628" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;There's a basic philosophical question that is fundamental to so many situations in life:&lt;div&gt;&lt;ul&gt;&lt;li&gt;If a tree falls in the forest and nobody is there to hear it, does it make a sound?&lt;/li&gt;&lt;li&gt;If you tell a joke and nobody hears it, is it funny?&lt;/li&gt;&lt;li&gt;If your children respect you, are they really teenagers?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The equivalent in the book world is:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;If your book isn't sold on Amazon.com, has it really been published?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I'm happy to say that &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;i&gt;Flex 4 Fun&lt;/i&gt;&lt;/a&gt; now passes this last existence proof; the book is available for pre-order on &lt;a href="http://www.amazon.com/gp/product/0981531628?ie=UTF8&amp;amp;tag=filriccli-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0981531628"&gt;Amazon.com&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=filriccli-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0981531628" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;. The book is at the printers now, supposedly available in hard-copy in mid-September. At Amazon's discount of 34% off the list price of $36, it seems like a pretty good deal to me.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Notice that the Amazon price of $24.39 is just shy of the $25 you'll need to reach for free shipping. Which is probably just the excuse you were looking for to finally pick up &lt;a href="http://www.amazon.com/gp/product/1440466971?ie=UTF8&amp;amp;tag=filriccli-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1440466971"&gt;&lt;i&gt;When I Am King...&lt;/i&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=filriccli-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1440466971" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;By the way, if any reader is so inspired, it would be great if you posted a review on Amazon (and elsewhere). I know how I feel about my books, but I'm slightly more subjective than you might be. Besides, I already used up my quota of words in the books themselves. It's time for me to shut up and let someone else talk. Briefly.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2357826220251388110?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2357826220251388110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2357826220251388110' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2357826220251388110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2357826220251388110'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/flex-4-fun-amazon-existence-proof.html' title='Flex 4 Fun: Amazon Existence Proof'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6225807093545241905</id><published>2010-08-15T09:23:00.000-07:00</published><updated>2010-08-15T09:36:20.071-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Flex 4 Fun: Final Post(PrePrint)</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;As promised, the eBook of &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;i&gt;Flex 4 Fun&lt;/i&gt;&lt;/a&gt; has been &lt;a href="http://www.artima.com/forums/flat.jsp?forum=270&amp;amp;thread=301942"&gt;updated to the final version&lt;/a&gt; of the text, which was uploaded for printing last week. So if you bought the eBook already, a fresh download will give you the final bits. &lt;/p&gt;&lt;p&gt;If you didn't buy the eBook version already, what are you waiting for? Oh, you want the hardcopy version so that you can enjoy its graphical goodness in the way that &lt;a href="http://en.wikipedia.org/wiki/Johannes_Gutenberg"&gt;Gutenberg&lt;/a&gt; intended? Well, you'll still have to wait a bit for that. Even now, armies of typesetters are setting up printing presses to make a run at printing the tome. Look for the book in bookstores and online in mid-September.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6225807093545241905?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6225807093545241905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6225807093545241905' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6225807093545241905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6225807093545241905'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/flex-4-fun-final-postpreprint.html' title='Flex 4 Fun: Final Post(PrePrint)'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8604101110770344548</id><published>2010-08-12T18:46:00.000-07:00</published><updated>2010-08-12T18:49:16.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Fills in Flex 4: It's What's on the Inside that Counts</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/fills_in_flex_4.html"&gt;Fills in Flex 4&lt;/a&gt; for an overview of fills for the new graphic primitives in Flex 4.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8604101110770344548?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8604101110770344548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8604101110770344548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8604101110770344548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8604101110770344548'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/fills-in-flex-4-its-whats-on-inside.html' title='Fills in Flex 4: It&apos;s What&apos;s on the Inside that Counts'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6402068801378529292</id><published>2010-08-10T17:53:00.000-07:00</published><updated>2010-08-10T18:12:24.209-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>printf(Flex 4 Fun);</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;If you listen closely, you can probably hear it; the slight rustling of hundreds of pages, the chuckles of the shop foreman as he reads the section headings and subtle footnote humor, the collective sigh of the machinery as it mass-produces page after page of graphics programming wisdom.&lt;/p&gt;&lt;p&gt;After months of writing, followed by many more months of editing and revising (it's still unbelievable to me, and more than a little depressing, to know how much you can continue working on your own text and still find things to improve), &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; has gone to print. It's a bit like being put out to stud, except that books are self-reproducing and there's little chance that one of the offspring would win the Triple Crown.&lt;/p&gt;&lt;p&gt;If all goes well at the printer, there should be hardcopy available in mid-September, right before the &lt;a href="http://java.sun.com/javaone"&gt;JavaOne&lt;/a&gt; conference, and in plenty of time for your holiday programming-book-giving needs. Just imagine what your mother will say when she opens that completely unexpected gift.&lt;/p&gt;&lt;p&gt;For anyone that bought, or is thinking about buying, &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;the online version&lt;/a&gt;, the PrePrint will be updated soon with this version of the text. I'll post something here when that happens.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6402068801378529292?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6402068801378529292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6402068801378529292' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6402068801378529292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6402068801378529292'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/printfflex-4-fun.html' title='printf(Flex 4 Fun);'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6001592940485407186</id><published>2010-08-02T20:42:00.001-07:00</published><updated>2010-08-02T20:44:37.200-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Stroke of Genius: Drawing Lines in Flex 4</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/drawing_lines_in_flex_4.html"&gt;Stroke of Genius: Drawing Lines in Flex 4&lt;/a&gt; for an overview of the stroke object, used for defining the properties of  lines and outlines for the new graphic primitives in Flex 4.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6001592940485407186?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6001592940485407186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6001592940485407186' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6001592940485407186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6001592940485407186'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/stroke-of-genius-drawing-lines-in-flex.html' title='Stroke of Genius: Drawing Lines in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7876516498880908872</id><published>2010-08-01T00:09:00.000-07:00</published><updated>2010-08-01T00:44:35.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Varargh!</title><content type='html'>&lt;p&gt;Varargs, a feature of the C language since roughly the late Victorian era, was introduced into the Java language in JDK1.5.&lt;/p&gt;
&lt;p&gt;I love varargs. They allow me to declare a function flexibly with the ability to take zero, one, or several parameters. This ability is useful when the user may have an unpredictable number of things to add to some data structure, eliminating the need for them to create some collection to pass the parameters into your function. It makes for a nice API. And I'm all about nice API. (And donuts).&lt;/p&gt;
&lt;p&gt;But sometimes varargs don’t work so well. I suppose it’s because I expect too much of them. Like when you meet someone that you really like, so you call them every few minutes or so, then hang around outside their apartment and workplace and friends' houses until they get a restraining order on you. It’s not that they weren’t really cool and worth getting to know, but that your needs weren't necessarily compatible.
&lt;/p&gt;
&lt;p&gt;I was working recently on some API improvements for a library I'm writing. I had some constructors that users would call with exactly two values of different types, like this:
&lt;/p&gt;
&lt;pre&gt;
  public MyObject(int value1, int value2) {}

  public MyObject(float value1, float value2) {}&lt;/pre&gt;

&lt;p&gt;This worked well, vectoring the code path off in different directions depending on the types of the values that the user passed in.
&lt;/p&gt;
&lt;p&gt;But sometimes, the users might have just one value to pass in. Or three. Or nineteen. Rather than having variations for all of these situations, multiplied by the number of types that I wanted to support, I wanted something simpler that took variable numbers of parameters.
&lt;/p&gt;
&lt;p&gt;So I rewrote my API with varargs. It looked something like this:
&lt;/p&gt;
&lt;pre&gt;
  public MyObject(int... values) {}

  public MyObject(float... values) {}&lt;/pre&gt;

&lt;p&gt;This new version was awesome. Now the user could call my functions with the appropriate values and it would do the right thing, no matter what the types were or how many values they passed in. I compiled the code for the library, wrote my test code:
&lt;/p&gt;
&lt;pre&gt;
MyObject obj1 = new MyObject(1f);
MyObject obj2 = new MyObject(1);&lt;/pre&gt;

&lt;p&gt;and
&lt;/p&gt;
&lt;strong&gt;FAIL
&lt;/strong&gt;
&lt;p&gt;I got a compiler error. Specifically, Eclipse gave me the following completely unhelpful message for the test code: “The constructor MyObject(float[]) is ambiguous” for the second line of that test code (&lt;code&gt;MyObject obj2 = new MyObject(1)&lt;/code&gt;). &lt;/p&gt;
&lt;p&gt;Never mind the fact that the error was telling me that the constructor takes an array instead of varargs; I know that varargs is syntactic sugar for a construct that gets turned into an array. The real problem was that my code wouldn’t compile.
&lt;/p&gt;
&lt;p&gt;Apparently, varargs cannot handle the method overloading situation and make the correct type inference and just fails to compile. Although the compiler can make a good decision about the correctness of a constructor with float vs. int, it can’t make that decision for float[] vs int[]. So
it bails.
&lt;/p&gt;
&lt;p&gt;Meanwhile, I discovered another nuance of using varags; you can’t pass them around between constructors willy-nilly. One of the things I wanted to do in my rewrite was to record the type that the user wanted to use and send it to a private constructor like this:
&lt;/p&gt;
&lt;pre&gt;
private MyObject(Class valueType, Object... values) {}&lt;/pre&gt;

&lt;p&gt;Meanwhile, I wrote a single type-specific constructor (to avoid the previous compiler error for now) that called this more generic constructor:
&lt;/p&gt;
&lt;pre&gt;
public MyObject(float... values) {
 this(float.class, values);
}&lt;/pre&gt;

&lt;p&gt;Again, my code compiled fine. And when I eliminated one of the float/int varargs combinations, I was able to write a test that successfully called my varargs constructor:
&lt;/p&gt;
&lt;pre&gt;
MyObject blah = new MyObject(1f, 2f, 3f);&lt;/pre&gt;

&lt;p&gt;This code called the private Object-based constructor above. But then I encountered bugs at runtime where the number of values was not what I was expected. In particular, the number of values being stored by the private constructor was 1, not 3.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;But, but, but, ...&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;It turns out that the call to the private constructor turned a perfectly fine threesome of parameters of type float into a single parameter of type float[]. That is, my varargs had just turned into the array that it was pretending it wasn't when I first wrote the code. &lt;/p&gt;
&lt;p&gt;At this point in an article, the climax as it were, I would typically say, “And here’s how you work around these issues.” I would love to do that, because I like neat tricks and workarounds. And I’d love to actually have that workaround in my code.&lt;/p&gt;
&lt;p&gt;Unfortunately, I have no such workaround. I frankly don’t know how to make this work in any reasonable way. You can be more clear with the compiler, by telling it things like &lt;code&gt;new MyObject(new float[](1f, 2f, 3f})&lt;/code&gt; to get around the compiler error. And maybe you even like the way that that looks for an API. If you are sadistic. Or hallucinating. You could also find a different way to store the individual parameters in the varargs rather than having the VM think that it’s just a single array item. But at this point, my original attempt at a more attractive API and flexible implementation was looking like a bad prototype or an industrial accident.&lt;/p&gt;
&lt;p&gt;So I did the only thing that any responsible captain would do after his vessel had hit an iceberg and was going down with all hands: abandon ship on the first lifeboat.
&lt;/p&gt;
&lt;p&gt;For my situation, I could limit the flexibility to just one or two parameters for the main case, and then have a completely different constructor with a custom data structure for the more
flexible, and less common, case of having several parameters. So I walked away from varargs
completely for my code with nary a look back. The second problem of calling the private constructor with varags then magically disappeared because I no longer had to pass the varargs around.&lt;/p&gt;
&lt;p&gt;For other situations that may benefit from varags, but may run afoul of method overloading, I can only recommend that you know and understand the limitations of the nifty varargs feature. I searched around on the web for answers to my compiler problem and didn’t find anything immediately, so I thought it might be worth noting for posterity. Or at least for the pleasure of venting.&lt;/p&gt;
&lt;p&gt;Varargs: great when they work. But when then don’t?  Nobody knows. Maybe that's why the syntax uses ellipses. It's like a little language joke that says, "Sure, use varargs, Let's see what happens..."
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7876516498880908872?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7876516498880908872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7876516498880908872' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7876516498880908872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7876516498880908872'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/08/varargh.html' title='Varargh!'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-793028156126313836</id><published>2010-07-26T06:33:00.000-07:00</published><updated>2010-07-26T06:36:04.766-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>State Transitions in Flex 4 for Intuitive UIs</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/state_transitions_in_flex_4.html"&gt;State Transitions in Flex 4 for Intuitive UIs&lt;/a&gt; for an overview of using transitions to animate changes between states in Flex 4.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-793028156126313836?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/793028156126313836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=793028156126313836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/793028156126313836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/793028156126313836'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/07/state-transitions-in-flex-4-for.html' title='State Transitions in Flex 4 for Intuitive UIs'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5599115277070390461</id><published>2010-07-22T09:00:00.000-07:00</published><updated>2010-07-22T09:10:20.792-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Yes We Candroid</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_l1oSIKeXdHo/TEcwFvO6LyI/AAAAAAAAAVs/v18W5rVZrNU/s1600/SelfPortraitWithAntennae.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 144px; height: 200px;" src="http://2.bp.blogspot.com/_l1oSIKeXdHo/TEcwFvO6LyI/AAAAAAAAAVs/v18W5rVZrNU/s200/SelfPortraitWithAntennae.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5496414745365458722" /&gt;&lt;/a&gt;&lt;/div&gt;In case anyone's wondering when the next Flex &lt;a href="http://tv.adobe.com/show/codedependent/"&gt;CodeDependent video/demo&lt;/a&gt; is coming, the answer is... probably not anytime soon.&lt;div&gt;
&lt;/div&gt;&lt;div&gt;After a fun and productive &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+4"&gt;Flex 4&lt;/a&gt; release, I decided to &lt;a href="http://en.wikipedia.org/wiki/Let's_Get_Small"&gt;get small&lt;/a&gt;; the time had come for me to do some mobile development. In particular, I wanted to work on Android. So a few weeks ago, I joined Google to work on the &lt;a href="http://developer.android.com/index.html"&gt;Android SDK&lt;/a&gt;. For starters, I'm working on animation support (surprise, surprise), but I'm sure I'll end up tinkering throughout the UI toolkit and graphics layers. You know, the &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;fun&lt;/a&gt; stuff.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;By the way, if you want to know more about this personal career decision, I'll try to answer all of your possible questions here, in no particular order:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Flex is awesome, Flex 4 is even better. Honestly, I wouldn't have wasted the last year's worth of weekends and evenings writing &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;i&gt;Flex 4 Fun&lt;/i&gt;&lt;/a&gt; if I wasn't totally jazzed about Flex 4 as a great client platform.&lt;/li&gt;&lt;li&gt;Yes, but only on Tuesdays.&lt;/li&gt;&lt;li&gt;The coffee is better.&lt;/li&gt;&lt;li&gt;Of course the comedy at &lt;a href="http://chetchat.blogspot.com"&gt;chetchat.blogspot.com&lt;/a&gt; will continue! I'm not dead yet!&lt;/li&gt;&lt;li&gt;No&lt;/li&gt;&lt;li&gt;Maybe, eventually&lt;/li&gt;&lt;li&gt;Blue&lt;/li&gt;&lt;li&gt;Dental floss&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Adobe's doing great things with &lt;a href="http://labs.adobe.com/wiki/index.php/Flash_Player_10.1_for_Android"&gt;Flash on Android&lt;/a&gt; and &lt;a href="http://www.jamesward.com/2010/07/19/developing-mobile-flash-flex-scaling-and-zooming/"&gt;Flex on Android&lt;/a&gt;. But that's not what I'm doing here at Google, so I won't be posting much new Flex/Flash content here (although I still plan on doing some &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;book&lt;/a&gt;-related articles and conference/user-group presentations). It's that finite-time thing - I'm going to be pretty busy just working on what I need to do for Android. I don't know if you've heard, but there's &lt;a href="http://www.guardian.co.uk/technology/2010/jun/23/google-android-eric-schmidt"&gt;a lot&lt;/a&gt; of these devices out there these days; that's a lot of users that need even more awesome UI toolkit software...&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;For anyone interested in Android development, or in UI/graphics/animation development in general, stay tuned to this blog: I plan to post content here about all of that kind of stuff.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5599115277070390461?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5599115277070390461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5599115277070390461' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5599115277070390461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5599115277070390461'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/07/yes-we-candroid.html' title='Yes We Candroid'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_l1oSIKeXdHo/TEcwFvO6LyI/AAAAAAAAAVs/v18W5rVZrNU/s72-c/SelfPortraitWithAntennae.jpg' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-4485100959461657304</id><published>2010-07-21T06:22:00.000-07:00</published><updated>2010-07-21T06:42:09.787-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Flex 4 Fun: Real Soon Now</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;How credible would a software book be that didn't slip the schedule? That would be like sugarless dessert, or nonfat bacon, or an effective politician; it's just not believable.&lt;/p&gt;&lt;p&gt;So in keeping with the tradition of all software since 1954 (the original launch date of Windows Vista), &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt; is hereby slipping its schedule.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;But not by much.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;The original goal was to have the hardcopy printed and available in early August. Failing the invention of a time machine, that's not going to happen. However, the book is actually done, at least from my perspective. In fact, the content that's been in the PrePrint copy for weeks is nearly final itself. The editing phase found many little things to clean up (it always amazes me how many times I can edit my writing and still find errors. It's as if I'm human) and resulted in some amount of reorganization. But most of the recent changes have just been about finalizing the layout in order to get it to the printer.&lt;/p&gt;&lt;p&gt;I don't have a final date yet, but I'm thinking it's sometime in September, just a few weeks after it's sent to the printer... which the publisher assures me is just about to happen.&lt;/p&gt;&lt;p&gt;In the meantime, &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;check it out online&lt;/a&gt; or do like I do; wait impatiently and completely ineffectively.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-4485100959461657304?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/4485100959461657304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=4485100959461657304' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4485100959461657304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4485100959461657304'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/07/flex-4-fun-real-soon-now.html' title='Flex 4 Fun: Real Soon Now'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2372527323846230878</id><published>2010-07-07T05:30:00.000-07:00</published><updated>2010-07-07T05:35:01.472-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Graphics in Flex 3 and Flex 4</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/graphics_in_flex_3_and_4.html"&gt;Graphics in Flex 3 and Flex 4&lt;/a&gt; for a comparison of drawing shapes in Flex 3 code versus using the new graphics classes and tags in Flex 4.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2372527323846230878?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2372527323846230878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2372527323846230878' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2372527323846230878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2372527323846230878'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/07/graphics-in-flex-3-and-flex-4.html' title='Graphics in Flex 3 and Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1137911645202266970</id><published>2010-06-25T06:01:00.000-07:00</published><updated>2010-06-25T06:04:22.955-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Image Zoom Effect in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/image-zoom-effect-in-flex-4/"&gt;Image Zoom Effect in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/show/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode shows a technique for zooming in on a particular area of a thumbnail image, transitioning to a higher-resolution image along the way. A friend had asked about ideas for doing this, and I thought the result might be generally useful or interesting, so here it is. I particularly like how you can zoom in on her enigmatic smile.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6723&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6723&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/ThumbnailZoom.swf" type="application/x-shockwave-flash" width="250" height="200"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/ThumbnailZoom.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1137911645202266970?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1137911645202266970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1137911645202266970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1137911645202266970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1137911645202266970'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/06/video-image-zoom-effect-in-flex-4.html' title='Video: Image Zoom Effect in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3009896019149329911</id><published>2010-06-21T18:15:00.001-07:00</published><updated>2010-06-21T18:19:04.459-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>State-Specific Property Values in Flex 4</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article/demo from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/state_specific.html"&gt;State-Specific Property Values in Flex 4&lt;/a&gt; to see an example and explanation of the simple new syntax in Flex 4 for declaratively setting per-state property values on objects to automate changes in the UI between states.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3009896019149329911?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3009896019149329911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3009896019149329911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3009896019149329911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3009896019149329911'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/06/state-specific-property-values-in-flex.html' title='State-Specific Property Values in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3411625000424744426</id><published>2010-06-19T07:58:00.000-07:00</published><updated>2010-06-19T08:00:05.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Animating Filters in Flex 4, Part II</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/animating-filters-in-flex-4-part-ii/"&gt;Animating Filters in Flex 4, Part II&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/show/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode is the sequel and stunning conclusion to the previous one, &lt;a href="http://tv.adobe.com/watch/codedependent/animating-filters-in-flex-4-part-ii/"&gt;Part I&lt;/a&gt;, in which we saw how to use, and not use, the &lt;code&gt;AnimateFilter&lt;/code&gt; effect for animating filter properties in Flex 4. This time we see how to properly animate properties of filters which persist on objects when the animation ends.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6722&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6722&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/PersistentFilters.swf" type="application/x-shockwave-flash" width="350" height="200"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/PersistentFilters.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3411625000424744426?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3411625000424744426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3411625000424744426' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3411625000424744426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3411625000424744426'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/06/video-animating-filters-in-flex-4-part_19.html' title='Video: Animating Filters in Flex 4, Part II'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2298369367919170630</id><published>2010-06-11T06:26:00.000-07:00</published><updated>2010-06-11T06:28:42.261-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Animating Filters in Flex 4, Part I</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/animating-filters-in-flex-4-part-i/"&gt;Animating Filters in Flex 4, Part 1&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/show/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode shows how to use the &lt;code&gt;AnimateFilter&lt;/code&gt; effect in Flex 4 to achieve certain effects like animating a blur. It also shows how the effect is completely inappropriate for some situations, which is a teaser for the next episode.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6721&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6721&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/TransientFilters.swf" type="application/x-shockwave-flash" width="300" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/TransientFilters.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2298369367919170630?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2298369367919170630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2298369367919170630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2298369367919170630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2298369367919170630'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/06/video-animating-filters-in-flex-4-part.html' title='Video: Animating Filters in Flex 4, Part I'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1701193704083320133</id><published>2010-06-03T20:13:00.000-07:00</published><updated>2010-06-03T20:16:14.911-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Video: 3D Distortion</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/3d-distortion-in-flex-and-flash/"&gt;3D Distortion in Flex and Flash&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/show/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode shows how and why you might see some distortion with 3D objects in Flash and Flex (hint: it's about bitmap scaling).&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6719&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6719&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/DDDistortion.swf" type="application/x-shockwave-flash" width="500" height="250"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/DDDistortion.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1701193704083320133?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1701193704083320133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1701193704083320133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1701193704083320133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1701193704083320133'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/06/video-3d-distortion.html' title='Video: 3D Distortion'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6584464757484815716</id><published>2010-05-27T20:25:00.000-07:00</published><updated>2010-05-27T20:28:47.453-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Easier, Better Transitions</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/easier-better-transitions-in-flex-4/"&gt;Easier, Better Transitions in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode shows how to use transitions more effectively by avoiding hard-coding the animation values in the effects, and letting the effects pick up the values from the states automatically, instead..&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6717&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6717&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application (in its final form):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/TransitionEffectsValues.swf" type="application/x-shockwave-flash" width="400" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/TransitionEffectsValues.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6584464757484815716?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6584464757484815716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6584464757484815716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6584464757484815716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6584464757484815716'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/05/video-easier-better-transitions.html' title='Video: Easier, Better Transitions'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-968493801344517697</id><published>2010-05-20T20:31:00.000-07:00</published><updated>2010-05-20T20:35:37.247-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Flex 4 States and Transitions</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/flex-4-states-and-transitions/"&gt;Flex 4 States and Transitions&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode shows how to use the new states syntax and transitions in Flex 4.&lt;/p&gt;
&lt;p&gt;This show is based on one of the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;65+ demo applications&lt;/a&gt; that I wrote for &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;, a book about the graphics and animation side of Flex 4. If you want to see more about the book, check out &lt;a href="http://booksites.artima.com/flex_4_fun"&gt;the book site&lt;/a&gt;, the page where you can &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;purchase the PrePrint version&lt;/a&gt;, or the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;apps site&lt;/a&gt; where all of the demos are hosted.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6716&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6716&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the first demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/SearchMe.swf" type="application/x-shockwave-flash" width="300" height="250"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And here is the second demo:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/SearchMeTransition.swf" type="application/x-shockwave-flash" width="300" height="250"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/SearchMe.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-968493801344517697?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/968493801344517697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=968493801344517697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/968493801344517697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/968493801344517697'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/05/video-flex-4-states-and-transitions.html' title='Video: Flex 4 States and Transitions'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1425467024916904046</id><published>2010-05-14T16:35:00.000-07:00</published><updated>2010-06-03T13:44:55.846-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: Flex 4 Path to Enlightenment</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/the-path-object-in-flex-4/"&gt;The Path Object in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/show/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode shows how to create a simple drawing application using the new &lt;code&gt;Path&lt;/code&gt; object in Flex 4.&lt;/p&gt;
&lt;p&gt;This show is based on one of the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;65+ demo applications&lt;/a&gt; that I wrote for &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;, a book about the graphics and animation side of Flex 4. If you want to see more about the book, check out &lt;a href="http://booksites.artima.com/flex_4_fun"&gt;the book site&lt;/a&gt;, the page where you can &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;purchase the PrePrint version&lt;/a&gt;, or the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;apps site&lt;/a&gt; where all of the demos are hosted.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6532&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6532&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/Scribbler.swf" type="application/x-shockwave-flash" width="400" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/Scribbler.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1425467024916904046?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1425467024916904046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1425467024916904046' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1425467024916904046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1425467024916904046'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/05/video-flex-4-path-to-enlightenment.html' title='Video: Flex 4 Path to Enlightenment'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6184672730980945236</id><published>2010-05-07T07:38:00.000-07:00</published><updated>2010-05-07T07:39:13.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: Upon Further Reflection</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/creating-a-reflection-container-in-flex-4-part-ii/"&gt;Creating a Reflection Container in Flex 4, Part II&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show is the sequel to &lt;a href="http://graphics-geek.blogspot.com/2010/04/video-reflection-container-in-flex-4.html"&gt;the previous one&lt;/a&gt;, in which I showed how to create a simple container for an image and it's reflection ... that didn't look that great. The sequel shows how to get a better, more realistic reflection effect by using blur, masking, and alpha gradients. My favorite part of the technique is something that I completely forgot to mention in the show: the code is &lt;em&gt;soooo&lt;/em&gt; much simpler than code I used to write to get this effect prior to Flex 4. Check out &lt;a href="http://graphics-geek.blogspot.com/2009/03/video-moment-of-reflexion.html"&gt;this earlier show&lt;/a&gt; on a reflection effect using ActionScript and Flex 3 components. Now look at the few lines of code in the Reflexion container to get the same result. Nice, eh?&lt;/p&gt;
&lt;p&gt;This show is based on one of the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;65+ demo applications&lt;/a&gt; that I wrote for &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;, a book about the graphics and animation side of Flex 4. If you want to see more about the book, check out &lt;a href="http://booksites.artima.com/flex_4_fun"&gt;the book site&lt;/a&gt;, the page where you can &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;purchase the PrePrint version&lt;/a&gt;, or the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;apps site&lt;/a&gt; where all of the demos are hosted.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6169&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6169&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/UponFurtherReflection.swf" type="application/x-shockwave-flash" width="500" height="500"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/UponFurtherReflection.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6184672730980945236?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6184672730980945236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6184672730980945236' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6184672730980945236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6184672730980945236'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/05/video-upon-further-reflection.html' title='Video: Upon Further Reflection'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5885766729628169244</id><published>2010-04-29T19:51:00.000-07:00</published><updated>2010-04-30T07:34:33.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: Reflection Container in Flex 4, Part 1</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/creating-a-reflection-container-in-flex-4-part-1/"&gt;Creating a Reflection Container in Flex 4, Part 1&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;This show is based on one of the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;65+ demo applications&lt;/a&gt; that I wrote for &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;, a book about the graphics and animation side of Flex 4. You can see a book sitting next to me on the table at the start of the video. I had planned to show it in the video, but that segment got cut. I suppose the producer figured that since all I was showing was a copy of &lt;a href="http://www.amazon.com/When-Am-King-Chet-Haase/dp/1440466971"&gt;When I am King...&lt;/a&gt; with a printout of the Flex 4 Fun cover taped around it (since Flex 4 Fun isn't actually available in hardcover until this Summer), it really wasn't a crucial part of the show. Anyway, if you want to see more about the book, check out &lt;a href="http://booksites.artima.com/flex_4_fun"&gt;the book site&lt;/a&gt;, the page where you can &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;purchase the PrePrint version&lt;/a&gt;, or the &lt;a href="http://booksites.artima.com/flex_4_fun/apps/"&gt;apps site&lt;/a&gt; where all of the demos are hosted.&lt;/p&gt;
&lt;p&gt;This episode shows how to create a simple container in Flex 4 that holds both a &lt;code&gt;BitmapImage&lt;/code&gt; and that image's reflection. The actual reflection we end up with, which is just a translucent/mirrored version of the original, could be improved upon... which is the point of the next show. (Oooh, I just &lt;em&gt;love&lt;/em&gt; a good cliffhanger!)&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=6168&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=6168&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/UponReflection.swf" type="application/x-shockwave-flash" width="500" height="500"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/UponReflection.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5885766729628169244?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5885766729628169244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5885766729628169244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5885766729628169244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5885766729628169244'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/video-reflection-container-in-flex-4.html' title='Video: Reflection Container in Flex 4, Part 1'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5982703531061249242</id><published>2010-04-26T07:34:00.000-07:00</published><updated>2010-04-26T07:42:54.830-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>States and Components in Flex 4</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 95px; height: 119px;" src="http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s400/flex4funCover.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5464455244027598850" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://artima.com/"&gt;Artima.com&lt;/a&gt; has posted another article/demo from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt;. Check out &lt;a href="http://www.artima.com/articles/states_and_components.html"&gt;States and Components in Flex 4&lt;/a&gt; to see an example of the simple new state syntax in Flex 4 for including and excluding objects in different states of an application.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5982703531061249242?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5982703531061249242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5982703531061249242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5982703531061249242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5982703531061249242'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/states-and-components-in-flex-4.html' title='States and Components in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_l1oSIKeXdHo/S9WlF69JGAI/AAAAAAAAAVc/P5TCm6LQvUY/s72-c/flex4funCover.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2937783323811445933</id><published>2010-04-13T13:08:00.000-07:00</published><updated>2010-04-13T13:13:41.345-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Bending Pixels with Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://artima.com"&gt;Artima.com&lt;/a&gt; has posted one of the demos from my book &lt;i&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;&lt;/i&gt; in an article on their site. Check out &lt;a href="http://www.artima.com/articles/bend_your_pixels.html"&gt;Bend your Pixels with Flex 4&lt;/a&gt; to see a simple example of using a Pixel Bender shader to get a grayscaling effect on an image.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2937783323811445933?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2937783323811445933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2937783323811445933' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2937783323811445933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2937783323811445933'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/bending-pixels-with-flex-4.html' title='Bending Pixels with Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6957920017135747710</id><published>2010-04-07T11:59:00.000-07:00</published><updated>2010-04-07T14:05:15.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: Event Performance in Flex</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/event-performance-in-flex/"&gt;Event Performance in Flex&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode covers the use of the &lt;code&gt;updateAfterEvent()&lt;/code&gt; function to get better rendering performance for time-sensitve operations like mouse-interaction visuals and animations.&lt;/p&gt;

&lt;p&gt;By default, changes to the graphics that the Flash player displays happen at the frame rate of the player (by default, 24 frames per second). This frame rate, which updates the screen every ~42 milliseconds, is fine for most visual changes on the screen. But when you need motion to be smoother, like in some animations, or need the visuals to respond quickly to user interactions, like changes in component state based on mouse movement or presses, then 24 fps may not cut it. In this case, you need to know about the &lt;code&gt;updateAfterEvent()&lt;/code&gt; function found on some event objects.&lt;/p&gt;

&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5623&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=5623&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/EventSpeed.swf" type="application/x-shockwave-flash" width="300" height="200"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/EventSpeed.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6957920017135747710?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6957920017135747710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6957920017135747710' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6957920017135747710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6957920017135747710'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/video-event-performance-in-flex.html' title='Video: Event Performance in Flex'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3896082173453492834</id><published>2010-04-05T13:14:00.000-07:00</published><updated>2010-04-05T13:40:04.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Flex 4 Fun: Available in PrePrint</title><content type='html'>&lt;div style="float: right; text-align: right;"&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 210px; height: 300px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/S7Y0JVsHDmI/AAAAAAAAAVE/RTfrkezayYQ/s400/Flex4FunCover.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5455605333651557986" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Chet's handy AcrtionScript algorithm for writing a programming book:&lt;/p&gt;
&lt;pre&gt;public function writeBook():FinishedManuscript
{
 var manuscript = new FinishedManuscript();
 writeDemos(manuscript);
 writeText(manuscript);
 while (true)
 {
    edit(manuscript);
    revise(manuscript);
 }
 // TODO: Next line never executes
 return manuscript;
}&lt;/pre&gt;
&lt;p&gt;Finally, after months of writing, editing, revising, coding, explaining, revising, deliberating, cogitating, revising, formatting, reformatting, revising, snapshotting, describing, captioning, revising, and dying a little inside, my book &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt; is finished. Almost. It just needs a little more editing and revising.&lt;/p&gt;
&lt;p&gt;The book is content complete: all of the chapters are done, all of the demo applications compile and run, all of the text is correct as far as I know, and there are no known typos.The book could still benefit from one more review cycle, but rather than wait for that plus the printing delay until it would actually be available on bookshelves (usually 2-3 months after a book is completely complete), I wanted to push out this early version close to last month's Flex 4 release.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;Flex 4 Fun&lt;/a&gt;  is different than other Flex, or Flex 4, books I've seen; it focuses on the graphics and animation side of the SDK. I figured that's what I like to play with on Flex, it's what I know best about the platform, and it deserved a book that went deeper into these topics than the other Flex books. Sure, an overview book is good to have. Yes, you should understand how to connect Flex to a back end. Alright, you probably want to understand how to architect large Flex applications. But when you get around to creating better user experiences for that Flex client, you'll want to know more about graphics, states, skinning, and animation. And hopefully &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;this book&lt;/a&gt; and its 65+ examples can help teach you how that stuff works.&lt;/p&gt;
&lt;p&gt;Here's the books Contents page:&lt;/p&gt;
&lt;blockquote&gt;  1. Introduction 13

2. Graphics 18

3. Filters: Easy Image Processing 60

4. States 96

5. Transitions 105

6. Skinning Components 119

7. Animation 138

8. The Animation Class 152

9. Flex Effects: The Basics 184

10. Effect Choreography 209

11. Advanced Flex Effects 230

12. Go Have Fun 258&lt;/blockquote&gt;
&lt;p&gt;The book is available in PrePrint form on &lt;a href="http://www.artima.com/shop/flex_4_fun"&gt;artima.com&lt;/a&gt;. Go check it out and have some fun!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3896082173453492834?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3896082173453492834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3896082173453492834' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3896082173453492834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3896082173453492834'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/flex-4-fun-available-in-preprint.html' title='Flex 4 Fun: Available in PrePrint'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_l1oSIKeXdHo/S7Y0JVsHDmI/AAAAAAAAAVE/RTfrkezayYQ/s72-c/Flex4FunCover.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8961229708569652760</id><published>2010-04-02T11:14:00.001-07:00</published><updated>2010-04-02T11:26:29.198-07:00</updated><title type='text'>Flex 4 Fun: Coming Soon. Really Soon.</title><content type='html'>&lt;p&gt;Here's another teaser for my Flex 4 book, coming soon from Artima Press:&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_l1oSIKeXdHo/S7Y0JVsHDmI/AAAAAAAAAVE/RTfrkezayYQ/s1600/Flex4FunCover.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 280px; height: 400px;" src="http://1.bp.blogspot.com/_l1oSIKeXdHo/S7Y0JVsHDmI/AAAAAAAAAVE/RTfrkezayYQ/s400/Flex4FunCover.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5455605333651557986" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;(nifty cover picture by &lt;a href="http://www.curious-creature.org/"&gt;Romain Guy&lt;/a&gt;, Android hacker and photographer extraordinaire).&lt;/p&gt;
&lt;p&gt;As you might expect in a book by me, Flex 4 Fun dives into the graphical and animation side of Flex 4. Lots of applications (&gt;65) that demonstrate the technologies and techniques are covered in depth in the book and will be available on the book's website in binary and source form. Plenty of stuff to play with for those wanting to learn more about the "fun" side of Flex.&lt;/p&gt;
&lt;p&gt;The book should be coming out in PrePrint form any day now. Artima's PrePrint is like a beta release of the book. In this case, the book is complete and has gone through a thorough editing/revision cycle (for some chapters, two or three times). But it still needs a technical review and feedback from careful readers like you. And you. And you. But in the interest of getting it out in your hands and minds close to when Flex 4 was released, we're releasing this early version while I work on finalizing the content in parallel.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8961229708569652760?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8961229708569652760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8961229708569652760' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8961229708569652760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8961229708569652760'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/flex-4-fun-coming-soon-really-soon.html' title='Flex 4 Fun: Coming Soon. Really Soon.'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_l1oSIKeXdHo/S7Y0JVsHDmI/AAAAAAAAAVE/RTfrkezayYQ/s72-c/Flex4FunCover.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3883817251819588247</id><published>2010-04-02T08:15:00.001-07:00</published><updated>2010-04-02T08:18:09.981-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Video: Using Flexy in a Flash Project</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/using-libraries-in-flash-pro/"&gt;Using Libraries in Flash Pro&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This espisode is the stunning conclusion to the previous nail-biting cliff-hanger episode, &lt;a href="http://graphics-geek.blogspot.com/2010/03/video-creating-reusable-animation.html"&gt;Creating a Reusable Animation Library&lt;/a&gt;, in which we saw how to use Flash Pro to create Flexy, a small and Flex-free version of the timing engine underlying Flex effects. In this episode, we see how to use Flash Pro to link against Flexy and use it to create a simple ActionScript-based animation, writing code that looks very close to what we would write in Flex 4 for doing the same animation.&lt;/p&gt;
&lt;p&gt;Once again, my thanks go to &lt;a href="http://senocular.com/about/"&gt;Trevor McCauley&lt;/a&gt; for helping me figure this out. Trevor's on the Flash player team and is very helpful is figuring out all kinds of things about how Flash works, including this bit about Flash authoring. Check out his blog at &lt;a href="http://senocular.com/"&gt;senocular.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I should probably spend more time and words on the Flexy library itself, but that will have to be for another day and another blog entry. But check out &lt;a href="http://graphics-geek.blogspot.com/2010/03/video-creating-reusable-animation.html"&gt;the previous episode&lt;/a&gt; for more information, and use your vast knowledge about the Flex Animation class and the related classes that you've accumulated so far from my blog and videos. It all carries over to Flexy, because Flexy is basically a subset of what I've been talking about with Flex 4 effects. It's just the timing engine part of effects (the 'Tween' engine, in Flash parlance), plus a helper class to assist in setting the animated properties on the target objects.&lt;/p&gt;
&lt;p&gt;But for now, I'll just stick with the content of this show.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5439&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=5439&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/FlexyTest.swf" type="application/x-shockwave-flash" width="400" height="400"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/Flexy.fla"&gt;Here is the demo code&lt;/a&gt;. This is the Flash Pro project (FlexyTest.fla), which links to the Flexy library itself (&lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/Flexy.swc"&gt;Flexy.swc&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3883817251819588247?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3883817251819588247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3883817251819588247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3883817251819588247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3883817251819588247'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/video-using-flexy-in-flash-project.html' title='Video: Using Flexy in a Flash Project'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3672432922532287125</id><published>2010-04-01T10:24:00.000-07:00</published><updated>2010-04-01T10:29:35.377-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>Video: Animation Rules on Parleys.com</title><content type='html'>&lt;p&gt;&lt;a href="http://www.blogger.com/://www.curious-creature.org"&gt;Romain Guy&lt;/a&gt; and I gave a presentation last year at &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; (an excellent developer conference in Antwerp, Belgium (a city with mildly miserable weather at that time of year)) called &lt;i&gt;Animation Rules!&lt;/i&gt; A recording of this session was just posted on &lt;a href="http://parleys.com/"&gt;parleys.com&lt;/a&gt;. I've embedded it here for your viewing pleasure:
&lt;/p&gt;
&lt;object width="474" height="443"&gt;&lt;param name="movie" value="http://www.parleys.com/share/parleysshare2.swf?pageId=1578"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="pageId" value="1578"&gt;&lt;embed src="http://www.parleys.com/share/parleysshare2.swf?pageId=1578" type="application/x-shockwave-flash" allowfullscreen="true" width="474" height="443"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;You could also check it out on the &lt;a href="http://www.parleys.com/#st=5&amp;amp;id=1578&amp;amp;sl=10"&gt;Parleys site directly&lt;/a&gt;; parleys is an excellent Flex application, and has a desktop AIR client for offline viewing of the various sessions.&lt;/p&gt;&lt;p&gt;The Devoxx conference posts &lt;a href="http://parleys.com/#st=3&amp;amp;id=189"&gt;the session recordings&lt;/a&gt; one by one throughout the year. But you can also subscribe to parleys to get all of the sessions immediately. There are many great sessions at the conference, and the fee is quite low (49 Euros for 6 months), so consider becoming a subscriber to get it all.&lt;/p&gt;
&lt;p&gt;Enjoy...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3672432922532287125?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3672432922532287125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3672432922532287125' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3672432922532287125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3672432922532287125'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/04/video-animation-rules-on-parleyscom.html' title='Video: Animation Rules on Parleys.com'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-4762368803999390580</id><published>2010-03-26T08:26:00.000-07:00</published><updated>2010-03-26T08:32:04.152-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: FlashCamp Boston Session Videos Posted</title><content type='html'>&lt;p&gt;An event didn't really happen unless videos of it are posted to the web. So it must be the case that FlashCamp Boston really happened, because the videos are live.&lt;/p&gt;
&lt;p&gt;All of the sessions from last week's excellent Flex-oriented event are now on &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt; at &lt;a href="http://tv.adobe.com/show/flash-camp-boston/"&gt;http://tv.adobe.com/show/flash-camp-boston/&lt;/a&gt;. These sessions include:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://tv.adobe.com/watch/flash-camp-boston/keynote-whats-new-in-flex-4-/"&gt;a keynote on Flex 4 by Deepa Subramaniam&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://tv.adobe.com/watch/flash-camp-boston/flash-builder-4-secrets-/"&gt;FlashBuilder 4 tips by Rob Brambley&lt;/a&gt;, &lt;/li&gt;
 &lt;li&gt;&lt;a href="http://tv.adobe.com/watch/flash-camp-boston/advanced-skinning-in-flex-4-/"&gt;a skinning talk by Ryan Frishberg&lt;/a&gt;, &lt;/li&gt;
 &lt;li&gt;&lt;a href="http://tv.adobe.com/watch/flash-camp-boston/creating-custom-layouts-in-flex-4-/"&gt;a custom layout talk by layout king Evtim Georgiev&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://tv.adobe.com/watch/flash-camp-boston/whats-new-in-flash-builder-4-/"&gt;a FlashBuilder 4 overview by Heidi Williams&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://tv.adobe.com/watch/flash-camp-boston/flash-catalyst-/"&gt;a talk on Catalyst by Doug Winnie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;... and &lt;a href="http://tv.adobe.com/show/flash-camp-boston/"&gt;much, much more&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Oh, and I gave a talk on (what else?) &lt;a href="http://tv.adobe.com/watch/flash-camp-boston/animation-and-effects-in-flex-4-/"&gt;Flex 4 effects&lt;/a&gt;, which I'll embed here because that's what I do on my blog:&lt;/p&gt;
&lt;p&gt;&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5514&amp;amp;context=377&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=5514&amp;amp;context=377&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Enjoy...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-4762368803999390580?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/4762368803999390580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=4762368803999390580' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4762368803999390580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4762368803999390580'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/03/video-flashcamp-boston-session-videos.html' title='Video: FlashCamp Boston Session Videos Posted'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-97498091100564165</id><published>2010-03-22T20:04:00.000-07:00</published><updated>2010-03-22T20:26:58.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcements'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Coming Soon: My Flex 4 Book</title><content type='html'>&lt;p&gt;
Now that &lt;a href="http://www.adobe.com/products/flex/flex_framework/"&gt;Flex 4 is released&lt;/a&gt; (yay!), it seems like a good time to announce that I've been writing a book about the graphics and animation side of Flex 4 (apparently I didn't learn my lesson &lt;a href="http://filthyrichclients.org/"&gt;the first time around&lt;/a&gt;, or I actually enjoy spending all of my spare time writing about what I spend my non-spare time developing). It should be a fun read with lots of eye candy demos with source code available on the book's website. &lt;/p&gt;&lt;p&gt;I'll have more details available in the next couple of days, and I hope to have the beta version of the book ready for online purchase within the week. (I actually hoped to have the real paper version available in stores this week instead. But that dream died a few months ago when I blew right past all of my deadlines. It's  tough to finish a book about a product when you really need to finish the product first. So instead, I'll have a nearly-finished version of the book available online now,  followed by the final version available online and in print hopefully sometime this summer).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-97498091100564165?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/97498091100564165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=97498091100564165' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/97498091100564165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/97498091100564165'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/03/coming-soon-my-flex-4-book.html' title='Coming Soon: My Flex 4 Book'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3173275160687896463</id><published>2010-03-12T07:45:00.000-08:00</published><updated>2010-03-12T07:47:00.161-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Video: Creating a Reusable Animation Library</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/creating-a-reusable-flash-animation-library/"&gt;Creating a Reusable Flash Animation Library&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode is a bit of a departure from my normal shows. Usually, I show graphics and animation techniques in Flex and Flex 4. This time, I talk about Flash Pro, the authoring tool for Flash (not Flex) applications. In particular, I show how to create a reusable library in Flash Pro that you can then link to and use in other Flash Pro projects. The process of creating a library in Flash Pro wasn't obvious to me, so I thought it might be useful to show how it was done. Thanks to &lt;a href="http://senocular.com/about/"&gt;Trevor McCauley&lt;/a&gt; for helping me figure this out. Trevor's on the Flash player team and is very helpful is figuring out all kinds of things about how Flash works, including this bit about Flash authoring. Check out his blog at &lt;a href="http://senocular.com/"&gt;senocular.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's how this relates to Flex and my work for Flex: the library I create is an animation library based on the core facilities underlying the Flex effects. I call the library Flexy.&lt;/p&gt;
&lt;p&gt;Flex effects are pretty dependent on the Flex library overall. They use concepts in UIComponent, graphic elements, styles, and other concepts that are found in the core Flex framework. So building a full-on Flex effects library in Flash Pro would necessarily drag in so much of the Flex infrastructure that it wouldn't be worth the effort; you might as well just use Flex directly.&lt;/p&gt;
&lt;p&gt;But the underlying animation engine that the new Flex 4 effects depend on, including the &lt;code&gt;Animation&lt;/code&gt; class, arbitrary type interpolation, and the new easer interface and classes, are independent of Flex effects and of nearly everything else in Flex. I wanted to see if I could break those animation facilities out into a separable library. There were various niggling dependencies, such as the use of the &lt;code&gt;EffectEvent&lt;/code&gt; class, some use of resource bundles for error strings, and other minor issues, but one 50-minute train commute later, I had a 13k library built in Flash Pro that had no Flex dependencies and had all of the underlying animation support that the Flex effects use for running their animations.&lt;/p&gt;
&lt;p&gt;Flexy doesn't handle all of the effects functionality, of course, because Flex effects aren't part of the port. Flex effects provide mainly two extra layers of support for animations. First, they handle setting animated values on target objects/properties. The animation infrastructure only handles calculating the animated values, not what to do with those values. Second, effects have extra built-in logic and convenience APIs that makes it easier to declare and run effects than you might otherwise have to do with a more manual approach to animation.&lt;/p&gt;
&lt;p&gt;I can't do much about the second bit; that's most of the code in effects, and I was looking for something simple. But for the first part, I've provided a utility class called &lt;code&gt;PropertyAnimator&lt;/code&gt; which you can use to automate assigning animated values to properties, just like effects do. It simplifies using &lt;code&gt;Animation&lt;/code&gt; and makes very easy property animation possible with this library.&lt;/p&gt;
&lt;p&gt;Check out Flexy and see what you can do with it. And come back for the next show to see a simple example of using the library from within Flash Pro.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5320&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=5320&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;There is no demo application this time, because the demo is really just the reusable Flexy library, which isn't very exciting to watch, as demos go, because it just sits there, being reusable.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/Flexy.zip"&gt;Here is the demo code&lt;/a&gt;. This is a zip file containing the Flash Pro project (Flexy.fla), the Flexy library itself (&lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/Flexy.swc"&gt;Flexy.swc&lt;/a&gt;), and the source code that Flexy was built with.&lt;/p&gt;
&lt;p&gt;Users of the Flex &lt;code&gt;Animation&lt;/code&gt; class should be able to start playing with the library pretty easily, but if the API is a bit of a mystery to you, check back for my next show, in which I'll dmeonstrate how to use the library in Flash Pro for a simple example.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3173275160687896463?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3173275160687896463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3173275160687896463' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3173275160687896463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3173275160687896463'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/03/video-creating-reusable-animation.html' title='Video: Creating a Reusable Animation Library'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-973585705603592189</id><published>2010-03-08T15:10:00.000-08:00</published><updated>2010-03-08T17:31:46.660-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><title type='text'>Music Video: Flex 4: It's a Wrap</title><content type='html'>&lt;p&gt;
Here's a music video I made for the &lt;a href="http://www.360flex.com/"&gt;360|Flex&lt;/a&gt; conference. It's a tribute to the Flex 4 release and the Flex SDK team. I hope you like it, from the bottom of my geeky little heart.&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PeTakZ-_sF0&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/PeTakZ-_sF0&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-973585705603592189?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/973585705603592189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=973585705603592189' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/973585705603592189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/973585705603592189'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/03/music-video-flex-4-its-wrap.html' title='Music Video: Flex 4: It&apos;s a Wrap'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-589539835998621794</id><published>2010-02-26T19:50:00.000-08:00</published><updated>2010-02-26T19:52:53.140-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>FlashCamp Boston: March 19th</title><content type='html'>&lt;p&gt;It's Flashy, it's Campy, it's ... FlashCamp!&lt;/p&gt;
&lt;p&gt;There are some &lt;em&gt;free &lt;/em&gt;FlashCamp conferences coming up in the next few weeks. These free events are great opportunities to learn what's new and upcoming in the platform, for free. I'll be speaking at the free &lt;a href="http://flashcampboston.eventbrite.com/"&gt;FlashCamp Boston&lt;/a&gt;. And my topic will be ... Animation and Effects in Flex 4 (big surprise there). There are lots of other great speakers and topics, and there will be developers from the builder and SDK teams giving talks and generally available to answer your questions. For free!&lt;/p&gt;
&lt;p&gt;Come on along to the free camp nearest you. For example, come to the free &lt;a href="http://flashcampboston.eventbrite.com/"&gt;Boston&lt;/a&gt; event on March 19: be sure to &lt;a href="http://flashcampboston.eventbrite.com/"&gt;register here&lt;/a&gt;; it's free, but there's limited space. Here's the current agenda for that free night:&lt;/p&gt;
&lt;blockquote&gt;
5:00 - 5:45 p.m.  Registration/Food/Drinks/Networking

5:45 - 6:15 p.m.  Keynote

6:15 - 6:45 p.m.  Overview of Flex 4

6:45 - 7:00 p.m.  What's New in Flash Builder 4

7:00 - 7:20 p.m.  Break

7:20 - 7:50 p.m.  Animation and Effects in Flex 4

7:50 - 8:05 p.m.  Introducing ColdFusion Builder

8:05 - 8:20 p.m.  PHP and Flex 4

8:20 - 8:50 p.m.  Creatiung Custom Layouts in Flex 4

8:50 - 9:10 p.m.  Break

9:10 - 9:40 p.m.  Advanced Skinning in Flex 4

9:40 - 9:55 p.m.  SpringSource and Flex 4

9:55 - 10:15 p.m.  Flash Builder 4 Secrets

10:15 - 10:30 p.m Flash on Mobile

&lt;/blockquote&gt;
&lt;p&gt;(Did I mention that it's free?)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-589539835998621794?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/589539835998621794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=589539835998621794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/589539835998621794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/589539835998621794'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/02/flashcamp-boston-march-19th.html' title='FlashCamp Boston: March 19th'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7084265096091090807</id><published>2010-02-25T13:56:00.000-08:00</published><updated>2010-02-25T13:57:25.931-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: The Animation Class in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/the-animation-class-in-flex-4/"&gt;The Animation Class in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode covers the new &lt;code&gt;Animation&lt;/code&gt; class in Flex 4, which is the underlying timing engine used by all of the Flex 4 effects. You will usually use this class indirectly, by using Flex 4 effects, but you can also use the class directly, providing a target object for &lt;code&gt;Animation&lt;/code&gt; to call as it calculates new property values each frame.&lt;/p&gt;
&lt;p&gt;For anyone used to Flex 3 effects, &lt;code&gt;Animation&lt;/code&gt; is the new &lt;code&gt;Tween&lt;/code&gt;. It uses some of the same mechanisms, but has added many capabilities, like repetition behavior, to support the enhanced capabilities of Flex 4 effects. We also meddled a bit with the API a bit as long as we were in there (for example, it doesn't auto-play on construction, like &lt;code&gt;Tween&lt;/code&gt; does).&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5263&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=5263&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/AnimationTest.swf" type="application/x-shockwave-flash" width="400" height="400"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/AnimationTest.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7084265096091090807?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7084265096091090807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7084265096091090807' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7084265096091090807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7084265096091090807'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/02/video-animation-class-in-flex-4.html' title='Video: The Animation Class in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8250684904965692646</id><published>2010-02-22T10:57:00.000-08:00</published><updated>2010-02-22T10:58:12.693-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: Keyframe Animations in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/keyframe-animation-in-flex-4/"&gt;Keyframe Animation in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode covers the new Keyframe capability of Flex 4 effects. Previously, all Flex effects were based on simple from/to values: Move a button from xFrom,yFrom to xTo,yTo, Resize a panel from its current width to widthTo, etc. And in fact most of the effects in Flex 4 still work this way: Move, Resize, Fade, and most other effects take just simple from/to/by values and animate the properties between these endpoints.&lt;/p&gt;

&lt;p&gt;But in Flex 4, there's a new effect that can do more than this: it's the new &lt;code&gt;Animate&lt;/code&gt; superclass of the Flex 4 effects. This effect, which is kind of like an extended version of the old &lt;code&gt;AnimateProperty&lt;/code&gt; class with the ability to handle multiple properties or styles instead of just one, doesn't just take from/to/by information for the properties. Instead, it takes &lt;code&gt;MotionPath&lt;/code&gt; objects which specify a simple 2-endpoint set of values. But a &lt;code&gt;MotionPath&lt;/code&gt; can also specify an arbitrarily large set of &lt;code&gt;Keyframe&lt;/code&gt; objects, which are key/value pairs that the property will pass through over the duration of the animation. Now, instead of having an animation that simply goes from one value to another, you can have an animation that goes through several intervals defined by these keyframes.&lt;/p&gt;

&lt;p&gt;The animations during each of these intervals is still linear; the effects calculate the in-between values on a linear path between the interval endpoint values, just like we do for the simpler 2-endpoint effects. I'd like to see curved motion paths eventually, but that didn't make it into Flex 4. But in the meantime, you can at least specify more complex multi-step paths for the animation to take using motion paths and these new keyframe objects.&lt;/p&gt;

&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5209&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=5209&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/MultiStepAnimations.swf" type="application/x-shockwave-flash" width="400" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/MultiStepAnimations.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8250684904965692646?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8250684904965692646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8250684904965692646' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8250684904965692646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8250684904965692646'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/02/video-keyframe-animations-in-flex-4.html' title='Video: Keyframe Animations in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8143086148916089986</id><published>2010-02-12T12:53:00.000-08:00</published><updated>2010-02-12T12:55:11.224-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Simple Container Effects: The Sequel!</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/simple-container-effects-part-2/"&gt;Simple Container Effects, Part 2&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This episode is the sequel to &lt;a href="http://graphics-geek.blogspot.com/2010/02/video-simple-container-effects-part-1.html"&gt;last week's cruel joke&lt;/a&gt; that showed how to animate adding and removing items to/from a VBox ... sorta. It turns out that the automatic gap that VBox adds for new items, or removes for deleted items, causes a jarring &lt;em&gt;snap&lt;/em&gt; that makes the approach in last week's show less than perfect. It worked okay, but we can do better.&lt;/p&gt;
&lt;p&gt;This week's episode shows a completely different approach to solving the problem via state transitions. In this case, we're not actually changing states in the application. But that doesn't mean we can't use the mechanism of state transitions to help automate these effects.&lt;/p&gt;
&lt;p&gt;Note that this is a Flex 3 app. I've been talking about Flex 4 a lot these days (it's kinda on my mind recently, given where we're at with that product), but there's a lot of cool stuff you can do with Flex 3 effects as well. This example, like last week's, is all Flex 3.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://tv.adobe.com/assets//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5124&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://tv.adobe.com/assets//swf/player.swf" flashvars="fileID=5124&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/VBoxInsertDeleteTransition.swf" type="application/x-shockwave-flash" width="400" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/VBoxInsertDeleteTransition.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8143086148916089986?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8143086148916089986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8143086148916089986' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8143086148916089986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8143086148916089986'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/02/video-simple-container-effects-sequel.html' title='Video: Simple Container Effects: The Sequel!'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6968948573372552367</id><published>2010-02-05T13:54:00.000-08:00</published><updated>2010-02-05T13:57:40.115-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Simple Container Effects, Part 1</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/simple-container-effects-part-1/"&gt;Simple Container Effects, Part 1&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A couple of months ago, &lt;a href="http://graphics-geek.blogspot.com/2009/10/video-resizing-air-windows-with-flex-4.html"&gt;someone asked on my blog&lt;/a&gt; how they could run simple effects on a container like VBox when adding or removing items. So I took a run at it and came up with this example. It's not that complicated - you basically create a Sequence effect that resizes the object in question and fades it in/out (based on whether it's coming or going).&lt;/p&gt;
&lt;p&gt;It's also not a perfect solution: run the demo and you'll see a [snap] at the beginning of the adding effect or the end of the removing effect. It's not that bad, but maybe we can do better. And we will in Part 2, next week... (whoa, talk about cliff-hangers!)&lt;/p&gt;
&lt;p&gt;Note that this is a Flex 3 app. I've been talking about Flex 4 a lot these days (it's kinda on my mind recently, given where we're at with that product), but there's a lot of cool stuff you can do with Flex 3 effects as well. This example is all Flex 3.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://tv.adobe.com/assets//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5044&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://tv.adobe.com/assets//swf/player.swf" flashvars="fileID=5044&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/VBoxInsertDelete.swf" type="application/x-shockwave-flash" width="400" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/VBoxInsertDelete.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6968948573372552367?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6968948573372552367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6968948573372552367' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6968948573372552367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6968948573372552367'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/02/video-simple-container-effects-part-1.html' title='Video: Simple Container Effects, Part 1'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2702402859763938854</id><published>2010-01-29T08:07:00.000-08:00</published><updated>2010-01-29T08:11:17.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Auto-Reversing Transitions in Flex 4</title><content type='html'>&lt;p&gt;First, this new flash (or would that be Flash news?):&lt;/p&gt;
&lt;blockquote&gt;
 &lt;h2&gt;  &lt;strong&gt;  CodeDependent now has a &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;channel on YouTube&lt;/a&gt;! &lt;/strong&gt;&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes, finally, for all of those bored people surfing the web looking for funny videos, there is now a channel that talks exclusively about animation and graphics programming. Oh, my kids will be so happy.&lt;/p&gt;
&lt;p&gt;Now, back to our regular programming...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/autoreversing-transitions-in-flex-4/"&gt;Auto-Reversing Transitions in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show is about the new &lt;code&gt;autoReverse&lt;/code&gt; property in Flex 4 transitions. By default, Flex transitions stop any currently-running transition before running a new transition. So if you're currently animated from stateA to stateB and you trigger a change back to stateA, Flex will stop the A-&amp;gt;B transition and then start the B-&amp;gt;A transition from the beginning. This sometimes causing jarring behavior, where the visuals may pop to the end of the previous transition, or sometimes even worse artifacts. Flex 4 offers a new, simple property, autoReverse, which lets you tell Flex to stop the current transition and start the next one from that same point in time. In the A-&amp;gt;B example above, if you trigger a change back to stateA when the A-&amp;gt;B transition is halfway through, then Flex will stop the A-&amp;gt;B transition and start the B-&amp;gt;A transition from that midway point.&lt;/p&gt;
&lt;p&gt;This feature is a small step toward more general, useful interruption and reversing behavior that I'd like to see in transitions eventually. There are some important constraints to this behavior, such as having to actually define that reverse transition (we don't create it for you) and making sure that your transition effects are true reverses of each other (which can include some tricks like using a Pause effect on the reverse transition to account for a startDelay in the forward transition). It's also important to note (since this just came up in my work yesterday from a use case from the tools team) that using assymetric easing (which is not the defaul) can make this tricky. So this feature is not necessarily for all situations, but it is useful for some common cases and can make Flex transitions an even smoother and cooler UI experience than they are already.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://tv.adobe.com/assets//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=5012&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://tv.adobe.com/assets//swf/player.swf" flashvars="fileID=5012&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here are the demo applications:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/AutoReversingTransition1.swf" type="application/x-shockwave-flash" width="400" height="250"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/AutoReversingTransition2.swf" type="application/x-shockwave-flash" width="500" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;And here is the source code for the &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/AutoReversingTransition1.mxml"&gt;first&lt;/a&gt; and &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/AutoReversingTransition2.mxml"&gt;second&lt;/a&gt; demos.&lt;/p&gt;
&lt;p&gt;Here's where you can find &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here's where you can find &lt;a href="http://www.youtube.com/user/AdobeCodeDependent"&gt;CodeDependent on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2702402859763938854?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2702402859763938854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2702402859763938854' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2702402859763938854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2702402859763938854'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/01/video-auto-reversing-transitions-in.html' title='Video: Auto-Reversing Transitions in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6980603448700695120</id><published>2010-01-27T07:11:00.000-08:00</published><updated>2010-01-27T08:40:13.259-08:00</updated><title type='text'>Cloudy Day</title><content type='html'>&lt;p&gt;I don't normally post anything here outside of stuff I'm currently hacking, but I can't help taking a moment of silence to respect the fallen. I checked my tech stock quotes page online this morning and saw this:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_l1oSIKeXdHo/S2BYOvlK1BI/AAAAAAAAAU8/RYc0XU6tT0c/s1600-h/CloudyDay.png"&gt;&lt;img style="cursor: pointer; width: 362px; height: 133px;" src="http://3.bp.blogspot.com/_l1oSIKeXdHo/S2BYOvlK1BI/AAAAAAAAAU8/RYc0XU6tT0c/s400/CloudyDay.png" alt="" id="BLOGGER_PHOTO_ID_5431438160922596370" border="0" /&gt;&lt;/a&gt;

&lt;p&gt;Sad, but true: Sun is no more. Gray skies ahead, chance of rain.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6980603448700695120?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6980603448700695120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6980603448700695120' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6980603448700695120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6980603448700695120'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/01/cloudy-day.html' title='Cloudy Day'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_l1oSIKeXdHo/S2BYOvlK1BI/AAAAAAAAAU8/RYc0XU6tT0c/s72-c/CloudyDay.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2505290975972467431</id><published>2010-01-21T15:35:00.000-08:00</published><updated>2010-01-21T15:41:40.908-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Animating Gradients for 3D Look and Feel</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/animating-gradients-for-3d-look-and-feel/"&gt;Animating Button State Changes&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show is a continuation of the previous CodeDependent episode, &lt;a href="http://graphics-geek.blogspot.com/2010/01/video-animating-button-state-changes.html"&gt;Animating Button State Changes&lt;/a&gt;, in which we saw how to animate some of the properties in a button's skin as it the button changed between states. In this espisode, we see how we might animate the look of a more graphical button as the user pushes on it, animating properties of gradients which give the object a 3D-ish look.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://tv.adobe.com/assets//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4911&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://tv.adobe.com/assets//swf/player.swf" flashvars="fileID=4911&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/AnimatedGradient.swf" type="application/x-shockwave-flash" width="200" height="200"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/AnimatedGradient.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2505290975972467431?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2505290975972467431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2505290975972467431' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2505290975972467431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2505290975972467431'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/01/video-animating-gradients-for-3d-look.html' title='Video: Animating Gradients for 3D Look and Feel'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5220111048988736023</id><published>2010-01-14T17:01:00.000-08:00</published><updated>2010-01-14T17:03:02.498-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Animating Button State Changes</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/animating-button-state-changes/"&gt;Animating Button State Changes&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show is a continuation of the previous CodeDependent episode, in which we saw how differences in a component's state can be communicated to the user through visual changes in that state. In this espisode, we see how we can animate some of those visual changes by hacking some simple transitions into the standard Flex 4 button skin. This is a tutorial not only on how to add some simple animations for color and visibility changes, but also how to customize standard Flex components by editing the skin markup.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://tv.adobe.com/assets//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4873&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://tv.adobe.com/assets//swf/player.swf" flashvars="fileID=4873&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/ButtonStatesAnimated.swf" type="application/x-shockwave-flash" width="500" height="350"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/ButtonStatesAnimated.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5220111048988736023?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5220111048988736023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5220111048988736023' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5220111048988736023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5220111048988736023'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/01/video-animating-button-state-changes.html' title='Video: Animating Button State Changes'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7450944250106700782</id><published>2010-01-08T07:47:00.000-08:00</published><updated>2010-01-08T07:49:43.030-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: Visual Component State Feedback</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/visual-component-state-feedback/"&gt;Visual Component State Feedback&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show covers some of the concepts around component state. In particular, I talk about different ways of giving visual feedback to the user about the current state of components, in this case the over and down state of a Button. I also take a detour and discuss (what else?) an animation of a temporary text label, including the use of disabling mouse events to fix some interaction artifacts that I encountered when writing the demo application.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://tv.adobe.com/assets//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4842&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://tv.adobe.com/assets//swf/player.swf" flashvars="fileID=4842&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/ButtonStates.swf" type="application/x-shockwave-flash" width="350" height="200"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/ButtonStates.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7450944250106700782?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7450944250106700782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7450944250106700782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7450944250106700782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7450944250106700782'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2010/01/video-visual-component-state-feedback.html' title='Video: Visual Component State Feedback'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6480502828527824858</id><published>2009-12-21T08:18:00.000-08:00</published><updated>2009-12-21T08:28:29.773-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Drunk on Software'/><title type='text'>Drunk on Software 22: Sleeping on the Couch</title><content type='html'>&lt;p&gt;Sometime last summer, I got together with &lt;a href="http://www.ectropic.com/"&gt;Jon&lt;/a&gt; and &lt;a href="http://www.jamesward.com/"&gt;James&lt;/a&gt; and talked about software, Flex, effects, and Marriott mice. It a slower, more contemplative DoS show. You'll probably feel a bit woozy yourself just watching it. From James's bear hat to his falling asleep at one point, to the mic getting turned off and us having to repeat a bunch of stuff, to the final entrance of a mouse at the end (a vermin omen, I'm sure), it has a lot to offer... to someone. I'm just not sure whom. If we had outtakes in DoS, this would be in them. Maybe when we release "Best of" compilations in the decades to come, it will be on the follow-on releases after we run out of hits, when we're just trying to make a buck any way we can to support our software habits.&lt;/p&gt;

&lt;p&gt;Enjoy: &lt;a href="http://www.drunkonsoftware.com/2009/12/20/episode-22-sleeping-on-the-couch/"&gt;www.drunkonsoftware.com/2009/12/20/episode-22-sleeping-on-the-couch&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6480502828527824858?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6480502828527824858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6480502828527824858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6480502828527824858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6480502828527824858'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/12/drunk-on-software-22-sleeping-on-couch.html' title='Drunk on Software 22: Sleeping on the Couch'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1932851689945156830</id><published>2009-12-18T12:58:00.000-08:00</published><updated>2010-03-12T11:50:06.262-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Video: Animating a TextArea</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/animating-a-textarea/"&gt;Animating a TextArea&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show shows how to animate scrolling in a TextArea component dynamically. We handle this automatically when you click in the track or on the buttons of a TextArea's scrollbar, but if you want to tell the component to scroll to a certain location in the viewport, and animate to that position, you have to do this yoursefl. We did something similar in &lt;a href="http://graphics-geek.blogspot.com/2009/12/video-programmatic-scrolling-animation.html"&gt;last week's show&lt;/a&gt;, in which we animated a Scroller area, but in the case of TextArea we have to dive into ActionScript code to create and play the animations because of some constraints around which properties we can bind to from MXML.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://tv.adobe.com/assets//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4797&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://tv.adobe.com/assets//swf/player.swf" flashvars="fileID=4797&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/CustomScrollingTextArea.swf" type="application/x-shockwave-flash" width="250" height="300"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/CustomScrollingTextArea.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1932851689945156830?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1932851689945156830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1932851689945156830' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1932851689945156830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1932851689945156830'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/12/video-animating-textarea.html' title='Video: Animating a TextArea'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2224167514265287716</id><published>2009-12-11T15:31:00.000-08:00</published><updated>2010-03-12T11:48:48.219-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Programmatic Scrolling Animation</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/programmatic-scrolling-animation/"&gt;Programmatic Scrolling Animation&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show is about animating an Scroller area programmatically. By default, areas with scrollbars will animate when you click and hold on the scrollbar's track or up/down buttons. But if you just want to move to a new scroll position, these animations don't come into play, so you need a little something extra to get that nice animated effect.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4763&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4763&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/CustomScrolling.swf" type="application/x-shockwave-flash" width="200" height="250"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/CustomScrolling.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2224167514265287716?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2224167514265287716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2224167514265287716' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2224167514265287716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2224167514265287716'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/12/video-programmatic-scrolling-animation.html' title='Video: Programmatic Scrolling Animation'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3900537258531044729</id><published>2009-12-07T18:50:00.000-08:00</published><updated>2009-12-21T08:29:01.701-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='Drunk on Software'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Video: Drunk On Software: Devoxx Edition</title><content type='html'>&lt;p&gt;Ever wonder what this year's &lt;a href="http://devoxx.com"&gt;Devoxx&lt;/a&gt; conference was like after-hours? Well, even if you didn't, you might want to check out the &lt;a href="http://www.drunkonsoftware.com/2009/12/07/special-episode-devoxx-2009/"&gt;latest video on Drunk on Software&lt;/a&gt;. This video is a collection of interviews and other  clips I recorded that week whenever I happened to remember that I had brought along a video camera for that exact purpose.&lt;/p&gt;
&lt;p&gt;Some of the clips are of dubious video and audio quality, owing to a combination of the equipment, the operator, the mood lighting and crowd noise in the bars and restaurants, and just possibly due to the fundamental concept behind Drunk on Software videos (a sobering thought). But I'll blame the lack of natural light in Belgium at this dark and miserably cold time of year because that's just more fun.&lt;/p&gt;
&lt;p&gt;Thanks to everyone who helped out with the video, through interviews, filming, talking, and of course drinking.
&lt;/p&gt;
&lt;p&gt;Enjoy...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.drunkonsoftware.com/2009/12/07/special-episode-devoxx-2009/"&gt;http://www.drunkonsoftware.com/2009/12/07/special-episode-devoxx-2009/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3900537258531044729?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3900537258531044729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3900537258531044729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3900537258531044729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3900537258531044729'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/12/video-drunk-on-software-devoxx-edition.html' title='Video: Drunk On Software: Devoxx Edition'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2677255734857131502</id><published>2009-12-03T18:47:00.000-08:00</published><updated>2010-03-12T11:48:06.284-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Video: Measuring Frame Rate Performance</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/measuring-frame-rate-performance//"&gt;Measuring Frame Rate Performance&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show different notions of "frame rates" and performance in Flex applications, how they relate to each other, and ways of measuring them. Frame rates directly affect the perceived performance and smoothness of animations, so it's something near and dear to my geeky animation heart. Measuring performance may not be something you need to do in every (or any) application, but it's good to know what's going on under the hood and how to get more information if you do need it.&lt;/p&gt;
&lt;p&gt;I neglected to mention an important detail about 'render' events (thanks, &lt;a href="http://www.justsuppose.com/"&gt;Corey&lt;/a&gt;). In Flash applications, if you call &lt;code&gt;updateAfterEvent()&lt;/code&gt; to cause a render event (as we do internally in Flex effects when handling Timer events), you actually need to call &lt;code&gt;stage.invalidate()&lt;/code&gt;to make sure that the player sends out render notifications. Without the &lt;code&gt;invalidate()&lt;/code&gt; call, the player will render, but will not dispatch any render events. In the case of our example application here, we don't have to &lt;code&gt;invalidate()&lt;/code&gt; anything to get the render events because the Flex layout system is calling &lt;code&gt;invalidate()&lt;/code&gt; for us.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4330&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4330&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimPerf.swf" type="application/x-shockwave-flash" width="450" height="200"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimPerf.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2677255734857131502?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2677255734857131502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2677255734857131502' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2677255734857131502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2677255734857131502'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/12/video-measuring-frame-rate-performance.html' title='Video: Measuring Frame Rate Performance'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-4405052084235961710</id><published>2009-12-02T08:04:00.000-08:00</published><updated>2009-12-02T09:00:56.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Prose and Conferences: Devoxx 2009</title><content type='html'>&lt;p&gt;Many people are wondering what the deal is with the EU and Oracle in the whole Sun acquisition thing. I’m going to put forward a new theory: it’s about conferences.
&lt;/p&gt;
&lt;p&gt;
I just recovered from my trip to &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt;, where I gave talks on Flex, effects, Adobe tools, and the Flash platform (and attended talks on various other topics). I realize that many of you reading this may not have had the pleasure of going to the conference. In fact, doing the math, it’s pretty darned improbable that anyone went:  with about 3000 attendees vs. 7 billion people on the planet, there’s roughly a 99.99996% chance you didn’t go. So maybe I should give a brief intro.
&lt;/p&gt;
&lt;p&gt;
Devoxx  is an annual developer conference in Antwerp, Belgium. The show is typically held at the coldest, most miserable time of year to allow attendees to concentrate on the most important thing: Belgian Beer. Oh, and there are lots of good technical sessions on software development (Java, Flex, Android, build tools, libraries, processes, etc.).
&lt;/p&gt;
&lt;p&gt;
It’s a great conference and a really good time (despite the weather). In fact, you can check it out for yourself at &lt;a href="http://www.blogger.com/%E2%80%9Dhttp://parleys.com%E2%80%9D"&gt;parleys.com&lt;/a&gt;, which is a Flex app (with an optional AIR application for offline usage) hosting all of the sessions from the conference in full multimedia glory (video, slides, and demos).  The sessions from 2009 are not available yet, but like last year they will be posted starting in January at the rate of about 2 per week, online and free.
&lt;/p&gt;
&lt;p&gt;
In the meantime, there is now a for-pay option with parleys; if you want all of the content &lt;i&gt;now&lt;/i&gt;, you can pay 49 euros (about $75 today, but given the relative stability of the dollar, it could be $2500 tomorrow, so act fast) to have full access to all sessions for 6 months at &lt;a href="http://devoxx.parleys.com/"&gt;devoxx.parleys.com&lt;/a&gt;. Yes, they’re trying to make money; after all, it costs money to put on this great conference and record/produce/host all of the content. But since the content is still free in the same way it always was, I think it’s a pretty great compromise.
&lt;/p&gt;
&lt;p&gt;
(By the way, nobody asked me to plug the site; I just like to support the team that puts on a good conference and provides so much great information for developers).
&lt;/p&gt;
&lt;p&gt;
But back to my original point: is it a coincidence that the second-largest Java development conference is in Belgium … a mere 40 miles away from the EU headquarters in Brussels? I believe that the EU stalling of the Oracle deal is nothing less than a conference takeover bid by Europe, trying to wrest the power away from the annual &lt;a href="http://java.sun.com/javaone"&gt;JavaOne&lt;/a&gt; conference. Sun’s annual conference is usually in full planning mode at this time of year: they’re closing the Call for Papers, choosing speakers and sessions, massaging the messaging, choosing theme colors and Dukeration kitsch to sell in the conference store. But this year … nothing – it’s all on hold pending the acquisition debate between the EU and Oracle. In the meantime, Devoxx put on a good Java++ show.
&lt;/p&gt;
&lt;p&gt;
So in my augmented reality,  it must be the case that Devoxx lobbied the EU to stall JavaOne so that Devoxx could become the world leader in Java-related conferences. Sun will rue the day that they made JavaPolis change its name…
&lt;/p&gt;
&lt;p&gt;
[okay, maybe not. And I really like JavaOne, too, and not just because the weather's better. But Devoxx is a good conference. Try to go next year if you’re in the area and have a thick coat. And check out the sessions and cool Flex app on parleys.com.]
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-4405052084235961710?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/4405052084235961710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=4405052084235961710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4405052084235961710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4405052084235961710'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/12/prose-and-conferences-devoxx-2009.html' title='Prose and Conferences: Devoxx 2009'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5691562564738976378</id><published>2009-11-24T09:57:00.000-08:00</published><updated>2010-03-12T11:47:17.953-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Transitions and Easing in Flex</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/transitions-and-easing-in-flex/"&gt;Transitions and Easing in Flex&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show examines a sample drawing application that lets the user change the location of the drawing tool palette, and how transitions can help provide a better user experience when changing the layout of the GUI. We also see how various easing approaches change the feel of the transition; no single easing approach fits all situations, so it's good to know what alternatives exist and to experiment with them to see what works best.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4214&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4214&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application (nice SF picture courtesy &lt;a href="http://www.curious-creature.org"&gt;Romain Guy&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/HandyCanvas.swf" type="application/x-shockwave-flash" width="500" height="600"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/HandyCanvas.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5691562564738976378?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5691562564738976378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5691562564738976378' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5691562564738976378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5691562564738976378'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/11/video-transitions-and-easing-in-flex.html' title='Video: Transitions and Easing in Flex'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1001594803532294378</id><published>2009-11-12T17:43:00.000-08:00</published><updated>2010-03-12T11:46:39.847-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Interactive GUI Components</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/interactive-gui-components/"&gt;Interactive GUI Components&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show looks at techniques from gaming consoles and cartoon animation for making a more interactive and fun user experience with your UI components.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4176&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4176&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/FunButtons.swf" type="application/x-shockwave-flash" width="250" height="400"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/FunButtons.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1001594803532294378?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1001594803532294378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1001594803532294378' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1001594803532294378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1001594803532294378'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/11/video-interactive-gui-components.html' title='Video: Interactive GUI Components'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8507002820982996187</id><published>2009-11-06T10:46:00.000-08:00</published><updated>2009-12-21T08:29:01.702-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='Drunk on Software'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Drunken MAX Interviews</title><content type='html'>&lt;p&gt;The &lt;a href="http://www.drunkonsoftware.com/"&gt;Drunk on Software&lt;/a&gt; film crew hit the streets and bars late on the last night of &lt;a href="http://2009.max.adobe.com/"&gt;MAX 2009&lt;/a&gt;, asking a select group of people (read: anyone that would let us film them), "What was your favorite thing at MAX?"&lt;/p&gt;

&lt;p&gt;It's like a "Man on the Street" interview, but with women, too. And it's not so much "in the street" as "on the sidewalk and in the bar." And after the drinking that night, maybe kind of a "facedown in the street" nuance as well. So maybe I'd call it a "Men and women on the sidewalk, in the bars, and lying in the gutter" interview format.
&lt;/p&gt;

&lt;p&gt;Anyway, here's the result (or check it out on the &lt;a href="http://www.drunkonsoftware.com/2009/11/06/special-episode-drunk-people-at-adobe-max-2009/"&gt;Drunk on Software site&lt;/a&gt; instead). Enjoy...&lt;/p&gt;

&lt;p&gt;&lt;embed src="http://blip.tv/play/AYGs91QC" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="300"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8507002820982996187?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8507002820982996187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8507002820982996187' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8507002820982996187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8507002820982996187'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/11/interview-drunk-on-software-max-quick.html' title='Drunken MAX Interviews'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5617719049340315277</id><published>2009-11-06T07:32:00.000-08:00</published><updated>2010-03-12T11:45:58.166-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><title type='text'>Video: Animated Scrollbar and Slider in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/animated-scrollbar-and-slider-in-flex-4/"&gt;Animated Scrollbar and Slider in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show deviates a tad from the usual CodeDependent shtick; I don't actually walk through any code (shock! horror!). Instead, we show a couple of the new Flex 4 components in action and see the animated behavior that they have to help create a smoother, better user experience.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4133&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4133&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align="center"&gt;
 &lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ScrollingAnim.swf" type="application/x-shockwave-flash" width="250" height="400"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ScrollingAnim.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5617719049340315277?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5617719049340315277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5617719049340315277' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5617719049340315277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5617719049340315277'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/11/video-animated-scrollbar-and-slider-in.html' title='Video: Animated Scrollbar and Slider in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6291812264036200501</id><published>2009-11-04T13:02:00.000-08:00</published><updated>2009-11-04T13:04:46.616-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><title type='text'>Just for Show</title><content type='html'>&lt;p&gt;Is there anything with graphics or effects in Flex that you would like to see explained? Any problem that's been bugging you, or some transition that you can't quite figure out? Or just some Flex/graphics/animation topic you're interested in knowing more about?&lt;/p&gt;
&lt;p&gt;Let me know and maybe it'll become a show...&lt;/p&gt;
&lt;p&gt;I've been good at doing a bunch of shows and some articles on topics that interest me, or problems that have come up that seemed like they might interest an audience larger than Chet, or just explanations of some of the stuff that we've been doing in the current Flex release under development. But that doesn't mean I don't run out of ideas. When the Adobe TV folks call and say that it's time to shoot another several episodes, I have to come up with a lot of content, quick, and sometimes that's easier to do than other times.&lt;/p&gt;
&lt;p&gt;In the meantime, suggestions from people actually trying to use our stuff to build real world applications (that's you) would really help drive some of the content. I'm happy doing tutorials on things that I run across, but my situation is different from yours, and yours, and yours too, so I may not have hit the problems that you have, and may not ever know to go near some topic that you're pining to hear more about. For example, a recent question on my blog resulted in 2 shows about custom interpolation and resizing AIR applications. And another suggestion (coincidentally from the same person) will probably result in another 2-3 shows that I'm shooting next week.&lt;/p&gt;
&lt;p&gt;So, if you have any suggested topics for me, please go ahead and suggest them. I think I'm okay at animation framework development, but I admit I'm not so good at reading minds.&lt;/p&gt;
&lt;p&gt;Add a comment below, or contact me directly via the email listed in &lt;a href="http://www.blogger.com/profile/03250991041464602854"&gt;my blogger profile&lt;/a&gt;. I'm not saying I will do tutorials on all ideas or questions; it depends on how many suggestions there are, what the topics are, and what I think might have broad appeal. And I will certainly keep coming up with my own topics. But it would be great to have a larger set of potential topics to mull over.&lt;/p&gt;
&lt;p&gt;And while we're in housekeeping mode:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;strong&gt;Ratings&lt;/strong&gt;: My &lt;a href="http://tv.adobe.com/show/codedependent/"&gt;CodeDependent&lt;/a&gt; videos on &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt; have ratings (what web content doesn't these days?). The embedded player doesn't expose that feature on my blog, but it would still be useful to me and others to know what people think about the topics I cover. So if you have any particular feeling about a show you saw here (note: the ratings don't include the choice "loathing" or "nausea"), go ahead and click through to the show's page on &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt; or the &lt;a href="http://tv.adobe.com/show/codedependent/"&gt;CodeDependent show page&lt;/a&gt; and rate the sucker.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;Twitter&lt;/strong&gt;: I'm still not sure what I'm doing on &lt;a href="http://twitter.com/chethaase"&gt;Twitter&lt;/a&gt;, but I do have an account there. I use it for feeding out the headlines whenever I post a blog (either here or on my&lt;a href="http://chetchat.blogspot.com/"&gt; humor blog&lt;/a&gt;). I figure you are what you write. I promise to not post status updates on what kind of sandwich I'm having for lunch. Even if it's a really awesome one, like an Italian sub with hot peppers. If you are interested in following me, my twitter account is &lt;a href="http://twitter.com/chethaase"&gt;@chethaase&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That's all. Back to work. Look for another video soon, probably tomorrow.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6291812264036200501?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6291812264036200501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6291812264036200501' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6291812264036200501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6291812264036200501'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/11/just-for-show.html' title='Just for Show'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-3507997202894779515</id><published>2009-10-30T12:16:00.000-07:00</published><updated>2010-03-12T11:45:07.495-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='air'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Resizing AIR Windows with Flex 4 Effects</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/resize-adobe-air-windows-through-custom-flex-4-effects-interpolation/"&gt;Resize Adobe AIR Windows through Custom Flex 4 Effects Interpolation&lt;/a&gt;, the next and verbosely entitled episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this show, we see how to apply what we learned about arbitrary type interpolation in &lt;a href="http://tv.adobe.com/watch/codedependent/custom-type-interpolation-in-flex-4-effects/"&gt;a previous episode&lt;/a&gt; to the specific use case of resizing an AIR window. The ability to animate properties of arbitrary type is one of the key new features in the Flex 4 effects system, and it comes in handy for this use case where animating the x, y, width, and height properties of the native window aren't good enough. Instead, we need to interpolation a Rectangle object so that we can atomically set the bounds of the native window with each animation update.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4104&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4104&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Instead of embedding the application like I normally do, I'm just going to provide &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ResizingAIRApp.air"&gt;this link to it&lt;/a&gt;. It's a link to an AIR application which you would need to install and run locally, because that's the way that AIR works. You may not care enough to do this, since it's just a live demonstration of what you see in the video. But it's &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ResizingAIRApp.air"&gt;here&lt;/a&gt; for completeness.&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ResizingAIRApp.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-3507997202894779515?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/3507997202894779515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=3507997202894779515' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3507997202894779515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/3507997202894779515'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/10/video-resizing-air-windows-with-flex-4.html' title='Video: Resizing AIR Windows with Flex 4 Effects'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8054904019160652806</id><published>2009-10-26T10:58:00.000-07:00</published><updated>2010-03-12T11:44:06.551-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Custom Type Interpolation in Flex 4 Effects</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/custom-type-interpolation-in-flex-4-effects/"&gt;Custom Type Interpolation in Flex 4 Effects&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this show, we see an introduction to the new system of type interpolation in Flex 4 effects. The ability to animate properties of arbitrary type is one of the key new features in the Flex 4 effects system. Previously, in Flex 3, the effects system dealt only with numbers. It was great at animating any properties of components at all ... as long as those properties were numeric. In particular, it knew how to calculate a numeric value during animations, given start and end values. Calculating these values is important, of course, because animations are specified with start and end values only (or, in the case of the new keyframes in Flex 4 effects, a series of intermediate values), and any other value that the property takes on during the animation must be calculated as a product of these start/end values plus the elapsed fraction of the animation.&lt;/p&gt;
&lt;p&gt;Flex's ability to deal with only numbers was fine for most of the cases that UI developers would care about because, frankly, most of the properties on components &lt;em&gt;are&lt;/em&gt; numbers: x position, y position, width, height, alpha, scaleX, scaleY - all of these are simple Numbers that can easily be tossed into a simple parameteric function to calculate an in-between number for Flex 3 animations. &lt;/p&gt;
&lt;p&gt;But what if you want to animate a property that is not a number, like a Rectangle, or a Point, or some object specific to your code that we know nothing about? Or what if it is a number, but you can't calculate a simple interpolation of it numerically (like RGB colors, which we talked about in an &lt;a href="http://graphics-geek.blogspot.com/2009/08/video-animatecolor-in-flex-4.html"&gt;earlier episode&lt;/a&gt;)? In that case, we need a way to calculate the in-between values for objects of that type. The new &lt;code&gt;IInterpolator&lt;/code&gt; interface in Flex 4 exists for that purpose: you can create implementations of that interface and supply them to Flex 4 effects to tell us how to interpolate in-between values for these types and the effects can take it from there, calling your interpolators whenever they need to calculate animated values for properties of those types..&lt;/p&gt;
&lt;p&gt;This video shows how we can write a custom interpolator for an arbitrary data structure (in this case, a Rectangle) and supply it to a Flex 4 &lt;code&gt;Animate&lt;/code&gt; effect to have it animate our object.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4070&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4070&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/RectAnim.swf" type="application/x-shockwave-flash" width="350" height="350"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/RectAnim.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8054904019160652806?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8054904019160652806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8054904019160652806' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8054904019160652806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8054904019160652806'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/10/video-custom-type-interpolation-in-flex.html' title='Video: Custom Type Interpolation in Flex 4 Effects'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5474642149827488107</id><published>2009-10-21T07:42:00.000-07:00</published><updated>2009-12-21T08:29:01.702-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='Drunk on Software'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Interview: Drunk on Software, MAX 2009 Deep Thoughts</title><content type='html'>&lt;p&gt;I think there's a fundamental flaw in the &lt;a href="http://www.drunkonsoftware.com/"&gt;Drunk on Software&lt;/a&gt; strategy. If you're actually drunk at the time, it is all too probable that you'll end up with interviews that don't seem quite as interesting, provocative, and hilarious as they did at the time. Nonetheless, &lt;a href="http://www.ectropic.com/"&gt;Jon&lt;/a&gt; and &lt;a href="http://www.jamesward.com/"&gt;James&lt;/a&gt; continue to produce these shows, unhampered by my petty theories and centuries of research on the effects of alcohol on coherent conversation and job security.&lt;/p&gt;

&lt;p&gt;We all got together at MAX a couple of weeks ago and had &lt;a href="http://www.drunkonsoftware.com/2009/10/20/episode-18-max-2009-deep-thoughts/"&gt;a chat about the conference&lt;/a&gt;. Fortunately, I think we were all sober enough to speak in complete sentences. Maybe this should go into a new series that I'm proposing: "Drinking Responsibly on Software". Our branding experts are still working on the title.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="http://www.drunkonsoftware.com/2009/10/20/episode-18-max-2009-deep-thoughts/"&gt;the interview&lt;/a&gt; at &lt;a href="http://www.drunkonsoftware.com/"&gt;Drunk on Software&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5474642149827488107?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5474642149827488107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5474642149827488107' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5474642149827488107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5474642149827488107'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/10/interview-drunk-on-software-max-2009.html' title='Interview: Drunk on Software, MAX 2009 Deep Thoughts'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7005507059158408249</id><published>2009-10-20T11:45:00.000-07:00</published><updated>2010-03-12T11:43:27.640-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Flex 3 Easing with Flex 4 Effects</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/flex-3-easing-with-flex-4-effects/"&gt;Flex 3 Easing with Flex 4 Effects&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show is basically a recap of an earlier blog article I wrote, &lt;a href="http://graphics-geek.blogspot.com/2009/07/penner-for-your-thoughts.html"&gt;Penner for your Thoughts&lt;/a&gt; (named for the author of the Flex 3 easing functions, &lt;a href="http://www.robertpenner.com/"&gt;Robert Penner&lt;/a&gt;), except this time it's in video form (for the reading-impaired). The topic is about using the old easing functions in Flex 3 through the new IEaser interface that the Flex 4 effects require. See &lt;a href="http://graphics-geek.blogspot.com/2009/07/penner-for-your-thoughts.html"&gt;the article&lt;/a&gt; for more details about the whys and hows of this rather neat hack.&lt;/p&gt;
&lt;p&gt;Meanwhile, here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=4046&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4046&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/EasingFunctionsInFlex4.swf" type="application/x-shockwave-flash" width="300" height="400"&gt;&lt;/embed&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/EasingFunctionsInFlex4.zip"&gt;here is the source code&lt;/a&gt;. Be sure to check out the &lt;a href="http://graphics-geek.blogspot.com/2009/07/penner-for-your-thoughts.html"&gt;blog article&lt;/a&gt; for more details on how the code works.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7005507059158408249?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7005507059158408249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7005507059158408249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7005507059158408249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7005507059158408249'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/10/video-flex-3-easing-with-flex-4-effects.html' title='Video: Flex 3 Easing with Flex 4 Effects'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1716555042948446896</id><published>2009-10-17T08:38:00.000-07:00</published><updated>2010-03-12T11:42:48.676-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Custom Easing in Flex 4 Effects</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/custom-easing-in-flex-4/"&gt;Custom Easing in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this show, we see an introduction to the new approach to easing  in Flex 4 effects, using the new IEaser interface. "Easing" is a term in Flash and Flex that means changing the way that time is interpolated in animations, to give more interesting and natural movement. In Flex 3, different easing behavior was applied by assigning  easing function references to to the "easingFunction" property in effects. This was a powerful and easy-to-use mechanism, but we've changed the approach in Flex 4 to make easing more flexible and also simpler to customize. This video shows how we can write and alter a simple easing implementation to get arbitrary, custom easing behavior.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=2584&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=2584&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application. Note that the real action here is in building the application and playing with the CustomEaser implementation. The demo below is just one iteration of that example, where we are accelerating in with a cubic ease by multiplying the elapsed fraction times itself three times:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/CustomEasing.swf" type="application/x-shockwave-flash" width="400" height="200"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/CustomEasing.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1716555042948446896?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1716555042948446896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1716555042948446896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1716555042948446896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1716555042948446896'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/10/video-custom-easing-in-flex-4-effects.html' title='Video: Custom Easing in Flex 4 Effects'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-445528176673941263</id><published>2009-10-13T08:25:00.000-07:00</published><updated>2009-10-13T08:34:17.322-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Interview: RIA Revolution</title><content type='html'>Shashank Tiwari (co-author of &lt;a href="http://www.amazon.com/AdvancED-Flex-3-Shashank-Tiwari/dp/1430210273"&gt;AdvancED Flex 3&lt;/a&gt;) and I chatted about Flex 4, effects, MAX, and books at the &lt;a href="http://max.adobe.com/"&gt;MAX 2009 conference&lt;/a&gt; last week. Check out &lt;a href="http://riarevolution.com/2009/10/11/speak-rich-episode-3/"&gt;the interview&lt;/a&gt; on the &lt;a href="http://riarevolution.com/"&gt;RIA Revolution&lt;/a&gt; site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-445528176673941263?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/445528176673941263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=445528176673941263' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/445528176673941263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/445528176673941263'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/10/interview-ria-revolution.html' title='Interview: RIA Revolution'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-6658044455416457399</id><published>2009-10-08T18:11:00.000-07:00</published><updated>2009-10-08T18:15:51.040-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Effects in Flex 4 (MAX Session)</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/max-2009-develop/effects-in-flex-4/"&gt;Effects in Flex 4&lt;/a&gt;, the talk I gave earlier this week at &lt;a href="http://max.adobe.com/"&gt;Adobe MAX&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;. This is pretty awesome; I've never known talk recording to be published so soon after the actual event (in this case, actually published while the event was still going on).&lt;/p&gt;
&lt;p&gt;The talk covers the overall architecture of the new effects in Flex 4, covering all of the new effects classes and also (my favorite part) the underlying details of how it all works, using the Animate class, the underlying Animation class, and all of the low-level helper classes. Lots of nitty-gritty details for those that care (and those that don't).  If you saw &lt;a href="http://graphics-geek.blogspot.com/2009/06/video-flashcamp-presentation-on-flex-4.html"&gt;my FlashCamp talk&lt;/a&gt; that I posted last June, you'll recognize some of the information and demos, but this talk goes into a lot more detail on the architecture and underlying details since I had more time to do so. For the code-hungry folks in the audience, I showed many demos throughout the talk to illustrate how the concepts and classes actually work in real code.&lt;/p&gt;
&lt;p&gt;Here's the video. I show a lot of demos during the talk with plenty of code wading, so you might want to pop the player into fullscreen mode (look for the icon in the lower-right of the player).
&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=2357&amp;amp;context=162&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=2357&amp;amp;context=162&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Many of the demos are already posted in other &lt;a href="http://tv.adobe.com/show/codedependent/"&gt;CodeDependent&lt;/a&gt; posts, others are ones that I developed for MAX and have not yet published. But I will push these demos out eventually as well - look for future posts that cover these other demos in more detail.&lt;/p&gt;
&lt;p&gt;Be sure to check out the &lt;a href="http://tv.adobe.com/channel/max/max-2009"&gt;other MAX talks&lt;/a&gt;, too. There was some great stuff at MAX this year, and it's pretty cool that we've posted the talks for all of the folks that couldn't make the conference, or had conflicts with other sessions, or simply couldn't stumble early enough for morning sessions after late night sessions in the bar the night before.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-6658044455416457399?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/6658044455416457399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=6658044455416457399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6658044455416457399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/6658044455416457399'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/10/video-effects-in-flex-4-max-session.html' title='Video: Effects in Flex 4 (MAX Session)'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1557190741669380743</id><published>2009-09-30T13:54:00.000-07:00</published><updated>2009-09-30T14:10:19.710-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>MAX Online</title><content type='html'>I'm sure you'll be at &lt;a href="http://max.adobe.com/"&gt;Adobe MAX&lt;/a&gt; next week. I mean, all the stuff going on there, you have to show up, right? Besides, all the cool kids will be there.

But suppose, just for a lark, that you can't make it. Maybe your leg gets caught in a wood chipper and you miss your flight. Maybe you can't find "Los Angeles" on a map. Maybe you'll be having so much fun playing with Flex 4 effects that you forget to go.

What to do?

Well, how about watching MAX online?

There are lots of conference goodies that will be posted in realtime and real-soon-time, so that you can watch them online. In particular:
&lt;ul&gt;&lt;li&gt;Keynotes: The keynotes on October 5th and 6th will be streamed live.&lt;/li&gt;&lt;li&gt;Top Sessions: The top three sessions each day will be recorded and posted by 8 P.M. California time that evening.&lt;/li&gt;&lt;li&gt;All Sessions: All of the technical sessions will be recorded next week and will be posted on Sunday, October 11th.&lt;/li&gt;&lt;/ul&gt;For all of these things, go to the online site to register (&lt;a href="http://max.adobe.com/online/"&gt;http://max.adobe.com/online/&lt;/a&gt;), and check back there when its time for the shows.

Sure, it's not as much fun as being there. But it's more fun that getting caught in a wood chipper again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1557190741669380743?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1557190741669380743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1557190741669380743' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1557190741669380743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1557190741669380743'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/09/max-online.html' title='MAX Online'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7478757523465335258</id><published>2009-09-22T16:45:00.000-07:00</published><updated>2010-03-12T11:41:35.466-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: 3D Effects in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/shader-transitions-in-flex-4/"&gt;3D in Flash Player 10 and Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this show, we see some of the 3D capabilities in Flash Player 10 and how we take advantage of them for some of the new 3D effects in Flex 4.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com//swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=2248&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=2248&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ThreeDButtons.swf" type="application/x-shockwave-flash" width="322" height="346"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ThreeDButtons.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7478757523465335258?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7478757523465335258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7478757523465335258' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7478757523465335258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7478757523465335258'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/09/video-3d-effects-in-flex-4.html' title='Video: 3D Effects in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7547262087060509608</id><published>2009-09-18T08:35:00.000-07:00</published><updated>2010-03-12T11:41:07.431-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Shader Transitions in Flex 4</title><content type='html'>&lt;p&gt;First, some housekeeping announcements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt; site (where my &lt;a href="http://tv.adobe.com/watch/codedependent"&gt;CodeDependent&lt;/a&gt; show is hosted) has been completely redone. The new site is much more searchable and functional than the previous one, so it's easier to browse around there and find the content you like. I'll continue to embed my &lt;a href="http://tv.adobe.com/watch/codedependent"&gt;CodeDependent&lt;/a&gt; videos here on my blog, but I encourage you to also check out the &lt;a href="http://tv.adobe.com/"&gt;TV site&lt;/a&gt; itself and see what else is there.&lt;/li&gt;&lt;li&gt;The embedded player from the TV site has been improved, so now you can expand the video below to run fullscreen.
&lt;/li&gt;&lt;li&gt;The URLs for shows like &lt;a href="http://tv.adobe.com/watch/codedependent"&gt;CodeDependent&lt;/a&gt; have also changed. The old links still work (for now at least), but I'll be using the new links from now on to link to the more comprehensible page &lt;a href="http://tv.adobe.com/watch/codedependent"&gt;http://tv.adobe.com/watch/codedependent&lt;/a&gt; instead of the older more obtuse "#vi+f16095" page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And now, back to our show.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.adobe.com/watch/codedependent/shader-transitions-in-flex-4/"&gt;Shader Transitions in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/shows/codedependent"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this show, we see how shaders created in &lt;a href="http://labs.adobe.com/technologies/pixelbender/"&gt;Pixel Bender Toolkit&lt;/a&gt; are used in the new Wipe and CrossFade effects to create easy and powerful transitions. These new effects are subclasses of the new AnimateShaderTransition effect which allows you to supply completely custom shaders to get your own shader-based effects for transitions, although you are welcome to simply use Wipe and CrossFade and not worry about the pesky details of shaders if you just want some simple transitions. We covered shaders in &lt;a href="http://tv.adobe.com/watch/codedependent/animatefilter-effect-in-flex-4/"&gt;a previous episode&lt;/a&gt;, where we talked about how to use the new AnimateFilter effect to animate shader properties, and filter properties in general. Now see how we use shaders and shader animations internally to implement some standard transition effects.&lt;/p&gt;
&lt;p&gt;Here's the video (note the new ability to expand the player to run in fullscreen mode):&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="FlashVars" value="fileID=2244&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production"&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=2244&amp;amp;context=78&amp;amp;embeded=true&amp;amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application (pretty SF pictures courtesy photographer and Android-hacker &lt;a href="http://www.curious-creature.org/"&gt;Romain Guy&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ShaderTransitions.swf" type="application/x-shockwave-flash" width="500" height="322"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/ShaderTransitions.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7547262087060509608?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7547262087060509608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7547262087060509608' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7547262087060509608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7547262087060509608'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/09/video-shader-transitions-in-flex-4.html' title='Video: Shader Transitions in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-1505949981649139631</id><published>2009-09-04T11:33:00.000-07:00</published><updated>2010-03-12T11:39:04.075-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Pixel Bender and Flex 4 Effects</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1018"&gt;Pixel Bender Shaders in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/#pg+16095"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this show, we see how &lt;a href="http://labs.adobe.com/technologies/pixelbender/"&gt;Pixel Bender Toolkit&lt;/a&gt; is used to create shaders that can then be used in Flash filters to change the display of objects on the screen. We then see how to use the new &lt;a href="http://graphics-geek.blogspot.com/2009/08/video-animatefilter-in-flex-4.html"&gt;AnimateFilter&lt;/a&gt; effect in Flex 4 (which we discussed in &lt;a href="http://graphics-geek.blogspot.com/2009/08/video-animatefilter-in-flex-4.html"&gt;a previous episode&lt;/a&gt;) to animate the shader properties over time, enabling new and powerful transition effects. Note that the demo application shows a crossfade between two images, but the effect can be applied to &lt;em&gt;any&lt;/em&gt; component or graphical object - shaders aren't just for images (I just happened to have the images handy when writing the application).&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="FlashVars" value="fileID=2232&amp;context=78&amp;embeded=true&amp;environment=production"&gt;&lt;/param&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=2232&amp;context=78&amp;embeded=true&amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application (pretty SF pictures courtesy photographer and Android-hacker &lt;a href="http://www.curious-creature.org/"&gt;Romain Guy&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimatedCrossfade.swf" type="application/x-shockwave-flash" width="500" height="298"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimatedCrossfade.zip"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-1505949981649139631?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/1505949981649139631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=1505949981649139631' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1505949981649139631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/1505949981649139631'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/09/video-pixel-bender-and-flex-4-effects.html' title='Video: Pixel Bender and Flex 4 Effects'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-4556964267912864806</id><published>2009-08-28T16:28:00.000-07:00</published><updated>2009-08-28T16:53:04.642-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><title type='text'>Scoping Strategies</title><content type='html'>&lt;p&gt;I just fixed a lurking bug in my code today that was related to ActionScript's scoping rules. The bug wasn't obvious to me when I first wrote it, and took some head-scratching when I fixed it. So I thought I'd post in in case this behavior isn't obvious to anyone else eading this (say, coming from a Java background like I do, where this behavior doesn't exist).&lt;/p&gt;
&lt;p&gt;I'll boil it down to a simpler 'puzzler' question: &lt;/p&gt;
&lt;p&gt;What do you think this prints out?&lt;/p&gt;
&lt;pre&gt;            var i:int;
           for (i = 0; i &amp;lt; 2; ++i)
           {
               var blah:Object;
               trace("blah = " + blah);
               blah = i;
           }&lt;/pre&gt;
&lt;p&gt;Or how about this?&lt;/p&gt;
&lt;pre&gt;            for (i = 0; i &amp;lt; 2; ++i)
           {
               var blarg:Object = null;
               trace("blarg = " + blarg);
               blarg = i;
           }&lt;/pre&gt;
&lt;p&gt;(I'll put the answer at the end of this post, so that I don't blow the surprise for anyone wanting to figure it out before proceeding.)&lt;/p&gt;
&lt;p&gt;What's going on here is that the scope of these variables (like all variables in ActionScript) is at the level of the function. That's right: even though the variable is declared inside the &lt;code&gt;for()&lt;/code&gt; loop, they are scoped to the overall function. There are various implications and consequences that come from this scoping rule, but the specific one we're dealing with here is that that scope is also the place where the variable receives its implicit assignment. So in the case of the first example above, &lt;code&gt;blah&lt;/code&gt; is assigned the default value of &lt;code&gt;null&lt;/code&gt; just once. When we come around to the variable declaration again, it does not get a second implicit assignment, because it's as if the variable were declared at the top of the function, since that's its scope.&lt;/p&gt;
&lt;p&gt;Meanwhile, in the second example, &lt;code&gt;blarg&lt;/code&gt; is given an explicit assignment. This means that every time around our &lt;code&gt;for()&lt;/code&gt; loop, we assign the value of &lt;code&gt;null&lt;/code&gt; to &lt;code&gt;blarg&lt;/code&gt;, so that the variable is always initialized to that value at the point where we declare it in the code.&lt;/p&gt;
&lt;p&gt;To my Java developer eye, these looked equivalent: an implicit assignment would happen at the same time as an explicit assignment. But now I realize that if you really want a variable to have a specific default value, assign it explicitly or suffer the possible consequences.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Moral of the Story&lt;/em&gt;: Always assign a default value to a variable, especially iuf the variable is declared in a loop where you expect it to have some default value.&lt;/p&gt;
&lt;p&gt;Addendum: To test this behavior in Java, I tried to write similar code to see the results. It turns out that the code wouldn't even compile; accessing the variable (even to System.out.println() it ) without declaring an initial value for it threw a compiler error. I could swear this type of code used to work, but perhaps they tightened up their variable declaration policy since I used that approach.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Answers:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The first example prints out:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;em&gt;    blah = null

   blah = 0&lt;/em&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;and the second example prints out:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;em&gt;    blarg = null

   blarg = null&lt;/em&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-4556964267912864806?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/4556964267912864806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=4556964267912864806' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4556964267912864806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/4556964267912864806'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/08/scoping-strategies.html' title='Scoping Strategies'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7089302179848308687</id><published>2009-08-27T14:10:00.000-07:00</published><updated>2010-03-12T11:37:40.297-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: AnimateFilter in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1017"&gt;AnimateFilter Effect in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/#pg+16095"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1013"&gt;&lt;/a&gt;This show covers the new AnimateFilter effect in Flex 4, which allows you to animate properties on Flex filters. You could do this in Flex 3, but it required more custom effects or animations, where you would receive the animation events and manually update the filter properties. Now, you can pass in the filter and the animation properties to AnimateFilter and it automatically animates the filter properties. This is another example of Flex 4 effects being able to target arbitrary objects; in this case, it is changing properties on a filter, not on a component. The demo app also shows the new RepeatBehavior capabilities in Flex 4 effects, which makes it easier to create reversing effects, like we have on the pulsating button in the demo.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="FlashVars" value="fileID=2233&amp;context=78&amp;embeded=true&amp;environment=production"&gt;&lt;/param&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=2233&amp;context=78&amp;embeded=true&amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/GlowingButtonF4.swf" type="application/x-shockwave-flash" width="200" height="200"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/GlowingButtonF4.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7089302179848308687?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7089302179848308687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7089302179848308687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7089302179848308687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7089302179848308687'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/08/video-animatefilter-in-flex-4.html' title='Video: AnimateFilter in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-36706199716052651</id><published>2009-08-25T14:47:00.000-07:00</published><updated>2009-08-25T15:03:30.261-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Pros and Cons</title><content type='html'>&lt;p&gt;I just heard that my technical session was accepted at Devoxx, so I thought I'd post my upcoming conference schedule:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://max.adobe.com/"&gt;&lt;span style="font-weight: bold;"&gt;Adobe MAX&lt;/span&gt;&lt;/a&gt;: I (along with others on the Flex team and a host of other knowledgeable people inside and outside of Adobe) will be presenting at MAX this year. I will give a talk on (drum roll please; it's sure to be a big surprise...): Flex 4 Effects! MAX is in &lt;span style="font-weight: bold;"&gt;Los Angeles&lt;/span&gt; from &lt;span style="font-weight: bold;"&gt;October 4 - 7&lt;/span&gt;. Come learn about Flex, Flash, and other cool Adobe developer products.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devoxx.com/display/DV09/Home"&gt;&lt;span style="font-weight: bold;"&gt;Devoxx&lt;/span&gt;&lt;/a&gt;: I, along with my &lt;a href="http://filthyrichclients.org"&gt;co-author&lt;/a&gt; and arch-nemesis &lt;a href="http://www.curious-creature.org"&gt;Romain Guy&lt;/a&gt;, will be presenting a session entitled "Animation Rules!," where we will apply lessons learned from cartoon animation to making better GUIs. There should be some other good talks more specifically about Flex as well. Devoxx is in &lt;span style="font-weight: bold;"&gt;Antwerp, Belgium&lt;/span&gt; from &lt;span style="font-weight: bold;"&gt;November 16 - 20&lt;/span&gt;. It is one of the best geek conferences I've been to, year after year, with good, deep talks about Java, Flex, and whatever else is hot and worth learning about in the programming world today. It is also very cheap at the price. Oh, and the fries and beer are great!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-36706199716052651?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/36706199716052651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=36706199716052651' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/36706199716052651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/36706199716052651'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/08/pros-and-cons.html' title='Pros and Cons'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-890103166610992871</id><published>2009-08-20T15:50:00.000-07:00</published><updated>2010-03-12T11:36:33.396-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Transform Effects in Flex 4</title><content type='html'>&lt;p&gt;&lt;em&gt;Flex effects: a transforming experience......&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1016"&gt;Transform Effects in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/#pg+16095"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1013"&gt;&lt;/a&gt;This show covers the new "transform effects" in Flex 4, which allow you to move, rotate, and scale Flex objects (components and graphics objects). Similar effects (Move and Rotate) exist in Flex 3 already, but these effects were completely overhauled in Flex 4 to make it easier to get them to do the right thing. &lt;/p&gt;
&lt;p&gt;One of the problems with the previous implementations of Move and Rotate is that they would sometimes clobber each others' results. If you think about it, both effects are affecting the (x,y) location of an object, so if the effects are giving conflicting advice, you may not get what you really wanted. For example, a Rotate effect in Flex 3 would rotate around the center of the object by default, meaning that the (x,y) location of the object would change as it rotated around that center point. Meanwhile, a Move effect on that same object would be giving conflicting advice on how to move that (x,y) point. The results tended to be unpredictable at best.&lt;/p&gt;
&lt;p&gt;In Flex 4, we've combined Rotate and Move, along with the new Scale effect (essentially a replacement for the old Zoom effect). Now, instead of separate effects individually setting overlapping properties on the target object, they all combine internally into one single "transform effect" instance and combine their operations into a single transform operation that sets the location, rotation, and scale of the object.&lt;/p&gt;
&lt;p&gt;And of course, the effects also benefit, like the other Flex 4 effects, from the ability of the &lt;a href="http://graphics-geek.blogspot.com/2009/07/video-animate-effect-in-flex-4.html"&gt;Animate&lt;/a&gt; effect to target arbitrary target objects (useful in the world of Flex 4, where we may have graphical objects in our application instead of just UIComponents).&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="FlashVars" value="fileID=2171&amp;context=78&amp;embeded=true&amp;environment=production"&gt;&lt;/param&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=2171&amp;context=78&amp;embeded=true&amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/TransformEffects.swf" type="application/x-shockwave-flash" width="300" height="200"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/TransformEffects.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My favorite part of the video: I got to use the words "junta" and "cahoots" - how often does that opportunity present itself?&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-890103166610992871?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/890103166610992871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=890103166610992871' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/890103166610992871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/890103166610992871'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/08/video-transform-effects-in-flex-4.html' title='Video: Transform Effects in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-2884478122959167172</id><published>2009-08-13T15:37:00.000-07:00</published><updated>2010-03-12T11:35:27.387-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Fade Effect in Flex 4</title><content type='html'>&lt;p&gt;&lt;em&gt;Old components never die; they just fade away.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1015"&gt;Fade Effect in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/#pg+16095"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1013"&gt;&lt;/a&gt;This show is all about the new Fade effect in Flex 4, which allows you to fade objects (components, graphic objects, and anything else with an &lt;code&gt;alpha&lt;/code&gt; property) in and out. This effect exists in Flex 3 already, although it got a little reworking in Flex 4 to add useful functionality. For one thing, it uses the ability of the &lt;a href="http://graphics-geek.blogspot.com/2009/07/video-animate-effect-in-flex-4.html"&gt;Animate&lt;/a&gt; effect to target arbitrary target objects (useful in the world of Flex 4, where we may have graphical objects in our application instead of just UIComponents). But also, the new Fade effect has a little more intelligence built into it that helps it figure out when you want to automatically fade things in and out, based on the value of related properties like visibility and whether the object is becoming parented or unparented between states of a transition.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="FlashVars" value="fileID=2111&amp;context=78&amp;embeded=true&amp;environment=production"&gt;&lt;/param&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=2111&amp;context=78&amp;embeded=true&amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AutoFade.swf" type="application/x-shockwave-flash" width="200" height="200"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AutoFade.mxml"&gt;here is the source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;CodeDependent videos on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-2884478122959167172?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/2884478122959167172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=2884478122959167172' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2884478122959167172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/2884478122959167172'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/08/video-fade-effect-in-flex-4.html' title='Video: Fade Effect in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-8255071193164989809</id><published>2009-08-06T16:23:00.000-07:00</published><updated>2010-03-12T11:34:21.573-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: AnimateColor in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1014"&gt;AnimateColor in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/#pg+16095"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show is a follow-on from the previous show on the &lt;a href="http://tv.adobe.com/#vi+f16095v1013"&gt;Animate Effect in Flex 4&lt;/a&gt;, which talked about the superclass of the new effects in Flex 4. This show is all about the new AnimateColor effect, which allows you to animate colors on arbitrary Flex objects using the new type interpolation capabilities in the Flex 4 effects. While we showed how to do this with the Animate effect in the previous video, using AnimateColor is a more natural way to achieve this specific effect. We also talked a bit about AnimateColor in the video &lt;a href="http://graphics-geek.blogspot.com/2009/07/video-color-my-world.html"&gt;Color My World&lt;/a&gt;, although that show was more about comparing RGB and HSB colorspace interpolation, and this show is specifically about using the AnimateColor effect. And yes, this is the last show where I talk about color for a while. I promise.&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="FlashVars" value="fileID=2051&amp;context=78&amp;embeded=true&amp;environment=production"&gt;&lt;/param&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=2051&amp;context=78&amp;embeded=true&amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimatedGradient.swf" type="application/x-shockwave-flash" width="200" height="200"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And here is the &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimatedGradient.mxml"&gt;source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;video on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-8255071193164989809?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/8255071193164989809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=8255071193164989809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8255071193164989809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/8255071193164989809'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/08/video-animatecolor-in-flex-4.html' title='Video: AnimateColor in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-7983079134722004422</id><published>2009-07-30T15:40:00.000-07:00</published><updated>2010-03-12T11:33:09.733-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><title type='text'>Video: Animate Effect in Flex 4</title><content type='html'>&lt;p&gt;&lt;a href="http://tv.adobe.com/#vi+f16095v1013"&gt;Animate Effect in Flex 4&lt;/a&gt;, the next episode in the gripping and suspenseful series &lt;a href="http://tv.adobe.com/#pg+16095"&gt;CodeDependent&lt;/a&gt;, is now available from &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This show gives a basic introduction to the new Animate effect, which is the superclass of all of the new effects in Flex 4. This effect enables new and interesting capabilities, such as animating multiple properties in parallel (versus the older AnimateProperty effect, which animates just one property per effect) as well as handling arbitrary types.&lt;/p&gt;

&lt;p&gt;For giggles, I did some live coding in the video, which is a great way to amp up the pressure during filming. And for the record, most of the videos I've done so far, including this one, were shot in one take (something I far prefer, as it's a tad easier to feel spontaneous and dynamic when you're not repeating the same information for the nth time). This might also explain why I use the uncommon phrase, "Let's take a look at angrrizzat" in the video. Apparently, English is not my first language (perhaps it's ActionScript 3).&lt;/p&gt;
&lt;p&gt;Here's the video:&lt;/p&gt;
&lt;object width="425" height="256"&gt;&lt;param name="movie" value="http://images.tv.adobe.com/swf/player.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="FlashVars" value="fileID=1105&amp;context=78&amp;embeded=true&amp;environment=production"&gt;&lt;/param&gt;&lt;embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=1105&amp;context=78&amp;embeded=true&amp;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="256"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Here is the demo application:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimateButton.swf" type="application/x-shockwave-flash" width="200" height="200"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And here is the source code for both the &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimateButtonF3.mxml"&gt;Flex 3&lt;/a&gt; and &lt;a href="http://haasehouse.com/Chet/Flex/CodeDependent/files/googlepagesarchive/AnimateButton.mxml"&gt;Flex 4&lt;/a&gt; versions shown in the video.&lt;/p&gt;
&lt;p&gt;Finally, here's where you can find the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;video on iTunes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-7983079134722004422?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/7983079134722004422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=7983079134722004422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7983079134722004422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/7983079134722004422'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/07/video-animate-effect-in-flex-4.html' title='Video: Animate Effect in Flex 4'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6843566830671277353.post-5513162039763513850</id><published>2009-07-28T13:47:00.000-07:00</published><updated>2009-07-28T14:14:59.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>iTunes me</title><content type='html'>No technical material today - just a link to some iTunes content that might interest you.

I've been meaning to mention that all of my &lt;a href="http://tv.adobe.com/#pg+16095"&gt;CodeDependent&lt;/a&gt; videos are being cross-posted on both &lt;a href="http://tv.adobe.com"&gt;Adobe TV&lt;/a&gt; and on &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=315640759"&gt;iTunes&lt;/a&gt; (and, of course, on this blog). The thing I like about videos on iTunes is that I can watch them offline (not my own, of course - I have to spend enough time with that guy as it is). I just subscribe to the podcasts and they're downloaded onto my machine (and potentially my iPod, if my iPod weren't so old it's made of sod and animal hide).

In addition to CodeDependent, there's other good content out there like "Adobe Developer Connection" and "ActionScript 1:1 with Doug Winnie".  Just search in the &lt;a href="http://www.apple.com/itunes/"&gt;iTunes store&lt;/a&gt; and it'll display these shows as video podcasts that you can subscribe to. (Did I mention they're free?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6843566830671277353-5513162039763513850?l=graphics-geek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://graphics-geek.blogspot.com/feeds/5513162039763513850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6843566830671277353&amp;postID=5513162039763513850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5513162039763513850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6843566830671277353/posts/default/5513162039763513850'/><link rel='alternate' type='text/html' href='http://graphics-geek.blogspot.com/2009/07/itunes-me.html' title='iTunes me'/><author><name>Chet Haase</name><uri>https://profiles.google.com/104755487586666698979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-alRF2kfXilM/AAAAAAAAAAI/AAAAAAAABC8/JbAg4WTVTT4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
