The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Saturday, May 03, 2003

Barbarian, thy name is UN Delegate

The decision to make the cafeterias into “no pay zones” spread through the 40-acre complex like wildfire. Soon, the hungry patrons came running. “It was chaos, wild, something out of a war scene,” said one Aramark executive who was present. “They took everything, even the silverware,” she said. Another witness from U.N. security said the cafeteria was “stripped bare.” And another told TIME that the cafeteria raid was “unbelievable, crowds of people just taking everything in sight; they stripped the place bare.” And yet another astonished witness said that “chickens, turkeys, souffles, casseroles all went out the door (unpaid).”

The mob then moved on to the Viennese Café, a popular snack bar in the U.N.'s conference room facility. It was also stripped bare. The takers included some well-known diplomats who finished off the raid with free drinks at the lounge for delegates. When asked how much liquor was lifted from the U.N. bar, one U.S. diplomat responded: “I stopped counting the bottles.” He then excused himself and headed towards the men's room.

Via jwz, TIME: Food Fight

It's a sad day when not even The Onion can't outdo real life. I could see something like this happening at a college or university, where the students have no money and can be easily bribed with free food, but this is the United Nations here, supposedly the epitome of civilization where we work out our grievances and don't resort to rioting.

Sheesh!

Sunday, May 04, 2003

A milestone that just slipped by …

[spc]tower:~>uptime
  5:38am  up 394 days,  5:53,  6 users,  load average: 0.01, 0.10, 0.09
[spc]tower:~>

Heh … this machine has been serving up websites since March 3, 1999 but due to circumstances (moving the machine, it being unplugged by mistake, buggy software that someone coughmecough wrote) it had yet to reach an uptime of one year, and lo! Three months ago, it hit that milestone and I didn't notice.

Not bad for an old discarded 486 …

Monday, May 05, 2003

Photo Friday: Small

[Photo Friday: Small]

Photo Friday: Small

Thursday, May 08, 2003

Yes, I'm very observant

“Oh no!”

“What's wrong?” asked Spring.

“The monitor,” I said. “It doesn't seem to be working.” I had just sat down in front of the computer. I saw the LED in it's orange state, which usually means the computer was inactive enough to cause the screen to blank. Any activity on the mouse or keyboard would cause the screen to light back up. “Whah!” I was flinging the mouse and slamming the keyboard.

“Um, Sean, try that button,” she said, pointing to one of the small round buttons on the front of the monitor.

I hit the small switch she pointed to, and the monitor flickered on. “Um, what?”

“That's a power switch.”

“That is?”

“You didn't know?

“Nope.”

“How long have you had that monitor?”

“Umm,” I said. Thought for a moment. “Perhaps three, four years now?”

“And here I thought you had a weird habit if always turning off the monitor from the rear switch.”

“Nope, didn't realize that was a power switch,” I said. Spring was holding back her laughter. “Go head, you can laugh.”

“Bwahahahahahahahaha!”

“You might want to remember to breath …”

Friday, May 09, 2003

Photo Friday: Urban

[Photo Friday: Urban]

Photo Friday: Urban

Saturday, May 10, 2003

“It's the end of the world as we know it … ”

… It appears the group is preparing for the calamity it says will kill us all on May 15.

So, how are we going to go? Chino, in what she called her final statement issued on May 5, lets us in on the secret:

“It will be caused when electromagnetic waves strike the Japanese archipelago and the delicate gravitational balance between the Andromeda nebula and other nebulas is altered.”

Via Robot Wisdom, Countdown to doomsday: What makes a cult leader tick?

Ah, so that's how we end. And here I thought we didn't have anything to worry about until 2012

What I find intriguing, but not fully explained, is how Yuko Chino ever became a cult leader in the first place, being misanthropic to the point of never having met her husband! (or rather, her husband never met her; and from reading the article, not many of her followers met her either)

The cynic in me is tempted, very tempted, to start a religeon. Then I too can have mindless slaves doing my bidding while I rake in the money …

Monday, May 12, 2003

He could have at least spelled “Hussein” correctly …

From: Nassery Hosein <nassery_h11@rediffmail.com>
To: sean@conman.org
Subject: URGENT ASSISTANCE
Date: Tue, 13 May 2003 02:55:13 +0200

From: MR NASSERY HOSEIN

Dear Sir,

You may be surprise to receive this letter from me,as a result of hearing from for the very first. . The purpose of my mail is that I am MR NASSERY HOSEIN , the first son of PRESIDENT SADDAM HOSEIN,born from another woman which is the third wife of my father.

I am writing from a near by country which i don't want to disclose it now for security reasons, where I am currently based as political asylum seeker. Before my father was force out from office by bush and blair , he deposit the sum of (US$35.5M) thirty-five million, five hundred thousand United States Dollars only, in a private Security and Finance Company. May be he for-saw the looming danger of bush and blair ? This money was paid cash to the company on my name to the Security Company …

Oh my was that funny.

Help! I can't breath!

Okay … okay … I think I'm slowly recovering …

Unlike the George Bush Nigerian scam parody letter, I think this one is legit.

Well, legit as in “someone is attempting to actually scam me by being the son of Saddam Hussein” and not “this form of money laudering is perfectly legal.”


Return of the Duracells

That's because the brains in that vat aren't really speaking our language. What they are speaking, he said, is “vat-English,” because by “a tree” they don't mean a tree; they mean, roughly, a tree image. Presumably, by “Monica Bellucci” they mean “the image of Monica Bellucci in ‘Maléna,’” rather than the image of Monica Bellucci in “Matrix Reloaded,” brains-in-vats having taste and large DVD collections.

Via Ceejbot, The Unreal Thing: What's wrong with the Matrix?

I found the original The Matrix to be a decent film overall; the first half has a great set-up (which I can watch over and over again) but once Neo wakes up having taken the red pill, I tend to loose interest. I actually think Cypher had the right idea in that film (really, compared to conditions outside the Matrix, Neo didn't have that bad of a life inside the Matrix). Sure, the special effects were industry changing (like Star Wars; another okay film that people went ga-ga over) but over all the story was fairly old hat to readers of Philip K. Dick.

And the review here of Matrix Reloaded isn't kind. It's fun to read, but the reviewer didn't like the film much at all.

And that has me worried …

Tuesday, May 13, 2003

Bite me, Bill

killjoy, my Windows 98 box, suddent froze up.

Okay, it's Windows. That's expected. It's happened to me plenty of times. And when the three-fingered salute doesn't work, then it's time to hit that big 'ol red switch (or in my case, the white switch on the front of the box), wait for scandisk to finish its fandango on the drives and it's back to what I was doing when the system crashed.

Only this time, scandisk didn't run. The system spit out an error message about a missing VXD file and dropped me to the C:\ prompt.

Not good.

Spring has a dual-boot system; Windows 2000 and Windows 98. Time to bring up Windows 98 on her system, and using sneakernet, copy files from her system to my system in the hopes I can get it back up and running.

I restore the missing file, reboot.

More missing files. This time I didn't even get a C:\ prompt, which was really not good! I attempted to format a bootable floppy disk on Spring's machine only to have it crash. Quite hard.

Fortunately, scandisk ran on her system. But the second I attempted to format the floppy disk, it crashed again!

By this time, I had rebooted my system and fortunately, it came up with a menu, allowing me to boot up to the command line (C:\). But with Spring's Windows 98 acting all wierd, I decided to use Windows 2000 to copy the files.

Long story short—too many files are missing (including the very important krnl386.exe—sigh) so until further notice, I'm out one Windows box.

I'd switch the box over to Linux, but first I need to see if it supports the scanner I have (I know Linux now has limited support for the webcam I have, and if the scanner is supported, then goodbye Windows!

Wednesday, May 14, 2003

Musings on the Spam

Mark just alerted me that he blocked an IP address because it was attempting to spam us. Or rather, it was attempting to spam all sorts of addresses to conman.org. Over 200 attempts in the past month.

I then started going through the mail logs, and I found all sorts of fun stuff. Mr. Spammer trying various userids. Then there was the spammer that attempted to mail the same invalid address nearly 300 times. I also noticed that spammers were queueing mail up at our backup MX servers, which not only loads our system up rejecting such mail, but loads our backup MX servers in accepting such mail to begin with.

Mark and I discussed the issue a bit and we came up with a few ideas of lessening the load. One idea was to add a module to Postfix (since not only do we use that, but both our backup MX servers use it as well) to monitor rejected addresses and if a single IP address attempts to deliver to too many bogus addresses, automatically block access from that address for a period of time (both the number of attempts, and the length of time of the block would be configurable).

The other problem is spam sent to bogus addresses at the backup MX servers; they have no idea which addresses are valid and which aren't, so all mail is accepted and queued up for final delivery. To get around that problem, another module could be added for the primary MX server to notify the backup MX servers of valid addresses; something similar to the way DNS updates changes from master to slave servers. Such a scheme certainly won't scale, but for the number of users we have (across our system, and our backup MX servers) it's servicable, and it would prevent the backup MX servers from queueing up mail for non-existent users.

In fact, now that I'm thinking about it, I wonder if this is how people selling lists of email addresses can “claim” that all the addresses are deliverable? Of course they're deliverable, if you send the email to a backup MX server, of course it's deliverable (for most—I'm sure there are a few exceptions).

But this is something I need to look into …


An ever expanding urbal sprawl slowly moving westward across the swamp

The Publix we shop at is at the corner of US-441 and 8th, pretty much west-south-west Boca Raton. I'm not familiar with what is west of US-441 since everyone I know who lives here in Boca lives east of us (with the exception of JeffK, who lives about a block west of the Facility in the Middle of Nowhere); there hasn't been much of a reason to go west.

But curiosity got the better of me.

I turned west onto 8th and followed it out.

[This is as rual as it gets] [Note the lovely mobile mansion west of US-441]

It was an odd neighborhood. I'm used to seeing the occational mobile home park (this is, after all, Florida) but never one this size. The entire neighborhood, going back perhaps two, three miles, consisted of nothing but mobile homes. And they had definitely seen better days too.

[End of the Road but the power goes on] [The Road Goes On, but not by car ... ]

The road finally ended about two, three miles past US-441 in what for South Florida passes for a rual area. I turned around, and took the first street going north. I was in an exploratory mood. Very quickly the scenery changed from run-down rual to upscale yuppidom. Taking the next left (west) at a large four lane road I've never heard of before, I saw well manicured lawns and stately Royal Palms lining the street, with the occasional shopping center. It must have turned north because I found myself crossing first Palmetto Park Rd (a major east-west road here in Boca Raton) and then ending at Glades Road (another major east-west road). I then figured I'd see just how far west I could go on Glades.

Not very far. About half a mile and it turned south. There was not much here yet, but there was heavy construction on the west side, what looked to be either a huge school, or maybe a mall (hard to tell). A street sign revealed that I was on University Drive (which is a major north-south road around Ft. Lauderdale) but that it ended at Palmetto. No choice but to head back east at this point.

It was strange, like finding another city when not expecting it.

Friday, May 16, 2003

Photo Friday: Candy

[Photo Friday: Candy]

Photo Friday: Candy


Whoops! We're still here …

Oh pooh! The world is still around. I wonder how Chino is taking the news?

Saturday, May 17, 2003

Obligatory Matrix Reloaded Review

At the last second, I decided to go with Spring and see Matrix Reloaded; I'm getting together with friends tomorrow and it's highly likely they've all seen the film and I'd hate to miss out on any conversations that we might have about the film. Overall, it was okay. I'm not as overwhelmed as some of my friends are (like Rob) but it was certainly better than say, Highlander II (another instance where the first film wasn't heavily advertised and gained a cult following) or even Phantom Menance (another instance where a sequel had been hyped so far beyond its ability to match said hype).

The major complaints I have about the film (and from reading many many reviews, are nearly universal): there's still no good reason for humans being mere batteries for the machines, the Zion sequence at the beginning (unlike most other reviews, I think the entire sequence, dull as it is, could be cut without hard to the rest of the film), the burly brawl was not well done (looked too much like watching a video game the effects were so badly done) and the other action sequences were too over the top thus obscuring the mind games going on (and between Neo's two critical conversations, there is some serious mind games going on).

And, because I knew to look for it, the slight greenish tint of the Matrix scenes was quite noticable; it was the same effect the Wachowski brothers did in the first film.

Sunday, May 18, 2003

More Matrix Madness

I arrived at Jeff's house just in time to see the end of The Matrix (and just as I suspected, they had all seen Matrix Reloaded). It was then that Jeff mentioned an interesting bit of trivia between the two films. In Matrix Reloaded, Neo meets with The Architect, the supposed creator of the Matrix, in an office filled with TV monitors, filled with images of Neo. But this isn't the first time that Neo has been through this office. In The Matrix, just after Neo has been arrested by Agent Smith and taken into custody, he's being escourted to an interrogation room and passes through a room filled with TV monitors filled with images of himself!

Curious indeed …

Update on Wednesday, May 21st, 2003

Just a clarification from Jeff (via email):

Just a clarification. The scene I was talking about had us as the audience in the Architect's office. We see Neo and the Agents in the interrogation room. We then pass through the screen into the room.

It having been a while since I've seen the film, and having missed seeing it at Jeff's, my memory was a bit hazy …

Monday, May 19, 2003

“And now, news from our sponsor … ”

In two places the ad featured statements highly critical of now-former Secretary White. In her statement Fitts criticized White for his inability to balance the Army's books at a time when the Department of Defense has admittedly “misplaced” more that $3 trillion of taxpayer money. Ruppert observed, “White's claim that residual damage from the attacks of September 11th was the cause for unbalanced books in the Army was ludicrous. The attack of 9/11 hit the Navy Wing of the Pentagon. How could that affect the Army?”

In the text of the ad itself White was also criticized for his role as an Enron executive which provided him with millions of dollars in income while stockholders were being defrauded. White was subsequently investigated for insider trading of Enron stock.

Via Robot Wisdom, Subscriber Buys FTW Full Page Ad in The Washington Post—Leaked Copy May Have Forced Resignation of Army Secretary

I wonder if we'll start seeing more and more of this? Certainly the major media outlets won't write articles like this so it seems to the only way to get news like this out is to slap it into advertising.


Bad robot! Bad! Bad!

The load on tower shot up, making it quite unresponsive. A few minutes later it settled down enough for me to check the system out.

I would think that programmers who know enough to check for robots.txt would be smart enough to limit the number of concurrent connections to any one website. But not for something called “QuepasaCreep” which slammed this site pulling down the entire archive in about a five minute span (typically, about two or three hits per second).

It seems to have passed; I can only hope they realized just how poorly their robot was behaving.

Tuesday, May 20, 2003

Oh, so that's where they stuck .org

For the past few months it's been rather difficult for me to check registration information for .org TLD; I do a whois and get back:

The Registry database contains ONLY .COM, .NET, .EDU domains and Registrars.

Then it's fishing around various websites to get the registrar of the particular .org domain I'm interested in. Then via an entry at utopia with cheese, I finally learned that Public Internet Registry contains the database in question, and that I can just query whois.pir.org.


Yet more Matrix musings

Much like that other great Keanu Reeves vehicle, Bill and Ted's Bogus Journey, The Matrix: Reloaded centers around the hero's journey into the Underworld. Frazier, in The Golden Bough, notes that it is a prophetess—in this case, the Oracle—who sends the hero off on his journey, from where he returns with special knowledge. And, of course, that's just what Neo does, though it would have been a while lot more amusing if he'd had Alex Winter along. (The Oracle probably isn't entirely benign, by the way, even though she may not consciously intend any harm: She is, after all, the one who sent Neo on the path to the Core.)

Via Resilient, CORPORATE MOFO reloads THE MATRIX

A very interesting article on Matrix Reloaded; it even offers a theory as to why Agent Smith was still so antagonistic towards Neo when, from what was said in the film, there is no real reason for the animosity (which was another problem I had with the film).

Thursday, May 22, 2003

This is a new one …

Ring.

Ring.

I pick up the phone. “Hello? … Hello?”

“Hello. This is the Obnoxico Corporation. Please hold and one of our represenatives will get to you as soon as possible. We are sorry for the delay. Please hold,” said the recorded voice.

Wait a second … I thought. They called me! I didn't call them! Why am I on hold?

“If you wish, you can hang up and and we'll t—” Click.

Idiots.


The Google Cluster

Few Web services require as much computation per request as search engines. On average, a single query on Google reads hundreds of megabytes of data and consumes tens of billions of CPU cycles. Supporting a peak request stream of thousands of queries per second requires an infrasturcutre comparable in size to that of the largest supercomputer installations. Combining more than 15,000 commodity-class PCs with fault-tolerant software creates a solution that is more cost-effective than a comparable system built out of a smaller number of high-end servers.

Via the Google Weblog, Web Search for a Planet: The Google Cluster Architecture

This is a good introduction to the Google Cluster, the 15,000 machines (as of the writing of this paper I'm sure) that make up the Google website and give it its incredible performance.

One of the ways they do this is have a series of clusters (of a few thousand machines) located around the world to handle queries more or less locally; I did a DNS query from the Facility in the Middle of Nowhere for www.google.com and got 216.239.51.99 and a DNS query from a machine in Boston gave the result of 216.239.37.99. Some other interesting aspects: they forgoe hardware reliability in favor of software reliability, they don't use the fastest hardware available but the ones that give the best price/performance ratio, and lots of commodity hardware.

The paper doesn't go into deep technical details, but it does give a nice overview of how their system is set up.

Friday, May 23, 2003

Photo Friday: Overlooked

[Photo Friday: Overlooked]

Photo Friday: Overlooked


Six Degrees of FAU

Not only is it a small world, but it's a self-intersecting one too.

The first time I realized this was 9th grade at the local bus stop. Half way through the year a new kid shows up at our stop and in overhearing a conversation I learn he's from North Carolina, which I felt was very cool since that's where I was from (more or less—we moved to North Carolina when I was five, then moved here to Lower Sheol (and I had yet to forgive my Mom this transgression) when I was ten; I was hardly from North Carolina) and wanting to know more, I asked him where he moved from.

Brevard,” he said.

I could not believe it—I too was from Brevard. Upon further discussion we realized we knew the same set of kids too! We hadn't met because his family moved there about a year after we moved away.

Small world.

Today was another realization of the self-intersecting nature of this world.

I met my friend Ken D. at FAU to buy a telescope from him. I had met him only last year through one of the gaming groups I attend. We were in the parking lot talking about the changes to the campus since I last attended (oh, perhaps a good six to seven years or so), pointing out the hideous designs of the new buildings and the renovations of existing buildings (the Biology building had been completely gutted) when talk turned to Flemming Hall.

No, it had not been renovated yet, “and it still looks the same when I attended summer classes there in '86,” said Ken. “In 10th grade, I took part of a summer program they offered here.”

I could not believe it—I too participated in that same program (only I was in 11th grade). Turns out we took at least two classes together, or at least the same classes but possibly at different times. I don't remember him, and I don't think he remember me, but still, it's a wierd feeling when my past comes crashing into the present at such odd moments.


Term papers

The story concludes with a Santa Monica High senior who's never written a long term paper, though he's enrolled in honors and AP classes. He says writing research papers would take time from his extracurriculars: “band, tennis, religious studies and political and youth groups.” He also claims there wouldn't be time for required testing, though there are no required tests for 12th graders.

No can rite

As a student, I would have loved not having to write a term paper (as an Honors student in English, which itself is a convoluted tale, I was obligated to write a “literary term paper” about a long dead author) and all the associated silliness that went along with it; the bibliography cards (3×5″ card, X number of sources, no exceptions), the note cards (4×6″ card, minimum of 50 cards, no exceptions), the thesis statement (since the Statues of Limitations have run out I can now confess that I cribbed my thesis statements right out of encyclopedia write-ups of the authors I had to write about), the outlines, the rough draft (long hand, in pen) and the final typewritten report (the margins being precisely 1″—no more, no less). Sure, my teachers assured me that this would be of prime importance in the coming years and that this was the “proper” way to write a research paper (yea, right. I remember having to write a grand total of one (1) research paper, which I basically made up on the spot in the style of Dave Barry and getting a C; I suppose I only got that grade since it may have been more interesting to read than the regular tripe papers turned in). As a student, I hated term papers.

But now, reading the above, I'm horrified at the thought that students today don't have to write one, and more likely, can't! And that educators either don't care, or can't afford to care.

The comments on that particular story are horrifying as well:

Though I don't believe this is a new phenomenon—I had friends at my small liberal-arts college who hadn't a clue how to write a paper—it certainly is more alarming now that I'm a parent. I see my stepsons, both in accelerated programs at school, completing projects that include coloring in downloaded maps and imagining what people would wear at a certain point in history (not, mind you, looking it up and reporting on it, but imagining it). I've been told to ignore errors in my own son's written and spoken English in an effort to get him to “like” communication. I can't be the only parent wondering when it will be time for my kids to focus on how to gather information and be able to organize it in a useful way.

“No can rite” comment

Even though it's hard on all of us, I do think Spring is doing the right thing by homeschooling the kids. The sheer number of educational horror stories I'm reading at Joanne Jacob's site is numbing.

Tuesday, May 27, 2003

Plains, trains and buses

My Dad has been asking when I'm heading out to see him in Palm Springs, California but I absolutely refuse to fly since 9/11, given the new Federally mandated annoyance shakedowns.

Heck, I haven't liked flying since Congress deregulated the airlines.

“So why not a train?” asks Dad. “Or the bus?”

So I check Grey Hound. Never mind the fact that it'll take nearly three days to cross the country from Delray Beach to Palm Springs, and never mind the (and I don't really like saying this, but … ) class of people I'll be stuck with for said three days, and never mind the two transfers I'll have to do (only one layover with air travel) but it costs a freaking $338.00 round trip!

I don't think I've paid that much flying to Palm Springs.

So much for the bus. That still leaves the train option.

The only trains I've been on, besides subways (in New York, Boston and Washington, DC) is the local Tri-Rail; taking the train as a serious alternative to the airlines isn't something I've thought of before. So off to the Amtrak site to do some research.

I have to say that the Amtrak site is annoying to use. The airline reservation systems all allow you to input either airport codes or cities; the Amtrak site you need the train station code, which you have to look up manually. Bad design there.

Okay, there's a station in Deerfield Beach (if it's the one I'm thinking of, it's only about four miles away), and there's one in Palm Springs. So far, so good.

Only there isn't a train between the two.

Looks like I'm going to have to split this up into several legs here. Atlanta is a pretty big hub for airline travel in the US, so let's see if I can get there from here.

The good news: There is one; the bad news—Atlanta doesn't seem to be a hub for Amtrak. I'd have to travel through Washington, DC on my way to Atlanta. A thousand miles north to come back 500 miles south across two days of travel.

Yea, right.

Okay, so now that I've figured out that Washington, DC is the hub, and I know I can get there from here, let's see if I can get to Palm Springs, California from there.

Nope.

Amtrak does not make this easy.

So poking around I do see there is a train from Orlando, FL to Los Angeles, CA (with a stop over in or near Palm Springs), which means I get to stop over in such lovely places as Pascagoula, MS and Lordsburg, NM. All in all, 35 stops between Orlando (leaving at 1:45 pm) and Palm Springs (arriving at 3:23 am), taking three days (leave on a Sunday, arrive Wednesday). For someone who liked travelling, this might be fun.

To me, it sounds like pure torture, even if it is cheaper (at $218.70) than the bus.

Then again, Dad could always come out here …

Update, a few minutes later …

Forget the Amtrak links—they're hopelessly broken and when they aren't broken, they're hopelessly useless.

Good Lord just how bad can that site get? Geeeze!

Wednesday, May 28, 2003

Baby names gone bad

As you will see, some parents-to-be have gone so far into the realm of baby-obsession they have lost track of the real, adult world. Their view is so skewed their only concerns are a) making their child “unique” and b) trying to keep the kid from being teased, often with terrible results.

Baby's Named a Bad, Bad Thing

When I wrote the entry about parenting magazine I searched some baby name sites to see what names are popular for this bit:

And it's also the poor parent that can't afford to send Tylor or Madison to a cheerleading or computer camp for the summer. Or the ever popular Adventure Camp where kids compete in inane competitions and every night the least popular kid is voted out to spend the rest of the summer in time out.

I wanted something that screamed “Boomer spawn” and I think I pegged it with those two names (Mark even commented how on-spot those two names were). But never would I expect to see the horrors of Cielle, Keegan, Payson, Baylie, Fleur Jade (“Fleur Jade?”), Acenzion, Kesleigh, Ritalin and Atticus considered as names for kids. I'm very surprised that Njorl, Hrothgar and Beowulf aren't in contention (come on! Hrothgar would be a killer name—I've even suggested as much to friends of mine. Alas, none of them have taken me up on the offer).

Alas, tis too true. As Baby's Named a Bad, Bad Thing shows, some parents have no shame. Or common sense (“Fleur Jade?” Fleur Jade? What is that? Some sort of French Jedi?). What even happened to names like James, Peter, Sean, Seamus, Lincoln, Cadilac, Buick, Charteuse or T-bone?

Thursday, May 29, 2003

A Proposal for a Blogging API

There is talk in the blogging circles about standardizing on a blogging API. As Evan Williams (of Blogger) says:

We would love if there were one universal API for blogging tools. It's clear why this would benefit everyone. Our edict at Google is to help the blogging industry. Raise all boats. And, as I've said before, we're not interested in doing more work for the fun of it.

The Tragedy of the API

The consensus seems to be the need for an all dancing, all singing API that is implemented by all blogging software; that this is needed for the community to prosper. But I am not a fan of all singing, all dancing APIs as they either tend to be too simplistic in what they support or overly complex to provide coverage for everything currently being done. Too simple, and it's useless if the underlying software can do more. Too complex and it's hard to test, and hard to write for with excessive data being required just because some obscure product from Andytown, Florida provides it and no one else does, but have to support it anyway.

There's even a comparison between competing APIs which is fine as far as it goes, but only covers what exists now (or will very shortly); what it does not do is look into what features existing blogging software has, nor possible future features (fotoblogs are a relatively recent phenomenon that may or may not be easily supported using the existing APIs). If you are going to do an all singing, all dancing API (since some of the early blogging APIs are too simple in what they allow) then you might as well figure out what features are common across blogs, which ones aren't and therefore how to extend the API without breaking anything.

And hopefully without making it so heavy weight that it's a pain to use. I personally think it's still too early and that the problem isn't fully understood to get a clean well designed API in place, but I can try anyway.

I've looked over the existing and some of the proposed APIs and made notes as to what is needed, what should be optional, and how to provide for extensions. I'm going to skip for the moment the actual transport protocol (DCE RPC, XML RPC or SOAP via HTTP on TCP, other alphabet soup protocols, etc.) and instead concentrate on what the API should do, and what it needs as far as data (and I'm borrowing liberally from the existing APIs as well).

Of primary concern is authentication. While it would be nice to use the existing authentication methods built into HTTP, not all transport protocols tunnel exclusively over HTTP (SOAP, for example), and we can't totally rely on the webserver to allow end user websites to configure this (most, yes, but not all). So including some method of authentication is probably a Good Thing™ so (fields optional unless otherwise specified, types default to strings unless othewise specified; fields marked as binary can contain arbitrary binary data, default values (if any) may be given):

auth DATA
{
  method      : REQURIED ENUMERATION = 'Basic',
  userid      : REQUIRED,
  credentials : REQUIRED BINARY
}

The method would most likely be Basic in which the credentials would then be the password (possibly base64 encoded, much like the basic authentication in HTTP. Since the method of authentication is included it can easily be extended for greater security.

Some of the APIs also require data about the client software (Blogger required this, so too does Google to use their API) so might as well define data for that:

client DATA
{
  appkey : REQUIRED,
  id,
  version
}

Before getting to the data and methods to allow posts, one of the deficiencies I've notice is the rather poor support for users (defined as people who can post to the blog)—note the plural usage there. They seem to assume a blog has sole authorship; not to say that a blog with multiple authors can't use the existing APIs, but it has to be shoehorned in and there is no provision for the owner of the blog (or anyone else with administrative rights) to allow or disallow others to post entries. Another thing to consider is that a person might be allowed to post to multiple blogs (assuming all the blogs in question reside on the same server—think Live Journal or Blogger). Also, perhaps a way to create a new blog on the server through this proposed API:

user DATA
{
  userid   : REQUIRED,
  fullname,
  email,
  blogs DATA[] // this is an array
  {
    blogid : REQUIRED,
    rights : REQUIRED ENUMERATION
  }
}

// --------------------------------------
// The catagory enumeration consists of
//	'none' , 'light' or 'heavy'
// more on this below.
// --------------------------------------

features DATA
{
  anonposts : BOOLEAN = 'false', // more on this way below
  comments  : BOOLEAN = 'false', // comments not supported
  trackback : BOOLEAN = 'false', // trackback not supported
  templates : BOOLEAN = 'false', // template editing not supported
  clientid  : BOOLEAN = 'false', // client data is required
  catagory  : ENUMERATION = 'none'
}

blog DATA
{
  blogid    : REQUIRED,
  features  : REQUIRED features DATA,
  fullname,
  url,
  startdate :          DATE-ISO8601,
  users DATA[]
  {
    userid : REQUIRED,
    rights : REQUIRED ENUMERATION
  },
  templateid[],
  catagoryid[]
}

STRING user.edit // returns userid
(
  auth   : REQUIRED auth DATA, //user loggin in
  blogid : REQUIRED,
  user   : REQUIRED user DATA,
  auth   : REQUIRED auth DATA, //for user being added
  client :          client DATA
)

user DATA user.info
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  userid : REQUIRED,
  client :          client DATA
)

BOOLEAN user.delete
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  userid : REQUIRED,
  client :          client DATA
)

STRING blog.edit //returns blogid
(
  auth   : REQUIRED auth DATA,
  blog   : REQUIRED blog DATA,
  client :          client DATA
)

blog DATA blog.info
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  client :          client DATA
)

BOOLEAN blog.delete
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  client :          client DATA
)

The purpose of the features DATA is to indicate which portions of the API the blog supports, and which ones it doesn't. So if templates is false then there is no use in the client calling the template portion of the API (catagories are handled somewhat differently but I'll get to that). The rights enumeration would probably be something like owner, create (an entry or post), edit (can edit own posts), delete, edit-others and delete-others (with the owner able to do all the above). The templateid array contains a list of currently defined templates that can be manipulated (if supported):

template DATA
{
  templateid : REQUIRED,
  body       : REQUIRED STRING,
  type       :          ENUMERATION,
  name
}

STRING template.edit // returns templateid
(
  auth     : REQUIRED auth DATA,
  blogid   : REQUIRED,
  template : REQUIRED template DATA,
  client   :          client DATA
)

template DATA template.info
(
  auth       : REQUIRED auth DATA,
  blogid     : REQUIRED,
  templateid : REQUIRED,
  client     :          client DATA
)

BOOLEAN template.delete
(
  auth       : REQUIRED auth DATA,
  blogid     : REQUIRED,
  templateid : REQUIRED,
  client     :          client DATA
)

You'll notice that I have edit methods but no create methods. In the existing APIs there is no real difference between creating an object and editing an object except for the return code (usually the create call returns an id, and the edit call returns a boolean). I don't really see the need for such a distinction; in the API I have, if the object doesn't exist when you attempt to edit it, it is created. Even though this means that the edit method may end up doing two jobs (creation, and/or modifying) I feel it's cleaner doing it this way. The user interface can hide this though (if I may use some pseudocode here):

if (action == 'new')
{
  message_box(templateinfo,templatedata,EMPTY);
}
else if (action == 'edit')
{
  templatedata = template.info(auth,blogid,whichtemplate);
  message_box(templateinfo,templatedata,USE_EXISTING_DATA);
}

template.edit(auth,blogid,templatedata);

Catagory support is not easy—my own software (mod_blog) for instance, has very limited support for catagories (which I call classifications); it pretty much keeps track of catagories as a comma delineated list of catagories (which is more or less free form) so in that case, I'd like the catagory support to be pretty light. But Moveable Type seems to have a bit of a heavier weight interface for catagories. We can define support for the heavier Moveable Type catagory interface:

catagory DATA
{
  catagoryid : REQUIRED,
  name       : REQUIRED,
  primary    :          BOOLEAN
}

STRING catagory.edit // returns catagoryid
(
  auth     : REQUIRED auth DATA,
  blogid   : REQUIRED,
  catagory : REQUIRED catagory DATA,
  client   :          client DATA
)

catagory DATA catagory.info
(
  auth       : REQUIRED auth DATA,
  blogid     : REQUIRED,
  catagoryid : REQUIRED,
  client     :          client DATA
)

BOOLEAN catagory.delete
(
  auth       : REQUIRED auth DATA,
  blogid     : REQUIRED,
  catagoryid : REQUIRED,
  client     :          client DATA
)

But this is overkill for Blogger and my own software. I decided to hedge and in the features DATA I defined the catagory feature as an enumeration: none, light for blogs like Blogger and my own where catagories are simple strings and heavy for blogs like Movable Type, where catagories are more integral to the system. The intent is that a system with a catagory enumeration of none or light won't have to support the above portion of the API.

So now we come down to the whole point of blogging: posts. While the existing APIs assume text based entries, you can shoehorn in other types but it's not exactly what I would call clean (and the MetaWeblog API has definite ideas of what constitutes a post, some of which doesn't map that well to other blogging software, like … oh … my own!) and there is wide difference in metadata support (stuff like titles, catagories, timestamps, etc.)—quite the mess.

post DATA
{
  timestamp : DATE-ISO8601 = currenttime(),
  userid,
  author    : user DATA = {
                            userid   = 'anoncoward',
                            fullname = 'Anonymous Coward',
                          },
  title,
  catagoryid[],
  templateid,
  permalink,
  parentid,
  childid[],
  trackback DATA[]
  {
    title,
    excerpt,
    url,
    blog_name
  },
  body DATA[]
  {
    content-type      : REQUIRED,
    data              : REQUIRED BINARY,
    name,
    content-encoding
  },
  status DATA
  {
    publish       : BOOLEAN = 'true',
    syndicate     : BOOLEAN = 'true',
    allowcomments : BOOLEAN = 'false',
    anoncomments  : BOOLEAN = 'false',
    iscomment     : BOOLEAN = 'false',
    comments      : NUMBER,
  }
}

filter DATA
{
  startdate   : DATE-ISO8601 = blog.startdate,
  enddate     : DATE-ISO8601 = currenttime(),
  number      : NUMBER       = 100,
  startpostid,
  endpostid,
  published   : BOOLEAN      = 'true',
  syndicated  : BOOLEAN      = 'true'
}

STRING post.edit // returns postid
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  post   : REQUIRED post DATA,
  client :          client DATA
)

post DATA post.info
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  postid : REQUIRED,
  client :          client DATA
)

BOOLEAN post.delete
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  postid : REQUIRED,
  client :          client DATA
)

STRING[] post.listids
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  filter : REQUIRED filter DATA,
  client :          client DATA
)

post DATA[] post.list
(
  auth   : REQUIRED auth DATA,
  blogid : REQUIRED,
  filter : REQUIRED filter DATA,
  client :          client DATA
)

If you look closely to post DATA you'll notice some wierd things about it. First off, why have both userid (which indicates the author of the post) and author (of type user DATA); then there's parentid and childid. The intent of this wierdness is comment support. There really isn't that much difference between a regular post and a comment to a post—they're both entries written by a person. The major difference being that a post won't contain a parentid (well, I suppose it could) while comments to that post will (which is the postid of the post the comment applies to). Threaded comments fall out of this, if you allow a parentid to be the id of a comment itself.

The intent for having both userid and author is to allow for anyone to post comments (if allowed). This could also be used to allow anyone to make posts without the user having to be added first! And why bother with an API for comments when it'll mostly duplicate the posts API?

I defined the body of post DATA as an array, each element containing the content type and data to allow uploading of not only any type of data, but multiple types of data. On my own blog I often include images in with my posts, so this allows me to not only include text, but the images as well (and I could use the optional name field to specify the filename on the server end) as one self-contained call (which is something else I've noticed that the other APIs haven't addressed).

Is this better than what's out there now? I don't know—my own blogging software doesn't support any of the existing APIs (in fact, I primarily use email to add entries, using existing email headers and some of my own (like the Subject: header for the title) for the meta data. And I think I've covered most of the territory, plus added some other features I've felt were missing or underdeveloped, and I hope that by writing this, I can get some discussion going. But in the end, it's the code that speaks, not the spec.

Friday, May 30, 2003

Photo Friday: Transportation

[Photo Friday: Transportation]

Photo Friday: Transportation

Obligatory Picture

[Don't hate me for my sock monkey headphones.]

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: http://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

http://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2017 by Sean Conner. All Rights Reserved.