Snow Leopard

Like a fool, I installed Snow Leopard today…the very day it was released. I should have waited a few weeks (at least).

For example, I see this message for various System Preferences panes…

System Preferences

…and then the window flashes and re-launches. As a few people informed me on Twitter, this is caused by 32-bit programs running within the new 64-bit System Preferences application. That makes sense after hearing the explanation, however people without a Twitter support group might just assume it’s a bug. UPDATE: Silly me! The dialog has a little question button that explains what’s happening. Doh!


The Snow Leopard Compatibility Matrix lists a surprising number of apps that Just Don’t Work right now. For me, this means:

  • The BOINC screen saver doesn’t launch at all. So for now, I won’t be contributing CPU cycles to search for aliens.
  • The software for my Logitech MX Revolution mouse doesn’t really work fully. I downloaded the latest version from Logitech, but it refuses to install. My mouse still functions, and I worked around the main problem: the thumb wheel no longer invoked Spaces. I was able to configure the wheel to trigger an F8 keystroke, so now it works with Spaces again.
  • Inkscape won’t even launch. I was getting pretty fed up with Inkscape anyway, it has always been riddled with bugs on Leopard. Starting next week, all comics will be created in Adobe Illustrator.
  • After installing Snow Leopard, I have about 3GB more disk space.
  • I don’t notice any performance difference.
  • Whenever I click an icon in the dock to launch an app, the initial “bounce” animations are very choppy and slow. They were smooth under Leopard.
  • SuperDuper! has a brand new release that works with Snow Leopard, so that is very good.
  • Update 2: The dock crashed earlier today. I was moving an icon, and the whole dock vanished. It did recover after a few seconds of beach ball activity.

That’s about it. I think for the most part, vendors are rushing to release Snow Leopard compatible products. I bet within a very short timeframe, just about every good application will work without a hitch.

A few months ago, I had resolved to *not* get Snow Leopard until Apple released a patch or two. But like most fanbois, I couldn’t resist.

GWT IDE Selection

I’m starting a new GWT project at work, so I wanted to select the best IDE for the job. I installed the very latest versions of these IDEs along with their respective GWT plugins:

  • Eclipse 3.5 (Galileo)
  • NetBeans 6.7
  • IDEA 8.1

I’ll warn you right now that this is not an in-depth review or comparison. I looked just deep enough to satisfy my own curiosity and to choose a tool for my own coding.


Eclipse has an advantage in that Google supplies the Google Plugin for Eclipse, ensuring the plugin generates the exact same directory layout as the GWT command line tools. After installing Eclipse and the plugin, I generated a sample GWT project and it ran perfectly in hosted mode.

This is where things went badly, however. As you may know, GWT services consist of two interfaces and a class:

  • MyService
  • MyServiceAsync
  • MyServiceImpl

For my first (and only) trick, I performed a Rename refactoring on MyService. Eclipse renamed that interface, but not the other interface or implementation class. Instead, Eclipse immediately lit up with errors, forcing me to manually rename the Async interface and Impl class. Epic fail.


NetBeans also supports GWT through the gwt4nb plugin. I generated a project and noted it creates a slightly different directory layout, but nothing that would introduce problems.

Like Eclipse, NetBeans failed the Rename refactoring test. Unlike Eclipse, however, NetBeans did not immediately indicate errors in the mismatched class and interface names. Thus, errors would only manifest later at runtime. I gave up very quickly.


Unlike the other two IDEs, IDEA’s plugin does not yet support the new directory layout introduced in GWT 1.6. I initially assumed this would be a big problem, since you also see deprecation warnings when you launch your app in hosted mode.

In reality, however, the directory layout differences only manifest themselves in the output directories. The source directories are the same, so a simple Ant buildfile can produce a more standard GWT 1.7 WAR-style layout.

Of the three IDEs, IDEA is the only one to properly implement the Rename refactoring. When you rename your Service interface, the other interface and class both rename in unison.

Also, IDEA does a kick-ass job of keeping CSS styles in sync with styles referenced in GWT code. As I discovered today, when I define a style name in Java code, IDEA shows it in red and can automatically insert a new style class into my CSS file. I also refactored a <div> identifier in my HTML file, and IDEA correctly refactored the String reference in the Java source code!


I’ve used IDEA for years, and was initially put off by the fact that IDEA 8.1 does not yet fully support the new GWT 1.6 and 1.7 directory layout. In practice, this is a non-issue, and IDEA 9 will support the latest GWT conventions. IDEA’s first rate refactoring, along with tight integration with CSS classes and HTML identifiers really set it apart from the other IDEs.

GWT Question

Suppose we have three entirely separate programming teams. Each team creates a separate web application using GWT. Each app (A, B, C) has its own Subversion repository, and follows its own release schedule. Version 1.2 of App A might be released in June, while Version 2.4 of App B is released in August. They are completely independent.

From a usability perspective, however, we don’t want to send people to three separate web sites to run each of these applications. Instead, we want one master “shell” application that has a row of three tabs along the top edge. (or some other GUI layout, the specifics are irrelevant). Clicking a tab reveals one of these apps.

Thus, we’d actually have four applications: The “shell” app, and apps A, B, and C.

What is the best way to accomplish this with GWT? As a relative GWT beginner, I don’t even know what to search for. I’d like the shell app to be relatively generic and independent, so we can plug in new apps over time.

Frozen Icons

From time to time, all of the icons on my Leopard desktop freeze. It’s like the entire desktop is a static bitmap, I cannot select any icon, move them, or show a context menu for icons.

To fix the problem, I right click the desktop, select “Show View Options”, and then change something like Icon Size or Grid Spacing.

After this little kick in the pants, the desktop icons become responsive again. But when the problem occurs, it usually happens several more times that day. What causes this?

Social Button Stats

Over on Twittch, I use the AddThis service. They provide analytics showing which pages were shared, and to where:

AddThis Sharing Stats

That’s just the chart — they provide actual numbers, as well.

The Problem

I dislike the fact that the AddThis buttons are so tiny, and they are all lumped together in a single dropdown. People have to click once to show the available buttons, and a second time to share the link.

I plan to replace AddThis with a row of larger buttons, and will focus on the most critical sites: DZone (not supported by AddThis), FaceBook, Digg, and Twitter.

My theory is that more people will click and share my comics if the buttons are more prominent. But I’ll lose the analytics, so I won’t really have a way to directly measure success.

Is there a way I can use large, custom icons, while retaining click counts for each icon?

No More Word

A Texas Judge just decided Microsoft cannot sell Word in the US because it saves data as XML. They are expected to pay $200 million dollars.

That just happened.

  1. Every successful software company will eventually be sued for infringing some patent.
  2. Thus, every successful product “violates a patent”, i.e. builds on ideas from some earlier work.
  3. Since every software product builds on ideas from previous generations (or as lawyers say, violates a patent), no software is patentable.

I believe we should eliminate all software patents. Judges, lawyers, and juries lack the technical expertise to understand why patents like this are so silly.


In addition to being fined $200 million dollars for allegedly violating someone else’s word processing XML patent, Microsoft was recently granted patent 7571169 for…saving Word docs as XML.

Dear Movie Theater Owner

Dear Movie Theater Owner,

Your web site sucks. When I go there, I see:

  • A big, slow, Flash “welcome” page
  • When I click, you do something bizarre and make little stars follow my mouse around the screen
  • Everything on your web site blinks. (maybe your “designer” is a MySpace fanatic?)
  • Your site sets cookies, but doesn’t bother to remember my ZIP code…seriously, WTF?
  • After I enter my ZIP and search for show times, you put the results in a tiny scrolling frame that does not print correctly

Try to think of your audience! When we go to your page, it’s because we want to know show times. Your web site should display this information immediately and in a plain, easy to read and print format.

Yes, you can also provide additional links to purchase tickets, view trailers, and get directions to the theaters. Simple hyperlinks are sufficient.

Is it really so hard?

Your friend,


Ten Signs You Might be in Trouble

  1. You still use JDK 1.4
  2. When your build master goes on vacation, nobody is allowed to commit or compile (because nobody else knows how)
  3. Compiling on a developer PC requires a Word doc full of instructions filled with manual steps
  4. Your PC is the exact same configuration as the receptionist’s PC
  5. Incompetent programmers get demoted to “QA”
  6. Your code is locked in to a particular IDE and is unbuildable with any other IDE
  7. You have hundreds of TODO comments littered throughout the code
  8. So many tests always fail that nobody pays attention or even bothers to run them any more
  9. The compile + deploy + run cycle takes over an hour for each trivial change
  10. People laugh at you when you suggest GWT might be better than hand-coded Servlets and JSPs