Fusion Reactor : ColdFusion Server Healthcare Tipical Charlie ...

ballscauliflowerSoftware and s/w Development

Jun 30, 2012 (6 years and 20 days ago)


Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

oldFusion 8 has been out for a while and has been talked about for months. You probably
could name ￿ve to ten top features. As with each release, there are product Top 10 lists,
marketing materials, and user group/conference talks that focus on those features. They
help sell the new release. But there are also always little hidden gems which don’t get as
much press. Sometimes these may be the answer to a long-nagging problem.
Now, if you read all the blogs and the documentation (the CFML Reference, or better yet
the Developer’s Guide that many miss), as well as the Release Notes, the “What’s New”
documents and pages on the Adobe site, you may well come across many such hidden
gems. Sadly, developers don’t often have the time to do that, so about June, I started giving
a Hidden Gems talk for ColdFusion 8, pointing out all those that I or others had found. It
grew to over 75 items!
I can’t possibly list them all here, but these are just a few that I think are of value to most
developers (in no particular order):
ArrayIsDe￿ned(), to test for existence of a potentially empty element in an array. ￿
￿ has a new input=”date￿eld” that o￿ers a nifty calendar popup in HTML.
Indeed, there is now a purely HTML ￿
with lots of power and ease of use.
￿ can loop over arrays, as well as ￿les by line or by character.
￿ has new show, hide, keys, output, format, and metainfo attributes.
AttributeCollection attribute lets you dynamically pass in attributes to most tags. ￿
￿ gives you info on tables, columns, SPs, indexes, keys, and more.
There are attributes and functions for securing Ajax calls (VerifyClient, SecureJSON). ￿
There are dozens of things you can do with PDFs using ￿
that may surprise you.
The CF8 Server Monitor has many features that impose no overhead at all. ￿
￿ can create captchas.
All tags and functions work in CF 8 Standard. Those that were formerly Enterprise-only now run ￿
but may be single-threaded through the Enterprise Feature Router (EFR) feature.
ColdFusion now includes an embedded cross-platform, open-source database, called Derby. ￿
You can now force a refresh of ColdFusion’s cached web service info when invoking the ￿
An Admin can prevent use of the ServiceFactory and other internal ColdFusion Java objects ￿
without disabling access to all Java objects.
￿ and the Admin mail settings now support SSL and TLS.
You can now have multiple user accounts for the Admin and for RDS, and RDS sandboxing. ￿
Admin API method runtime.cleartrustedcache() can take a list of ￿le(s) to ￿ush from the template ￿
There is a dramatic performance improvement related to memory use when uploading ￿les to ￿
Tipical Charlie
Hidden Gems in ColdFusion 8
by Charlie Arehart
98 Columns The Fusion Authority Quarterly Update
84 Tools The Fusion Authority Quarterly Update
FusionReactor: ColdFusion Server Healthcare
(and What’s New in Version 3)
By Charlie Arehart
FusionReactor is a server monitor for ColdFusion and other Java application servers, which helps
to discover, visualize, and protect against common web application performance problems. Even
before version 3 was released in January 2008, adding many new features, it was used in thousands
of deployments by some of the world’s largest organizations and by ColdFusion hosting companies,
some of which have leveraged the tool since its initial release in November 2005.
Whether used for production monitoring or as a developer, a tool like FusionReactor is key to
solving many common problems that otherwise thwart and challenge ColdFusion shops. I’ll
stress that FusionReactor is much more than just a monitor, with powerful features for diagnosis,
analysis, problem solving, unattended noti￿cation and crash protection, and much more. Even
if you’ve worked with FusionReactor before, you may be surprised to learn what the tool can do.
Of course, I’ll also highlight some key features that are new in version 3.
What About ColdFusion 8’s Server Monitor?
Since ColdFusion 8 adds a server monitor, why would one even consider adding a third-party
monitor for ColdFusion? I hope to show several reasons. The most important point is that
the ColdFusion 8 Server Monitor will only work on ColdFusion 8 Enterprise (or the Developer
edition) and can also monitor only those servers. It cannot be used to monitor ColdFusion 6 or
7, or ColdFusion 8 Standard servers.
Beyond that, FusionReactor o￿ers other features not found in the ColdFusion 8 server monitor,
including substantial logging, tracking all recently run requests, tracking of CPU use in ColdFusion
and on the server, and more. It also uses very little overhead. Indeed, with some features, the
server even runs faster and more e￿ectively with FusionReactor than without it. Note as well
that FusionReactor runs on more than just ColdFusion, including other CFML and J2EE servers.
Still, the ColdFusion 8 Server Monitor does indeed have many of its own advantages, and I’ve
written about it in a four-part series of articles on the Adobe Developer center: starting at http://
Why Get Excited About ColdFusion Monitoring Tools? Medicine for Your Server!
I’ll describe the tool in terms of managing your server’s health, using the human analogies
of illness, disease, and treatment. This may be useful for those who just want to know what
problems FusionReactor solves or who may ultimately leave the use of the tool to others in their
Imagine what medicine was like before X-rays, MRIs, or even temperature and blood pressure
measurements; when something was amiss, all the physician had to go on for diagnosis was
the symptoms. And unless he was especially experienced at recognizing and understanding
the connection of symptoms to illnesses, diagnosis required a lot of guesswork and various
medicines, and perhaps exploratory or corrective surgery.
For most people, running a ColdFusion server isn’t really too di￿erent from those bad old days.
If your server’s acting up, it can be quite a challenge to know what’s really going wrong.
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

The Fusion Authority Quarterly Update Tools 85
Real-time Measurement and Diagnosis
Let’s look ￿rst at measurement and diagnosis:
Do you know what requests are running concurrently? ✴
Do you know if any are stuck, holding up other requests from running? ✴
If any are stuck, do you know what line of code they’re stuck on? ✴

What kind of database processing is happening in each request? How many queries are in a ✴
request? How long did the queries take to run? How many records were returned?
How much memory and CPU is available when each request starts and ends? ✴
Without enabling debugging, how do you know what sort of data was passed to a given ✴
request, from form ￿elds to cookies to CGI variables?
What pages and database interactions have been slowest? ✴
How many requests have received 500, 404, and other status codes, and what are the details ✴
on each request?
If you could have access to all that information, wouldn’t it be like having x-rays or an MRI of your
ColdFusion server? FusionReactor provides this and much more, through a variety of features.
Following is a screenshot of its Running Requests page:
Figure 1: Running Requests page
It displays any and all running requests, including detail such as when the request began, the IP
address of the caller, the URL (and any query string), the duration in milliseconds of the request
to the present, and the percent and absolute size of memory available when the request started.
The value of this page is that you can ￿nally see what requests are currently running on your
server, whereas previously you had no idea what ColdFusion was doing at a given moment.
Beyond that, you can also see what speci￿c line of code a request is running at any point in
time. This is especially useful, and it’s enabled with a Stack Trace Request icon to the left of the
request. Here’s an example, showing that the current line is line 11 of ModelGlue.cfm:
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

86 Tools The Fusion Authority Quarterly Update
Figure 2: Stack Trace
Note the Refresh button at top right. If you refreshed the page and the information continued
to show the code stuck on line 11, it would be a useful diagnostic indicator that there was a
problem. It could be
something wrong in this
program (it’s the culprit),
or it could be that this
program is waiting for
some external resource
(it’s the victim), such
as a failed or delayed
database or web service
call or CFHTTP operation.
Or, perhaps it’s waiting
on a lock shared with
some other program or
thread. You can open the
Figure 3: Request History
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

The Fusion Authority Quarterly Update Tools 87
￿le and look at just what it was doing on that stuck line of code. You can ￿nd out more about
how to understand stack traces in the Adobe TechNote, http://www.adobe.com/go/tn_18339.
FusionReactor simply makes the process of obtaining them much simpler.
Sometimes there’s value in knowing not just what’s going on now, but also what has happened
recently. You can view pages after they are processed in the Request History page (see Figure 3).
This is a valuable tool that even the ColdFusion 8 Server Monitor does not o￿er. Sometimes it’s
very helpful to see what, if any, requests have recently run. You can control how many such recent
requests FusionReactor should track. Both this page and the Running Requests page will display
in red any requests that exceed a de￿nable duration.
If you instead wanted to focus only on those requests that exceeded that de￿nable duration,
that’s available in the Slow Requests page:
Figure 4: Slow Requests
In each of the above pages, there is
also an option to drill down into each
request to see the details of the request,
including what CGI, Form, and URL variables
were passed to it, what queries were
executed on the page, and much more.
If you just wanted to focus on what
queries had taken the longest to run,
across all requests, that’s available – and
new in FusionReactor 3 – in the Longest
JDBC Requests page (Figure 5).
Note that the JDBC Requests page, like
the query data in the request details
page, o￿ers considerable and valuable
information about each query, including
the SQL statement, any CFQueryParam
Figure 5: Longest JDBC Requests
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

88 Tools The Fusion Authority Quarterly Update
values, the datasource name, duration, and number of records returned, and even the template
name and line on which the query occurred, among other things.
These detail pages are useful when you’re digging deep into problems, but when you’re just
keeping an eye on things from a bird’s eye perspective, there are other features. First, there’s a
System Metrics page:
Figure 6: System Metrics
This shows six metrics graphs (new in FusionReactor 3), which are Flex components showing
visual metric information for:
Request Activity ✴
Average Request Time ✴
JDBC Request Activity ✴
Average JDBC Time ✴
Memory Usage ✴
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

The Fusion Authority Quarterly Update Tools 89
CPU Usage ✴
It’s really helpful to be able to readily see things like the available memory and the CPU used by
the ColdFusion instance. You can select these graphs to zoom in on them. Below the graphs are
many useful metrics as well, some of which can be used to drill into pages like those discussed
Even more compelling is the Enterprise Dashboard, which lets you view high-level performance
indicators about one or more ColdFusion or J2EE instances, whether on this machine or another
that you’ve pointed it to:
Figure 7: Enterprise Dashboard
The color indicators re￿ect the general health of the instances, which can be grouped together
so you can get an overall measure of health of several servers in a single icon. You can also
drill down into them to see additional charts and graphs similar to the System Metrics page
above, or you can drill into the complete FusionReactor interface for a selected instance or
server. There’s even an Air-based Enterprise Dashboard (new in FusionReactor 3), available as a
separate download.
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

90 Tools The Fusion Authority Quarterly Update
A Shot in the Arm When Treatment is Needed
Continuing with the healthcare scenario, if you come down with the ￿u, it’s one thing to
measure your temperature to con￿rm that you are sick, and you may eventually get better if
you’re patient. But you’ll probably want to be treated in order to feel better as soon as possible.
Consider a more serious disease: if you don’t treat the problem, it could disable or even kill you.
Fortunately, modern medical care can generally successfully attack most such illnesses.
Similarly, your servers can experience the equivalent of ￿u, disease, and even cancer. Some
occurrences pass with time, while some can be crippling, and others can even kill the server.
Long-running requests are like the ￿u. They may be disabling, but they pass in time. Hung
requests are more like diseases, which if not treated, can actually worsen and progressively
cripple, or even eventually bring down, the server.
The FusionReactor features discussed above can help with measurement – ￿nding requests
that have been running for too long or are hung – but they won’t treat the problem. We need
the proverbial “shot in the arm” to terminate such troublesome requests. FusionReactor lets you
do just that. On the Running Requests page (Figure 1 above), to the left of each request is an
icon used to Kill Request. If you click it, you’re asked to con￿rm that you want to kill the request,
and if you con￿rm, FusionReactor will attempt to terminate it.
Figure 8: Kill Request
FusionReactor actually o￿ers a
two-level termination process. First
it attempts what’s called a soft kill,
meaning that the request can be
stopped easily and safely. If that fails,
there is also a force thread death option, which makes a more forceful attempt to terminate a
request but with a very slight risk of leaving the server in an unstable state. The question comes
down to which is worse, keeping the hung request running and the server dying on its own, or
killing the bad request with a risk of some instability.
Of course, it’s better to analyze and understand why a request is hanging or taking a long
time, as discussed above, but at least we now have the option to take control of requests
when needed.
Automated Monitoring: OnStar™ for Your Server
But how does that help if the problem occurs in the middle of the night? Or when you’re in
a meeting, or at lunch? Fortunately, there are several ways in which FusionReactor can help
automatically monitor and even control/protect your server.
Let’s switch analogies: think about automotive diagnostics. First, we now have devices that
track and log diagnostic information so that it can be reviewed later by skilled technicians.
FusionReactor does the same, in that it logs a tremendous amount of information: there are
logs that track the details of each request, each database call, overall metrics at ￿ve-second
intervals, and more. All this is at your control and discretion as to the volume and retention
period. Sometimes, being able to review and connect the dots with these logs can be the key to
understanding problems, whether after a crash, or over an extended period of days or weeks,
or even during the run.
But that’s certainly not the only form of automatic monitoring available. Continuing the
automobile analogy, consider the new OnStar™ feature in General Motors cars, where General
Motors performs diagnostics on an OnStar™ owner’s car and actively noti￿es the owner (and
GM support reps) of a pending problem. FusionReactor can also be con￿gured to send an email
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

to one or more addresses (including addresses that trigger SMS, text, or instant messages) to
notify an administrator that there’s a problem on the server.
Here’s an example:
Figure 9: Email alert
This is part of FusionReactor’s Crash Protection mechanism, which can be con￿gured to trigger
when requests take too long, or too many requests are running, or too little memory is available.
That noti￿cation (and log entry) can include the detail of the line of code running at the time of
the detected problem and show information on all the other requests running at the time.
Automated Control: Airbags for Your Server
Finally, yet another automotive analogy: consider anti-lock braking, traction control, airbags,
and other computer-aided safety features. These features detect conditions that are so bad that
actions must be taken to prevent an accident, without even waiting for your intervention.
Figure 10: Crash Protection
The Fusion Authority Quarterly Update Tools 91
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

Similarly, FusionReactor can be con￿gured to protect the server by terminating requests when
any of those three error conditions – excessive request duration, too many requests, or too little
memory – are triggered:
You may wonder why you need a tool to protect against long-running requests when ColdFusion
itself o￿ers a request timeout feature. But have you ever noticed that sometimes requests do
run longer than the ColdFusion request timeout time? The problem is that ColdFusion can’t
terminate requests that are involved in external communications, whether talking to a database,
making a web service or CFHTTP call, calling a COM, Java, or .NET object, or doing a CFFILE
operation, to name a few. In such cases, the page will terminate – but only after the external
communications complete, which could be a lot longer than the timeout time. It can also be
confusing because the error will say that the next tag executed is the one on which ColdFusion
times out. And if it remains stuck for too long, the request (and any like it) will appear hung
and eventually could use up all the available simultaneous request threads, making the server
appear to be dead.
How can FusionReactor solve this problem when ColdFusion cannot? Recall the two-stage kill
options discussed previously: as of FusionReactor 3, the crash protection termination follows
the same two-stage attempt. If terminating such requests seems too severe, FusionReactor can
also be con￿gured to ￿rst queue requests when there are either too many requests or too little
memory, in the hope that the troublesome state may pass. If after a set queue time (default of
60 seconds) the problem state remains, the request is terminated.
Notice of such request terminations is made in several places, including an email to the
designated FusionReactor administrator, a notation in the Request History, System Metrics,
and Enterprise Dashboard screens mentioned above, and an entry in the logs for post-mortem
analysis. The end user is noti￿ed of the termination through either a con￿gurable ￿xed message
or page redirection:
Figure 11: Abort Strategy
One ￿nal point about Crash Protection is that you can con￿gure it to work for some requests
only (using exact match or regular expression matching of the URL), either protecting or
excluding certain requests. Indeed, you can also use similar restrictions to control what requests
are monitored in FusionReactor at all.
92 Tools The Fusion Authority Quarterly Update
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

More than Just ColdFusion
And all these bene￿ts apply to more than just ColdFusion 6, 7, and 8, and any form of ColdFusion
deployment, from Server or Multiserver to J2EE; they can work just as well with Railo and
Indeed, FusionReactor works with any J2EE/Java EE server such as JRun, Tomcat, JBoss, WebLogic,
WebSphere or Oracle AS. It can also be con￿gured to monitor any J2EE application, such as
BlazeDS, LiveCycle and Flex Data Services, LiveCycle Enterprise Suite, Acrobat Connect, and
So How Does It Work? What’s the Overhead? And Does It Work If ColdFusion Dies?
FusionReactor operates as a lightweight wrapper around the ColdFusion engine. For those
familiar with the notion, it’s a servlet ￿lter (something I wrote about in the Feburary 2003
ColdFusion Developer’s Journal). Filters are very lightweight mechanisms that provide an
opportunity to observe requests going into and responses coming out of the application server.
Similarly, FusionReactor’s feature to track database requests is another lightweight wrapper for
datasources that observes queries going into and results coming back from databases. These
operations add very little overhead.
And what if your ColdFusion server dies? How useful is FusionReactor then? You may be surprised.
As a ￿lter, FusionReactor runs inside of JRun or any other J2EE server that underlies ColdFusion.
As long as the JVM (typically the JRun process) remains running, FusionReactor can function. This
is very useful, because sometimes when ColdFusion seems to be dead, it’s really just a problem
with the ColdFusion engine – perhaps all of the simultaneous requests threads are full. No more
CFML pages can be processed if this is the case, but FusionReactor is not a CFML application.
It uses .cfm extensions to cause the external web server to recognize and pass requests to the
ColdFusion/JRun web server adapter. FusionReactor’s servlet ￿lter con￿guration intercepts
any URLs containing /fusionreactor and processes them itself. As a ￿lter-based application,
FusionReactor can operate as long as the JVM is functioning.
But yes, if the JVM underlying ColdFusion dies or becomes unresponsive, then FusionReactor
will die with it and/or no longer be able to monitor the server. But the substantial logging that
FusionReactor does is valuable for post mortem analysis.
Beyond that, the Enterprise Dashboard feature is speci￿cally intended to monitor one or more
other servers being monitored by FusionReactor. If the Dashboard detects that a monitored
server becomes unresponsive, it will indicate this in the dashboard (as shown in Figure 7) with a
red color and will optionally send an email noti￿cation to the FusionReactor administrator. As of
FusionReactor 3, it also can run a script/batch ￿le to do such things as restart the server. It would
make sense to have another ColdFusion instance or J2EE server/instance set up either on the
same or another server, to act in a watchdog capacity, where it gets no load or activity itself but
merely serves to keep an eye on the other production servers.
That leads to a reasonable question: do you need a license of FusionReactor for each ColdFusion
or J2EE server or instance being monitored on a machine? No. One license covers all CF and J2EE
servers and instances on a single machine. If you want to monitor other machines, those would
each need their own license. Licenses start at US$299 for the Standard edition. The Enterprise
edition, at $US599, enables monitoring of other servers/instances (which must also be running
the Enterprise edition.) Volume discounts are available, as well as discounts for upgrading from
FusionReactor 1 or 2 to version 3.
The Fusion Authority Quarterly Update Tools 93
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

Who’s Using It?
That’s another reasonable question. It’s been used in thousands of deployments, ranging from
large to small organizations, universities and government agencies, and including ColdFusion
hosting companies like CrystalTech and Edge Web Hosting. Among the largest organizations
are Nike, UPS, Caterpillar, AT&T, FAA, Boeing, Disney, Intel, Hewlett-Packard, FedEx, and Cisco.
What Platforms Does it Run on?
As a web-based interface, the monitor display can run on virtually any platform, and as an
extension to ColdFusion (a servlet ￿lter), the monitoring engine itself can run on any platform
that ColdFusion or other J2EE servers can run on. There is an installer, which helps make it easy
to implement the tool, and it runs on Windows, Linux, OS X, and Unix. Beyond that, there are
manual installers for any platform that supports ColdFusion or other J2EE servers.
Learning More
I haven’t discussed all of FusionReactor’s features, which also include request and response
compression, search and replace ￿lters, Flex 3/Flash Remoting/AMF request tracking, a
FusionReactor API for programmatic monitoring and control, the option to log complete details
of all request headers and response content, and still more. There are also more new features in
FusionReactor 3, including:
New graphs under a new Resources toolbar (merging the former CPU and Memory ✴
A powerful new feature on the memory, CPU, and other graphs that uses a slider time ✴
control to focus on certain timespans
The ability to track and delete queued requests ✴
An option to de￿ne multiple users, using di￿erent roles including administrator, manager, ✴
and observer, with decreasing levels of access and control
These are but a few of the new features in FusionReactor 3, which are covered in a What’s New
page (http://www.fusion-reactor.com/fr/whatsnew.cfm) on the FusionReactor website. There are
several more resources on the site about the tool in general:
An overview page: ✴ http://www.fusion-reactor.com/fr/
A new multi-page tour: ✴ http://www.fusion-reactor.com/fr/tour/takeATour.html
A feature focus section: ✴ http://www.fusion-reactor.com/fr/featurefocus/
Twenty reasons to buy: ✴ http://www.fusion-reactor.com/fr/about.cfm
Documentation and support: ✴ http://www.fusion-reactor.com/fr/support.cfm
A FusionReactor mailing list: ✴ http://groups.google.com/group/fusionreactor/
Information on buying/upgrading: ✴ http://www.fusion-reactor.com/fr/buy.cfm
Of course, there’s a free trial, available at http://www.fusion-reactor.com, which runs for ten days.
You can also see it running as a live demo at http://www.fusion-reactor.com/fr/livedemo.cfm. You
may want to review some of the information above while running through the live demo at the
same time.
I’ve used FusionReactor almost exclusively as a ColdFusion server monitor for the past two
years. Besides its many features, there are the great folks behind the company. They’ve been
amazingly receptive to the feedback I’ve shared over the years, and their customer support has
been phenomenal. I do a lot of consulting (as an independent consultant since 2006) and often
use FusionReactor in helping people to resolve ColdFusion problems, so their support has been
a very important factor.
94 Tools The Fusion Authority Quarterly Update
Originally published in Fusion Authority Quarterly Update Vol. II Issue IV

If you’re on ColdFusion 6, 7, or 8, I really recommend FusionReactor highly. I hope this review
has helped motivate you to give it serious consideration as a tool to help protect the health and
vitality of your ColdFusion and other web application servers.
A veteran ColdFusion developer since 1997, Charlie Arehart is a longtime contributor to the
community and a recognized Adobe Community Expert. He’s a certi￿ed Advanced ColdFusion
Developer and Instructor for ColdFusion 4/5/6/7 who served as tech editor of the ColdFusion
Developer’s Journal until 2003. Now an independent contractor living in Alpharetta GA,
Charlie provides high-level troubleshooting/tuning assistance and training/mentoring for
ColdFusion teams (http://carehart.org/consulting). He runs the Online ColdFusion Meetup
(http://coldfusionmeetup.com, an online ColdFusion user group), is a contributor to each of the
three-volume series ColdFusion 8 WACK books by Ben Forta, and is frequently invited to speak at
developer conferences and user groups worldwide.
Moving Forward
Datatype conversion is a good next step. Our examples used simple functionality but don’t
limit yourself to simple .NET assemblies. This is an untapped, albeit new, area of ColdFusion,
so there is room to grow. Functionality like Microsoft O￿ce integration makes this a really
exciting feature in ColdFusion 8. Jump into Microsoft O￿ce, IIS, and/or other .NET assembly
classes. Show us what you can do!
John C. Bland II and Tia D. Bland, wife, are cofounders of Katapult Media, Inc., which focuses
on software and web development using technologies such as ColdFusion, the Flash
Platform, PHP, and the .NET Platform. As the manager of the Arizona Flash Platform User
Group (www.gotoandstop.org), John continues to put back into the community that helped
mold him into the developer he is today. John is also co-author of the Adobe ColdFusion 8
Web Application Construction Kit, Volume 2: Application Development and blogs regularly at

The Fusion Authority Quarterly Update Features 59
Graphic | Web | Photography | Photoshop
Graphic design and print work ￿
Front-end web design ￿
Adobe Community Expert ￿

Adobe Certi￿ed Instructor in 5 Adobe ￿
Classes at ThinqDigital
ColdFusion 8 ￿
Actionscript 3.0 ￿
Captivate ￿
Robohelp, and more... ￿
Li qui d Image Studi o
Web Design, graphic design and photography. Dee Sadler is a trainer through ThinqDigital. She is also the Adobe® User
Group manager for and KCWebCore in Kansas City.
Dee is the Creative Director of Fusion Authority Quarterly Update rEFF!MJRVJEJNBHFTUVEJPDPNr
Freelance design/ Adobe Instructor
< Your Creative Training Partner >
The Fusion Authority Quarterly Update Tools 95
FALL 2006 $19.95
Vol. II Issue IV
Do More
Code Less!
Best Practices
Development Environment
From the Experts