In the Flash world, nothing is without a trace.

Firefox recently became my primary browser while using Flex Builder 2 (Go to Window > Preferences > Web Browser). And the latest Flash Tracer Firefox add-on, by Alessandro Crugnola, has become my new development best friend. For those of you still suffering without it, the add-on lives alongside your browser window, spitting out any Flash-traced statements written to your Flash Player’s log.

Its value is unparalleled, making debugging your app that much simpler, you may actually code so quickly that you’ll want to add a few extra bucks on your Starbucks card (Peet’s coffee for me). Really, it is an incredibly valuable tool.

But this add-on has a bit of a downside. It has exposed to me an incredible deficiency in our development community. We all know one of the golden rules (or best practices if you please) when deploying an application to production is TO REMOVE YOUR TRACE STATEMENTS before launching your code. It’s a rule I try so very hard to obey and make sure that those working with me follow. Apparently, whether intended or not, it seems developers of some of the most prominent Flash apps, widgets and ads are overlooking this golden rule.

I call these trace statements, whether left in or more likely overlooked, Flash burping.

Here’s a small list of apps I was really surprised to see leave trace statements in their production code, and a sampling of what you’ll see with Flash Tracer. Things I’m sure we weren’t meant to see, but with the use of Flash Tracer and the oversight of each app’s development team, these app burps are left for easy discovery:

Yahoo! Web Messenger

Custom Yahoo mx.preloaders.Preloader Ready.
REMOTE .swf. Setting securityDomain!
attempting to load RSL: http://l.yimg.com/us.yimg.com/lib/msg/eden/flex/flexpartial_200702220008.swf

ESPN.com

Warning: broadcastMessage is not a function
Warning: Reference to undeclared variable, ‘bg_all’
http://static.espn.go.com/motion/echo/ad.xml?clip=/fp/ros/hu_070516nba_spurs_suns_sot1v.flv&rand=74442
Warning: Reference to undeclared variable, ‘logo1url’

MLB.com (* I had to hit the pause button here as the site kept burping out trace statements).

Warning: Reference to undeclared variable, ‘dataFile’
requestURL: http://gdx.mlb.com/components/game/mlb/year_2007/month_05/day_16/miniscoreboard.xml
constructed
04,05,06,07,08,09
05 5
_level0.widget_mc

Google Finance

Warning: ‘Const’ has no property ‘fillColor’
/finance/getprices?q=.DJI&x=INDEXDJX&i=120&f=d,c,v&df=cpct&p=5d&auto=1
/finance/getprices?q=.DJI&x=INDEXDJX&i=604800&f=d,c,v,k&df=cpct&p=40Y&auto=1

Adobe.com (yes, you read that right)

Warning: Reference to undeclared variable, ‘classes.mmUtilities’
scooping pathPrefix ::
which_file: /swf/homepage/fma/en_us/FMA.xml?0.81684914464131
Loaded xml, and processing it into an array…
Random number is 39

This list is not meant to be a call-out list, rather a somewhat humorous way to relay to you what I’ve seen browsing around with Flash Tracer running. If you know of any really surprising or funny Flash burps, let me know.

chuckstar

9 Comments

JesterXL

I’ve seen one that had SQL statements directly written in ActionScript. Naturally I won’t divulge the site (unless over IM, hehe), but… that’s enough to make a grown man cry.

Scott

How come you didn’t show the Y! Maps traces that were left in 😉

Warning: Reference to undeclared property, ‘Utils’
— Probably a case mismatch.
Warning: Reference to undeclared property, ‘map’
— Probably a case mismatch.
Warning: allowDomain is not a function
Warning: Reference to undeclared property, ‘map’
— Probably a case mismatch.
Warning: Reference to undeclared property, ‘map’
— Probably a case mismatch.
Warning: TileXY is not a function
Warning: __get__width is not a function
Warning: __get__label is not a function
Warning: Reached warning limit of 12
ShowAttribution called: lsa value:
allowAttribution: true
performaing display of attribution objects

—————————–
startAddress:San%20Jose%20CA%2095120
endAddress: SUNNYVALE%2C%20CA
————————

chuckstar22

Scott, I did check Maps (there weren’t any when I left) and I didn’t see any load initially. That may have been the first site I checked. 🙂

Brian Deitte

The worst I’ve seen is the game watcher on MLB.com, or at least last year’s version. Multiple trace statements on every pitch isn’t helpful. 🙂

I saw some amusing traces in YouTube awhile back: “showing the goddamn play button” and “we got meta f*ck yeah!”:
http://www.deitte.com/archives/2007/02/youtubes_hidden.htm

John Ballinger

Thats quite funny about the trace statement. But I must point something out that is quite relevant to Flash, security and tracing.

Pretty much any Flash swf can be decompiled (of course there is some software to obfuscate the source code but you can still read it). So nothing in Flash is safe nor any application they can all be hacked or cracked. So even though these apps are tracing you can still pull them apart easily (except the Firefox debugger makes this real easy).

Even better in Flash you have File>Publish Settings, and in here there is a little check box called “Omit trace Actions” which can easily remove all trace calls for production.

On another note, I really liked you post about Actionscript as a first language the other day that was cool. I am very much like you and really do enjoy working in AS, but it sometimes amazes me all the languages I work with sometimes from PHP, Ruby, ASP.NET VB and C# that it would be fun to have Actionscript on rails or something like that for the server environment.

Mugur Marculescu

I agree with this in about 80% of cases.

Still there is an important thing to note. Sometimes you have to see your trace statements in a real world app (running on the server with real users, real data) and there’s just no getting around it.

Leandro

Most of these flash messages are not the developers fault. The most famous one is
Warning: broadcastMessage is not a function

It doesn’t show in the Flash IDE when you run your application, but the flash tracer displays that. Apparently it has something to do with the use of Tween in As2. It loops to infinite and it renders the flash tracer useless for debugging, since it can only iterate up to 100 times. “Warning: Reached warning limit of 100” is displayed at some point and you can’t actually see your intended traces. Does any one know how to get around that?

sytch

hi,
i also get the “Warning: broadcastMessage is not a function” in a as3 project. the app works fine, but this message is displayed in flash tracer..

any ideas?

Comments are closed.