Through the Looking Glass
Having heard a few rumors about Project Looking Glass, I was still unprepared for the difference of this desktop: a translucent 3D space that looked like it had come out of a virtual reality "playback" experience from Strange Days (Ralph Fiennes, Angela Bassett, Tom Sizemore, 1995), an amazing sci-fi thriller that both predates and smokes The Matrix.
Looking Glass has been scoffed at as "eye candy" by technologists, pundits, and users who don't value the emotion of user interface design or the power of word of mouth among the gamer demographic in creating hit software. Looking Glass is dependent upon processor speed and graphics card and system advancements, as well as on the coming of Java 3D.
What follows is my interview with Hideya Kawahara, creator of Project Looking Glass.
How did you get into Java programming?
I learned Java a bit the hard way. When I was working for a previous company, they came up with a plan to port Java OS onto their microprocessor. It was 1996, the very early days of Java. I jumped into the project, although I didn't know Java at that time. The project was really exciting, and I also enjoyed learning Java. It is a well-designed language with nice balance between elegance and practicality. It was tough, since everything was new. I learned a lot from Java--from object-oriented programming to computer language design principles. If you haven't had a chance, or you are even not a programmer, I'd encourage you to take a peek at Java. I'm sure you'll find lots of interesting concepts there that I believe will enhance your insight about computer science in general.
For those Java programmers who have not yet worked with Java 3D, what's it like?
The best way to start with Java3D is modifying the demo code found under the
$(JAVA_HOME)/demo/java3d directory (after installing Java 3D). Since those demos are very visual, I'm sure you will enjoy learning while hacking the code.
The most important things to learn first would be the terminology and concepts used for the Java 3D technology. Once you're comfortable with these, it is fairly easy to play around. There's some trickiness here and there, especially around writing things to behave efficiently, but it is fun to learn, since the API provides a high-level and object-oriented abstraction of 3D features.
One big benefit of using Java 3D as Project Looking Glass's platform technology is that there are lots of "free" Java 3D materials on the Web. So not only does the project benefit from that directly, but it makes it easier for new people to get involved with only a modest ramp-up of preparation. You might want to start with
Jenny Orr's Lectures (Willamette University) on J3D, and
the Looking Glass Developers Guide. Also, Java 3D became an open development project last June, and is hosted at java.net.
You can participate in the project if you get interested in the J3D Project--please remain interested in Project Looking Glass even in that case ;-).
Hideya, this is a different desktop experience. Project Looking Glass has the fresh new 3D, translucent windowing, and other novel appearance characteristics. What are some other innovative ideas on usability and user interface that have been incorporated so far?
One interesting experiment we've just started is the integration
of the physics engine. By utilizing it, we can construct a user
interface that shows natural movement in a better fashion compared to the usage of canned animation sequences. This experiment has just started, and we need to do more
work to find out the right way to integrate it with the system.
Performance overhead is one big item we need to pay attention to. Still, we see lots of value here and are keen on working on this experiment.
As you can see, natural motion in the UI is one of the key aspects
of Project Looking Glass. We can leverage the physics engine and constraints using dumper and springs among objects when laying out items in the 3D space. This way, programmers don't need to worry about the transition animation of items, or when to add or remove one. We expect this model greatly helps programmers to design a UI that leverages 3D space, at the same time showing a natural experience to the user.
The window metaphor we use for today's 2D desktop was initially invented more than 20 years ago. Sometimes it is referenced as WIMP: Window, Icon, Menu, and Pointing device--those are the key items that represent the metaphor.
Having a metaphor, or common idioms, is good, since it helps us to construct a UI that can be understood by wide range of people (who share the idioms). It is similar to language--it helps us to think and communicate, but it limits how we think and communicate. Now the hardware capability has evolved significantly, but basically we still use this same metaphor. On the other hand, the expression capability of each pixel has been improved, from black and white to 24-bit color. This supports the display of more complicated objects, like 3D objects, that relies on subtle effects of changing colors in order to be displayed nicely for users' recognition.
Evolution of the capability gave us more expression power, for example, based on 3D capability. I always think about how to leverage 3D-ness to bring the UI to
the next level. A key might be not about its realistic look, but more about its expression power (although we should leverage its realistic look--this is, relatively, an easy part).
Maybe you use the application launcher with a cascading menu structure. I feel this shows a limit of the WIMP metaphor. It looks a bit too awkward, as there are too many objects to display following that structure. The menu metaphor has simplified
the representation in terms of usage of the pixel, so that it can be shown even in black and white. I'm afraid that it doesn't fully leverage the graphical expression capability of today's PC.
So one possible area I'm interested in is to find out how to leverage 3D-ness when displaying many items to the user. The hard part is to forget about WIMP, and come up with possibly a new metaphor for today (or maybe the near future). Also, please note that this new metaphor
might leverage 3D in a non-realistic way. A key issue to solve, I believe, is how to display many items to the user for easier recognition and selection. Here, I don't think that showing the items in a very realistic way always help the user. We may apply some kind of non-realistic
simplification or physics to achieve that goal.
Finding a new 3D metaphor is an extremely tough subject.
As the project is open sourced, I'd like to invite many people who have bright ideas to work with us to solve this tough problem together.
What kinds of skills (Java or other) or experiences do you think would be valuable for independent contributors to bring to Project Looking Glass to accelerate its development?
This project has a vast scope--there are lots of areas in which we'd like to have some help. As for coding, Java experience is helpful. If you are familiar with Java 3D, even better. If you have good abstract design skills, that helps, since we are still in a very early stage, and we have to do quite a bit of platform design work in the near future.
Also, we'd like to have some help on the native-application
integration platform part. Currently, only X11 integration is supported. If you are familiar with X server, please come help us! Also, if you are interested in porting the environment to Windows, go for it!
Another area is the user interface. If you are a good designer, or an artist, we'd love to have your help. Since one of our key focuses is a rich user experience, providing a sophisticated look matters a lot. We are keen on providing a tool chain that incorporates 3D modeling tools. If you are familiar with such tools, come on over.
Further, if you are keen on exploring the possibilities for user interaction with 3D, you would also be welcome! In the forum, there are quite a bit of discussions are taken place. Look for Project Looking Glass information and Project Looking Glass development. Currently, we are focused on getting the code more stable and refining the APIs. Please check out the front pages of the
lg3d-core and the
lg3d-x11 sub-projects for details of some areas where we'd enjoy further contributions.
Do you have any kernels of wisdom for young people (high-school age) on how they might find and follow their passions in programming or collaborative development?
Here are my humble suggestions:
Don't compromise in pursuit of something you feel passionate about. I think that's the key.
We cannot do everything, but I would suggest that you identify a few things on which you would never compromise. Then follow your passion and instinct.
Another key is action. Avoid pressuring others to value what you are passionate about. The best way to convince people of the value of your ideas is to make a visual demonstration. Talking is ineffectual.
Today, we are fortunate, since we have more chances to find
someone who shares the same values, thanks to the Internet.
Don't be shy. Express your interests and find new friends from all over the world, and work together with them. It will be one of most exciting experiences you could ever have.
I really enjoy getting to know people who share the same vision, talking and working with them. The fact that I could get connected with those folks--live, all over the world, via the Internet--is simply amazing and exciting. I'm talking with people from Sweden, Brazil, the U.K., China, Japan and more! I'm thankful for these connections and these people. I'd encourage you to participate in an open source project, if you haven't yet. I'm sure it will change your world.