More client-side XForms goodness

First, the Chiba team has a new release, a tantalizing version 0.9.9. It includes "convex", a client-side technology that uses the same Java Chiba engine via an applet. Currently IE-specific, but it is still beta after all. Link:​owfiles.php?group_id=20274&package​_id=139156 Another set of projects, UGO (a JavaScript class loader) and DENG 2.0 (an XForms engine that promises to run in the browser, without even needing Flash) are entering an initial beta phase. Link: -m

Sean McGrath: Writing code vs. writing books

Sean McGrath has a well-thought-out article where he compares writing code to writing a book. I have much sympathy for this position, but it raises more questions. For example, how does the prinicple of "test first, then code" apply to writing books? -m

Web Search without the Web

Google Suggest is great--the gap between 'in a blink' and 'however long it takes for a browser reload' can mean the diference when you're drilling down to your target. It's also good to remind people how capable browsers really are. For the right datasets, though, you can go one step further, and avoid the XMLHTTP overhead alltoghether. A good sample dataset is the full text of an O'Reilly book, say, XForms Essentials. See what I'm talking about at (JavaScript required).

How does this work? The bulk of the work is done on the back end by David Mertz's Gnosis utils. I build an index of the actual HTML files comprising the book, then write out two compact JavaScript data structures. One is a dictionary with each word (in CAPS) as the key, and the value an array of matching fileids. The other is a straight array of filenames--the index into the array is the fileid.

The Gnosis utils include a huge list of stopwords that don't get indexed. Also, hyphenated and apostrophied words currently get broken apart. With those caveats, XForms Essentials contains 4461 distinct words. Interestingly, for my book, the result is around 160kb of JavaScript--an amount easily managable by the browser.

On the browser side, a timer watches the submit button-less form and runs a query whenever the value changes. The localfind() function is a port of the Gnosis find() function to JavaScript, with additional complications since I used the more compact array syntax instead of dictionaries for everything. It queries the dictionary, and performs boolean AND when multiple terms are present. The results get put into a div using standard DOM techniques.

Note that this is completely network-independent. If you save the html and js file to a local disk, it will continue to work fine.

I see two major applications for this: personal content management, and application local help files. Most folks' personal data--the local hard drive stuff they really care about--is small enough to fit with this approach. HTML help files could similarly be fully indexed this way, with no dependencies on any server or special application or library on the client.

Let me know what you think. -m

Time to re-read _Text Processing in Python_

David Mertz's book is excellent on so many levels. It's worth a read. Online at though better in print. -m

UBL Input Specifications

Over the last year or so, G. Ken Holman has done excellent work on formatting specifications for UBL, the Universal Business Langauge. (He also had a good presentation, available online at ) The next step, which I'll be helping out with, is the other direction -- gathering and managing UBL data through forms. The first step is a set of input specifications. Look for a bigger announcement in this area in the new year. -m

The Aura Effect

Just as people tend to go though a fixed set of stages while grieving, I belive there is a corresponding set of stages involved in diving into a new and significant piece of code. This is also why otherwise intelligent individuals that are new to a technology tend to ask stupid questions on mailing lists, at least at first.

The "aura" is the general overwhelming feeling you get at first. Maybe you've heard stories about the fantastic complexity of the code, or seen bug reports, or have just been suitably impressed by the the project so far. It can feel like the new project is magic, beyond anything in your experience. It takes a some continuous exposure to the new stuff for it to penetrate this barrier. But during that time, you tend to ask the kind of questions that have obvious answers, once you hear them.

After a couple of sessions, the aura fades. You realize that the code you've been staring at is...just code. The code hasn't changed very much since you started, but you have. You happily move on to the next phase, acceptance. -m

Happy Anniversary Netscape

Today is the 10th anniversary of the release of Netscape Navigator 1.0, and the 0th anniversay of the arrival of my new PowerBook. The first screen upon launch asked me to connect up with a (non-included, ugh) FireWire cable and transfer over all my settings, which worked flawlessly. Well, it did first estimate a 6 hour transfer time, which seemed a bit excessive for 800Mb/sec, but it gradually revised the estimate down and in less than an hour I had a perfectly comfy environment. Joy. -m

(More) IBM XForms

IBM has launched a new Alphaworks technology, using Java and XForms to reach lots of mobile devices. A big design factor in XForms was making sure that distributed processing (i.e. more than just a straightforward client-side engine) be possible. And just it time for my new Ten Favorites article? ;) -m

Google Suggestions

This is very cool, and a good use of client-side xmlhttp. Find-as-you-type is an important feature for information access. My local "it's the data, stupid" system has been doing something similar for a while.

I keep everything important in plain text, of course, and use full text indexing from the Gnosis utils. I set up a simple xmlhttp page that queries as I type, dynamically updating the results page.

Why is this a big deal? The rule of tens: There are some things, like keeping a todo list, that you will simply end up not doing if it takes more than ten seconds. For some things, though, it's more like a one second rule. This makes it easier to jump into a todo list or the million other things you have going on at a given point. -m

Ten New Favorites

I'm updating my Ten Favorite XForms Engines article on Quite a bit has changed since September 2003. If you have any suggestions, let me know. -m

New PowerBook

Deciding on a new laptop really is an agonizing experience. But now the decision is made, order placed, and waiting begun.

This will let my current PowerBook semi-retire, on active reserve duty. The new one has DDR333 memory (vs PC133), an 80 gig/5400 rpm drive (vs 40 gig 4200 rpm), just shy of twice the CPU clock, double the L2 cache, and since Apple's memory upgrades are ridiculously expensive, after a separate upgrade, I'll have more memory too. Yum. -m

OASIS, here I come

I have just joined OASIS. I have some specific plans in mind--watch this space for details. -m

Writing yourself a check

It feels really good to write yourself a check. The new business is going great, though I wanted to build up some cash reserves. That done, time to start writing the checks. That and end-of-year business spending. :) -m


Terms of use

For external use only. I doubt the enforcability of click-through licenses anyway. Copyright 2004 Brain Attic, L.L.C. All rights reserved.


Older stuff here