So I'm sitting in the Oregon Convention Center listening to Stefan Neufeind from Germany introduce us to XUL. Earlier, at the Starbucks breakfast coffee bar, two geeks discussed the relative merits of Python and Perl (especially Perl 6). I couldn't have scripted it any better; OSCON is off to a great start. I will now give my undivided attention to Stefan...
XUL references Ghostbusters (the movie). The ghost Zuul possesses a certain character (Dana Barrett) and says "There is no Dana, only Zuul," giving rise to a slogan: "there is no data, only XUL." This slogan serves as an engineering guideline: don't incorporate actual data in your XUL documents -- just link to it, and make XUL all about the layout (interface).
Documents of the xul-type (application/vnd.mozilla.xul+xml) talk to the Gecko rendering engine in Mozilla-based browsers (e.g. FireFox) or in whatever clients (other engines may speak xul too). XUL is a DOM-extending XML namespace providing a <window></window> framework within which to lay out widget-containing boxes (variously oriented, directed, packed, flexed and aligned -- bottom-to-top, right-to-left OK too), in order to make a cross-platform front end to back end data sources and runtime objects (e.g. XPCOM gives you hooks to C/C++ library resources). You'll gain control over menus and toolbars as well.
CSS usually plays a role. JavaScript listens for and handles events (Python is a batter up).
Note that mozilla -chrome on the command line will let you substitute your own top window, independently of the default browser, with all its menus, tabs and so on. Chrome is the look-and-feel repository (consulted by Gecko) providing window trim.
A lot of this stuff is similar to my bread and butter Visual FoxPro, in that widgets trigger specific events (oncommand, onmouseover), as does the <window> itself (onload, onunload, onclose). Plus you've got the tabindex attribute with which to control the focus ring.
Try this in FireFox.
I first learned of XUL from Claude Goodman of CareWheels, who mentioned at a Free Geek meeting that he envisioned his interface as XUL-defined. I made a mental note then to find out more about XUL (this meeting was over a year ago by now I believe). I met up with Claude again at Ron Braithwaite's presentation to Wanderers.
Don and I attended Ron's 'Off to Canada' picnic at Creston Park yesterday, before heading over to the Brewer's Festival on the waterfront (stopping enroute to register for OSCON). Lots of motorcycles showed up for the Braithwaite party (plus Jasper's battery- powered bicycle from Taiwan), some ridden by Bavarian Illuminati (Ron is one).
I had lunch with Randal Schwartz and friends, Randal being a heavy lifter in the Perl community (I've studied his Perls of Wisdom in the library). His group of four graciously accepted Kevin Altis and I, both Python people, as table mates at Red Robin. Perlmongers filled us in on some of the community- bending soap operatics surrounding the DBI class, plus offered friendly advice about how we snakecharmers might do something like CPAN, the global Perl repository.
The distinguished Alex Martelli, now with Google, has a new mustache, and joked how European males, upon moving to the US, tend to sprout facial hair to better signify their European origins (Alex is Italian). Guido, you may recall, recently grew a beard.
My afternoon tutorial: Ruby on Rails (a convention-driven framework for website development, based on the Ruby programming language).