Thursday, 31 August, 2006

Lack of Leadership Kills Project

Serendipity is an odd thing, isn't it?  Monday I wrote a little rant about how a project needs a strong leader in order to be successful.  I've received some negative feedback on that assertion, but nobody yet has shown me a successful project that doesn't have a strong leader.

Back to the serendipity.  Today I ran across Charles Hannum's letter, The future of NetBSD.  Charles is a founder of the NetBSD project, and has been with the project throughout its life.  He was a pioneer in the development of collaborative--what later became known as "open source"--projects.  He has a lot of things to say about the NetBSD project, most of it not very flattering.  In fact, the first sentence tells you it's not going to be pretty:  "The NetBSD Project has stagnated to the point of irrelevance."

After explaining how the project was structured and how that evolved into a very common structure for open source projects, he says:

Unfortunately, we made some mistakes here.  As we've seen over the years, one of the great successes of Linux was that it had a strong leader, who set goals and directions, and was able to get people to do what he wanted -- or find someone else to do it.  This latter part is also a key element; there was no sense that anyone else "owned" a piece of Linux (although de facto "ownership" has happened in some parts); if you didn't produce, Linus would use someone else's code.  If you wanted people to use your stuff, you had to keep moving.

NetBSD did not have this.  Partly due to lack of people, and partly due to a more corporate mentality, projects were often "locked".  One person would say they were working on a project, and everyone else would be told to refer to them.  Often these projects stagnated, or never progressed at all.  If they did, the motivators were often very slow. As a result, many important projects have moved at a glacial pace, or never materialized at all.

He mentions other problems, but they're all due to lack of leadership.  And his outline for moving the project foreward (a nice idea, in my opinion, but not likely to succeed) involves replacing the current "leadership" of the project with people who are commited to turning it around and making it work.

The letter serves as a good warning to those who would try to start a project in the absence of strong leadership, or decide at some time that the project is stable enough that the strong leader can be dispensed with.  That's almost always a bad idea.

Monday, 28 August, 2006

You gotta have a Daddy

Did you ever wonder why some seemingly simple projects fail and others--often much more complicated--succeed?  It doesn't matter whether it's open source or traditional development, or if the development team is filled with highly experienced programmers or primarily with beginners.  I've seen big projects completed on time and under budget, and small projects drag on indefinitely.  What's the difference?  Adult supervision.

Seriously, programmers in general are terrible at time management.  We like to work on cool stuff.  Without somebody pushing us, we tend to work on a problem until we've figured it out and then move on to the next interesting problem.  That's fun!  Turning something we've figured out into a finished, debugged, tested, and documented unit is hard work and not terribly exciting.  Sure, we like to ship stuff but, like most people, we don't want to do the not-fun stuff.

The "cool stuff" disease also causes programmers to add frivolous features like skins to programs before adding the real functionality that makes the program useful and attracts customers.  I can't count the number of applications that have really cool UI features with customizable everything, but don't do the basic job they're designed for.  Again, the programmers worked on what they wanted to work on rather than concentrating on and completing the important parts of the project.

The job of the project manager is to keep the programmers focused on the final goal--shipping a complete, functional application on time and within budget.  Somebody has to be the Daddy.

The uninformed theory of open source software is that the development teams are this loosely-organized group of individuals who magically work together and do everything by consensus.  That's far from the truth.  I've notedbefore that almost all successful open source projects are controlled by a small group of "core" developers--often just one person--who reviews all issues and issues an edict if the group can't reach a decision.  This is often referred to as the Benevolent Dictator model.

Software development projects aren't the only places where you need a Daddy.  Wikipedia works because there is a social infrastructure that places a trusted person in charge of each topic.  That person doesn't have to rule with a heavy hand, but he does need to make decisions about the content and style of an entry.  Can you imagine the chaos if just anybody was allowed to make changes to a topic with impunity?

Any collaborative effort requires a Daddy.  Somebody has to be in charge.  Without a leader, the effort will fizzle and die, or explode spectacularly into flame wars and hard feelings.  Sure, some people won't like the tight control, but that's okay.  Nobody's irreplacable, and those who can't work under the rules of the game aren't worth trying to bend the rules for.

Thursday, 24 August, 2006

Odds and Ends

  • I hate waiting in line for things.  Last weekend while Debra and I were waiting for the doors to open for the home show at the convention center, I thought I'd get a little exercise.  (It's a 4-megabyte QuickTime video so it might take some time to download.  No sound.)
  • I bought a unicycle on Saturday and am learning to ride it.  I've managed not to hurt myself yet.  I can get about four pedal strokes (approximately 10 feet) before I lose my balance.  Pictures as soon as I get the knack of it.
  • Bananagrams will deliver a singing telegram by somebody wearing a banana suit.  Hey, at least it seems to be a going concern.
  •, featuring BanaBot, was going to find the cheapest prices on common grocery items so you could save money by visiting six different stores.  This is funny not for the questionable premise, but for the "news" on the site.  November 2004: launched with high hopes.  December 2004: hire fly-by-night Russian developers to create the site.  June 2005: with a pretty .JPG mock-up and no more money, the failed project is abandoned and left as a warning to everybody else.  Investment opportunities still exist.  Act now!

Okay, so I haven't had a lot of time recently for writing blog entries.

Saturday, 19 August, 2006

Extending the .NET Console Interface

Although graphical user interfaces are all the rage these days (and rightly so!), there's still some call for character-mode (console) applications.  In .NET versions 1.0 and 1.1, support for console applications was limited:  sequential access to the standard I/O streams.  .NET 2.0 introduced a much more complete console interface that allows cursor positioning, setting text attributes, and a few other low-level console tricks, but it doesn't even come close to supporting the full power of the Windows Console API.

My article, Extending the .NET Console Interface, is the first of three planned articles that explore the Windows Console interface and present a .NET class that exposes the entire API to .NET programs.  This first article covers creating and attaching to consoles, responding to console control events, and using console aliases.  The second article will discuss the console screen buffer in detail, and the third will be all about using the console input buffer.  Full source code for the article is available for download here.

Friday, 18 August, 2006

Jupiter's Travels

In 1973, Ted Simon embarked on a four-year, around-the-world journey via motorcycle.  His book Jupiter's Travels describes the journey and many of the things he saw.  As with any good travelogue, the book also gives us some insight into the author's thoughts and how the journey changed his outlook on things.

I've heard it said before that the open minded traveler will learn much more about himself than he will about the people or places that he visits.  In my few experiences traveling outside my comfort zone, I've found that to be true.  It's certainly true for Ted Simon, and that turns out to have rather mixed results for the reader.

As a journalist, Simon kept copious notes during the journey and periodically sent dispatches back for publication by his employer, The Times of London.  The book is obviously a collection of his notes, edited to provide some kind of story.  Essentially, it's a collection of journal entries written over a four year period and then edited for inclusion in a book.  Unfortunately, the editing didn't include trying to maintain a constant "voice."  In particular, I found it somewhat confusing to read one passage written in the past tense ("I was following the coast road...") and the next passage written in present tense ("I am following the coast road again today...").

Simon's description of his route through Africa (after riding through Europe and catching a ferry across the Mediterranean Sea) clearly shows his mental journey from being cautious and somewhat frightened about unusual or unexpected situations to becoming comfortable with and even looking forward to the unexpected.  Lots of things go wrong early in his journey down the east coast of Africa, causing him great agitation.  As the trip progresses you can see him take things in stride and at one point he writes that the journey wouldn't be interesting at all if everyting went exactly as planned.  How much can you learn about yourself when you don't have to face the unexpected?

He shares another key insight when describing his conversation with a gas station attendant in Cape Town, South Africa.  The attendant asks where Simon is from, and when he finally explains that he rode the motorcycle all the way from London, the attendant is incredulous--frightened, even, to think of making such a journey.  Simon writes, "I am learning, as I make my way through my first continent, that it is remarkably easy to do things, and much more frightening to contemplate them."

From Africa, he took a ship to South America, riding south on the east coast and then north to Central America, through Mexico, and to Los Angeles.  There are fewer insights as the journey progresses, as he begins to take everything in stride.  It's as if he can no longer be shocked or surprised by the way people live, the things they eat, or by the many wondrous sights that he sees.  It is interesting, however, to read his reactions to life in the Los Angeles area after two years in less developed regions of the world.

It's possible that the book changed me--that reading of his first two years' adventures, I was no longer able to be astonished by the things he described.  But it seemed to me that he lost something after leaving the U.S.  His descriptions of Australia were mostly flat, and the trip through India and southeast Asia very disconnected and not terribly interesting.  By that time he'd been on the road for more than three years and I think he was getting tired.  Either that or he'd exhausted the page budget for the book, because he includes almost nothing of the trip from India back home.  Almost 8,000 miles through Pakistan, Afghanistan, Iran, Turkey, Yugoslavia, and other countries is covered in fewer than 10 pages.

I really liked the first three-quarters of the book--up to his landing in Australia.  After that, reading became something of a chore.  Still, those first 350 pages are worth reading and all in all I'd give the book a mild recommendation.

Wednesday, 16 August, 2006

Commuting on a bike

Since July 5, I've ridden my bike to work on all but three work days, and two of those days I drove the truck to the transmission shop and rode the bike back to the office.  I'm fortunate to be only seven miles from the office (at most a 30 minute ride), to have a private shower, and to set my own hours.  I have the ideal situation for bicycle commuting.  It's surprising to me how even that short ride can clear my head in the morning and in the evening can take my mind off of whatever I was working on.

I get a little perverse enjoyment in the mornings when I turn on to Parmer Lane (about 4.5 miles from the house) and see a two-mile-long line of cars (see above) backed up behind the traffic lights while I'm zipping along on the shoulder.  Traffic has been especially dense since school started on Monday.  So dense, in fact, that if somebody left the house in a car at the same time I leave on the bicycle, I'd get to the office first.  I sat in that line of traffic almost every work day for several years.  I much prefer riding the bike.

Between the wind (prevailing winds here during the summer are usually from the south or southeast) and not being warmed up in the mornings, the fastest I've been able to make the ride to the office is about 18 MPH.  I simply can't get my myself to push very hard so soon after getting out of bed.  Besides, I don't want to be totally wasted when I get to the office.

The way home, however, is a different story.  My initial goal was to break 20 MPH for the ride home.  I managed 19.4 MPH during the first week, although my average heart rate was way too high.  With a good strong tailwind a few weeks later, I managed 19.9 MPH, and the next day I shattered that with a 20.8 MPH average over the 6.8 miles.  Today I set my new personal record--21.4 MPH, or about nineteen and a half minutes' commuting time.

Reviewing my modest performance improvement (a little under 10%) over the last month and a half, I got to thinking about diminishing returns.  If I take 30 minutes to make the ride, my average heart rate will be 55% of maximum--too slow to even count as aerobic activity.  I can easily shave 20% off that time and only increase my heart rate to about 70% of maximum, which counts as an easy aerobic workout.  But to make it in 20 minutes I have to push myself into anaerobic territory to 90% of my maximum heart rate.  I'm beat when I get home and my legs are sore the next day.  I'm now at the point where any small gain in average speed will come at a huge cost.  I'm going to shoot for 22 MPH, but I know it's going to be difficult.

That said, I'm very much enjoying the freedom to commute to work via bicycle, and will be disappointed if my situation changes and forces me back into the car.

Tuesday, 15 August, 2006

Odd lots

Sometimes I just don't know where the time goes.  Between working with Flash, trying to decipher the infuriatingly obtuse Windows Console API documentation, and shuttling my truck to the transmission shop and back, I let a whole week get away from me and didn't even notice it fly by.

  • If you have a Dell laptop or notebook computer that you bought in the last two years or so, listen up.  Dell has identified a potential issue with some laptop and notebook batteries which could result in the batteries short-circuiting and smoking or causing a fire.  They've issued a recall on many, many Sony batteries.  Of the three batteries here (the two standard batteries in mine and Debra's laptops, and the one larger auxiliary battery), one is affected by the recall.  Visit Dell's Battery Recall site for the full scoop.
  • I'll bet anybody reading this has been annoyed a time or three by automated telephone response systems that put you in an infinite loop of pressing buttons and trying to make the speech recognition system understand you.  Sometimes it's impossible to get any useful information from those crazy menus, and many of them don't have a "please let me talk to a real person" option.  If you really want to talk to a person, you might try visiting the gethuman database.  There you'll find phone numbers and magic keypad codes that just might bypass the idiotic automated response system so that you can find a flesh and blood human to scream at.  I haven't tried it, but you can bet that I will the next time.
  • If you're looking for batteries, you probably can't find better prices than what you'll get at  I'll warn you up front that it's one of the ugliest Web sites around--looking like something out of the early '90s.  They also could use a decent shopping cart.  But, boy do they have batteries.  All I needed was three or four CR2032 cells (the quarter-sized disc batteries), but the minimum order is $15.00.  I bought 10 of the CR2032s for 50 cents each (you can get them for as little as 15 cents each if you buy 1,000) and to make up the difference decided to try their 2700 milliamp hour AA NiMH rechargeables.  They're kind of pricey at $3.00 each, but they're amazing.  Two of them kept my GPS running for more than 24 hours.

One of the reasons I don't visit slashdot as often as I probably should is that I tend to get sidetracked reading the mostly irrelevant and uninformed comments that are posted by other users.  If I just read the headlines and viewed the few articles that were interesting to me, it'd be 15 minutes--tops--every day.  But flame wars are like train wrecks:  you know you shouldn't look, but you just can't take your eyes away.

Today, the posting PR Firm Behind Al Gore YouTube Spoof? spawned a huge political debate.  One poster, commenting on negative campaigning, said:

There is opportunity here to inform the cow-like public that they are being manipulated by assholes.

(The italics are his)

To which somebody responded:

If you're living in a "democracy" that has a "cow-like public", it's not the "assholes" that are the problem.

Amen, brother!  At some point the "cow-like public" has to figure out that they're not going to get decent candidates unless they demand it.  I suspect, though, that we'll skip that after our descent into even more corrupt and incompetent government, people will become so upset that they'll skip the civilized step of voting the bums out and move right into anarchy.  Hopefully that'll happen after I'm gone...

Last year I mentioned anonymous proxies as a possible means of surfing the Web anonymously.  I also pointed out some of the possible dangers of using a proxy that you don't fully trust.  Today I ran across an interesting article in which the author relates a story about an employee being fired for using Anonymizer at work.  How did he get caught?  Analysis of network log files showed that he had no activity.  The IT department went looking to see what was wrong with his machine.  Moral of the story:  if you're doing something dirty, don't be so clean that you attract attention.

Saturday, 05 August, 2006

Deer nerd

I've mentioned a time or two before that we have many deer in the neighborhood.  They were cute the first year until they ate Debra's roses (and everything else pretty) in the spring.  Then they became big bony rats as far as we were concerned.  The deer are still the source of some amusement, especially when Charlie chases them, and of course we still enjoy fresh venison when one of our friends comes hunting.  All things considered, though, I'll be happy when we get the fence up and they don't come visiting anymore.

The other day I was pedaling down the street on my way home and I saw this buck with something odd hanging on his antlers.  I stopped and shot a few pictures, but they weren't very good.  In particular I couldn't make out what was on his antlers.  Friday evening I got another chance.

This still isn't a great picture, but it's the best I could do under the conditions and with my cheap little digital camera.  He was pretty skittish and there was a doe between us (off to the right and not visible in this shot) protecting her fawn.  She was not going to let me get close.  In any case, it's pretty clear that the buck has a branch--probably covered with ball moss--stuck in his antlers.  He's also missing about 1/4 of his right rear leg.  He hobbles when he walks.

I wonder if having something stuck in your antlers is the deer equivalent to nerdy stereotype highwater pants, a "kick me" sign pasted on your back, or a piece of toilet paper stuck to the heel of your shoe.  Lucky for the deer, he'll lose his nerdiness when the antlers fall off.

Friday, 04 August, 2006

Odd Notepad Bug

Notepad--the text editor that ships with Windows--is an incredibly useful program.  Sure, many users never see it, but I'm continually editing or viewing text files, batch scripts, .ini files (yes, there still are a few of those around), miscellaneous configuration files, log files, and all manner of program output that I direct to files.

Users, especially programmers, look upon Notepad with scorn, and for good reason.  It's been around for years (at least since Windows 3.1), and it's just a basic text editor:  nothing fancy and no advanced features.  As a programmer's text editor it leaves a lot to be desired compared to modern tools, but it's as good as WordStar's non-document mode that I used before I got Turbo Pascal.

In any case, today I was editing a file with word wrap turned on.  I saved the file and continued typing without really looking at the screen.  When I looked up, the stuff that I'd typed ended up in the middle of a line somewhere, several lines above where I thought the cursor was when I pressed Ctrl+S to save.  I'd run into this a few times previously but always assumed that I'd moved the cursor inadvertently.  Today I thought I'd investigate.

I opened a new document in Notepad and resized the window.  Then I typed the text you see here:

The blue mark is under the cursor--right at the end of the line.

Then I pressed Ctrl+S to save the file.  The effect is the same if you select Save from the file menu.  I named the file "xxx.txt".  For reasons unknown, Notepad moved the cursor three spaces back, as you can see here:

I know, a lot of you are wondering why I use Notepad at all when I have so many other editors to pick from.  As I've said before, I do have TextPad installed and I use it for most serious editing.  But Notepad is very useful for two primary reasons:  it's small and loads very quickly; and it's installed on every Windows system.  I don't have TextPad on my lab machines or on the build machine--it's Notepad all the way.  Same for other machines (like Debra's or friends') that I'm asked to look at from time to time.

This is not, by any stretch of the imagination, the only bug to be found in Notepad.  There are many bugs that involve word wrap (the bug I illustrated above only happens when word wrap is turned on), including the interesting limitation that you can't display the status bar if word wrap is enabled.  Take a look at Craig Andera's "Interesting" Notepad Bug entry and associated comments for more information.  Or just search Google for "notepad word wrap bug".

It's really too bad that Microsoft won't address these bugs.  Notepad is incredibly useful, but the existence of these defects forces me to be extra careful when I'm editing a file.  As it stands, Notepad almost doesn't suck.  It wouldn't take but a week, tops, for a marginally competent programmer to fix those problems.  I realize that there is no direct economic payoff, but it would be a huge public relations win at very little cost.

Thursday, 03 August, 2006

Who's the master?

Today I was reading a technical paper online when Firefox popped up a message box informing me that it had downloaded and installed a new update, and that I needed to restart the browser for the change to take effect.  Mind you, I hadn't specifically asked for the update, nor had I changed any of Firefox's default options.

Last week I installed some updates from Windows Update while I was doing some other things.  When it was done it popped up a message box informing me that I needed to reboot in order for the changes to take effect.  I selected the "restart later" option and went back to what I was doing.  Five minutes or so later, Windows informed me that I needed to reboot for the changes to take effect.  Again, I canceled the message box.  The next time I just left the silly message on the screen and went back to work.  At least Firefox let me cancel the message and stopped nattering at me.

Whenever CityDesk finishes publishing my Web site (an operation that takes several minutes that I usually use to check email or catch up on my reading) it brings the publish dialog box to the front--right over the top of what I'm working on.

When minimized and playing songs from a play list, Windows Media Player briefly displays a message whenever it starts a new song.  It also has the annoying "feature" of displaying that message if I roll the mouse over the minimized player.  This is especially annoying because the minimized player is positioned right next to the Properties pane when I'm working in Visual Studio .NET.

Thunderbird displays a message in the bottom right-hand corner of my screen whenever it gets new mail.  Instant messenger programs do the same whenever a contact logs in or logs out.  Norton AntiVirus displays a message whenever it downloads new updates.  In fact, it happened while I was writing this entry.  The default settings for Outlook Express (which I don't use any more) play a sound whenever new mail is received.

All too many Web sites have pop ups or pop unders that appear automatically when I visit them.  Some sites (my .NET Reference Guide being one, unfortunately) have those highly annoying expanding ads that cover the page when you roll over them.  Other sites decide that your browsing experience wouldn't be complete without the theme music.

Today, David showed me how his installation of McAfee's anti virus (or whatever it's called) keeps telling him that his system isn't totally secure because he turned off the outgoing firewall.  If he cancels the message box it just pops up again a few minutes later.

All day long my computer pops up messages, plays sounds, and generally makes my life miserable by interrupting me while I work.  Displaying a brief message or making a sound is bad enough because it's a distraction.  Popping up a message box that I have to dismiss is totally unacceptable.  It's as if the software designers decided that whatever their silly little program has to say is much more important than what I'm working on at the moment.  I've begun to wonder who's the master.  Have we come to the point where we serve the computer?

I have little patience for software that interrupts me.  Most of the time I don't give a rip about the notification anyway, and popping a message box on top of the window I'm currently viewing is enough to make me start looking for an alternative piece of software that knows its place.  When I'm working I don't want to be bothered by anything unless it's a dire emergency.  Silly notifications that mostly amount to, "Hey!  Look at me!" do not meet the "dire emergency" criteria.  If it's not an immediate security threat or possibility of losing data then, damn it, put it in the queue and I'll address it when I'm ready.

Yes, I realize that I could probably turn most of those notifications off.  The point is that I shouldn't have to!  Software should be configured by default to be as unobtrusive as possible.  If users want constant interruption, they should have to ask for it.  My computer, the operating system, and all of the applications that I have installed are tools.  They exist so that I can get my work done.  Somewhere along the line we allowed application developers to forget that basic fact.

Wednesday, 02 August, 2006

Turbo Pascal

Yesterday's entry got me thinking about integrated development environments (IDEs), and inevitably led me to remembering my first experience with Turbo Pascal in 1983.  Like every other Pascal programmer at that time, I had spent my $29.95 on JRT Pascal only to find that it was slow, buggy, and not worth the diskette it came on.  A friend and I even split the cost (several hundred dollars, as I recall) of Pascal MT+ with the Speed Programming Package. (You can download Pascal MT+ and many other Digital Research products from

MT+ worked, but compilation was painfully slow.  On my Osborne I computer with 64 kilobytes of memory and two 90-kilobyte drives, it went something like this:

  1. Place the disk containing the source code in drive B.
  2. Place the editor disk in drive A.
  3. Edit the program.
  4. Remove the editor disk from drive A and insert the compiler disk.
  5. Run the compiler.
  6. Repeat steps 2 through 5 until you get a clean compile.
  7. Remove the compiler disk from drive A and insert the linker disk.
  8. Run the linker.
  9. Repeat steps 2 through 8 until you get a clean link.
  10. Run the resulting program from drive B.

As painful as it was, I was delighted to have a working Pascal compiler, and had great fun building programs.

Some time in 1983 I saw the advertisement for Turbo Pascal 1.0, promising blazing fast compile speeds and a compiler that was integrated with the editor.  Best of all, the ad implied that I could edit, compile, and test my programs without having to change diskettes.  It sounded too good to be true, but I sent off my order for the not-yet-release product along with my check for $50 plus shipping.  After the JRT experience I was pretty sure that I'd get ripped off, but I just had to try it.

The product came sometime in late November or early December and I wasted no time starting the new IDE.  I loaded one of my programs into the editor and then pressed the "compile" key.  It compiled almost instantly and I was sure that it didn't work.  Nothing could compile that fast.  On a lark I pressed the "run" key and my program started running!  I was dumbfounded.  And then I figured it out:  nothing had actually happened, I thought.  I guessed that it had just run the old copy of the .COM file that was left from the last MT+ compile.

I actually exited the IDE, deleted the executable files from my data disk, rebooted the computer, restarted the IDE and went through the whole exercise again.  Compile.  Yep, I got screwed.  I just knew it.  There's no way the program could compile that fast.  But then it ran.  Just to make sure that the IDE wasn't being clever and un-erasing the .COM file, I made a few changes to the source code and went through the whole compile/run cycle again.  I simply couldn't believe that a $50 compiler/editor package could work so well.  I spent the next week showing all my friends this amazing new program that put my old 4 MHz computer into warp speed.

At that same time I was writing COBOL for a mainframe system, using a line editor and a compiler that took 10 or 15 minutes to build a 2,000 line program.  Turbo Pascal could compile an equivalent program on my little Osborne I in under a minute.

With Turbo Pascal 1.0, Borland International revolutionized the whole idea of what a programming environment should be, and it wasn't long before we had fully integrated development environments complete with better editors and source-level debuggers.  10 years later Microsoft was building Visual Basic 1.0, which popularized the whole visual programming model that served as the model for Delphi, Visual Studio, Microsoft .NET, and even the Eclipse project that I mentioned yesterday.

I just realized that the environment I'm currently using for Flash development is more primitive than that first version of Turbo Pascal.  I feel like I've stepped back in time 25 years, but I'm having a heck of a good time with it.

Tuesday, 01 August, 2006

More on ActionScript

I've been working with ActionScript almost every day for a month now, and have grown to like it a lot.  It was touch and go there for a while for several reasons.

First, the development environment is primitive by today's standards.  My development environment consists of TextPad and the command-line Flash compiler.  I set up a TextPad macro to invoke the Flash compiler and--this was a big surprise--the output is displayed in an editor window.  I can click on an error message to be taken to the offending line of code.  But that's about as "integrated" as the development environment gets.  Testing is done in a browser window and debug output is sent to a log file.  I almost have real-time debug output in that TextPad will prompt me to reload the log file when it changes.

All the niceties of Delphi and Visual Studio are missing, though.  I don't have a visual control editor or source-level debugger, and the Flash compiler is slow.  Glacial, even, compared with any other compiler I've used in the past 15 years or so.  Documentation consists of an HTML Language Reference and a bunch of disconnected PDF files.

With all that you'd think that I'd hate working with Flash, but I don't.  I'm finding that I don't really need--or in many cases even want--all that stuff.  I'm finding that I use fancy development tools as a crutch and I often let the compiler do my thinking for me.  Not so with the ActionScript apps I'm writing.

I know that there's Flex Builder--the Eclipse-based IDE that I can download from Adobe's Web site.  I played with it briefly but didn't like it.  As with any IDE these days, you have to marry the darn thing in order to be productive, and I'm not entirely certain that marrying Eclipse would make me any more productive than I am already.  Besides, Eclipse is a reasonably good generic IDE, but not terribly good as an IDE for any specific product.

The other thing that almost turned me off of ActionScript is that it's a scripting language that's masquerading as a programming language.  Yes, I know that sounds kind of snobbish.  In my years of programming I've found that scripting languages are fun to play with for a while, but after the initial excitement wears off the little annoyances and odd language warts turn in to major headaches.  And ActionScript is a scripting language--it's based on JavaScript.   Sure, it's compiled into intermediate code and (I think) JIT compiled at run time, but there's still the ability to have untyped variables and do type resolution at run time.  Those things are nice when used intelligently, but they also can result in very difficult bugs.

I'm finding that in most cases the language is strongly-typed, but the ability to get around that is very useful when writing real programs.  Used correctly, what I have is the best of both worlds:  a language that catches most of my stupid blunders at compile time, but allows me to shake off the straightjacket when I need to.  The large runtime library provides all the neat containers and other low-level things that I've come to appreciate with Delphi and .NET, and like those two environments I can create and use new components without trouble.  In short, I really like ActionScript and enjoy working with it.  It has faults like any other language, but so far I haven't seen anything fatal--certainly it's much better than JavaScript or VBScript.