Rapid Application Development with Mozilla
The Basics Rapid Application Development with Mozilla (hereafter RADM) centers on XUL, Mozilla's XML dialect for describing GUIs. Other Mozilla components, like XBL and RDF, are described mainly in terms of how they plug into XUL. Each chapter presents and explains a component, then shows it in action by using it in an example application (a web-page annotator) developed throughout the book. Chapter conclusions take the form of debugging hints; as McFarlane ruefully notes, most errors cause Mozilla to silently do nothing, making debugging a chore.
The first half of RADM covers basic XUL use -- the usual complement of widgets with CSS to style them and JavaScript to manipulate them. McFarlane does assume previous exposure to basic HTML, JavaScript, and CSS, but extensive experience isn't required. At each step McFarlane does a good job explaining what's similar to HTML (e.g. most DOM stuff) and what isn't (e.g. the layout model). A few components have no real analog in the HTML model, like Mozilla's command dispatch system, so they're presented from the ground up.
The Back EndThe second half of the book leans more toward the back end: using RDF for registries and template data; piping data into XUL with overlays, templates, and XBL; using and implementing XPCOM components; and deploying applications built on Mozilla.
McFarlane's RDF tutorial is one of the best I've seen. He starts off on the right foot by introducing things in terms of a directed graph, with lots of examples and diagrams. Only after eighteen pages of that does he introduce the RDF/XML syntax. His explanation of RDF/XML is unusually lucid, quite a feat considering how hairy RDF/XML gets. (Disclaimer: I've had past experience with RDF, so I wasn't reading this as a beginner -- in other words, YMMV.)
In the succeeding chapters, RDF is applied within the various Mozilla arenas, like XUL overlays and package installation, where it's used to store config information. The centerpiece of RDF in Mozilla, though, is in its use to create data-driven XUL files through XUL templates.
The chapter on templates runs to sixty-plus pages, and it's worth it. McFarlane covers things I haven't seen covered anywhere else. For instance, he describes the algorithm the RDF query engine uses to evaluate queries, so that you can better understand what kind of queries you can construct. This is crucial information because the query syntax allows a lot of queries that are logically reasonable, but won't actually work.
This points to a strength of RADM: McFarlane doesn't hesitate to criticize Mozilla where necessary. Throughout the book, he flags incomplete features, buggy implementations, and other gotchas, such as security restrictions surrounding RDF that make it all but useless for remote scenarios.
(Incidentally, McFarlane explicitly disclaims coverage of Phoenix/Firebird/Firefox, sticking to Mozilla 1.4, but in practice everything I've tried has worked fine in Firefox 0.8.)
Two Out Of Three Ain't BadSo, does RADM manage to accomplish its goals of being a conceptual overview, tutorial, and reference? I'd give it two out of three.
As a conceptual overview, RADM shines. McFarlane is at his best when comparing and contrasting closely related components, like overlays, templates, and XBL, all of which extend XUL but do it in different ways. I was left with a good picture of what can and can't be done in Mozilla.
As a tutorial, RADM is solidly useful. The example-application sections cover a surprisingly large amount of ground -- more than enough to get a developer new to Mozilla up and running. McFarlane chose a good subset to present as examples; still, all of his clear writing can't paper over the fact that Mozilla is really complicated, not just internally, but in the interface it presents to developers using it as a platform.
As a reference, RADM stumbles. The index is slim -- a mere eighteen pages after 752 pages of content -- which makes small chunks of information hard to find. This is mitigated by a detailed and well-organized table of contents. After a few weeks of use, I find myself turning to the contents first, and only trying the index if I have to.
Fundamentally, though, RADM isn't really a reference book, and definitely not a "quick reference." You'd be better off using a good site like XULPlanet for quick what-arguments-does-that-method-take checks, and reserving RADM for in-depth explanations.
ConclusionRADM is published in Bruce Perens' Open Source Series at Prentice Hall under the Open Publication License. After a few months of letting the book sell on its own, they'll post the PDF of the entire book online. Is it worth buying in print? Given that it's more of a sit-down-and-read book than a quick-reference guide, I'd say so.
If you're considering Mozilla as a platform, I'd recommend RADM for its reasonable balance that shows Mozilla's strengths and weaknesses. If you're already sold on Mozilla and just want to wrap your head around it and start building an app on it, RADM is the book for you.
You can purchase Rapid Application Development with Mozilla from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page
ln /usr/bin/konqueror /usr/bin/mozilla
Karma: Terrible - and proud of it!
I'll take less bugs over rapid development any day.
Here
I thought RAD was an 80s BMX movie.
Oracle is going to write their applications so that they take advantage of the rich client opportunities that XUL provides. They are going to use Mozilla as a platform in much the same way that the Komodo IDE is based on Mozilla. XUL allows developers to do much more than they could with just HTML.
This is a great opportunity to show what Mozilla is truly capable of. In may ways Mozilla offers today what Microsoft is only planning to release with Longhorn. Not to mention the fact that Mozilla is Free Software and platform independent. It's made to order for developing and releasing rich client applications on a wide variety of platforms.
I think its time for the dev community to embrace XUL as a cross-platform development tool. Too much is made of Qt and GTK - both are great, don't get me wrong..but XUL just doesn't get it's due respect.
The single feature that I wish I could get with my applications is the web-installer that Mozilla has for its install. It allows you to stop and resume a download and it would allow people with crappy dialups to download large files without having to restart after every disconnect.
If I could build an installer with mozilla that would let me do this with _any_ application, that would be golden!!
Finally. More documentation on RDF is always welcome. I hope this has some specific information on developing Mozilla extensions, because the available docco really sucks.
RADM is published in Bruce Perens' Open Source Series at Prentice Hall under the Open Publication License.
Doesn't look like a very open license to me.
Nat Friedman recently identified Linux as 5 platforms:
1) Gnome
2) KDE
3) OpenOffice.org
4) Mozilla
5) Eclipse
Considering that each of these are at least marginally successful as platforms, a coherent platform doesn't seem to be in the cards for Linux. Many of us think that's perfectly fine.
My only concern is whether Mozilla is at least viable as a platform. Can developers assume their apps will run well for many users if they build in XUL?
I've heard about Mozilla's "RAD" capabilities, and I've heard all about "how flexible" it all is...
But - is there a single application that I'd consider using, written with Moz, other than Moz itself?
Anybody? One? Just one?
I have no problem with your religion until you decide it's reason to deprive others of the truth.
I'm always wondering where you put the actual logic in this kind of setup. You write your business logic as XPCOM components in ... what? C++? Java? Python? Javascript?
I was given to understand that Mozilla as application platform should be platform independent. But what about the actual code apart from GUI and the necessary wiring?
you win the prize!
Filezilla -- probably the best free gui ftp/sftp client for windows there is. The pity is that they didn't stick to cross-platform on some of the underlieing stuff, so it doesn't run on my linux & os x boxen. Boooo!
the clock on the wall says 4 til 7
Why?
Just because you can do something, doesn't mean you should.
So why exactly should I use Mozilla for RAD?
This sounds very much like it actually delivers what Creating Applications With Mozilla promised. After reading CAwM first 3 chapters, having them completely confuse all the various issues in my mind, a wrote this review. To give Boswell credit, he emailed me with some pointers to resources that helped get me over the hump, but that doesn't excuse O'Reilly's editorship from their usually excellent job of encouraging authors to make their work accessable as well as detailed.
7 November 2006: The day Americans realized corruption and incompetence weren't addressing 11 September 2001
Ok, who is going to be first with the Ghostbuster jokes?
Technoli
Here's the source RTF document in a zip file. That's Rich Text File, not the usual acronym :-)
So, having established that it really is Open Source, I do encourage you to buy the book.
Thanks
Bruce
Bruce Perens.
Rad (1986)
:D
Right before the nintendo generation
The book has already had its few months in paper-only format, and is available to download (along with a number of other books in the series) at InformIT
Maybe if someone could read this book and combine Mozilla with Trailblazer we would have the best browser ever.
;-)
And don't suggest me. I'm far too lazy.
I've got more mod points and GMail invi
6) PLT Scheme
:-)
"Rad" ruled.
- "you over rotated.."
- "no shit."
I was hoping they were going to report that Mozilla 1.7 had finally come out of beta :/
Been waiting to upgrade for a while now...
And for those who've forgotten recent history. Remember all those people berating mozilla for all their cross-platform work, and just give us the browser. Now here we are with a rich toolkit that can run up against anything Microsoft can produce.
Something that either would be behind, or none existant if the developers had listened to their critics.
This is one of the reasons developers shouldn't pay attention to armchair critics. Critics more than anything else, are working from incomplete, or inaccurate, or just plain wrong information. just look at the binary vs open source drivers issue with the Linux kernel.
Didn't microsoft get a patent on this thing (html apps without navigation features, etc.)? Is that the same thing or am I just confused?
"The Glade XML format is kind of strange (it looks like XML described in XML; a pointless scheme), but Glade simplifies GUI development to a point that I have yet to see anyone improve on, in terms of simplicity"
This is a rather important point that gets short thrifted. How many times have we logged into "/." to listen to another usability complaint? And the UI people complaining that the programmers don't listen to them, and the programmers complaining that the UI people don't understand what's involved? Well here's the solution staring people in the face. Just as the web people have learned the seperation of content from everything else. The GUI people have the look seperated from everything else, were they can go off and do their own thing, then come back and merge with the programmers. Sounds like a win, win for everyone, except maybe the armchair critic that secretly doesn't want Linux to succeed.
My bloated beer belly is on top of your head, cocksmoker! NOW GET BACK TO SUCKING MY POLE!
...and found it cluttered. It's like they took the tutorial pages and the appendix and decided to shuffle them together.
;-)
The listings are only for parts of an application at a time, making it hard to visualize the whole project.
It could really do with having stand alone examples for each chapter or, at the very least, have an associated web site with such content (the listings could, I guess, get a little out of hand).
It may just be me, but seeing snippets out of context is not how I learn things.
I think it would have been better if they started off by presenting the whole of the notetaker program, and then analysed each section to explain what it did, and leave the detailed descriptions of tags to appendices.
In its defence though, there's so much to learn that it would be hard to make a good tutorial in one book along with the reference material - whatever the approach.
I'm still waiting for a perfect book on Mozilla Application Development. Kudos to anyone who manages to write one though - there's so much to cover.
cLive
-- Trinity in high heels carrying a whip: The donimatrix - there is no spoonerism
"Quite frankl,y the systems that the programmers write are there for the convenience of the lemmings, whether the programmers like it or not."
OSS breaks that cocaine-like dependency. Without money in the process, those lemmings are as equal as everyone else. And yes programmers do like being drug free.
Comment removed based on user account deletion
Actually there's always one thing I've wanted to know. Can you remotely deliver these XUL's to the browser, so when you start up it pulls it off a server somewere. Or is this strictly a local thing?
There's is no such thing as Apache Cocoon. The parent just pulled that product name out of his ass!
FTP programs do this already?
"I can't give you a brain, so I'll give you a diploma" - The Great Oz (blatently stolen sig)
Why don't we wait until it's demonstrated that this can compete with MS before we declare that the cross-platform work was a good idea.
If this was a commercial, closed book, we wouldn't have problems like this. It's not until people's money is on the line, that you see people actually putting out that extra effort that separates the best of breed, like having a working website.
I think everyone agrees that most x-platform tookits have one glaring weakness - all the platforms share the same user interface. Mozilla supports skinning, which is nice, but it doesn't feel like a Windows application or a Mac application. It feels like an XUL application. NeXT had fantastic x-platform support with OpenStep; it's also how it (and Cocoa) acheive localization. That technique should be able to be used with other toolkits, even if they don't have 'native' support for that technique.
Let's take a look at localization first. Typically, you generate a .strings file for each language. That kinda sucks because if you just did that, all localized versions would share the exact same window and control (widget) dimensions. The following is what Cocoa (OpenStep) does. Each application 'binary' is actually a directory with this kind of layout
Hopefully that's self-explanatory. Basically each platform gets its own version of an executable, and each language gets its own version of the interface (falling back to the basic definition in Resources/ if no version for a specific language is found). Well the next step is obvious. If you want to create a windows specific .nib, you create a MainWindow-windows.nib, which will only be used over MainWindow.nib on the Windows platform. Native controls are used on each platform, regardless if there's a platform-specific nib or not.
It's a shame that Cocoa is no longer x-platform (although the support is still there, it's just that the runtime isn't available on other platforms). But this should be possible with other platforms too; you just need to encapsulate resource loading and load the appropriate resource for each platform and localization.
Moderators should have to take a reading comprehension test.
It is called a book. And I bet it doesn't have annoying circles on it.
Probably will be much nicer to read than printouts, and not much more expensive than the toner and paper you're printing on. Plus some money goes to support the author and publisher, which in this case is a good thing.
I like it. Maybe Plone could have one of those "rich interfaces"? Anyway one of the things I like about the whole xpi, XUL thing is that installation is easy, and that it's bandwith friendly. Maybe XUL needs a good RAD IDE in order to get wider exposure? BTW out of all the books for XUL development, which one would you recommend for a public library?
You can build completely customized applications using the JFace/Eclipse platform that have nothing whatsoever to do with the concept of an IDE. I've recently built a small client app using it and it's not bad really.
I understand the need (or desire) for a richer interface... but then you go and force me to install a mozilla based browser (so much for platform independence) if I don't regularly use one! (Hint, most people don't) What's the difference then? I could've installed a JVI, or any other type of client application for that matter.
In his case, it's probably not worth much because the app is internal, but what about the amazon example? Why not a PHP/Perl page? Why not flash even? Just so we can say we used XUL?
0) emacs
...welcome our new XUL overloards.
But if she gets out of hand, bring on the Ghostbusters!
And catch someof that liquid marshmellow for me.
tasks(723) drafts(105) languages(484) examples(29106)
Does it mean "Develop applications rapidly" or "Develop rapid applications"?
If Mozilla itself is any example, Mozilla and XUL can only be used for rapid development of antirapid (i.e. sluggish) applications.
"but then you go and force me to install a mozilla based browser (so much for platform independence) if I don't regularly use one!"
and
"I could've installed a JVI, or any other type of client application for that matter."
Not by your logic, you couldn't.
Besides I too can claim that Microsoft "forced" me to install something I don't regularly use (so much for platform independence).
"In his case, it's probably not worth much because the app is internal, but what about the amazon example? Why not a PHP/Perl page? Why not flash even? Just so we can say we used XUL?"
Already covered by the author below. It kind of helps to understand the situation completely, before critisizing other people's solutions.
Like everything else I've seen on XUL, the intro this book hypes how you can build standalone apps with XUL, which don't need to be Mozilla extensions.... and then says "but we're not going to do that."
Hi. THAT'S THE PART I WANT TO LEARN. The rest is just syntax, it's XML and javascript and it's really not that hard, if you keep a reference handy (and XUL Planet seems pretty nifty for this) you can make it up as you go along.
But how do I get started building a standalone app? Where do I get just the mozilla libraries? HELP.
Which makes it no different than Java, in that respect.
Its considerably cheaper on Amazon. Barnes and Nobles has it for $44 dolars and Amazon for $31.
If programs would be read like poetry, most programmers would be Vogons.
Alright, I can buy those arguments. Although I'm still not completely sold on any large performance boosts over a properly designed PHP/Perl etc. web application. I'll buy the richer widget set, but that could easily be achieved as well using flash (I know, i know, flash is for lusers), or the dreaded Java. (dreaded because it doesn't play as nice as it should with XP - well, vise versa, but the same result nonetheless)
We're starting to redesign an internal app here, for which we have a fair number of remote users. These users are quite frankly (who can blame them) sick of using a citrix based set up, so I thought if I could see some real advantages, this would be worth the investigation.
You've piqued my interest. I'll do some further research.
Even developers that were fired for being two years behind schedule? (j/k)
I've heard through the grapevine that some spyware companies and porn sites are putting together XPIs containing spyware, to start catching Mozilla users like they have IE users in the past. With the growth in use of Moz, plus this book, it's a pretty smart decision on their part. But it does mean that people will now need to be more careful about what they're browsing with Mozilla.
I guess a browser stops being alternative when porn sites start peddling spyware through it. So at least on that, congrats to all us Moz developers, we're on the road to mainstream!
Christopher S. 'coldacid' Charabaruk -- coldacid.net
Found this in Firefox's config files. Check it out (and read the full URI):
There is no data. There is only XUL
Warning In the past, I've had versions of Explorer crash on me when looking at that page, so you may want to try it only in non-IE browsers (YMMV).
Overcaffeinated. Angry geeks.
Looks like someone with too much time on their hands. Life is short, dude...stop shilling, astroturfing, phreaking, or whatever the
RAD is usually targetted at quick-and-dirty application with a GUI. Something where usability is the most important factor. I would never develop a banking system with a RAD tool given the number of transactions/secs, error recovering and other stuff which are required and much more important than a flashy GUI to it.
Achille Talon
Hop!
you may want to investigate doing a richer web application using newer UI level toolsets. My favorite at this point is for Java and it's called Tapestry. Therein, you will find a much richer than usual web development framework. Another one that Sun is working on is called Java Server Faces, though they're not really done with it yet and the current consensus among Tapestry folks is that, while it may be better than plain old JSP, that it's not better than Tapestry yet; but they're not biased either. ;+)
The point here is that you *can* remain in a fat/rich client environment, but if you would like to finally make the transition to a web application, it's easier than ever now. We're well past the point where everyone is writing Perl CGI scripts or Java servlets that generate all of their own raw HTML (*shudder*).
Please mod this post only if you think others should/n't read this. I have enough ego^H^H^Hkarma. Thanks!
We already know all that. Old. Very old.
Well, Mozilla prompts you before installing anything, so that eliminates most insecurities.
IE prompts a lot of the time, too. It's not the browser to be worried about; usually the problem with these cases lies between the chair and the keyboard.
Christopher S. 'coldacid' Charabaruk -- coldacid.net
As far as I understand it, Mozilla (Seamonkey, the suite) is not a XUL application. Mozilla Firefox on the other hand, is.
The XUL toolkit seems to be lacking a decent editable "grid" widget. Grid widgets allow spreadsheet-like grids where users can enter information into data cells, resize columns, etc.
I would love to be able to present for him a solution that works for mozilla as well. Is it possible to add an entry, say "Print 5 Copies" to the default popup menu below "Save Page As", and have that run some javascript (or something else) using any of the mentioned RDF/XBL/XUL?
When you are sure of something, you probably are wrong (search for "Unskilled and Unaware of It").
Firefox and Thunderbird use a newer XUL toolkit than Seamonkey, but they all use XUL.
The shareholder is always right.
Firefox is much faster and slightly more featureful than the browser component of the Mozilla suite. Saying XUL is slow because Mozilla is slow is like saying C++ is slow because your insertion sort code sorts slowly.
The shareholder is always right.
I certainly appreciate an easy to use UI. When I want to change networking settings, it seems like everyone here wants me to go to /sbin/ifconfig and type in three or four parameters I have to look up every time. and may require mutiple commands which take more time. In my opinion it is much faster to use a GUI that displays all necessary information in one window!
I was looking for something exactly like this - thank you /.! =)
Finished skimming it and from the surface it looks pretty decent. Dunno how well it will be when it comes time to write code but from here it's already the best descripton of Mozilla tech I've read yet.
See this and this slide on programming languages.
It mentions Perl, too.timothy got it exactly right. This is a very nice overview and collection of tutorials. It is definitely not designed as a reference, and that is the biggest thing missing for Mozilla/XUL right now. (For now, your best bet is a combination of the book + xulplanet.com, but XULPlanet's reference is just a little too terse to be useful on many things). IMHO to really document Mozilla in a useful way would take at least a couple 1000-page books.
... sockets. In Javascript. Crazy... So, trying to keep in mind Eric Raymond's "Art of Unix Programming", I pulled together a few small daemons using PHP in CLI mode to handle back-end stuff, and used socket_select() to set up a message-dispatching system, keeping things nice and simple and "textual" (as ESR puts it) between PHP and Mozilla. Used the ":" as a delimiter, escaped text going in both directions using standard urlencoding (PHP and Javascript talk that language nicely). Asychronous notification... fun stuff. I can use PHP to call any Javascript method in Mozilla, and vice-versa with PHP, using variable function execution.
Anyway, reading this book did provide me a great leap forward in my first large Mozilla app. For anyone who doubts whether serious work can be done in Mozilla, I will say... yes, but not with Mozilla alone. Obviously, Mozilla is intended as a GUI framework, so to accomplish serious work, you still need some system-level stuff to happen. My biggest quest in developing a kiosk-based app for Linux was how to integrate the two:
1. How to do this is not as readily apparent as I had thought. Of course, every web app developer's first thought would be to use Apache/PHP and basically treat the thing as a web app. But that ignores 90% of the true capability of Mozilla, so even though that was my home turf, I rejected that concept.
2. I thought maybe I would dig into that incredibly large pile of interfaces that makes up XPCOM, and see if I could play with the Python or Perl implementations, but my project was too much of a RAD situation to allow for that kind of time.
3. I thought maybe I could use MozPHP, which embeds a PHP intepreter in Mozilla. Turns out that it is near impossible to actually get it to work, and it really plunks you right back in the same old dynamic-document-building territory as the HTTP-based solution would. (In other words, you are using PHP to constantly re-write XUL content, which in the end can be very counter-productive and performance-intensive for the front end)
4. Finally, I realized that with JSlib (http://jslib.mozdev.org), I could use
Performance? Performance is great. Remember, these are daemons, so I am not continually invoking the PHP interpeter to recompile and execute. And, since my front-end is a chrome:// app, it caches nicely after loading once.
It really was more fun than I thought it would be. All I can say is, give it a try.
The original intent was to use ECMAscript because it was 'already there', seeing as XUL and the XHTML DOM are pretty close in purpose so you wouldn't be writing code twice. And it's a great language for the job, letting you do nice things like using closures to handle events, or doing funky things like adding properties to objects instances and shit. useful in an event driven environment where things are being thrown around willy nilly, properties being checked for, and their existance spawning all manner of conditional behavior. javascript is a really ass-easy language to plug your gui components together. In this way you can skin simple behaviors into the interfaces with it, and try different modes of interaction without recompiling. You shouldn't actually WRITE non-trivial applications with it, though. You should be using XPCOM callbacks that talk to native code for that (i.e. C/C++, java, python).
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
Please. The distinction between fewer and less is minuscule at best. Yes, fewer is to be used for objects that are in an inferior countable number; and, yes, less is to be used for an inferior graduated amount; but what is significant is that both denote inferior quantity. Because whether an object is countable or graduated can be determined by the meaning of the word modified, the distinction is superfluous and so is obsolescent in informal language.
Moreover, many languages do lack such a distinction between countable and graduated. These languages' users somehow manage to get by, though. Indeed, they may be a little confused when they learn English and discover a semantic distinction they'd never thought about before!
On vit, on code et puis on meurt.
Mozilla uses the GTK+-Libraries to draw itself in Unix-Environments. But it does not rely on GTK+. In Microsoft Windows, GDI is used to draw the canvas.
There was a QT-Port of Mozilla for Unix, but it has long gone from the tree.
With all people comparing XUL with other client/server-oriented UI toolkits... I'm surprised nobody is asking about the possible use of XUL as the UI enhancement in web applications. It's something that's been badly needed for such a long time. Just look at where the current battlefield is between the J2EE and .NET camps: the web-UI. MS came up with WinForms, Sun is counter reacting with Java Server Faces.
I have no idea about XUL, so could someone care to comment about XUL and webapps?
Does mozilla have something like DCOP? I read an article recently on using DCOP with KDE and it seemed really cool. Now I want everything to have DCOP. :)
For XUL to be really useful, I think there should be a provision for the XUL app to be loaded from a server.. say, if I hit http://www.mysite.com/store, it should be able to load the shopping site xul onto my browser without requiring any client-side installation.
As far as I know (I could be wrong) I don't think this currently works in Mozilla. At the moment, all XUL apps need to be registered in the chrome (put into this folder?) before it can be used - so a client-side installation is mandatory.
Therefore there is no compelling reason to develop an app in XUL when wxwindows, qt, gtk etc serve the same purpose better (performance is definitely better than xul and qt/gtk/wxwindows are all cross-plaform to varying levels)
Mozilla can already load apps directly into a browser and do some pretty nifty things with it, so adding this ability to load apps across the network would greatly increase its usefulness.
Integrate SVG and SVG based UI widgets and we really could have a killer platform.
Bill,
I'd really like to get your feedback on XUL. Any chance I could arrange for a conversation w/you?
-Ben
I have no problem with your religion until you decide it's reason to deprive others of the truth.
anyone know why xulplanet.com has been down for the last 3 days?......