Monthly Archives: August 2003

Development Paradigms

There are many ways to write software. None of them are wrong, just different approaches to solving a problem. Some have limitations (speed, platform, functionality), some have advantages (portability, security, scalability) and most importantly some we know better than others.

Which brings me to Flash…

What is interesting about the MX 2004 release is that the IDE has been forked and several new development paradigms are supported.

new :

New Form Based Development (Drop that timeline! Enter VB/Delphi army of developers…)

New ActionScript 2 > Output to swf bytecode for F6, F7 Players

New Components

New IDE extention capability

old :


Animation tools

ActionScript 1 > Output to swf bytecode for F4, F5, F6, F7 Players



In reality, the new and old features are still grounded in the SWF format. Every feature eventually becomes a pattern of SWF bytecode. When the marketing smoke clears (cough, cough), we are still dealing with SWF bytecode. The real benefit is that we have new paradigms to author SWF and the Flash Player performance has been dramatically improved.

What is exciting to me is that even more paradigms are coming…



PS – Special thanks to Peter Goldie and Lucian Beebe at MACR for taking the time to talk with me about Flash. From the looks of the release they listened. The reason MACR software is great is because they listen to customers. So long as they listen, I will continue to own MACR stock. Thanks!

Hidden jewels of MX 2004?

Once the marketing smoke clears, I think we are going to find that MX 2004 has a few hidden jewels that are hard to see at first.

Personally, the addition of the Scripting API and IDE History is going to change everything. I have used the Scripting API many times with other MM tools and it is simply brilliant. The Scripting API lets you get to every major function of the IDE via JavaScript (JSFL) and allows developers and third parties to extend atop the foundation of a MM core product. Even better is the fact that the History panel, gives developer access to the JSFL commands and data that were performed by the IDE at runtime. This allows you to build scripts quickly:

1. Perform the process in the IDE

2. Save the selected commands from the History Panel externally

3. Edit to hearts content

4. Press play!

If you really want to go deep, add a panel to the IDE via XML and put a Flash interface on that script! It is an interesting fact but most of the panels in Fireworks are swfs executing the Scripting API. The scripting API has evolved into many MM products since the release of Dreamweaver 1, JavaScript and the Scripting API concept was championed by Kevin Lynch at MM. I had the pleasure of meeting Kevin in 2000 during a Lynda Weinman course, if he was excited about one thing it was the scriptability of dreamweaver. As he explained it, Dreamweaver was built inside out from a product perspective. Instead of defining everything a product could do, MM wrote an extensible scripting engine from which a product was defined via script and html. Every feature in dreamweaver is defined in script and html. When you use a feature, you are accessing the scripting API while the UI of the product is defined in html, flash, and JavaScript.

The addition of a scripting API to Flash is much deeper than most realize. This gives the developer low level access to the Flash compiler, File system, FLA format, and to the IDE in general. If you want to add features to MX 2004, simply download the scripting API and get to work. Given the long history of the scripting API in other products, the addition of the Scripting API to Flash should be a profound addition.


I certainly see a PowerSDK panel coming to MX 2004!

Nice work MM!😉



Power Grid, Infrastructure, and Wireless ISP – Kingston, Jamaica

I live in Kingston, Jamaica, not exactly the tech capital of the world. Although here innovation abounds, as local businesses and individuals must work around poor infrastructure and power outages on a daily basis. It is typical for us to have the power drop 2-3 times a week, I currently own 10 UPS units and every piece of gear is attached.

When I arrived (May 2002), I found that the internet access was less than ok. I searched high and low for anything faster than a dial-up connection to the internet. Having come from an office with 2 T1’s, I had been spoiled by fast unlimited internet.

Weird as it sounded then, wireless internet was taking off here. Skipping over the antique infrastructure of Cable and Wireless, was required to provide fast internet to business. There were 2 wireless providers that could supply a 1,028 Down / 256K Up connection wirelessly, although at a very high cost! The problem was that I was out of range of the service by 3 miles and was 7 miles from the base station. I am not one to accept no for an answer, so I worked with the provider to attempt to extend the range of the service via hardware. Here is what we did:

1. Add large directional antenna to boost signal reception. This worked really well as we were just able to get the equipment to receive a faint signal. We also worked to get a clear parabolic line of site or wireless line of site that was clear of obstruction. We mounted the antenna on the house and once it was mounted, we optimized the antenna until we got a connection with few dropped packets. At the end of this stage we were running 14K, not exactly high speed.

2. Add an external amplifier to the antenna cable. This worked like magic as once it was installed we were operating at 73K without any adjustments.

3. Add silicone to all antenna connections. This was a practical item but it improved signal quality by 10-15% overall. It is amazing how much of the signal is lost in cable transmission.

4. Tune the radio signal via the radio receiver. We worked to optimize the radio settings to achieve a very reliable connection rate. These settings included boosting the radio output and optimizing for packet loss. At this point we were at 143K over 7 Miles, two way.

5. Boost the source antenna range by adding an amplifier. This was by far the most expensive part of the process as the carrier equipment is much more expensive than the end user gear. The company boosted their signal strength in Feb of this year and I am now receiving 256KBPS 2 way over 7 miles.

It is very clear to me that the last mile will come as a wireless solution in the near future. Although the WIFI trend in the US is taking off for LAN and proximity WAN access, it is being deployed as the last mile in the 3rd world.

My ISP emailed me the other day and asked if I wanted to upgrade to 802.11g. It will provide 3,500KBPS and only requires a new radio. I said yes.



Cascading Properties 101 – F5,F6,F7

I was working on a problem recently with properties. I needed a way to encapsulate a set of properties so that they could be used via inheritance in many different instances and methods. Ideally, the system needed to support levels of properties via a class based system. The result shocked me as it was right in front of me the whole time. Hopefully you will find it useful too, here is a sample.

rootProperties = {x:2, y:34, width:23, height:43, faceColor:0x343434,backColor:0x333333}

properties = {faceColor:0x222222,backColor:0x444444, __proto__:rootProperties }

windowProperties= {x:34,y:45,__proto__:properties }

buttonProperies = {x:0, y:0, width:100, height:20,backColor:0x888888,__proto__:properties }

buttonProperties.faceColor // returns 0x222222 via the “properties” object

windowProperties.height // returns 43 via the “rootproperties” object

Essentially this creates a set of objects that inherit from one another. If you look up a property in one, it will cascade to another when that property is absent via the __proto__ chain. __proto__ is the primary ingredient in inheritance support in Flash. Typically, an instance contains a __proto__ that is a reference to a {Class}.prototype and that prototype typically contains another __proto__ property defining a superclass. In this case we are using __proto__ to provide inheritance from instance to instance vs from class to class but it works the same way.

This is a handy patterns for dealing with property data as each object can have properties that layer into a tree structure. It is very close to how CSS works but is compatible in F5,F6,F7 players.

Useful, clean, easy!



F7 Critical Design Flaw!!

Is it just me or doesn’t the auto-update seem critically flawed in design.

From an end user perspective, I see some serious problems in the Flash 7 Player Beta:

1. Updating the Player requires end user interaction.

If we really want the F7 player to be deployed faster and updated more frequently, why are we relying on the end user? Obviously most users already have Flash installed or stated anther way, they approve of the Flash Player being installed on the local machine. An installed player should have the capability to update itself in a completely automated fashion without user interaction.

If this were the case it wouldn’t take 14 months to get a new player to 90% deployed, it would take 2 months. Even better is the fact that the deployed player pool would be running a narrow range of versions. This would avoid the sub-version errors that plague Flash players v5 & v6.

2. Taskbar application provides little benefit to the end user.

This application is only of value to Flash developers, so why is it included in the end user release? I want to know when there is a player update, but why should the end user have to know? My mother (very non-technical end user) could care less that there is a Flash Player update. If you bother her enough with taskbar pop-ups, she will not want Flash installed at all. Not exactly an ideal result.

3. This only adds file size to the player!!!!

The taskbar updater only serves to add size the current player download. Sure 80K isn’t much, but what features have been passed over so that this was included in the release. 80K used to be 1/3 of the player download size. I could think of 10 things that I want added that would fit in 80K. REGEX Support and a full client side Actionscript Interpreter come to mind quickly!

In a perfect world, if an end user needed a player upgrade, I as a developer could upgrade their player to a suitable version via a system method in the existing player. The user would not be asked any questions, the user would see a progress bar showing the update, and when the update was complete it would run my application as needed.

The purpose of software is to simplify, automate, and save the end user time. The more time a piece of software saves, the more valuable it is. Wasting the end users time by asking questions and running taskbar applications, detracts from the value of the Flash Player. It is just that simple.

A silent, automated upgrade of the Flash Player internally would equate to a Platform victory for Flash. As it is currently implemented the GetFlash Updater is a disaster waiting to be uninstalled.


Theodore E. Patrick

PowerSDK – Code for a distributed world

Events in F7 Player

You can tell allot from the flash player with the help of external software. Personally, I keep a keyword list with each player/subplayer release to denote changes in the player over time. Since most features constitute new names at the player level. Although most of the good stuff is always at the bytecode level.😉

One of the best gauges is to look at the new events in the player. These often denote very low level changes that make for wonderful additions to the canvas of Flash. Here is what I found:





onConstruct // This should be useful!!!


































See anything useful?

It looks like MM has really focused on performance over features in this release. In testing my flash content from here the beta player looks to be in much better shape than prior releases. It worked perfectly with PowerSDK except for the modify example, 42/44 isn’t bad!

Error Examples



Sleep Apnea – Yuck!

I am in Washington DC recovering from surgery this week. My tech blogging is on hold until I return. This is an off topic post for me but hopefully it will help someone in a similar situation.

For the past few years, I have had trouble with work and life as my concentration and ability focus was less than normal. I just couldn’t seem to complete tasks and it was becoming ever more frustrated. I went to see a Dr who promptly sent me in for a sleep study. During the study they attached 50+ wires to me while I attempted to sleep. It wasn’t fun but the results showed that I was waking up 16-20 times an hour. They estimated I had not slept well for the past 10-15 years. Basically, I would fall into REM sleep, stop breathing, gasp for air and wake up. I personally had no idea that this was happening, until I saw the video. I thought they had me confused with another person. It came as a real shock.

Last Tuesday, I checked into Georgetown Medical Center in DC and had surgery to fix the problem. They did 3 things,

1. Fix a deviated septum so I could breath unrestricted

2. Sinus Surgery

3. Reduce the volume of my tongue to prevent it falling back in my throat – Coblation

The root cause of Apena is different in everyone, in me, my throat structure is small and if I turned a certain way, I would cut of my own breathing. Reducing the volume of my throat was the only way it could be fixed. And yes, I got several opinions on the surgery. Coblation uses radio waves to destroy tissue. It was used on the back of my tounge to reduce the volume by 30-40%. It essentially melts tissue without burning or scaring and is painless. It just feels like a sore throat.

Just 4 days after surgery, I had a perfect nights sleep, probably the best in my life. I feel like a new person and I can’t wait to get back into the swing of things. It is crazy to think that sleep can affect ones life so substantially. It is even stranger to find that what you think was normal wasn’t. I guess it is true, perception is reality.

I am better than ever and should be back in Jamaica by the end of next week.