Wednesday, November 30, 2005

GPSdiary.org

GPSdiary.org is an online archive of an art project, in which artist Thorsten Knaub recorded his daily movements over the course of a year by carrying a Global Positioning System (GPS) receiver. I wondered when someone might try something like this.

The images would be more interesting as a mash up with, say, Google Maps, so you could see where he went each day. Also, someone in a more chaotic profession (e.g. ambulance/taxi/FedEx driver) might produce more visually interesting results. But, then again, it's Thorsten's art project not mine.

Tuesday, November 29, 2005

When a Linux user buys Apple's Mac mini

Reading Thomas Driemeyer's essay When a Linux user buys Apple's Mac mini I had to laugh a few times, especially the snarky comment about "geriatric graybeards at Apple". Even if NeXTstep morphed into Mac OS X is now considered "geriatric" code, I'll still take it over Linux. (Via Jeremy Zawodny)

jay is games

On Jay Bibby's blog jay is games, Jay reviews Flash games and other gameplay. My son is always asking me to find new games. It looks like Jay's blog will be a good resource.

RBOD

Jeff Atwood's post on The Many Faces of (Windows) Death talks about the infamous (BSoD) Blue Screen of Death. This reminds of the Notes Red Box Panic alert, also know as RBOD (Red Box of Death). It would appear whenever the Notes client crashed:

I'm not sure why it's so butt ugly. Perhaps customers would have been more upset that we spent time making a pretty "panic" dialog rather than fixing bugs? According to this post the RBOD is still around, even in Notes 7.

Jeff notes that Microsoft catches a lot of flak for BSoD but most are due to faulty third-party hardware drivers. This reminds me of Quincy (QNC.EXE) that used to be installed with Lotus Notes. It hooked itself in as a just-in-time debugger to catch and log Notes crashes. A great idea. The only problem was that it also caught and logged crashes of other Windows applications. Customers would accuse Lotus of causing crashes when Quincy was really just reporting them.

Paint.NET v2.5 Final Release now available

Paint.NET is an image and photo manipulation program. It's got an extensive feature set and it's free. The latest version, Paint.NET v2.5 was just released and is available for download.

Paint.NET is mostly written in C# with a little C++ code. Full source code is available for download as well.

Journey of Mankind: The Peopling of the World

The virtual global journey of modern man over the last 160,000 years is interesting. Another indication of how people have lived on this planet for such a short time span, especially in the Americas. Also, I didn't know that there was nasty population crash 74,000 years ago.

Monday, November 28, 2005

Panama Canal time-lapse

This time-lapse video compresses one week of traffic through the Panama Canal into 11 minutes. With better quality footage it would fit perfectly into a film like Koyaanisqatsi.

Rubberstamped money

I've gotten a couple of dollar bills with the Where's George stamp but I didn't realize that other people are stamping all sorts of weird messages on paper money.

osFree

osFree is an attempt to build an open-source OS/2 clone. They haven't made too much progress thus far: no loader, kernel, or device drivers are written yet. Reverse engineering a code base that was developed over two decades is going to be undeniably hard.

So the first question to ask is... Why bother? Where is the demand for an open-source alternative to OS/2? And if the demand exists, why not petition IBM to release the OS/2 source code instead? The last two OS/2 products will be withdrawn from the market in a few weeks and OS/2 customer support will end in 2006.

My Name Is Earl

Standard caveat: I don't watch television very much except a couple of shows on Sunday night. But...

We've been watching My Name Is Earl on NBC Tuesday nights. It's terrific. If the Coen Brothers did a sitcom, I imagine that they'd do a show like this. The cast includes Jason Lee (Earl Hickey) and Ethan Suplee (Randy Hickey) who are both Kevin Smith film regulars. The premise is not typical sitcom fare:
Earl is a low-life who finds a winning lottery ticket, only to get hit by a car, losing the ticket in the process. He then realizes in the hospital that his bad luck is the result of karma in which fate punishes him for all the rotten things he's ever done in his life; therefore, he then decides to dedicate his life to making amends to all the people he has hurt in his life.
Earl makes a lengthy list of "wrongs" while lying in his hospital bed. In each episode, Earl tries to remove an item from his list. For example, in a recent episode he was trying to make up to a woman he dumped by faking his death.

Sunday, November 27, 2005

Kudos to Sprint

My wife's Treo 600 started having display problems a few weeks ago. The screen would intermittently display thin vertical stripes. Soft/hard reset didn't fix it. The phone is a little over two years old and gets heavy daily use. We signed up for Sprint equipment insurance when we got our Treos since the replacement cost is high. So let's see how this works: A trip to the Sprint store in Redmond to verify that the phone isn't working properly and ordering a replacement. A few days later I picked up the new Treo and restored the content from the old one via BackupMan and we're done. No additional charges. Cool.

Xooglers

From 1999 to 2005, Doug Edwards was the Director of Consumer Marketing and Brand Management for Google. He left eight months ago. Now he's blogging about Google history at Xooglers. Interesting stuff.

Friday, November 25, 2005

Alice's Restaurant 40 Years Later

Arlo Guthrie's song Alice's Restaurant recounts events that occurred 40 years ago this Thanksgiving. Read the story behind the song.

Even after 40 years it's still a funny song.

Wednesday, November 23, 2005

Why software sucks

Scott Berkun's terrific essay Why software sucks, begins with the assertion "No one makes bad software on purpose". As hard as that may be to believe, it's true. But why does so much software suck? Well, first you have to understand what "this sucks" really means:
  • This doesn't do what I need
  • I can't figure out how to do what I need
  • This is unnecessarily frustrating and complex
  • This breaks all the time
  • It's so ugly I want to vomit just so I have something prettier to look at
  • It doesn't map to my understanding of the universe
  • I'm thinking about the tool, instead of my work
Now that's more concrete than "this sucks". As Scott says, if we invert these feelings, we'll find common responses people will have to good software:
  • This satisfies my needs
  • I can figure out how to do what I need
  • This is smooth, seamless and fun
  • This never fails.
  • It's beautiful
  • It is based on my understanding of the universe
  • I think about the results I want, not the tools
Building software that elicits these feelings is hard. It requires a combination of skills beyond just being able to write good code and build UI. And, sadly, even if you are successful, you won't meet everyone's expectations. No matter what you do, someone is going to say that your software sucks.

Some people go beyond quietly muttering about how much your software sucks. They build web sites or post to mailing lists enumerating why they feel that your software sucks. They even create coffee mugs with the same message.

Are they right? Maybe. Of course, there's no pleasing some people. They may just like to complain. Or they may have their own agenda. Obviously when a business partner supporting one vendor's software says that a competitor's software "sucks" you have to consider the source. But not everyone has an axe to grind. You may have really failed to meet their expectations

So should you listen to them? Yes. People who get beyond just saying "this sucks" can be the sort of user you want to talk to. In fact, if you look at the Lotus Notes Sucks web site, you'll see an included email IBM wants your help in fixing Lotus Notes inviting the web site's author and readers to participate in usability evaluations of a Notes re-design. (By the way, I know who sent the email and I think it was a clever approach for dealing with this type of criticism. It's too easy and often pointless to respond in kind).

Scott Berkun's essay goes beyond what I've mentioned here, I really encourage you to take a look.

The Undocumentation Trap

Ever notice that a lot of Java and .NET documentation is full of boilerplate of little value? Scott Swigart calls this undocumentation.

I think the main cause of undocumentation is the ease of generating it in the first place. IDEs make it easy to automatically create comments. Tools like Javadoc and NDoc make it easy to generate pretty but worthless documentation from the code.

In Eclipse you can configure how it formats code comments and documentation used for Javadoc. The default class template includes comments on how to change it to something more meaningful. How many developers write code with Eclipse and generate worthless documentation comments? Lots and lots. I fell into this trap: select some code and tell Eclipse to generate Javadoc. Easy. And worthless.

Visual Studio 2005 does less automatic generation of this type of documentation and I've realized that it's probably a better approach. Writing real documentation takes time and effort. An IDE can help with smart comment tag completion but don't fall into the undocumentation trap. If you don't have time to write documentation now, add a TODO comment and come back to it later. A TODO is better than undocumentation. (Via Coding Horror)

iris.com

We were discussing Iris Associates the other day (the company that originally developed Lotus Notes and Domino). This led me to see what was on iris.com. Just a simple message:

not for sale.

Iris was merged into IBM in August 2001. The iris.com domain was retired in 2002. But the odd thing is that unlike other domains that were retired by IBM such as lotus.com, rational.com , tivoli.com, etc. IBM didn't retain ownership of the iris.com domain. In fact, based on the registration information, I don't think they ever owned it. Strange. I wonder how Hank managed to do this?

The Locks O' Truth

Q: How hard is it to shoot off a lock?
A: Very hard.

Note: as mentioned in the Addendum, the author was testing the way locks are often shot in movies and TV shows to see if they would actually break or open the lock not the best way to shoot off a lock.

Lorenzo's Oil

Susan Senator's blog post The Autism Divide describes the division in the autism community between those who believe there is a cure, and those who believe there is not.

In thinking about the differences, I was reminded of the film Lorenzo's Oil. It's based on a true story of a boy, Lorenzo Odone, who develops ALD, an extremely rare incurable degenerative brain disorder. His parents became frustrated by the failings of doctors and medicine in this area. So they begin to educate themselves in the hope of discovering something which can halt the progress of the disease. They eventually discover that a combination of olive and rapeseed oils (the Lorenzo's Oil of the title) and a very low fat diet is able to stop the progression of the disease.

ALD and autism are unrelated but the limits of medicine and parental frustration with doctors are a common problem. Wouldn't it be wonderful if there was an alternative therapy or diet, a Lorenzo's Oil for autism? It's hard to find fault with parents for wanting to help their child. But is the notion that something "can't hurt, might help" good enough justification for a radical diet or other treatment? And who decides what is helpful? Is the search for alternatives just delaying the inevitable in dealing with the realities of autism?

We've tried some alternative approaches with my son Matthew but we try to have realistic expectations. We're looking for ways to help him live and thrive in the world. I don't expect to "cure" him anymore than I could be "cured" from being left-handed. Our main goal is to discover different ways to help him learn; to help him cope with transitions and unfamiliar environments.

Life Inside a Water Bottle

Help! Help! I'm trapped inside a water bottle. (Via BoingBoing)

Tuesday, November 22, 2005

Chicken Little

Today is my older son Benjamin's 9th birthday. Over the weekend, as part of his birthday celebration, we took Benjamin and his friends to see Chicken Little. Our group of nine year-olds gave the film a thumbs up. It's more appropriate for a younger crowd than other animated films such as Shrek but that's okay. It's hard to find films that are appropriate for younger children anyway.

The story is a bit thin and doesn't really connect with the children's story beyond "The Sky Is Falling". In the film, Chicken Little's concern is justified and evolves into a War of the Worlds connection. If you have young children, they'll more than likely enjoy it too.

Does Google need to grow up?

Ethan Stock is a founder of Zvents. He's got a good rant about getting burnt after Google transformed the paid Urchin service into "free" Google analytics. As a result of the switch, Zvents stopped receiving any web stats. After more than two days witout web stats, Google fixed the problem and analytics is working fine again.

Ethan has some good advice for Google and other companies providing Internet services:
The big issue is not one startup's angst about its temporary lack of web stats. The big issue is whether it's possible to reliably deliver complex software over the Internet at all. Google is the biggest player in this space, with vast resources of engineering, bandwidth, and servers, but everyone from Salesforce.com to Zvents is attempting to deliver significant software functionality remotely over the Internet.

We are asking our customers to bet their businesses on our ability to deliver. "Flaky but free" simply does not cut it any more. How many of you out there rely on Yahoo or Google email for business-critical communications? What if it went down tomorrow, for 48 hours? What if Salesforce.com stopped working for 48 hours? What if Ebay or Adwords stopped working? Marketing campaigns, communications, and commerce grind to a halt, and real damage is done to real people and real businesses.

Can this really work? The whole premise of the next generation of Web startups is that it can. Zvents is planning on embedding its calendars and serving events into a lot of other people's websites, such as early adopter LinkSV. If we go down, they have no events calendar on their site. As we grow, that customer reliance on us will grow to tens of thousands of similar sites, and if they have no data for 48 hours, there will be anguished screams that will sound very similar to my own post.

I think it can work, but it's going to require not only a business model, but a lot of grownup enterprise kind of thinking, with SLAs and obligations and recompense for failure clearly laid out in contracts. Otherwise, the level of trust simply won't exist to create the very cool future that we're imagining and building right now.
The other day someone asked me for an Orkut invitation (another Google service). I hadn't logged into Orkut in a long time. It's still unbelievably flakey. Lots of Bad server. No donut for you error pages. Cute message but this isn't a new problem. Orkut has been misbehaving for a long time. Either Google needs to get serious or pull the plug. Likewise with other Google services such as Blogger. As Ethan says, "Flaky but free" doesn't cut it anymore.

The E-Mail Time Capsule

There are several websites that let you send email to your future self. For example: FutureMe.org, MailToTheFuture.com and FutureMail. The main utility of these services is for reminders. Forbes has a slightly different twist on the idea: The E-Mail Time Capsule. They let you send email to your future self 1, 3, 5, 10 and 20 years into the future and will seal the time capsule on November 30th, 2005.

Given that this is a free service, there's no absolute guarantee that the messages will arrive. Forbes partnered with Yahoo! and Codefix to build the service but noone can say for certain whether either of them (or Forbes for that matter) will still exist in 2025.

Note: the FutureMe.org folks are pretty upset that Forbes copied their idea.

Monday, November 21, 2005

Could the Big One hit Boston?

One adjustment that we've made moving from Boston to Seattle is the potential for natural disasters. The East coast has hurricanes. They rarely cause substantial damage as far north as Boston but occasionally could be nasty.

The West coast has earthquakes. The Pacific coast is one of four areas in the US considered to be at risk for potentially devastating earthquakes. The other three are southern Illinois and Missouri, Charleston, S.C. and Boston. Boston? Yes, Boston.

November 18th was the 250 th anniversary of the Cape Ann earthquake, the most powerful earthquake ever recorded in the eastern United States. Cape Ann is about 30 miles outside of Boston. Of course, we're talking about potential earthquake risk here. One big earthquake every few hundred years is a lot less active than the West coast.

Sunday, November 20, 2005

Collaboration

My experience agrees with Volker Weber's post on corporate collaboration. I used to spend a lot of my time in conference calls. But I wouldn't say that very much of it was collaboration. There were usually too many attendees on most calls to be a collaborative activity.

Friday, November 18, 2005

Rugby fan tells how he lost his tackle

I wasn't aware that the body parts that Welsh rugby fan Geoffrey Huish cut off with a pair of wire cutters were called tackle.

Huish hasn't been able to come up with a good reason why he did it:
I think about what happened every day and still haven't come up with a good reason why. I'd had a lot going on and felt a bit down. I can't have kids now, but still want a family. Maybe I'll adopt.
I feel sorry for him but I don't think I'd trust the guy to care for children. (Via BoingBoing)

Howard Dully's Journey

In January 1960, psychiatrist Walter Freeman performed a transorbital or "ice-pick" lobotomy on a twelve year-old boy named Howard Dully. Over the past two years, the now 56-year-old Dully has embarked on a quest to discover the story behind the procedure he received. Why was a lobotomy performed on this young boy?

What Howard Dully found was a sad and amazing story. The details of the transorbital lobotomy procedure that Dr. Freeman performed on him sound gruesome:
As those who watched the procedure described it, a patient would be rendered unconscious by electroshock. Freeman would then take a sharp ice pick-like instrument, insert it above the patient's eyeball through the orbit of the eye, into the frontal lobes of the brain, moving the instrument back and forth. Then he would do the same thing on the other side of the face.
Back then little was known about mental illness. This crude procedure was performed on thousands of patients over many years. Initially when no other viable treatment available. Even though the procedure was found to be of questionable value, the scope of ailments for which it was recommended widened. In Howard Dully's case, his stepmother felt that he was "defiant". Dr. Freeman recommended "changing Howard's personality by means of transorbital lobotomy".

Small Town Misfit

Small Town Misfit is a blog that collects interesting entries from police blots of small-town papers.

Our town's newspaper back in Arlington, MA came out weekly. I'd always read the Police and Fire Log section first. There were usually a couple of odd or funny entries. For example, here are a couple from a recent paper:
At 9:27 a.m., a Foster Street resident reported someone smashed a front-door window pane. Police investigated and found the suspect was drunk the night before. He thought he locked himself out of his apartment and smashed the window to gain entrance, not realizing he was at the wrong address.

At 2:21 p.m., police received a call from Mt. Pleasant Cemetery about a possible human bone found near a grave. An officer discovered the item was a piece of wood.
Not as wild as some of the stuff on Small Town Misfit but amusing nonetheless.

New Java Verifier

Java 6 (aka Mustang) will include a new byte code verifier. The intent is to make verification faster, simpler and more adaptable. The new verifier depends on new type information generated by the javac compiler so only classes compiled with Mustang's javac will verify more quickly. (Via About Kim)

Thursday, November 17, 2005

Real Story of the Rogue Rootkit

Mark Russinovich discovered that Sony was distributing a copy-protection scheme with music CDs that secretly installed a rootkit on computers. Sony deserve all of the bad press they're getting from this debacle. Bruce Schneier believes that there's plenty of blame to go around.

Googlopia

In the not-too-distant future, we'll all be living in Googlopia.

Burritophile

Burritophile reviews Burrito places around the US. They include my favorite pod places in Cambridge, MA. We haven't sampled burritos in the Seattle area yet. Looks like there are plenty to try out.

And there's also a helpful page describing Things That Are Not Burritos.

I AM

Leaving work yesterday I spotted an interesting license plate on the car directly in front of me. A Microsoft employee with the Washington State vanity plate I AM. That was the slogan from the Notes/Domino R5 advertising campaign. After R5 shipped, the office walls in Westford were plastered with "I AM" signs. R5 shipped over five years ago and is now officially unsupported. So it was interesting to see the slogan pop up again out here.

I AM... Easily Amused.

Wednesday, November 16, 2005

Mulligan

Another link to Eric Sink's blog post on bug triage. Eric used the golfing term "mulligan" in reference to shipping two maintenance releases in quickly succession because a serious regression cropped up in the first one. He called it a mulligan because the second release was a "do over". At Blue Ripple we used mulligan as well but for a slightly different reason. We considered a mulligan to be a "breaking change". A code or schema change that would not be backward compatible but was worth doing anyway. Obviously you try to take mulligans before the code actually gets into the hands of customers.

Triage

Eric Sink is a software developer at SourceGear. He's written a terrific essay, My life as a Code Economist, that describes the software bug triage process. The term "triage" was borrowed from medical triage where a doctor or nurse has to prioritize care for a large group of injured people. The main job of a software bug triage team is to decide which bugs need to be fixed (or conversely, which bugs we're willing to ship with).

Eric lists four questions that need to be answered during triage to decide whether a bug should be fixed or not:
  1. Severity: When this bug happens, how bad is the impact?
  2. Frequency: How often does this bug happen?
  3. Cost: How much effort would be required to fix this bug?
  4. Risk: What is the risk of fixing this bug?
The answers to these questions determines the bug's priority which indicates whether a bug must, should or won't be fixed. The priority determines which bugs the developers will work on and when. High priority "Must Fix" bugs should be fixed first.

As Eric says, the first two questions are about the importance of fixing a bug where the last two are about the tradeoffs involved in fixing it. Developers sometimes focus too much on the cost of fixing a bug independently of its importance. The justification is often "to clear out my bug queue". This is a bad approach. Important bugs should be fixed first. Unimportant bugs should always be candidates to be deferred. (As we used to say during triage, paraphrasing a Homer Simpson neologism: De fer, the two sweetest words in the English language).

As a project's ship date approaches, the triage bar gets higher. It gets much harder to get the triage team to approve a bug to be fixed. Lots of bugs are deferred. The goal is to reach "zero bugs". This doesn't mean that the software is defect-free but that all known bugs have been deferred or can be rationalized away in some other way. At IBM we called this date "Virtual Zero". At Microsoft, this is known as Zero Bug Bounce (ZBB) day.

Tuesday, November 15, 2005

Paris at high-speed

On an August morning in 1978, French filmmaker Claude Lelouch mounted a gyro-stabilized camera to the bumper of a Ferrari 275 GTB and had a friend, a professional Formula 1 racer, drive him at breakneck speed through the heart of Paris. The video can be found here.

It's amazing footage. The car reached nearly 140 MPH in some stretches. Looks like it was shot very early in the morning. Fortunately there are few others cars or pedestrians. And several times the car races through startled pigeons flying off the street. (Via Metafilter)

Human skateboard

Stop motion clip of a human skateboard. Pretty funny. I like the slick move near the end.

John Carmack's Cell Phone Adventures

A large percentage of cell phones include Java support through J2ME. Given that the most popular applications for cell phones are games, the ubiquity of J2ME sounds like a perfect match for a game developer to support as many different cell phones as possible.

John Carmack was the lead programmer at ID Software. He's well known as one of the original developers of Doom and Quake. He was responsible for the game engines that pioneered the use of graphic techniques to allow limited platforms to smoothly render realistic environments. Carmack has recently been developing cell phone games in Java using J2ME. His experience has been frustrating:
It turns out that I'm a lot less fond of Java for resource-constrained work. I remember all the little gripes I had with the Java language, like no unsigned bytes, and the consequences of strong typing, like no memset, and the inability to read resources into anything but a char array, but the frustrating issues are details down close to the hardware.

The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advanced. With Java, on most phones you are left with about the CPU power of an original 4.77 mhz IBM PC, and lousy control over everything.

Even compiled to completely native code, Java semantic requirements like range checking on every array access hobble it. One of the phones (Motorola i730) has an option that does some load time compiling to improve performance, which does help a lot, but you have no idea what it is doing, and innocuous code changes can cause the compilable heuristic to fail.

Write-once-run-anywhere. Ha. Hahahahaha. We are only testing on four platforms right now, and not a single pair has the exact same quirks. All the commercial games are tweaked and compiled individually for each (often 100+) platform. Portability is not a justification for the awful performance.
I didn't realize that J2ME performance was that crappy. And the game has to be tweaked for each platform? Wow.

I've run a few Java games (aka midlets) on my Treo. They run reasonably well with some moderate display glitches. But Java games tend to have a "least common denominator" UI and don't take advantage of Treo features like a native Palm application would. And the Java VM for Palm needs 3.6 MBs of free RAM. That's pretty painful on a memory-constrained device (although I guess this wouldn't be an issue if it was already in ROM).

Type Safety

There's an interesting discussion on Lambda the Ultimate on type safety. It evolved from a link to a Wired article on the inadequacy of software testing to prevent bugs.

The Wired article confused the notion of type safety with what you might call "memory safety" (i.e. languages that prevent dangling pointers, buffer overflows, unsafe casts, etc.). As part of the discussion, Scott Johnson contributed an interesting taxonomy of levels of type safety in programming languages:

Absolute type safety: Type errors are not possible in a well-formed program; the implementation guarantees that every operation on every object will succeed; else the program is not well-formed. Type erasure is possible and is often performed as a runtime optimization. The statically-typed FPLs [functional programming languages] are in this category.

Nominal type safety: Type errors are not possible in a well-formed program, unless explicit "dynamic" constructs (instance_of, dynamic_cast, class introspection) are used. When type errors do occur; the behavior of the system is deterministic and it's integrity is not compromised. Java 1.4 comes to mind (though not Java 5, due to issues with the generics implementation).

Nominal type safety with exceptions: Type errors are not possible in a well-formed program; unless explicit "type unsafe" operations are performed. Such explicit operations may, if done incorrectly, cause undefined behavior and/or violate the integrity of the programming model. Examples include C#, Eiffel, and Modula 3.

Dynamic type safety: Type errors are possible in well-formed programs (and do not require use of explicit constructs which "waive" type-checking). The behavior of the system in the presence of type errors is well-defined; programs can often productively "trap" type errors as a metaprogramming construct. Java 5 is one example; as are most dynamically-typed languages (Smalltalk, Python, Ruby, Lisp).

Superficial type safety: The system performs type-checking on programs (and rejects many improperly-typed programs as ill-formed); but the language definition contains numerous "holes" (which even experienced programmers may unwittingly stumble into) that can cause type errors to occur undetected at runtime, resulting in undefined behavior and violation of the integrity of the programming model. Examples include C and C++.

Minimal type safety: The system performs little or no type analysis, either at compile-time or runtime. Type errors may have undefined behavior and compromise system integrity. Examples include assembler, BCPL, and most Forth dialects.
Note the comment on Java 5 generics. Java 5 introduced some potential type safety issues because its implementation of generics uses type erasure rather than reification. Does this make Java 5 less type safe? Perhaps but the requirements of backward-compatibility dictated this choice as explained on Neal Gafter's blog.

Monday, November 14, 2005

Swing Dance

According to a post on Hans Muller's blog, a recent survey reports that "Java Swing is the dominant GUI Toolkit for Northern American developers". I don't have anything against Swing but I wonder whether these survey results are particularly notable.

First, the lion's share of new applications are web-based. Swing has little impact there. Sure, you can run a Swing-based Java applet in a browser window but, sorry, that ship has sailed. Web apps using DHTML, AJAX, Flash, etc. own that world now.

Second, where are all of the Swing-based applications? A few hundred Swing apps are listed on Swing Sightings. But that's a tiny fraction of the thousands of GUI apps running on Windows, Macintosh, Linux, etc.

Third, it's unlikely that we'll see a wholesale rewrite of existing apps into Java/Swing. Even in the open source world, the lion's share of desktop applications are written in C/C++. For example, despite the fact that more than 80% of OpenOffice.org developers are Sun employees, the code is over 10 million lines of C++ not Java/Swing.

Finally, there's the whole Swing vs. SWT mess. Swing and SWT are fundamentally different approaches to cross-platform development. Swing emulates platform look and feel while SWT uses native code to leverage platform widgets. Sun backs Swing as a standard part of Java while IBM (and the Eclipse foundation) back SWT.

How did this split happen? Early releases of Swing were, to quote an unnamed source, "Big, buggy and looked like crap". Swing performance and visuals improved considerably in JDK 1.3 but by that point, SWT was off and running as a fundamental part of Eclipse. And the number of vendors supporting the Eclipse platform has grown substantially since then. Certainly SWT has its detractors but they're unlikely to convince IBM or the other Eclipse foundation members to switch to Swing. For the foreseeable future, Java GUI development will be split between the two camps.

<