Candid Dreamweaver CS4 beta comments

I had an interesting conversation this morning w/ two friends (Peter and Steve) about the current Dreamweaver CS4 beta.  Summarily:

[08:42am] Peter: dreamweaver beta’s really buggy

[08:43am] steveb: i hate dreamweaver. does CS4 make any better code then the other versions?

[08:43am] Me (summarized):

I don’t let it make code for me

It’s a multi-stage IDE, imo

As a beginner, let it make code (if you don’t know how to do it for yourself)

As you get better, make your own code, but use it’s fantastic link and file management

I think it’s pretty common for people to really dislike DW’s code generation, but that’s probably true of any WYSIWYG editors, if you already know how to make your own (If you don’t know any better, you won’t know enough judge the generated code).  Even if it was just a matter of code styling, you’d probably disagree slightly w/ the way the code was formatted, as it’s likely different from your own.

At any rate, I still find a lot of utility in DW, in it’s site management capabilities and templating.  I’ve been toying around w/ the new one and want to focus on it’s svn integration soon. 😀

Adobe Labs – Adobe CS4 Dreamweaver Beta

Adobe Labs – Adobe Dreamweaver Beta:

The top new features of the next version of Dreamweaver include:

Live View

View your web pages under real-world browser conditions with the new Live View in Dreamweaver — while still retaining direct access to the code. The new rendering mode, which uses the open source rendering engine WebKit, displays your designs like a standards-based browser.

Download and Discuss

Related Files

Manage the various files that make up the modern web page more efficiently in Dreamweaver. The Related Files feature displays all the documents associated with your current page, whether CSS, JavaScript, PHP, or XML, in a bar along the top of your document.

CSS best practices

The Property inspector’s new CSS tab shows the styles for the current selection as well as all the applicable CSS rules. Hover over any property to view a tool tip with jargon-free English explanations of CSS principles. New CSS rules can be created and applied in the Property inspector panel and stored in the same document or an external style sheet.

Code hinting for Ajax and JavaScript frameworks

Write JavaScript more quickly and accurately with improved support for JavaScript core objects and primitive data types. Work with popular JavaScript frameworks including jQuery, Prototype, and Spry.

Subversion integration

Dreamweaver integrates Subversion software for a more robust check-in/check-out experience with file versioning, rollback, and more. Once you’ve defined Subversion as your version control system, you can update your site to get the latest versions of its pages directly from within Dreamweaver; no third-party utility or command-line interface is required.

Ooooh…. trying it out now.  Subversion integration is a big deal for me.  I’ve been a big fan of TextMate for quite a while now partially because of it’s subversion bundle, but I miss Dreamweaver’s templates and file/link management.  This beta trial could prove interesting.  Luckily for me, work’s provided me w/ access to a copy of CS3, so I’ve received the beta key that lasts more than the 2-day trial period.

Distractions: Unplug to Avoid Online Distractions

Distractions: Unplug to Avoid Online Distractions:

Countless opportunities to waste time online have driven essayist and techie Paul Graham to an extreme solution: to disconnect completely. After trying various methods to reduce procrastination with online distractions, Graham writes:

I now leave Wi-Fi turned off on my main computer except when I need to transfer a file or edit a web page, and I have a separate laptop on the other side of the room that I use to check mail or browse the web. […] My rule is that I can spend as much time online as I want, as long as I do it on that computer. And this turns out to be enough.

When I have to sit on the other side of the room to check email or browse the web, I become much more aware of it. Sufficiently aware, in my case at least, that it’s hard to spend more than about an hour a day online.

Graham says that watching TV is also a distraction, so he just quit that entirely—but that wasn’t possible with the internet, since he has to be on a computer to get work done. Seems like Graham’s solution is extreme, and wouldn’t work for folks who need an internet connection as they work (like myself.) How do you avoid online sinkholes when you’re trying to get things done? Let us know in the comments.

I don’t go as far as to disconnect, but I generally quit all apps that tend to distract me, like email and web browser.  I think mark myself away/do not disturb in all of my communications clients and then use OS X’s “Hide” functionality to further the out-of-sight, out-of-mind illusion.  That works well enough for me, and since I usually need my network connection to do work, going further would be impractical.

Make older add-ons work with Firefox 3.0

Make older add-ons work with Firefox 3.0:

By Neil McAllister

May 20, 2008 (PC World) If you’re like me, you’ve been playing around with the beta releases of Firefox 3.0. The new version of the open-source browser is better-looking, uses less memory, and feels snappier all around. There’s just one problem: Every time a new beta version comes out, some of your extensions and add-ons are bound to stop working. With Firefox 3.0rc1, almost none of them work.

Fortunately, there is a solution that will “fix” all of your extensions at once. But I caution you, it’s not for the weak-hearted. The fix doesn’t take longer than a few seconds, but when it comes to troubleshooting your browser afterward, you’ll be on your own.

I can’t repeat this enough. DO NOT TRY THIS unless you are comfortable editing the advanced preferences of your browser. And don’t do anything until you’ve read through this entire post. Don’t say I didn’t warn you.

In my experience, extensions that worked with Firefox 3.0b5 will generally be stable with 3.0rc1. It is possible, however, that some of them will cause the new version of the browser to crash. It might even crash on start-up — which means, obviously, that you won’t easily be able to undo the fix I’m about to describe.

The key to the fix is to prevent Firefox from checking its version number before it tries to load extensions. To do this, you will need to set a new preference value. Point your browser at the URL “about:config”, then right-click on the preferences list to bring up the contextual menu. You should see an option that says “New.” Select that, and choose “Boolean.” When it asks you for the preference name, type “extensions.checkCompatibility” (without the quotes). You have to enter the name exactly. For the value, choose “false.”


Update: seems it didn’t work for my specific plugins. 🙁

Up or Out: Solving the IT Turnover Crisis – The Daily WTF

This is really, really intense.  Brilliant work done in this article, discussing why companies should embrace a culture that fosters employee turnover.

Up or Out: Solving the IT Turnover Crisis – The Daily WTF:

2008-04-29 by Alex Papadimoulis

If you’ve worked at enough companies in the IT industry, you’ve probably noticed that the most talented software developers tend to not stick around at one place for too long. The least talented folks, on the other hand, entrench themselves deep within the organization, often building beachheads of bad code that no sane developer would dare go near, all the while ensuring their own job security and screwing up just enough times not to get fired.

Earlier this month, Bruce F. Webster aptly named this phenomenon the Dead Sea Effect. Today, I’ll discuss a solution to overcoming it. In short: embrace turnover, encourage separation, and don’t even think about saying “careers, not jobs.” Oh yes, it’s Employment 2.0.

Revisiting the Cravath System

Like many 2.0-isms and “innovative” ways of doing business, the “Up or Out” solution to our personnel crisis is not new. Paul D. Cravath first implemented it at the turn of the century. Not this century, of course, but the last one.

Here’s how the “Cravath System” works. Bring lots of new employees in, team them up with mentors, provide real work to do, and give them a choice: either get lots of great experience and get out, or work hard for a higher-up position. Whenever you hear someone aspire to “make partner”, he’s undoubtedly working at a firm that’s adopted this model.

Since its inception in the early 1900’s, the Cravath System has spread to tens of thousands of different companies in different professions, ranging from accounting to urban planning. Robert T. Swaine, in his 1947 book The Cravath Firm And Its Predecessors, describes the result of its use:

Under the “Cravath system” of taking a substantial number of men annually and keeping a current constantly moving up in the office, and its philosophy of tenure, men are constantly leaving… it is often difficult to keep the best men long enough to determine whether they shall be made partners, for Cravath-trained men are always in demand, usually at premium salaries.

Sound familiar? If we “black box” our current process and the Cravath System, they’re practically the same thing: lots of new hires of varying skill come in, and mostly talented workers come out. Yet, somehow, our box gets mucked up with the “residue”, while theirs stays a well-oiled machine. There’s a good reason for this: instead of fighting to retain top talent, we need to make top talent.

A Reality Check

Let’s not ignore the elephant in the room: employees will quit. No matter what you say, no matter what cushiony benefits you give, no matter how hard you try, they will leave you. It’s just a matter of “when”.

In almost every job I’ve had, giving my two-week notice was like an awkward, uncomfortable break-up. “Really,” I’d say time and time again, “it’s not you, it’s me.” It seemed no one understood that it was “just that time”. Worse still, they’d often decline my offer of thoroughly training a replacement and would sometimes even terminate my employment on the spot. This was truly their loss: when I’d leave, I’d take all intuitional knowledge they paid me to learn on my own, and not distill it for my successor.

The reason that I (and many of you) have had these similar quitting experiences is because many employers – despite having been employees themselves – don’t want to accept the fact that employees quit. Some even desperately try to change the fact. I can’t count the times I’ve heard “we offer careers, not just jobs” and “we’re more like a family than a company.” Interestingly enough, those companies tend to have the most mature dead-sea cycles.

Employees – especially the most talented ones – are not “dating around” and moving from place to place in search of the Perfect Company at which they can grow old and retire at. They’ve already aced the first four rungs of Maslow’s hierarchy and are in search of self-actualization: the instinctual need of humans to make the most of their abilities and to strive to be the best they can.

This point bears repeating. Indefinite retention is impossible; employees always quit. The key part is understanding why, and how to leverage this inevitability towards everyone’s advantage.

Why the Skilled Quit First

Bruce did an excellent job of explaining why the unskilled don’t quit:

They tend to be grateful they have a job and make fewer demands on management; even if they find the workplace unpleasant, they are the least likely to be able to find a job elsewhere. They tend to entrench themselves, becoming maintenance experts on critical systems, assuming responsibilities that no one else wants so that the organization can’t afford to let them go.

The reason that skilled employees quit, however, is a bit more complicated. In virtually every job, there is a peak in the overall value (the ratio of productivity to cost) that an employee brings to his company. I call this the Value Apex.

On the first minute of the first day, an employee’s value is effectively zero. As that employee becomes acquainted with his new environment and begins to apply his skills and past experiences, his value quickly grows. This growth continues exponentially while the employee masters the business domain and shares his ideas with coworkers and management.

 Images 200804 Valueapex-1

However, once an employee shares all of his external knowledge, learns all that there is to know about the business, and applies all of his past experiences, the growth stops. That employee, in that particular job, has become all that he can be. He has reached the value apex.

If that employee continues to work in the same job, his value will start to decline. What was once “fresh new ideas that we can’t implement today” become “the same old boring suggestions that we’re never going to do”. Prior solutions to similar problems are greeted with “yeah, we worked on that project, too” or simply dismissed as “that was five years ago, and we’ve all heard the story.” This leads towards a loss of self actualization which ends up chipping away at motivation.

Skilled developers understand this. Crossing the value apex often triggers an innate “probably time for me to move on” feeling and, after a while, leads towards inevitable resentment and an overall dislike of the job. Nothing – not even a team of on-site masseuses – can assuage this loss.

On the other hand, the unskilled tend to have a slightly different curve: Value Convergence. They eventually settle into a position of mediocrity and stay there indefinitely. The only reason their value does not decrease is because the vast amount of institutional knowledge they hoard and create.

 Images 200804 Valueapex2-1

Shaping the Value Apex

There’s an entire mini-industry out there that helps companies stretch the value apex. Just googling “employee retention” brings back myriad results and ads, ranging from books to seminars to consultants. The value proposition of these various products is simple: spend some money now to retain employees longer, thereby saving more money later in turnover costs.

However, the value apex can only be stretched so far. At some point, the cost of retaining – be it through salary increases, motivational programs, or creating a Neverland with free food, free toys, and exuberant goof-off time – exceeds the cost of turnover. Regardless of how much a company spends on this – too little, too much, or just enough – it does not change the fact that the value apex exists.

After stretching, there’s only two ways to further optimize the value apex: by accelerating the value-growth curve and terminating it as close to the as the apex as possible. Both of these are accomplished through the Cravath System.

A Culture of Quitting

We’ve all experienced how managers and higher-ups dance around the fact that we’ll quit someday. The justification given for why a process should be documented is almost always “because you might be hit by a bus tomorrow” (or the less macabre “win the lottery”). Since neither is within the realm of reasonable probability, this transitional documentation is often half-assed with the understandable “you’ll have more things to worry about if I get hit by a bus” attitude. But imagine if the justification for documentation was different:

I need you to document this process in detail so that any yahoo can understand it a year from now after you’ve left.

I’ve never had a manager or higher-up ever put it that way. In fact, many people feel that’s an even more stolid justification than “hit by a bus”. But it isn’t; it’s just reality. Why not accept it?

Of course, that justification would never even need to be given if a company embraced a culture of quitting. If they were upfront with their employees and said something to the effect of, “we know that you’re not going to retire here; in fact, after two to three years, we know you’ll be ready to move on to a different job. But before that happens, we want to make sure that you feel that you’ve done an excellent job here and are leaving with some solid experience under your belt. Of course, there are a handful of architect and management positions available, but you’ll really need to demonstrate commitment before even being considered for those. Obviously, that path isn’t for everyone.”

Imagine how much different things would be if you were told that on your first day. Just about every task you do would be in consideration of your successor. Not only would you take pride in solving problems – and, of course, getting strong ROR (Return on Resume) for those solutions– but you’d also take pride in knowing that the guy who comes after you will have an easy time picking up your work. Just as your predecessor did for you.

The benefits don’t stop there. A company with a culture of quitting does not have ex-employees; they have alumni. This is far more than a semantic distinction. An alumni relationship is positive; something that people can take pride in; and one that keeps the door open for further opportunities on both ends. Let’s face it; we’re already curious about our former workplaces and try to keep up through former coworkers. It’d be that much easier if the company facilitated this in some manner.

The alumni relationship also helps with the flow of new personnel. While ex-employees are be hesitant to recommend the company they “broke up” with, alumni will champion it to colleagues in need of similar experience. Furthermore, there’s no sense of defeat when an alumni returns – armed with experiences from other organizations – for another tenure.

For consulting companies or services firms, maintaining a solid relationship with alumni is an excellent avenue to find new business. Who better to recommend as a vendor than a company that one had first-hand experience working at?

But perhaps the most important benefit to a culture of quitting is that it effectively flushes out the residue of unskilled employees. When someone hasn’t moved up or out after a few cycles, it becomes painfully evident who the weakest link is. Everyone – even that certain someone – knows that they’ve long outstayed their welcome. If the sheer awkwardness of being “that guy” doesn’t cause him to leave on his own, and he still doesn’t get it after being asked to resign, then certainly no one will miss him when he’s inevitably let go.

Bringing Home Change

Obviously, this article has painted some incredibly broad strokes, the largest being the stark dichotomy between skilled and unskilled developers, and the lack of distinction between organizations. While this doesn’t change the fact that a value apex exists, it does change its shape. Generally speaking:

The higher-up the position, the longer the curve. Changes tend to occur much more slowly at the top. For example, a basic “refactoring” of a department’s teams could take well over a year to implement.

The greater the skill, the shorter the curve. Ambition and skill go hand-in-hand, and ambitious individuals tend to want swift changes, and quickly lose motivation when these don’t happen.

The larger the company, the shorter the curve. Large teams are generally not receptive to ideas from the new guy, leaving a large part of contribution (i.e. past experience) wasted. Furthermore, promotions are often based on tenure, not skill.

The smaller the company, the longer the curve. Smaller companies, on the other hand, are more receptive to change, allowing one to contribute past experiences for a long while.

The less skill-demanding the company, the significantly longer the curve. Not all companies need top talent. For example, the company who needs only maintainers of an ancient COBOL application might be best fit with curves that are closer to the value convergence.

One important point to keep in mind, too, is that skill is not measure of overall worth. At some point in our lives, many of us no longer look towards our career for self actualization. For example, many feel that having a family provides much more self actualization than a career, and choose not to work those sixty hour weeks to meet those tight deadlines. And there’s nothing wrong with that.

That said, we still need to bring these changes to our industry. Obviously, we can’t all implement the Cravath System overnight. For many companies – especially those who really don’t need skilled developers –a full-fledged Cravath system will never be a good fit.

But there is one thing that we all can do. In fact, let’s all do it together, right now, right this moment. Employees, go ahead and say to yourself:

I know that I will quit my job, and there’s nothing wrong with that.

Now it’s your turn, employers/managers:

I know that my employees will quit, and there’s nothing wrong with that.

Once we’ve all accepted this, things will start to work better. Eventually, we’ll join the legal industry, the accounting industry, and so many others, and we too will have our well-oiled machine. But first things first: we need to embrace quitting, not fear it.

Opinion: Leadership lessons from my daughter

Brilliant piece of work, here.

Opinion: Leadership lessons from my daughter:

John Halamka

May 19, 2008 (Computerworld) Being a parent has taught me more about leadership than anything written by Spencer Johnson or Peter Drucker. Here are my top 10 management lessons learned from being the father of 15-year-old Lara:

1. Yelling never has a positive outcome. My daughter remembers the two times I’ve raised my voice, even though they occurred long ago. My outbursts diminished me and had no positive effect on her behavior. In business, if I ever feel that raising my voice will win the battle, my life as a parent tells me that confrontation only makes a situation worse.

2. Formal authority rarely works. I wouldn’t get very far if I told Lara, “Do this because I’m your father.” That wouldn’t get me very far as a CIO, either. Leadership comes from thoughtful discussion that leads to consensus.

3. Give permission to make mistakes. Making mistakes is the way children learn, and it works for our staffs, too. Setting limits and offering staffers the flexibility to excel on their own is far more effective than micromanagement.

4. Communication is key. Teenagers don’t perceive parents as cool, smart or fun to be with. But you still have to keep the lines of communication open. It’s less important to win an argument than it is to ensure you’re still speaking when the discussion is over. The same is true with customers and employees — I’d rather hear bad news and fix the problem than not hear anything at all.

5. Get the basics right. I’ve tried to be a living example that the nice guy can finish first, theft and aggressive behavior are wrong, and kindness and consensus win the day. I believe that such a basic moral framework will lead Lara to make the right choices on tough decisions. In business, setting a tone of ethical, fair and collaborative behavior spreads to staff and customers.

6. You can criticize ideas, but not people. If my daughter makes a decision I do not agree with, we can debate her ideas but not her abilities. The same is true with employees and customers. I treat everyone with respect, even if I do not agree with their ideas.

7. Foster the joy of success rather than the fear of failure. When I took the SATs, I had no real knowledge of their importance. I got a scholarship, not because I was smarter than my peers, but because the fear of failure didn’t hang over the exam. With Lara, we’ve tried to celebrate success. This approach seems much more sustainable than instilling the fear of failure. Organizations that emphasize growth and achievement will perform better than those that manage through intimidation.

8. Delegate responsibility, but emphasize accountability. We let our daughter set her schedule, but when the alarm sounds in the morning, she is accountable for her decision to go to bed late. By not enforcing a bedtime, we have enhanced her decision- making. Similarly, the more responsibility you give your staff, the greater their accountability.

9. Respect innovation. Last year, when we picked a bucket of carrots from our garden, I recommended that we follow the standard practice of using a sieve to wash them. Lara had a different idea: laying them out in the driveway and washing them with a sprayer. Her method was fast, effective and efficient. Even though business as usual has always worked, there may be better ways.

10. Accept independence. If I make decisions for Lara, she’ll be less prepared for life. I give her the best guidance that I can, hope that she develops a strong internal compass, and then let her change as she experiences the world. Developing the next generation of leaders requires the same approach.

Parenting can be more valuable than an MBA. It teaches humility, selflessness and self-control. And no matter what I do in IT, my daughter will be my greatest legacy.

John D. Halamka is CIO at CareGroup Healthcare System, CIO and associate dean for educational technology at Harvard Medical School, chairman of the New England Health Electronic Data Interchange Network, chair of the national Healthcare Information Technology Standards Panel and a practicing emergency physician. You can contact him at

13 free CMS options for Web Design Professionals Reviewed

13 free CMS options for Web Design Professionals Reviewed:

May 17th 2008

At the center of most (if not all) web development projects is the old chestnut we call content management systems. Choosing a CMS for your website, or indeed for your enterprise is no easy task – in Europe alone, you have around 500 systems to choose from. Whether that system is something complex or something simple (i.e. hand editing), it is an essential part of a successful site. Enabling content editors to perform website updates (however inexperienced) with the web has always been something of a challenge for developers, thankfully there are a number of platforms and open source projects out there which take the hassle out of developing your own system, and can put you in the running for projects normally outside of your scope. The following hopefully provides a comprehensive overview of some of the best out there, and we’ve tried to be as comprehensive in our review of each.

There’s about a decent paragraph or two about each one — great summary data and an easy read (this site runs on Drupal).

Forced Font Management

#! /bin/sh
# Thom Rosario                                                      #
# 4.29.2008                                                         #
#                                                     #
#                                                                   #
# This script manages fonts and font cache files for the user at    #
# 3am.  The name of the script reflects the intent to use this      #
# script for more generalized tasks in the future.                  #

#============ Variables ============
case "$osxVersion" in
csInDesignFonts='/Applications/Adobe\ InDesign\ CS/Fonts'
cs2InDesignFonts='/Applications/Adobe\ InDesign\ CS2/Fonts'
cs3InDesignFonts='/Applications/Adobe\ InDesign\ CS3/Fonts'
csIllustratorFonts='/Applications/Adobe\ Illustrator\ CS/Fonts'
cs2IllustratorFonts='/Applications/Adobe\ Illustrator\ CS2/Fonts'
cs3IllustratorFonts='/Applications/Adobe\ Illustrator\ CS3/Fonts'
appSup='/Library/Application\ Support'

#============ Create necessary directories ============
if test -e $acmeDir
   then echo "Acme directory already exists."
   /bin/mkdir $acmeDir
   /bin/chmod 777 $acmeDir
if test -e $extraFontDir
      then echo "Acme font directory already exists."
   /bin/mkdir $extraFontDir
   /bin/chmod 777 $extraFontDir
/bin/echo "Done creating directories."

#============ System Font Cache ============
# Clean the system font caches:  requires reboot
/bin/rm /System$cach/
/bin/rm /System$cach/fcache
/bin/rm /System$cach/
/bin/rm /System$cach/fontTablesAnnex
/bin/rm -dr $cach/
/bin/rm /var/tmp/ATSServer_*
/bin/rm -dr $cach/
/bin/echo "Done deleting system font caches."

#============ Remove Adobe Fonts ============
# Quit all open Adobe apps before starting
/usr/bin/killall "InDesign CS"
/usr/bin/killall "Illustrator CS"
/usr/bin/killall "Photoshop CS"
/usr/bin/killall "Adobe InDesign CS2"
/usr/bin/killall "Adobe Illustrator CS2"
/usr/bin/killall "Adobe Photoshop CS2"
/usr/bin/killall "Adobe InDesign CS3"
/usr/bin/killall "Adobe Illustrator CS3"
/usr/bin/killall "Adobe Photoshop CS3"

# Remove system level Adobe font caches and move fonts
if test -e "$csInDesignFonts":
      /bin/rm "$csinDesignFonts"/AdobeFnt*.lst
      /bin/mv -f "$csInDesignFonts"/*  $extraFontDir/
      /bin/rm "$appSup"/Adobe/PDFL/6.0/Fonts/AdobeFnt*.lst
      /bin/rm "$appSup"/Adobe/PDFL/6.0/CMaps/AdobeFnt*.lst
      /bin/rm /Applications/"Adobe InDesign CS"/"Adobe InDesign"/$appCach
   echo "Skippping InDesign CS folder."
if test -e "$cs2InDesignFonts"
      /bin/rm "$cs2inDesignFonts"/AdobeFnt*.lst
      /bin/mv -f "$cs2InDesignFonts"/*  $extraFontDir/
      /bin/rm "$appSup"/Adobe/PDFL/7.0/Fonts/AdobeFnt*.lst
      /bin/rm "$appSup"/Adobe/PDFL/7.0/CMaps/AdobeFnt*.lst
      /bin/rm /Applications/"Adobe InDesign CS2"/"Adobe InDesign"/$appCach
   echo "Skippping InDesign CS2 folder."
if test -e "$cs3InDesignFonts"
      /bin/rm "$cs3inDesignFonts"/AdobeFnt*.lst
      /bin/mv -f "$cs3InDesignFonts"/*  $extraFontDir/
      /bin/rm "$appSup"/Adobe/PDFL/8.0/Fonts/AdobeFnt*.lst
      /bin/rm "$appSup"/Adobe/PDFL/8.0/CMaps/AdobeFnt*.lst
      /bin/rm /Applications/"Adobe InDesign CS3"/"Adobe InDesign"/$appCach
   echo "Skippping InDesign CS3 folder."
if test -e "$csIllustratorFonts"
      /bin/rm "$csIllustratorFonts"/AdobeFnt*.lst
      /bin/mv -f "$csIllustratorFonts"/*  $extraFontDir/
   echo "Skippping Illustrator CS folder."
if test -e "$cs2IllustratorFonts"
      /bin/rm "$cs2IllustratorFonts"/AdobeFnt*.lst
      /bin/mv -f "$cs2IllustratorFonts"/*  $extraFontDir/
   echo "Skippping Illustrator CS2 folder."
if test -e "$cs3IllustratorFonts"
      /bin/rm "$cs3IllustratorFonts"/AdobeFnt*.lst
      /bin/mv -f "$cs3IllustratorFonts"/*  $extraFontDir/
   echo "Skippping Illustrator CS3 folder."

/bin/rm "$appSup"/Adobe/Fonts/Reqrd/CMaps/AdobeFnt*.lst


#============ Manage User Fonts ============

#== Create a file listing all of the system's users ==
if test -e $userFile
      /bin/rm $userFile
   echo "No pre-existing userfile -- creating it now."
/bin/ls -l /Users/ | /usr/bin/awk '/d/ {print $9}' >> $userFile

cat $userFile | while read uName; do

   #== Change Permissions ==
   /bin/chmod 757 /Users/$uName
   /bin/chmod 707 /Users/$uName/Library
   /bin/chmod 707 /Users/$uName$prefs
   /bin/chmod 707 /Users/$uName$cach
   /bin/chmod 707 /Users/$uName$cach/Adobe
   /bin/chmod 707 /Users/$uName$cach/Adobe/Fonts
   /bin/chmod 757 /Users/$uName$cach/Adobe/TypeSpt
   /bin/chmod 757 /Users/$uName"$appSup"
   /bin/chmod 757 /Users/$uName"$appSup"/Adobe
   /bin/chmod 757 /Users/$uName"$appSup"/Adobe/Fonts
   /bin/chmod 757 /Users/$uName"$appSup"/Adobe/TypeSpt

   #== Remove problematic user font caches ==
   /bin/rm /Users/$uName$prefs/
   /bin/rm /Users/$uName"$appSup"/Adobe/Fonts/AdobeFnt*.lst
   /bin/rm /Users/$uName"$appSup"/Adobe/TypeSpt/AdobeFnt*.lst
   /bin/rm /Users/$uName$cach/Adobe/Fonts/AdobeFnt*.lst
   /bin/rm /Users/$uName$cach/Adobe/TypeSpt/AdobeFnt*.lst

   #== Restore original permissions ==
   /bin/chmod 755 /Users/$uName"$appSup"/Adobe/TypeSpt
   /bin/chmod 755 /Users/$uName"$appSup"/Adobe/Fonts
   /bin/chmod 755 /Users/$uName"$appSup"/Adobe
   /bin/chmod 755 /Users/$uName"$appSup"
   /bin/chmod 755 /Users/$uName$cach/Adobe/TypeSpt
   /bin/chmod 700 /Users/$uName$cach/Adobe/Fonts
   /bin/chmod 700 /Users/$uName$cach/Adobe
   /bin/chmod 700 /Users/$uName$cach
   /bin/chmod 700 /Users/$uName$prefs
   /bin/chmod 700 /Users/$uName/Library
   /bin/chmod 755 /Users/$uName

#============ Remove Unnecessary System Fonts ============
/bin/rm -dr /System$fonts/*.*
/bin/cp $stockFonts/* /System$fonts/
/bin/rm $fonts/*
/bin/rm -dr "$appSup"/Adobe/Reqrd/Base