Simple trick for defeating cached Flash objects

In an application I am working on there is a Flash slideshow for product images.  On most clients there was no problem, but for a few IE users the Flash movie would occassionally not show up unless you manually refreshed the page.    We were already using SWFObject to embed the movie, so we ruled out the IE patch issue (which shouldn’t have been a factor anyway as this was not about the controls themselves).  As we tested a bit it quickly became obvious that it was a browser caching issue.  A quick and effective workaround was to simply append a random value to the querystring when calling the movie such as this:

<script type=”text/javascript”>
// <![CDATA[
var so = new SWFObject ("/slideshow.swf?refresh=#getTickCount()#", "slideshow", "320",  "240", "0", "##FFFFFF");
so.addParam("quality", "high");
so.write("flashcontent");
// ]]>
</script>

That of course is the JS method of embedding the movie but the same would hold true if you were using <object> and .  And for that matter, the same concept holds true for cached images and other objects.

Great things in the works for Reactor!

First of all I would like to say that Doug Hughes deserves a long vacation when all this is said and done.  He has been churning out code behind Reactor like a madman.

I would like to offer you reason number 237,238,192 to start using Reactor for ColdFusion….

Cascading saves/deletes!

There is still some fine tuning to be accomplished and the API isn’t completely nailed down, but it looks as if the following is about to be committed.

Say I have a user class and have instantiated it as User.  Now, let’s say that the user has an Address, and the Address has a property of Street.   As is typically done with an object relationship like this, I can access the Street property like this:

#User.getAddress().getStreet()#

Then we can mutate the property Street like this:

User.getAddress().setStreet(“1234 Dirt Road”);

This is nothing new… but what is new is how I would save a change to the Street.  Traditionally I would have to do something like this:

User.getAddress().save();

With cascading saves I can now do this:

User.save();

This will now save all child objects (and their children and so on…) of User.   BAMN!  (it’s a new word)  I am currently developing a mortgage loan origination application that I feel is a greate candidate for Reactor.  I have very big complex objects to carry around as part of the User facade.  For example situations where a User has an Application, which has one to many Borrowers, which each have Properties, which each have Liabilities, and so on and so on many levels and many different trees.   The realization that now I can simply do
User.save() has me practically jumping off the walls!

As I mentioned above, API is not locked down yet and there are some things that still need to be defined.  For instance, you may not always want to do a cascade delete/save.    That said, there are discussions in the works for passing some type of boolean value such as this:

User.save(cascadeSave=true);

If any of this sounds as exciting to you as it does to me, and you are not already playing with Reactor, go check out www.doughughes.net or join the Reactor email list by sending an email with the subject “subscribe” to reactor@doughughes.net.