Year of Firefox: Right On Schedule

I wrote back in February:

I predict that Firefox browser marketshare will be near 20% by end of year 2004.  It's that good and getting better.

And browser marketshare numbers so far:

2004 IE 6 IE 5 O 7 Moz NN 3 NN 4 NN 7
September 68.3% 6.5% 2.5% 17.7% 0.2% 0.2% 1.3%
August 70.3% 7.0% 2.3% 15.5% 0.3% 0.3% 1.4%
July 71.0% 7.7% 2.3% 13.8% 0.3% 0.3% 1.4%
June 72.4% 8.3% 2.3% 11.8% 0.3% 0.3% 1.4%
May 72.6% 9.2% 2.2% 11.0% 0.3% 0.3% 1.4%
April 72.4% 10.1% 2.1% 10.3% 0.3% 0.3% 1.4%
March 72.1% 10.7% 2.1% 9.6% 0.4% 0.4% 1.4%
February 71.5% 11.5% 2.2% 9.0% 0.4% 0.4% 1.5%
January 71.3% 12.8% 2.1% 8.2% 0.4% 0.5% 1.5%

Actual marketshare of Firefox is less than the 17.7% because this statistic does not distinguish between Mozilla and Firefox.  My guestimate for actual Firefox marketshare is 12~14%.

So it looks like my prediction is still on track.

Update:

Apparently News.com is seeing similar numbers:

Among CNET News.com readers, site visitors with the Firefox and Mozilla browsers jumped to 18 percent for the first two weeks of September, up from 8 percent in January.

Firefox RSS Support

I just finished looking at the code implementing Mozilla's RSS support (aka 'Live Bookmarks') and came up with these tips:

To make the orange RSS button show up on the bottom right corner of Firefox when your webpage is displayed, add following HTML fragment to your webpage's HEAD element for each feed.

<LINK type="{feedMimeType}" rel="alternate"
    title="{feedTitle}" href="{feedUrl}">

where {feedMimeType} can be:

application/rss+xml
application/atom+xml
application/x.atom+xml

if {feedMimeType} is not one of the above then {feedTitle} has to be one of the following (case-sensitive):

rss
RSS
Atom

Otherwise, {feedTitle} can be anything.

To make feed items appear correctly in Firefox bookmark sidebar, your feed items *must* have both non-empty 'title' and 'link' tags.

And what do I think of Firefox's so called RSS support?  Words like crappy and useless comes to mind.

Update #1:

Following is a copy of my comment to Dan Gillmor's post quoting my 'crappy and useless' comment:

Some details behind my rather rude comment:

1. There is no such thing as RSS support in Firefox 1.0PR. Firefox 1.0PR *uses* RSS feeds to implement Live Bookmarks. While Live Bookmarks is useful for del.icio.us, live bookmarks are read-only.

2. While such use of RSS is laudable, they failed to distinguish between Live Bookmarks, a specific application of RSS, and the RSS technology, creating confusion as a result.

3. Live bookmark behavior is inconsistent across feeds. For link blogs, live bookmarks point to different destination sites. For other blogs, they point to different sections of a page or different pages at the same site. Live bookmarks confuses and wastes bandwidth.

4. Bookmark sidebars are too narrow to display item titles effectively.

ChatToon: a chat game

After reading Wired's Instant Messaging Goes Graphical article this morning, I came up ChatToon.

ChatToon is a graphical game for IM, SMS, IRC, and MUD users on platforms with graphics capability.  The idea is to either cooperatively or competitively fill in cartoon dialogue bubbles of a typical morning cartoon provided by the chat hosting service or uploaded/pulled by one of the users.

Cartoonists can make their one to four cell cartoons available and are compensated with per-usage fee and publishing fee.  Publishing fee is charged when people want to share the end product of their ChatToon game with friends and family or post it to their blog.  If it's good enough to be distributed widely, then the cartoonist and the ChatTooners share the generated royalty.

I am not going to pursue ChatToon because I am busy with other ideas and because ChatToon has many sticky issues which I don't have time nor interest to resolve.  Still, I thought the idea was interesting enough to post about.

Struts 1.2.2 Released

Struts is still widely used by server-side Java developers, but I have stopped tracking it after the release of Struts 1.1 more than a year ago.  So it's no surprise that I didn't notice the release of Struts 1.2.2 until now.

Scanning through the Release Notes, I don't see any compelling reasons to upgrade.  Even worse, there are good reasons to not upgrade, like removal of code deprecated in 1.1 which will break some existing code.

I don't think I'll be upgrading my Struts 1.1-based projects and, for new java webapp projects, I'll be using the Spring Framework.

So long and thanks for all the actions, Struts.  It's been fun watching the paint dry.

Backside of the GUI

We can't see the backside of the Moon, only photos.  Likewise, we never see the backside of GUI objects.  Not only do we not see it, we don't expect it to be there like we do with the Moon.

As a kid, I had a moment of enlightenment of sort when I saw my father open up a gadget (I forget what) with a screwdriver.  From that point on, I had the urge to open things up to see what's inside.  Usually screws that hold gadgets together were in the back or on the side.  So the bit of knowledge I added to my model of the world then was that the front of a gadget was for controls and the back was for opening it up.

That bit of knowledge didn't apply to GUI objects.  To open up a gadget onscreen, you have to browse the menus to find the settings or preference command because there is no backside to GUI objects.

Backside is a lost word in the language of GUI design.

Now we can google, but we still can't flip or turn.

Vary: ETag

These days, I am not tracking Atom mailing list too closely due to the traffic volume (currently 7 times XML-DEV traffic)and lack of time, but Tim's FooCamp2004 post prompted me to read Sam's Vary: ETag post and comments.

While I like the cleverness of the solution, I have misgivings about how practical it really is.  Aside from requiring Vary: ETag aware clients keep track of ETags, the solution requires a lot of server side work for doubtful gain.

  • Everyone seems to agree that low traffic blogs won't see any noticeable gain.
     
  • I don't think the large blog services like TypePad and Blogger will gain much either because such services must support tens of thousands of feeds, each of which must be sliced and diced at the expense of CPU load to reduce bandwidth.  Parsing every feed for every request to figure out which subset to send back is not cheap.  Even if a cache is used, frequent editing of recent posts will increase the CPU load noticeably.
     
  • That leaves only feeds like the MSDN aggregated feed which will see noticeable bandwidth reduction at the expense of writing a custom Vary: ETag handler.

A key problem is that XML is not an efficient format if you are doing a lot of search and extraction.  Regular expression can be used but not reliably or fast enough unless the feed is preprocessed into a more palatable form (canonical or proprietary reg-ex friendly format).

A similar but more practical solution might be to serve feeds as a multipart MIME resources with sequenced parts.  Each feed item becomes a MIME part and feed metadata is also a MIME part.  Extra benefit is that binaries can be embedded as well and other content formats (i.e. RSS) can be supported as well.

MUD Scraps

These are just MUD/IRC/IM related scraps of thought trails accumulated over the past couple of weeks.  Actually, most of them are resurfaced scraps from long past but I turned them over like one would a flipjack so I thought I should park them on my blog so I can look it up next time they resurface.

  • IRC channels as rooms in a MUD – an IRC channel is, in essence, a bunch of people talking in a room.  Everyone can hear and see each other (unless they are whispering or lurking invisibly).  It's just like being at a same location in a MUD.
  • IM session inside a MUD – IM is like talking inside a private room in a MUD.  Overlaying the room metaphor gives persistence to sessions and storage for shared objects.
  • Wiki page as a room, an object, or a thread of conversation inside a MUD.
  • Topic or thread of conversation as an object – threads of conversations are constantly created and updated and 'leads' to the threads can be found by where, when, who, and what.  So if you enter a room where a conversation took place there some time ago, you can find it and, if you want, pocket it to keep track.  In a sense, you are subscribing to a feed.
  • Googling conversations in IRC and MUD – this is self evident so I won't explain.  A hack implementation can just generate a web page per thread of conversation and let Google index them.
  • NPC as IRC bots – enough said other than that they should be easily programmable, customizable, and deployable.
    • Fido, open the report.
    • Fido> Which report?  I have…
  • MUD objects with MIME types and custom renderers – images are displayed, audio and movies are played, spreadsheet is displayed using Excel, etc.  Thumbnails of these objects are displayed when 'see' command is invoked.

Linux VMware Blues

If you are running a Linux guest under VMware like me and my blog's hyperlinks are green instead of blue, turn on subpixel font rendering to get the blues.

FYI, I am running RedHat 9 under VMware running on XP, primarily for development and testing.  For example, I needed to write a milter so I initially wrote a C++ version using Eclipse running under RH9 VMware guest.  The milter was talking to sendmail server running inside the same virtual machine.  Eclipse CDT running inside the VM was rather difficult to work with so rewrote the milter in pure Java using Eclipse running on XP.

To debug, I configured the sendmail server running inside the VM to invoke the pure Java milter running under Eclipse debugger outside the VM.  Then I sent both plain text and multipart MIME messages using Evolution, running inside the VM, as well as Outlook, running on another machine, to the sendmail server inside the VM which in turn invoked the milter running outside the VM.

While all this might be confusing to some, it worked amazingly well.

Snowballed Blogger

A while back, I noticed that a fresh 'best web development language' war broke out, this time between Java and PHP.  I tuned out when it got ugly but noted that the war got started when a Friendster engineer posted about the Friendster's switch from JSP to PHP along with some throwaway comments that many Java geeks interpreted as insults.

I didn't know that the engineer was Joyce Park (hey, a fellow Korean-American blogger) and that she got fired recently for blogging until I read the Red Herring article (aren't they supposed to be dead?).

The problem here is that most bloggers just don't realize that they have a powerful tool in their hands that could cause serious damages whether intentional or not.  If Joyce said what she posted to engineers she met in person, all there would be a heated discussion.  But posting the same on her blog created a big wave of controversy among geeks with Friendster as the center piece.

Although everything she wrote was indeed public information and the change in file name extension (.jsp to .php) made it clear to any geek that Friendster switched from JSP to PHP, Friendster could have paved over inquiries about the switchover with silence just as Google did with Orkut's use of ASP.NET.  But Joyce pushed Friendster into the middle of PHP vs. Java battlefield when she wrote in a post titled Friendster goes PHP:

… we can now stop being a byword for unacceptably poky site performance…

What I don't understand is how she failed to see the consequences of her post.  The flamebait title and comment along with her being an employee of Friendster made it a perfect slashdot fodder.  Not only has she not seen it then, she doesn't see it  even now.

I am not saying Friendster was right to fire Joyce.  I think they overreacted and opened a supersize can of whupass on their own face.  But I think it's more important for corporate bloggers like Joyce to learn how to protect their employers from their blogging activities.  Pointing angry fingers at Friendster points in the wrong direction IMHO.  We need more learning and less lashing out.

Running Longhorn inside Quake

Longhorn will bring 3D to the desktop.  This means that windows will be hierarchical 3D objects that can be, for example, swivelled aside to make room on the desktop without hiding the window's content.  Window contents are 3D so buttons and controls are swivelled when the container window is swivelled.

I am not yet convinced that Longhorn's 3D window manager has much non-geeky values.  In the end, we are still simulating a deskbound world and therefore the GUI is constrained and contorted by the desktop metaphor.  Because our world cannot be translated into a language that consists purely of desktop lingos like documents, folders, pens, and magnifying glass, we invented windows.

While I could go on and on about the limitations of the window metaphor, I am running short on time so I'll just get to my point, which is:

Longhorn desktop itself should swivel down to reveal a 3D world within which we can work 'directly' with persistent objects instead of limiting ourselves to windows.

Instead of squeezing real world size objects into spacially meaningless hierarchy of folders, lets place them in rooms, buildings, and places to which we can navigate in.

As an engineer, I realize fully that this sort of change is equivalent to a mindless auto executive telling the engineers to lower the dashboard by 5 inches.  But this subtle change will finally let computer users leverage their real world knowledge and experiences when working with computers.