IE 6 Frame Plugin

From the moment I heard about Google Chrome Frame, the idea bothered me. Here is the situation:

  • Many big companies still run IE 6
  • These companies depend on legacy web apps that only work in IE 6
  • Because so many companies are stuck on IE 6, everybody else has trouble moving forward with modern web sites

The Google Fix

Google Chrome Frame runs inside of IE. It allows IE users to access modern web sites, so long as those sites include this tag:

<meta http-equiv="X-UA-Compatible" content="chrome=1">

This is a clever workaround and is probably the best Google can do.

What Bothers Me

The workaround is backwards. It means 99% of your web usage remains stuck in old fashioned IE 6, treating modern web sites as special cases. Instead, I propose that Microsoft do exactly the opposite of what Google did.

Microsoft should create an IE 6 Frame. It would work like this:

  • Everybody installs a modern web browser. IE 8, Chrome, Safari, Firefox, etc.
  • Companies with ancient, mission critical IE 6 proprietary web sites could install the IE 6 Frame plugin.
  • Most web sites would use the modern browser. Old web sites — ones that only work in IE 6 — would run in the IE 6 Frame plugin.

I believe this approach would be far more beneficial. You want the old crappy stuff to be the “special case” that runs in a plugin.

Android Mystery Box

Ed Burnette on the frustrating lack of Android transparency:

I expected Android 2.0, whenever it comes out, to have something more. But there’s no way for us on the outside to tell, especially if the changes are not visible in the few screenshots we manage to glimpse. Contrary to Google’s assurances, Android continues to be developed behind closed doors and then dumped on the community at the last minute. They could be releasing it as I write this, or it could come out next May. It could already be rock solid and production quality in a lab somewhere, or it could be buggy, incomplete, and not ready for prime time. We just don’t know. And that, my friends, is unacceptable for an open source project, even one with a commercial component.

Still, it’s light years better than Apple.

News Lets us Down Again

Arianna Huffington sums it up:

After a commercial break, Ed asked me about the story. I told him that, for me, once the boy had been found, there was no story — just tele-voyeurism. Why continue the wall-to-wall coverage of a story that had turned into a non-story — on a political show — during a week when health care, financial reform, and Afghanistan are all at the tipping point?

IDE Feature Matrix

This is how I feel about Java IDEs.

IDE Feature Matrix

Climate Denial Crock of the Week

Great video, though the Frankenstein stuff is a little weird.

PNG Optimization

I am creating a large number of PNG files for an Android application and need to make the images as small as possible without losing quality.

Missouri

After quite a bit of experimentation, I settled on these steps.

  1. Create the original images in Illustrator
    • Use a limited number of colors
    • Avoid transparency
    • Avoid gradients
    • Create the images in the desired dimensions, 320×480 in my case (to avoid scaling artifacts when exporting)
  2. Export to 320×480 PNG files
  3. Use Gimp to convert to Indexed colors (Image -> Mode -> Indexed)
    • Generate optimized palette
    • Maximum number of colors = 48 (this works well for my particular images — it does NOT work well if you have gradients)
    • No color dithering
  4. Use PNGCrusher to reduce file size even more

PNGCrusher only helps a tiny bit since I already optimized in Gimp, but it can produce pretty dramatic results for non-optimized PNG files.

Danger…Danger…

This is really bad news for T-Mobile Sidekick users. First, a bit of background from the Danger, Inc. web site:

A great user experience

The Service Delivery Engine interacts tightly with Danger-enabled devices and the Desktop Web Interface. Devices are always connected to the service to receive messages in real time, updates are administered over-the-air, data is automatically backed up and synchronized, and content is optimally displayed.

Backed up, huh?

Here is today’s announcement from T-Mobile’s Sidekick forum:

Sidekick customers, during this service disruption, please DO NOT remove your battery, reset your Sidekick, or allow it to lose power.

Updated: 10/10/2009 12:35 PM PDT

T-MOBILE AND MICROSOFT/DANGER STATUS UPDATE ON SIDEKICK DATA DISRUPTION

Dear valued T-Mobile Sidekick customers:

T-Mobile and the Sidekick data services provider, Danger, a subsidiary of Microsoft, are reaching out to express our apologies regarding the recent Sidekick data service disruption.

We appreciate your patience as Microsoft/Danger continues to work on maintaining platform stability, and restoring all services for our Sidekick customers.

Regrettably, based on Microsoft/Danger’s latest recovery assessment of their systems, we must now inform you that personal information stored on your device – such as contacts, calendar entries, to-do lists or photos – that is no longer on your Sidekick almost certainly has been lost as a result of a server failure at Microsoft/Danger. That said, our teams continue to work around-the-clock in hopes of discovering some way to recover this information. However, the likelihood of a successful outcome is extremely low. As such, we wanted to share this news with you and offer some tips and suggestions to help you rebuild your personal content. You can find these tips in our Sidekick Contacts FAQ. We encourage you to visit the Forums on a regular basis to access the latest updates as well as FAQs regarding this service disruption.

In addition, we plan to communicate with you on Monday (Oct. 12) the status of the remaining issues caused by the service disruption, including the data recovery efforts and the Download Catalog restoration which we are continuing to resolve. We also will communicate any additional tips or suggestions that may help in restoring your content.

We recognize the magnitude of this inconvenience. Our primary efforts have been focused on restoring our customers’ personal content. We also are considering additional measures for those of you who have lost your content to help reinforce how valuable you are as a T-Mobile customer.

We continue to advise customers to NOT reset their device by removing the battery or letting their battery drain completely, as any personal content that currently resides on your device will be lost.

Once again, T-Mobile and Microsoft/Danger regret any and all inconvenience this matter has caused.

WordPress and Slashdot

The disclaimer at the top of this page made me laugh:

Dear Slashdot readers: We didn’t expect this to hit the front page and our ghetto PIII web server normally doesn’t get much attention, so wordpress blew it up. We’ve converted this page to static for now. The rest of the wordpress install is currently unavailable so unfortunately the links are broken for now.

I wonder how my blog (which runs WordPress) would handle Slashdot or Digg?

Android 1.6 on G1

Recently, people were speculating that Google (or T-Mobile) would not deliver Android version 1.6 to the G1 phone.

Today, T-Mobile pushed Android 1.6 to my G1 phone.

GWT Glass Pane

This code darkens the entire screen, allowing you to create lightbox effects when showing dialogs. For example, here is the normal screen:

Lightbox 1

And here is how the screen looks with a glass pane and dialog:

Lightbox 2

There are GWT component libraries that do this sort of thing, for example GlassPanel, but I prefer to minimize external dependencies. Instead, I decided to try this code example by Evaldas Taroza.

My Changes

I made a few changes to the original code:

  • Since I’m using GWT 1.7, I implement ResizeHandler instead of WindowResizeListener, which is deprecated.
  • I’m removing the -moz-opacity since it is specific to older versions of Mozilla and no longer seems relevant.

The Final Code

First, here is the CSS file:

.gcomp-GlassPanel {
    background-color: black;
    filter: alpha(opacity=50);
    opacity: .50;
}

Next, here is the JavaDoc comment, listed separately because syntax highlighting wasn’t working here on my blog.

/**
 * This panel is positioned absolutely and covers the whole client
 * area of the browser. It can be used to disable everything
 * underneath it with appropriate z-index.
 * <p/>
 * For instance a dialog can attach it to the root panel during
 * opening, and remove it during closing.
 * <p/>
 * CSS:<br>
 * .gcomp-GlassPanel
 * <p/>
 * Example:<br>
 * Add and remove this widget whenever you want, and style it as
 * follows:
 * <pre>
 * .gcomp-GlassPanel{
 *   background-color: black;
 *   filter:alpha(opacity=50);
 *   opacity:.50;
 * }
 * </pre>
 */

And here is the code…

public class GlassPanel extends Composite implements ResizeHandler {
    public static final String STYLE = "gcomp-GlassPanel";

    private SimplePanel panel = new SimplePanel();

    public GlassPanel() {
        initWidget(panel);

        panel.setStylePrimaryName(STYLE);
        Window.addResizeHandler(this);
        resize();
    }

    public void onResize(ResizeEvent event) {
        resize();
    }

    public void show() {
        // Override the styles explicitly, because it's needed
        // every time the widget is detached
        Element elem = panel.getElement();
        DOM.setStyleAttribute(elem, "left", "0");
        DOM.setStyleAttribute(elem, "top", "0");
        DOM.setStyleAttribute(elem, "position", "absolute");
        RootPanel.get().add(this);
    }

    public void hide() {
        RootPanel.get().remove(this);
    }

    private void resize() {
        panel.setSize(Window.getClientWidth() + "px",
                Window.getClientHeight() + "px");
    }
}

I’ve only done minimal testing, on the latest Firefox and IE7.