Blog: 2005-01

Latest  2014  2013  2012  2011  2010  2009  2008  2007  2006  2005  2004  2003  2002  2001
-12  -11  -10  -09  -08  -07  -06  -05  -04  -03  -02  -01

The Joy of URI

The most fundamental specification of Web architecture, while one of the simpler, is that of the Universal Resource Identifier, or URI.

—Tim Berners-Lee, "Web Architecture from 50,000 feet"

Nothing so profound in my comments below, but the mechanics of the mundanity get a little interesting (or so I tell myself)...

In my current Web programming work in Scheme, I'm finding very helpful the practice of representing internally all URI (RFC3986) as absolute URI. For robustness and efficiency of many URI operations, I use uri.scm uriobj objects rather than strings. Need to make an absolute uriobj for a blog entry directory? (resolved-uriobj blog-entry-id blog-base-uriobj) Want to cross-reference generated pages? Use the canonicalized absolute URI as keys. Want to not accidentally write an object to the wrong place on the filesystem? Treat the objects' URIs as canonical and use a uri->pathname function just like a Web server would use.

Want to generate the HTML for a blog entry that will appear in multiple locations (e.g., the blog entry's permalink page, and the entry's inclusion in a recent-entries list on the blog home page), yet link to images under the permalink URI? Absolute URI, of course!

If you're dreading the thought of HTML full of huge absolute URI in attribute values (href, src, etc.), and furthermore whimpering that those absolute URI would prevent you from test-browsing the site tree direct from the filesystem, that's why we eventually convert the URI to relative. We do this at the last possible instant, as we're writing an HTML object, and are certain of the HTML object's URI.

To this end, I've added an optional argument to HtmlPrag's write-shtml-as-html, which is a filter function that is applied (recursively) to any "foreign" object found in the SXML. This filtering is done during the preorder traversal used to transliterate SHTML to HTML. If we embed our absolute URI in the SXML as uriobj foreign objects, then we can do:

 (lambda (foreigner attribute?)
   (cond ((uriobj? foreigner)
          (antiresolved-uri foreigner page-uri))
         (else (error "unrecognized foreigner:" foreigner)))))

(Note: Although the uripath reverse representation of paths mentioned on 2004-06-24 makes antiresolution a little bit trickier than it should be, I suspect that the shared tails created by earlier URI resolution actually make up for that in most cases, since eq? #t on shared tails lets us avoid further descent.)

After a detour of tweaking some of uripath representation and parsing, at time of this writing, I've implemented most of antiresolved-uri:

  (string->uripath "/a/./b/c/x/y;1;2/z/../p/q/")
  (string->uripath "/a/b/c/d/../../c/d/e/f")))
⇒ "../../x/y;1;2/p/q/"

New uri.scm and HtmlPrag releases will come once my new pilot app has reached a milestone that suggests I'm probably done with changes to those two libraries for awhile.


rfc3339.scm ("RFC3339 Date and Time Format in Scheme") has been released.

Dirty Bus

The photo doesn't do justice to the filth that covered the windows, but I am thinking that the weather has been too cold for MBTA to wash their shiny new buses.

I've heard some of the MBTA personnel have been spending these subzero nights crawling around under buses subway cars to keep the fluid lines from freezing. The thought makes complaining about one's chilly apartment more difficult.

PETA's Unhappy Cows & Unhappy Vegs

This is old, but I don't recall seeing it before:

Linked from that page is PETA's "Free Veg Starter Kit," which includes food photography guaranteed to alienate all but the extreme-crunchy and anorexia sets. I've been vegetarian for around eight years, and even I know that Dry Foliage Wrap isn't going to win many new lunchtime fans.

RSS Version Roulette

About to implement topical RSS feeds in my Scheme Web site software, I bumped into this quote I'd seen before:

I have often stated [...] that there are 7 different and incompatible versions of RSS. This was based on an embarassingly simple formula: I counted the version numbers in use (0.90, 0.91, 0.92, 0.93, 0.94, 1.0, and 2.0) and came up with the number 7. But recently some people have taken to claiming that there are not 7 versions (despite obvious evidence to the contrary), and even if there are, that they are somehow compatible with each other so it doesn't really matter. So I dug a little further to precisely document the incompatible changes in each version of RSS. I would like to publicly apologize for my previous misstatements. There are not 7 different and incompatible versions of RSS; there are 9.

—Mark Pilgrim, blog entry 4-Feb-2004, "The myth of RSS compatibility"

I would lean towards RSS 2.0.1, due to the imprimatur of the Berkman Center, but that version is still using the displeasing RFC822 time formats rather than ISO 8601. The other option seems to be RSS 1.0, which smartly uses ISO 8601, and also supports pluggable "modules" for augmenting the semantics without breaking backward-compatibility. So, I have to put RSS support aside til I have time to take a closer look at both formats.

Urban Snow Cave

Someone made a snow cave on Mass. Ave. in Central Square. I suspect the denizens of Pearl.

Most Disliked President Ever

A European colleague just said, "Read Friedman's column today? The European bits are very much true, I'm sorry to say."

Let me put this as bluntly as I can: There is nothing that the Europeans want to hear from George Bush, there is nothing that they will listen to from George Bush that will change their minds about him or the Iraq war or U.S. foreign policy. Mr. Bush is more widely and deeply disliked in Europe than any U.S. president in history.

—Thomas L. Friedman, "Read My Ears," New York Times, 27-Jan-2004

More Broken MTAs

550 5.7.1 <[deleted]>... Rejected: You are not

Ms. Turlington has been my faithful outgoing mail server for quite some time now.

Expository Political Photography

Wonkette noted this great Don Emmert (AFP) photo of Ted Kennedy at the Bush inauguration.

That reminds me of a similarly great recent photo by Ron Edmonds (AP) — a reaction of three dissimilar Presidents.

Frontline "Al Qaeda's New Front"

Reportedly, the Frontline story, "Al Qaeda's new Front," is a must-see. Watch on television, or wait til the 28th.

You Might Not Have Gotten My Email

A mail bounce this afternoon alerted me that my MTA has not been sending the FQDN in the HELO. I've fixed the problem, but some people I mailed in the last week or so (possibly longer) may not have gotten my email. If you were expecting to hear from me, but have not, please say so.

As an aside, this is another adverse impact of spam, in that many MTAs nowadays are violating long-standing precepts, such as "be liberal in what you accept" and "bounce mail on error." Nowadays, spam has forced some MTAs to be strict in what protocol they accept, and to fail silently rather than notify a sender of an error. Email doesn't work near as well as it used to. Measures like SPF are ill-conceived. Sadly, killing prominent spammers, such as those in Florida, is simply illegal, and a bad societal precedent. Why are US-based spammers not in Federal prison? Isn't gazillions of dollars of lost US productivity a threat to national security?


Went out in the snow this morning to take some snapshots in Inman Square and Harvard Square. Harvard Yard was windy. The lettering on a bookstore's door took on new meaning. Nobody was playing chess today. Cambridge fire engine 11 cruised down Broadway, ejecting firemen to dig out the hydrants.

I also ventured out last night with a tripod, but the Canon PowerShot 10 went through both my NB-5H batteries in less than 10 minutes total. I had similar battery life this morning, but I kept powering the camera back on whenever it would do the low-battery shutdown, and I got a dozen exposures that way. Warming up the batteries during a brief stop in ABP seemed to help.


If you use PLT MzScheme, here's a couple things you might want to define in your ~/.mzschemerc file for interactive use.

The first is a pp pretty-printer procedure, which is indispensible when working with SXML:

(require (lib ""))
(define pp pretty-print)

The second is a pe procedure that pretty-prints a syntax expansion of a quoted expression, which is handy when working with define-syntax:

(define (pe expr) (pp (syntax-object->datum (expand expr))))

For example, an expansion of an example ? form in Protobj (in version 0.2alpha; 0.1 uses $):

(pe '(? (gimme-an-object 42) foo bar baz))


(let-values (((o) (#%app (#%top . gimme-an-object) (#%datum . 42))))
   (#%app object-get o 'foo)
   (#%app object-get o 'bar)
   (#%app object-get o 'baz)))

Non-interactive MzScheme script files should of course invoke mzscheme with the -q option, to avoid loading unnecessarily.

Since I usually use MzScheme within Quack, I don't often need Readline support, and so don't load it in my ~/.mzschemerc. When I'm not running Emacs and need a quick Scheme REPL to use as a calculator or something, I use my mz Bash shell alias:

alias mz='mzscheme -L readline'

Boston University BSL4 Lab

BU spokeswoman Ellen Berlin declined to say why university officials have not corrected the reports.

—Alice Dembner, "Infections not listed in BU bid for biolab," Boston Globe, 21-Jan-2005

Why? I could hazard (ahem) a guess. Could it have something to do with the sheer imbecility of bringing the most terrifying bioweapons into Boston — and the delicate PR that entails?

(Earlier mentions here of the BU lab were on 21-Oct-2004, 30-Sep-2004, and 30-Sep-2003.)

Maureen Dowd 1999-2000 Runyon Acceptance Speech

Dowd can be annoying sometimes, but this was funny:

I'm just so glad to be out west. Back east, we're dealing with charges and counter-charges, accusations of incompetence, a whisper campaign....But look, enough about the New York Times and the Pulitzer board.
The Times was shut out of the Pulitzers for the first time in 15 years. Not that anyone was counting.
So, I want to congratulate the two Denver papers on winning Pulitzers. But our new policy at the Times is that we think the Pulitzers are sort of ostentation. It's sad that you need that sort of outside validation.

—Maureen Dowd, 1999-2000 Damon Runyon Award acceptance speech,

Laptops & Debian Security Advisory on CUPS

Debian DSA-645 suggests that I lucked out by happening to disable cupsd's open port on the laptop a week ago (see 12-Jan-2005).

Laptop wireless security note for the uninitiated: in general, open ports are one of the bad things to have on your laptop. Although, if you run Microsoft Windows, your security posture is hopeless against even casual attacks, anyway — I think it's a safe bet that you will be compromised. Unless you reformat your hard disk and install GNU/Linux or one of the BSDs, to give yourself a fighting chance. (Or unless you trade in your PC laptop on a Mac one.)

I'm especially conscious of laptop security here in Cambridge, and not just because of industrial espionage around the biotechs, MIT, and Harvard. Surely some MIT sociopath has rigged up an iPaQ with commonly-available security scanner software and exploit scripts, such that, whenever s/he enters a café, all vulnerable laptops are compromised within a few minutes. One point in Cambridge's favor, however, is that the Charles River provides a convenient way to dispose of the twit's body.

Shattered Glass

"Shattered Glass" was great. The "60 Minutes" Stephen Glass interview on the DVD extras is creepy. The film is a must-see, if you've not already. The acting and writing are great. Some of the characters and scenes seem especially cliché, but that's explained at the end. The DVD audio commentary track is also good (so far; I'm listening to it as I type this).

I've had a run-in with at least one person kinda like Glass in my career, and the fact that they are fabricating is so inconceivable — e.g., they're "too nice" for that, they have a credible track record, other people vouch for them — that you end up an enabler, much to your own detriment.

I'm also seen such people protected for political and fiscal reasons. For example, they're chummy in an old-cronies network, or a million-dollar account/contract/grant is tied to them. Reputable newspapers and magazines don't seem to get away with that forever (see Mike Barnicle, Jayson Blair, Janet Cooke, Stephen Glass, Patricia Smith); other supposedly reputable organizations shouldn't either.

Brand new and used. No bidding.

Colds and Ibuprofen

Next time I get a cold, I'm going to take ibuprofen as soon as the nasal stuff starts to happen, for the anti-inflammatory effect. One ibuprofen seemed to do wonders before bed last night, and I got a solid sleep, unlike the night before.

And I'm not going out for a walk this morning.

Seymour Hersh "The Coming Wars" Article

Another good Hersh piece:

Seymour Hersh, "The Coming Wars," New Yorker, issue 24-Jan-2005, posted 17-Jan-2005

MassEquality Fund-raising

MassEquality is fund-raising to oppose an anti-gay-marriage amendment to the Constitution of the Commonwealth of Massachusetts. You can donate at least $25 to the side of reason and justice in this historic civil rights battle. They have matching contributions lined up.

Observing Bush Inauguration

So far, the only options I've found for January 20th, none of which sounds compelling, are:

Barring a dramatic Kerry appearance with an eleventh-hour injunction, I plan to work on the 20th.

Anyone Have Web Ads They Feel Good About?

My vanity Web site,, is getting just under 100,000 hits a month. I've considered running ads to offset the hosting fees (OK, and maybe fund some newer gear), but even the Google AdSense people didn't give me the warm fuzzies (see 12-Apr-2004).

I am thinking about ads again as I rewrite the aging site software using XML and Scheme. Scheme tools include ASXT, uri.scm, and HtmlPrag. There are a number of planned enhancements, including clever hooks for controlling ads, which I'd rather not do in the current Emacs Lisp site software:

;; $Id: web5.el,v 1.3656 2005/01/17 19:03:35 neil Exp $

Media Lab Europe Closing

In case you missed the announcement (Slashdot didn't get it til Friday afternoon, and the AP story on was timestamped 5pm, for example), Media Lab Europe is being closed. Here's some coverage as of Saturday 8am EST:

First off, my condolences to the affected students and researchers.

Regarding certain MIT Media Lab impresarios and administrators: this latest failure can't be helping their careers.


The CloudShield CS-2000 looks like a fun toy.

Halcyon Days of Summer

I found some photos that a few summers ago I'd embargoed indefinitely. Now, with people probably graduated and past the boards and bars...

In summer of 2001, testing out my then-new camera in Harvard Square, I took a few shots of the Charles River with an approaching motorboat on it. As the boat reached the footbridge, I turned and walked on to get better shots of the Cambridge bank without the boat, only to hear some guys start howling wildly from the bridge behind me. When I got home and reviewed the images, I think I realized the cause of the excitement: the boat contained two young ladies, one of whom appeared to be missing a top quite proudly.

Well, it's uncertain, even in the original image, much less in this heavily compressed JPEG for the Web. (The women shall remain sufficiently blurred as to be unidentifiable.) But I think it makes for a pleasant summer story on a cold New England winter day. And it beats blocking the path of an oncoming snowplow to capture a parking lot at its least ugly.

CUPS Public Listening

Noticed that the cupsd that I run on my laptop for ad-hoc printing was listening on all network interfaces, which is a problem with 802.11b. Debian's package configuration objects don't seem to cover this, so I edited /etc/cups/cupsd.conf to replace the Port directive and with a Listen directive that binds only to loopback, like so:

# Port 631

Your Birthday: On The Internet

Happy Birthday to Petey. Everyone who knows her should lavish gifts of thermal underwear, space heaters, tropical weekend getaway packages, totally '80s legwarmers, etc.

GNU/Linux on the Toshiba Satellite 4005CDS

Just for the record, since someday someone else will encounter one of these bricks of a 'portable' computer: GNU/Linux on the Toshiba Satellite 4005CDS

Metro Boston Paper

Not a surprise, to those who've seen the free street corner toilet paper, Metro: "Metro Exec Apologizes for Racial Remark," Editor & Publisher, 11-Jan-2005

CIA President's Daily Briefing

Looks like it's not seen much wear. (

Gehry Shack

I dunno, Gehry's current house almost looks defensible against an angry mob of torch-wielding villagers from the neighborhood committee. That also explains the corrugated shack roofing elements in the $300-million MIT Stata Center. (Photo accompanying article: Nicolai Ouroussoff, "Mr. Gehry Builds His Dream House," New York Times, 9-Jan-2005)


Saw Hero on the small screen. I liked the narrative devices and much of the visuals. The wire-fu had a few rough edges in some scenes. Overall, I liked it, but the almost-showstopper was the film's brutal nationalist message.

Bill Moyers Speech

As difficult as it is, however, for journalists to fashion a readable narrative for complex issues without depressing our readers and viewers, there is an even harder challenge - to pierce the ideology that governs official policy today. One of the biggest changes in politics in my lifetime is that the delusional is no longer marginal. It has come in from the fringe, to sit in the seat of power in the oval office and in Congress. For the first time in our history, ideology and theology hold a monopoly of power in Washington. Theology asserts propositions that cannot be proven true; ideologues hold stoutly to a world view despite being contradicted by what is generally accepted as reality. When ideology and theology couple, their offspring are not always bad but they are always blind. And there is the danger: voters and politicians alike, oblivious to the facts.

—Bill Moyers, 1-Dec-2004 speech, via, "On Receiving Harvard Medical School's Global Environment Citizen Award, 6-Dec-2004

Dersu Uzala

Kurosawa's "Dersu Uzala" was OK. The characters were straightforward and predictable, and I didn't find the visuals stunning. I think I would've been more appreciative, had I approached it as an archetypal story.

Two NYT Pieces Today on Torture

Mark Danner, "We Are All Torturers Now," New York Times, 6-Jan-2004

Before [Alberto Gonzales] helped President Bush circumvent the accords and reserve the right to do so "in this or future conflicts," you had to tune in to an old movie with Nazi generals or Vietcong guards if you wanted to see someone sneeringly shrug off the international treaty protecting prisoners from abuse. ("You worthless running dog Chuck Norris! What do we care about your silly Geneva Conventions?")

—Maureen Dowd, "Don't Torture Yourself (That's His Job)," New York Times, 6-Jan-2004

Protobj: Prototype-Delegation Object Model in Scheme

Protobj 0.1 has been released.

UrlSkip: Web URL Simplification in Scheme

UrlSkip 0.1 has been released.

Kenji Mizoguchi's 47 Ronin

Over Christmas, I watched Kenji Mizoguchi's 1941 version of "Genroku chushingura" ("The 47 Ronin"), which has to be the most boring samurai film I've ever seen. Towards the end of the grueling four hours of samurai bureaucracy and samurai drama-queen pettiness, in flickery black&white, with virtually no action— the portrayal of the climactic samurai army assault (that wasn't) has to be seen to be believed. I like to imagine that, in 1941, a horrified samurai sleeper cell saw the film and then restored honor with a spectacular all-out samurai assault on Mizoguchi.

Mary Chung

First blog entry of the new year is that I finally met Mary Chung of Mary Chung Restaurant. She was cheerful and gracious.

Testeez: Simple Test Mechanism for Scheme

Testeez 0.1 has been released.

Earlier to... 2004-12

© Copyright Neil Van Dyke      Contact