A Hi-Rez Future

I've been working from home in Atlanta since I started at Sun. I have two homes under renovation and a lot of things to take care of before I can move out west, so working from home for a few months seemed like the best solution. The problem is I only own a laptop, my new iBook. Coding and writing for 10 hours a day on a 1024x768 screen really is no fun. I've got a USB hub, mouse, and keyboard to make it feel more like a desktop, but nothing can replace having a good screen. Today I bought a flatpanel.

It's the NEC LCD 1735 NXM, a 17inch, DVI + VGA input, 1280x1024 flatpanel with cute little speakers on the side. So far, I love it.

First thing: I've got to say that this is the best analog LCD connection I've ever seen. I don't know if it's because NEC did a great job with their filter, or because OSX does really great screen smoothing, but it looks almost as crisp as digital. No blur at all. Maybe it's just that the technology has gotten a lot better since I last used an external flat panel, but I'm quite impressed. I'm sure it will look better when I switch to digital, but it's great for now.

Second, it's big. 17" on a flatpanel really is 17 inches, not the old count the unusable glass to inflate the numbers days of CRTs. 17 inches is really quite big.

Third, it's native resolution is higher than the 1024x768 I've been using for so long. Having the 1280x1024 is great, especially when it's on a second monitor. I got addicted to dual monitors with my thinkpad last year, so it's good to have it again.

So now what?

So, as I sit here gazing at my huge visual setup, I'm thinking: What does this mean for the future of software?. This isn't just idle thoughts. It's a real question. If you have a world with different sized and different resolution screens you start to have a very wide DPI range. Combined with the fact that you will probably sit closer to a laptop than a larger desktop screen, we start to see that our software just doesn't cut it anymore. We'd like to think we all code with resolution independent toolkits, but we don't. Every toolkit (Swing included) has certain assumptions about the size of a button or menu item. These assumptions start to break down as screens leave the range our toolkits were originally designed for.

Here's an example. My mother uses bi-focals. She has a CRT iMac that can go up to 1280x1024, but on a 15 inch that's too small for her to see. Instead she goes back to 800x600. Not to get a better refresh rate, but because the widgets are bigger! Clearly something is wrong here. Why can't the software (or toolkit or OS) just make the buttons bigger. Take advantage of the higher resolution to show the same amount of information in the same space, but with greater clarity. Put those extra pixels to use!

Here's a different example. We've spend the last 10 years making web documents scale with the browser width, screen resolution, and desired font size. Yet our supposedly more powerful desktop applications can't do the same. If I use a control panel that takes up 800 pixels it takes up 800 pixels, no matter what my screen is. If I'm lucky I might get a scroll bar. If I use a resizable window I can resize it's dimensions, and the contents will stretch but not reflow in the web sense of the word. Even with a word processor only the text I'm editing will reflow. The widgets are still the same size. Why is this? Why do we assume static standard screens?

These two examples don't even cover non-traditional desktop screens like redirecting output to a PDA or software that is designed to run on a 30foot projected wall. Standard software fails in these areas. Good software to handle these cases always involve tremendous custom code.

Surely there is a better way

I think, in order to solve this problem, we need two things:

  1. First the underlying toolkit needs to be resolution independent. You should be able to get the actual screen DPI and a Virtual DPI. The on screen widgets will then be scaled appropriately. A virtual 800x600 screen will still appear as 800x600 even on a 1600x1200 physical screen, it will just look sharper. The same transformations would apply to both a highres projector and a low-res PDA.
  2. Second, we need a new metaphor for describing how widgets should be positioned in a possibly dynamic DPI environment. The web was able to reuse the existing document layout metaphor from the world of print. Things like margins, headers, and paragraph reflow make sense in when you are dealing with lots of text. The web added dynamic features that enabled (after years of development) authors to create pages that look great on every screen, no matter what the size or resolution. We need something like that for the desktop application world.

Another thought. When you use Expose on OSX 10.3 to switch applications it creates a shrink-ed version of every window. These aren't just bitmaps. Each window is updated live. It really shrunk the windows without the app being aware. I wonder if Apple is looking into truly resolution independent rendering of their applications?

About 8 years ago, when I was an intern at Xerox PARC, I saw a prototype display with a 270 DPI. It was gray scale and didn't have the best contrast or refresh rate, but it was a glimpse of things to come. One day these displays will be everywhere. Will our software be ready?

Talk to me about it on Twitter

Posted April 21st, 2005

Tagged: java.net