The reanimated spectre of XLink

There's some talk at the W3C about possible continued development of XLink. (For some background, be sure to read this first: )

The always-amazing Bob DuCharme has covered this nicely in his blog, but I couldn't resist commenting. Link: -m

Linux security myths

Microsoft's Nick McGrath was recently quoted as saying "One myth we see is that Linux is more secure than Windows." Linux security may be a myth, but Windows insecurity is a documented fact. A company called Secunia tracks a number of hardware and software vulnerabilities. Under their page for "Microsoft Windows XP Professional with all vendor patches installed and all vendor workarounds applied", they list a total of 80 advisories, 20 of which are still unpatched to this day. The highest level is "highly critical", and several of them date back to 2002. Link:

Linux fares much better. SUSE 9.0 has 57 advisories listed, only 2 unpatched with the highest "less critical". Link: The newer SUSE 9.1 and 9.2 both have zero unpatched advisories. ( )

Naturally, security involves more than advisories and patches. Still, Redmond's proclamations are looking increasingly less credible and more desperate. -m

Come see me in Vegas

I'll be teaching two classes at the BFMA (Business Forms Management Association) Spring Forms Institute in Vegas, on March 24. XML for Forms, an introduction to XML, and a follow-on class about XHTML. (Better link coming soon): -m

UBL "Lite" revved

It's now officially called "Small Business Subset", and it's at version 0.5 now. Stephen Green has put in a tremendous amount of work on this, and I'm happy to be working in the closely-related area of UBL input specifications. More on that soon. Link: -m

The page on

Curiously enough, it has a prominent link button labeled "Go to site now". Link: -m

From the manual of the T/S 1000, my first computer

(Yes, I still have the manual). Chapter 14: Graphics. Here are some of the more attractive features of the T/S 1000; they utilize pixels (picture elements). The screen you use for display has 22 lines and 32 columns, making 22*32=704 character positions, each containing 4 pixels.

A pixel is specified by two numbers, its coordinates. The first, its x-coordinate, dentoes how far it is across from the extreme left-hand column (remember, X is ACROSS); and the second, its y-coordinate, tells how far up it is from the bottom. These coordinates are usually written as a pair in parenthesis, so (0,0), (63,0), (0,43), and (63,43) are the bottom left-, bottom right-, top left- and top right-hand corners.

The statement

PLOT x-coordinate, y-coordinate

blacks in the pixel with these coordinates, while the statement

UNPLOT x-coordinate, y-coordinate

blanks it out.


Tonight's homework: review this essay

Politics and the English Langauge by George Orwell. Link: -m

Nice quote from O'Reilly Open Source conference, 2002

Good writers provide a context for understanding the subject. -Tim O'Reilly. -m

Thoughts on nofollow

Lots of discussion going around on rel="nofollow", but a few key points haven't been adequately expressed yet, so here we go. There's actually two issues here: the markup, and how search engines process it. The job of markup is to express the authors intent at a level that's deeper than the text that's marked-up. So general community agreement on No Follow is A Good Thing, since folks can more accurately convey their intentions. Search engines can do as they wish with this 'serialized intent', but they do that anyway, so I'm neutal on that aspect. -m

Today's Idea: "Google Suggest"-like interface for Genealogy sites

The Google Suggest interface, or one like at is ideal when 1) you don't know exactly what you're searching for, or 2) you need to make tons of little searches. Both of these seem to apply to Genealogy sites. I'd love to work on one of these. If you run a genealogy site, or know someone who does, get in touch with me. -m

XForms Validator goes open source

By popular request, the online XForms Validator has been enhanced to allow file upload and cut-and-paste input of source documents. Also, the code is available under an Apache 2.0 license. Read on for details.

The online version, as always, is up at

The project is hosted at SourceForge: If you look there, you'll find no releases as of yet--you need to go into CVS for the code. If you have any suggestions for the project, please add them to the SourceForge tracker. And if you'd like to help out with development, contact me directly.

Technical details about the validator were discussed in the IBM developerWorks article:

If you find this useful for your project, let me know. My company will continue to offer affordable support/development packages for the validator. If that sounds interesting, get in touch. -m

Productivity tip: get a better pen

In the 43Folders style of productivity tips, try this: get a better pen. If you ever write stuff on paper, you owe it to yourself to use a decent instrument that doesn't require shaking, or 30 seconds of random scribbling before it works. I don't have a single ball point pen around (except for a few decoys for when folks stop by the office and "forget" to return one they've picked up). Get something that can put down precise lines in archival-quality ink. I use Sanford Liquid Expresso, some nice Zebra pens I picked up in Japan, Micron Pigma (in 0.1, 0.3 and 0.5 mm polymer tip), and Tech Liner. These last two can usually be found in larger office stores in the drafting section. Cary a pen with you at all times and you'll be amazed how often it comes in handy. -m

Wanted: a HOWTO on installing OS X libxml2 Python using only Fink

I played around for a while with fink, changing the "ConfigureParams" settings in info files, but ended up with only compiler errors. This has to be possible somehow--through Fink I already have the full source for everything. So what incantations does one need to make Fink include the right bindings so that "import libxml2" succeeds? -m

XForms Essentials @ Google

Alessandro from Orbeon just clued me in: my book is now online at Google Print (in addition to the regular location). Links: and Nifty. -m

Safari JavaScript bug

In some programming languages, dividing by zero throws an exception, but not in JavaScript. If you paste this, not including the quotes, into your browser location bar, you can see: "javascript:alert(-1/0)". As you can see, the answer is "-Infinity". But now, try this, again without the quotes: "javascript:alert((-1/0)<0)". Minus Infinity is less than zero right? Well, not if you run Safari, version 1.2.4 on OS X 10.3.7 in this case. -m

What I learned porting Java code to Python

Over the winter break, I ported a Java codebase over to Python. I learned a few things along the way...

Those who have been paying attention will know what project this is, but otherwise, you'll have to wait until my formal announcement. :)

I got off to a bad start, I admit. The first thing I did was to "jump in" to the code, and start writing functional parallels in Python. I didn't understand the Java code, but figured that would be a good way to learn.

Because I didn't understand exactly what the code was trying to do, I made lots of stupid transcription errors. The code has lots of tricky, complex conditionals, and more than once I glanced over one of Java's '!' characters, inserting bugs along the way! Many of these kinds of mistakes, like a missed parenthesis, can be caught by simply trying to import the Python module, but wrong is wrong, even after the syntax is right.

Having just read a lengthy tread on xml-dev about strong vs. weakly typed languages, etc. I should comment on that aspect. I did have one instance of the proverbial 'misspelt variable name' that left me scratchiing my head for a few minutes. Overall, the code is between half and 2/3 the size of the original, so I count it as a net gain in productivity. The other common complaint against Python--indentation--caused me no serious problems. I use spaces, not tabs, and once or twice I somehow got off by one space. The interpreter notices this immediately and tells you exactly where to fix it.

My code-first approach also led to a "big bang" integration problem. Once all the Python modules were essentially complete, I had a painful chore of many reps of this: run code--note the exceptions thrown--figure out what's going on--fix--return to step one.

Once the code was exception-free, it still wasn't giving the answers I expected. The original code had a kind of a big bang (to use the term again) test suite, with one major test that tries to cover everything. So, I trekked back into Java-land and wrote a number of fine-grained JUnit tests. Writing these, and reasoning about how I expected the system to behave, finally gave me insight into the code. JUnit tests are a nearly perfect analogue to Python's unittest module, so I was able to write equivalent tests and then make them pass in the same way.

If I had to do it again, I would go straight to the unit tests. In fact, I'd make them even finer grained, even to the point of restructuring the original code a bit to make it more testable.

As a final note, along the way I picked up Wing IDE 2.0. If you're into graphical IDEs, I can recommend it for Python work. -m

Free Idea

Here's a free idea for anyone that's interested. Any device that takes a "power brick", an external transformer and usually DC power supply, should include an option (or a 3rd party accessory manufacurer should offer) an option to include a sealed battery in the brick, making it into a short-term, single-device UPS. This would be especially useful for network devices, like routers and cable modems, especially when they sit alone in a back-room closet or wiring cabinet. Hint, hint. -m

More client-side XForms goodness (repost)

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


Terms of use

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


Older stuff here