This is a response to two excellent articles by Joel Spolsky
(particularly the second one).
http://www.joelonsoftware.com/articles/APIWar.htmlhttp://www.joelonsoftware.com/items/2004/06/17.html
Joel raises some points that are very relevant to W3C work in the area
of Web Applications. Here I go through some of his wishes and
wish-nots, giving my personal opinion (by no means an official
position of W3C). It's an email, not an article, so it is probably an
unstructured ramble. One day I'll start a weblog and write proper :)
The good news is that it seems we have many of the big players
ready to go in this area. Joel may get some of his wishes
sooner than he thinks (let's hope!).
Let's start with the wishes.
> 1. Improved inline editing (step one: make contentEditable work in
> Gecko just like it does in IE 5.5+)
This is an interesting suggestion that I haven't heard raised within
any W3C Group for a number of years. How many people would like it?
How many people use it in IE?
> 2. Javascript features to do fast REST queries back to the server, so
> I can implement things like a lush spell checker with the
> dictionary on the server. It should be possible to have a 300,000
> employee directory on the server and create a web app that has a
> list box where you can type the first few letters of an employee's
> name and see a filtered list as fast as you can type on the screen.
Joel++. At the moment people either use post/getURL or the IE
XMLHTTPRequest object (which seems to have XML in its name for no
reason other than coolness :). None are "standard".
This is an important topic within W3C. Firstly, there is the DOM3 Load
and Save features but I think they don't really address what Joel is
asking for. More interesting is the work from the SVG Group who are
standardising much of the old "window" object. SVG 1.2 has both an
URLRequest interface and a raw socket interface [1] which would
address Joel's needs. Why sockets? Because developers don't want to
proxt stuff through HTTP (like IRC) and it has shown itself to be
popular in technologies like FlashComm.
[Aside: You'll see that we're trying to move to event-based
programming within the new APIs. We've found, and received lots of
feedback, that it is the right model for Web Applications. You may
also think that the current APIs are broken, which is also true.]
It's worth mentioning that the SVG group has received a lot of flak
internally and externally for creating such APIs, on the basis they do
not belong in an interactive graphics specification. We know! The
problem is that we get lots of people (like Joel) asking for the
features and there isn't any place (as yet) within the W3C to make it
happen. The SVG Group had no choice but to start the work
themselves. They have every intention of opening the work to another
group and ensuring that they work on all formats, all platforms in all
implementations. What is there is SVG is a *Work in Progress* - it is
not a final perfect API.
I suggest that the people interested send in their comments (to this
list for example). Let's work together as a community to come up with
something and avoid a number of competing proposals.
Before we move on, Joel requested REST like APIs. I assume other
people will want SOAP. Both are interesting and useful. What do
people think?
> 3. A rich set of standard controls for application development that
> provide better ways to upload files, better ways to drag and drop
> with the desktop, etc
Again, the SVG Group are adding as much of this as possible, based on
developer requests. It's really hard to do it in a secure and
interoperable way. Upload file is OK, we've started on that [2]. Drag
and drop and clipboard access is something that applications need but
requires some form of security model. The alternative would be to
leave it up the user agent, which is probably the approach the W3C
will take until we get more input.
> 4. Compiled or compressed JavaScript, so that web applications can use
> really large amounts of JavaScript with decent performance
My suggestion for compression is to just use gzip and have the
user-agent decompress it (or do it at the HTTP level).
For compilation, that's something that is up to the implementation
(unless Joel means delivering compiled Javascript to the client, in
which case I'd prefer to use another language like Java, or even one
of the .NET choices). This should cue Jim Ley to step in and say
something about compiling Javascript.
Having said that, I think there is a much bigger win by moving to
Ecmascript 2.0. That is, I suggest using a better language in order to
help developers write better code. (Not that there is much wrong with
Javascript...I don't want to raise that meme again!)
> 5. Better standardized windowing features. At the very least I'd like
> modal and modeless dialogs that pop up instantly, a standard way to
> do a menu inside a web page (with ONE consistent UI, not
> everybody's wacky DHTML menu that are all a bit different),
> TreeView and ListView controls, and a standard way to make a
> toolbar/button bar
By far the most common request I ever see! Unfortunately, I see lots
of people ask for it and very few suggest answers. Or, put more
precisely, the answers I see often don't give much more than an
opinion (low on technicalities).
But, yes, I'd love to see this. Here are some of the related
questions:
- Which widget set would you pick? (eg. XUL, Swing, Cocoa, WinFX, ...)
Does it matter? Invent your own?
- Which set of widgets is enough? Some people will want a Tree View,
while others won't be able to live without a color picker.
- Should they be native or not? Does this matter? (The answer I hear
is "yes, it does matter").
- Can I extend them? Can I embed them (eg buttons in tree view)?
The other problem here is that it takes a huge amount of time to first
design something that is useful, and then a huge amount of time
implementing it (and we're talking cross platform).
As I'm one of the people who ask for the feature without suggesting a
good solution, I should not complain. Here's my gut feeling: a minimum
set of useful widgets to make it easy for simple applications, and
then an extensible architecture for other widgets. It's also important
that the new widgets people develop are able to be shipped as
components, so I can do something like "import JoelSooperButton" and
start using it.
Just before we move on to the next topic, the SVG Group have also
looked at popping up windows (not specifically dialogs). There is a
feature in SVG 1.2 for that, but it still remains to be seen what
security problems it exposes.
> 6. The ability to get a "device context" (in a platform neutral way)
> on an HTML control and wail on it to paint just about anything you
> want.
Joel++. Lots of applications will need this (maps/location-based
services is a common example which is really popular on mobile
devices).
The good news is that I think there is a solution: SVG. (I know, I
know.. I'm going to suggest SVG as an answer to everything related to
graphics, interaction and complex layout)
SVG effectively gives you a canvas to draw upon, a graphics
API that is powerful (can do everything apart from really high-end
stuff like 3D), a document model (which Web developers are comfortable
with) and an XML serialization syntax (which may or may not be
useful in this context).
Unless Joel meant what we call "immediate-mode" drawing - which is
sort of like paint and forget. In this case you don't actually add
anything to the document and you have to control when it gets painted
again (say if something overlapped with it). There are use cases for
this style of drawing, but I think the document model above will
really suit 99% of the cases.
> 7. A far richer set of events. At the very least I need to be able to
> use the entire keyboard. Combined with #6 I should be able to
> develop any custom control I want that is 100% client side.
Joel++ for full keyboard access.
As for the custom controls, this is what I was talking about
in #6 with SVG. If you don't need the complete power of the graphics
engine then you should be able to use HTML/CSS to build controls.
The CSS Group and the SVG Group are trying hard to make this happen
with XBL. Many of the examples that Ian Hickson has suggested for XBL
seem to come from potential applications such as gmail, where he
doesn't really need SVG - he'll just use HTML/CSS.
I hope that XBL will expose a more rich development environment also.
If I'm developing a map application, I want to program with Road objects,
not Polygons or Images. XBL should allow this.
> 8. Media integration, so I can play sounds or stream music in standard
> ways without relying on <objects>
Joel++.
Broken record from me - use the W3C specification: SMIL. Or, use
the <video> and <audio> elements from SMIL that were added to
SVG (and would be equally useful in HTML).
There needs to be APIs to these objects as well, so that I can play
sounds of demand (say for a game).
> 9. Graceful degradation for legacy browsers (IE. It's time to make
> Microsoft play catchup again. Fire and Motion Baby.)
OK, here's the hard bit :)
I fully support Joel's point about not breaking existing content.
I also am supportive of the general backwards-compatible approach,
but mostly the way that Joel puts it here: graceful degradation.
Why? Because I can't see any way to address all the important needs
he raised and have them work in IE. Sure, you could have a lot
of fun with IE extensions, but it would be a hack, and difficult
to deploy to every platform.
Let's make sure we don't break existing content.
Let's try to make as much new content work on old browsers
as possible, but make it easy for people to understand
what "features" they are missing and what the benefits are.
That way they can make an informed choice whether to upgrade or not.
And yes, let's not make their browser explode when they visit
an application that uses SVG.
Or have I missed the point? It's completely possible.
My feeling is that the Web Applications of today are doing pretty
ok. Look at Amazon. As Edd Dumbill says, Amazon show that it is
possible to write a Web Application that works great on any platform.
IMO, it's the Web Applications of tomorrow that need the help. I think
these are the ones Joel talks about -- Web Applications that feel
like real applications. He lists a few (fast drawing, updating without
server roundtrip, realtime spell checker).
I really hope we can make it to that point without going through
the "reinvent"-everything stage that he convincingly argues is
difficult to pull off. However, there are some big steps to
take, so it might be hard to avoid the issue completely.
One last thing. I hear lots of people argue that the desktop browser
is now a few years behind the mobile browsers. They say all the
innovation is happening on mobile, and that they can upgrade entire
platforms in about a year. They say that there are many more active
developers creating browsers on mobile than there are on the desktop
(anyone want to guess what proportion?). They say that the mobile
market is completely switched on to Web Applications and see their
phone interfaces *be* Web Applications. This is all worth
considering. Maybe someday the desktop browser will catch up.
Let's move on to Joel's non-wish list.
> 1. Proprietary tools like Macromedia's or Java Applets that embed
> clever widgets in rectangles in a browser. I want this stuff
> integrated with DHTML and CSS, deeply in the fabric of the web
Obviously the W3C has a vested interest in this :)
This is why we held a workshop. One topic was how to integrate
all these technologies, and it looks like we will soon get
very serious in this area with strong vendor buy-in.
> 2. Things that don't have any chance of degrading gracefully on legacy
> browsers. You have to be able to construct an interface that gets
> better if you install Firefox, but still works on IE, without too
> much testing on the part of the developer.
I think I've addressed this above, and again, I like "degrading gracefully".
(I just think it is really really hard).
I'll ask another question: do you think people would really move
to Firefox in this case? My extremely limited understanding of
business and market forces suggests that technology that is slightly
better doesn't really have the same chance of success that a true
revolutionary technology does.
> 3. Boil the ocean schemes that require 400,000,000 users to install
> some thingamajig before you get anything useful. Such schemes will
> not go anywhere.
Yeah, accepted. I've been on SVG for years now with this problem,
even though it has been distributed to 100s of millions of users.
My take is that you have to give users a compelling reason to
move.
On the SVG side, the compelling reason has become mobile. We're seeing
all the major phone vendors (Nokia, SonyEricsson, Siemens, Sharp, etc)
produce handset that support SVG, and Vodafone announcing they
will use SVG for applications in Vodafone Live. People don't need to
take any action other than get a new phone (which they seem to be
doing quite often at the moment). Desktop isn't as simple though.
Anyway, I've rambled on way too long. Everyone feel free
to tell me why I'm wrong (I'll listen I promise).
Dean
[1] http://www.w3.org/TR/SVG12/#network-data
[2] http://www.w3.org/TR/SVG12/#fileupload