JavaScript Technology


Tim Bray recently expressed doubts about PHP:

So here’s my problem, based on my limited experience with PHP (deploying a couple of free apps to do this and that, and debugging a site for a non-technical friend here and there): all the PHP code I’ve seen in that experience has been messy, unmaintainable crap. Spaghetti SQL wrapped in spaghetti PHP wrapped in spaghetti HTML, replicated in slightly-varying form in dozens of places…PHP has earned everyone’s respect by getting where it is, and Sun should reach out to it more than we have. But in the big picture, it feels vulnerable to me.

Tim’s lamentations about PHP reminded me of my initial encounters with, and reluctance about, some of the computer languages I’ve used–and I’ve used a goodly number. All in all, I can ‘speak’ 20 computer languages. My head is a jumble of languages–a veritable tower of babble.

(Discussion about programming languages and showing of wounds earned follows. Note that I make use of naughty language. Lots and lots of naughty language. It’s a code thing.)



I started with BASIC. Contrary to popular myth, that’s B-A-S-I-C, which stands for: Beginner’s All-purpose Symbolic Instruction Code. However, the language is now usually given as just ‘Basic’.

I wrote my first application in BASIC in VAX/VMS. A not particularly useful combination at the time, but popular in colleges for classwork. Yes, I wrote my first application in college, not at home on my PC or laptop. They didn’t have PCs in a box or laptops at the time. You could have a home computer, but you’d have to either hack one, or spend a lot of money on one.

They did have the Internet–and that’s big ‘I’ Internet–but no Web. You could interact with people, though. Usenet, was big–for all those science types to talk about sex.

Anyway, it’s through BASIC that we get the origination of the concept of ‘spaghetti code’. This is code that uses a command called a GOTO to indiscriminately jump about in code to the point where you can’t follow what’s happening, and the code looks like, well, a pile of spaghetti jumbled up on a plate. The following application is an example of spaghetti code, in BASIC:

10 dim i
20 i = 0
30 i = i + 1
40 if i <> 10 then goto 90
50 if i = 10 then goto 70
60 goto 30
70 print “Program Completed.”
80 end
90 print i & ” squared = ” & i * i
100 goto 30

See? GOTO here, GOTO there — pile of doo-doo. My teacher, who actually had a PhD in English Literature but ended up in the computer sciences, said if we used GOTOs, he’d hurt us. Considering that he used to embed bits of Chaucer in his class presentations, I would have thought he would have embraced GOTOs, but, there you go.

That was my first language.


My second language was Pascal. This is a language named after that great mathematician Blaise Pascal. It’s also a ‘teaching’ language and was never intended for commercial use. Many software developers learned how to program in a computer language they would never use again once they left college. This is just one of the many head fucks universities put their CompSci students through.

(Even then, the world has a way and Borland released Turbo Pascal. Why? Because Borland was led by a French man, and you never tell the French what to do. Bonus point: who was Borland’s founder?)

Anyway, Pascal is good because it’s a structured language and would, the hope was, teach us all how to be good structured programmers. It introduced us to functions and subroutines and proper naming and rigorous development practices–which we promptly forgot as soon as we got out of school and got into eXtreme programming; drinking caffeinated pop and telling each other jokes where the punch line goes, “…but it worked in PowerPoint!”

We ended up using Pascal for other classes, such as the study of algorithms and relational data structures. Yes, I believe I learned how to do the Bubble Sort with Pascal. This was, what, a quarter century ago, yet Google and Yahoo and other companies still ask potential employees how they would do something like a Bubble Sort.

You know what I would answer if asked this in an interview? Easy:


Then I would ask the interviewers could we please now get to the real questions?



Where was I…programming languages… My next language wasn’t a higher-level language. It was Assembly. Yes, we had to learn Assembly back then. What amazes me is that people are required to learn Assembly in college today. This to me is a demonstration of how most colleges and universities haven’t a clue how to run a computer science program.

Wikipedia had the following assembly language sample:

mov al, 061h

Basically, this is equivalent to moving a hexadecimal value into a register named ‘al’. It is very time consuming. It’s also very powerful — this is to ‘the metal’ programming — as efficient as one can be. One line of code at a higher level language can translate into 10, 20, even more lines of assembly. At some point corporations discovered that it cost more to have programmers write those 10,20, or more lines than it did to add memory or disk space, so most of us don’t use Assembly in our day to day operations.


From Assembly, the languages piled on rapidly. We beta tested the first Modula II compiler, which was meant to be a commercial version of Pascal (but never really took off). We then jumped into the esoteric with Lisp (LISP) and SNOBOL4.

Lisp is one of the oldest higher-level programming languages, and is very popular with the AI folks. In the Parable of the Languages story, I called it ‘loopy’ and that’s the best definition I’ve heard of it. I remember talking with my teacher one day about the class. We talked about how each language has a ‘gotcha’ moment when the person learning it finally ‘gets’ it. I asked him when I finally reached this state with Lisp, it would hurt, wouldn’t it?

I still passed the class.


I bet if you’ve heard of Lisp, you haven’t heard of SNOBOL. SNOBOL translates to StriNg Oriented symBOlic Language, but supposedly the real reason for the name is one of the implementors once said, “This program hasn’t a snowball’s chance in hell…”.

I took to SNOBOL4 like a fish takes to tartar sauce–so much so that the next time it was taught, the professor (he of Chaucer fame) had me as teaching assistant. It was when working with SNOBOL4 that I finally learned the most important lesson a CompSci needed to learn: that every problem, no matter how complex, can be broken down into smaller, simpler components.

This might sound intuitively obvious, but it’s actually a tough lesson to learn with programming. Normally when faced with a problem, we see it as a whole and try to solve it as a whole. This is the number one reason for bad code, spaghetti code, what have you. We see the whole, it intimidates us, frustrates us, and we rush our coding so that we’re done that much more quickly. If, instead, we look at the problem and break it down into manageable pieces, the solutions become clear, the code simpler, and we’re relaxed when we write the program.

The more relaxed the programmer, the better the code. This is a lesson that Microsoft never learned. Can we say, “Bug ridden piece of shit”? Better yet:

OUTPUT = ‘Hello World! Windows is a bug ridden piece of shit!’


What about the C programming language? Yes, what about it. I’ll have you know, I didn’t spend all my time on esoteric languages. I still have my first copy of the classic Kernighan and Richie’s The C Programming Language (second edition).

In my last year of college, the head of the CompSci program told me that one of the other departments needed a C programmer to maintain some geographic programming software that was used by the military in the neighboring Yakima Firing Center. The CompSci head asked if I was interested in the part-time position?

Wow, my first job programming. And then I saw the code.

File after file of code scattered all about a machine, with no external documentation and exactly one line of comments in all of it. One line. To this day, I wondered what would lead a programmer to write one, and only one line of comments. I looked and followed and tried to follow and ended in dead ends with no clue as to how the code ever compiled, much less managed to work. I approached the head of the department controlling the code and said I would need something, some kind of key, in how all this code held together. He then arranged for me to meet with the original developer at a conference in Seattle.

So I asked my now ex-husband to get a day off from work to drive me over (I didn’t drive at the time) and we found the hotel where the conference was, and waited in the car outside for it to end. As it did, one military uniformed person after another left until this one guy–bearded, glasses, button down, pocket protector, the whole geek thing–came out. I guessed this was the person I needed and approached him, introducing myself. He’d already been told I would be coming and as I started asking him about the structure of the entire application, he whipped a pen out of his protected pocket, grabbed a paper napkin, wrote a bit of code on it, smiled toothily at me, passed me the napkin and was off after the uniforms.

I stood there, holding that napkin for a long, long moment. I didn’t even have a chance to ask him about that one comment line.

This was the second most important lesson I learned in college: that people working in computers can be fucking assholes. And here you thought I learned this from weblogging.

I fumed all the way home, and told the department head that I found the person’s help to be less than useful. I also turned in an expense report for the trip, at which point he exhibited surprise and said that they had no idea that I would want to be paid for this work. Oh no, they thought that I would want to use this as fun little challenge. This was news to me, as it was to the CompSci department head, who had some choice words to say to his peer about using and abusing his students.

Third most important lesson learned: Employers will play up the ‘fun’ bits of a job, in order to distract you from the fact that they’re sucking you down to a brittle little former husk of yourself by working you long hours for little pay. Might remember that next time you have that free lunch at Google.

Fortran, not COBOL

Let’s see, what’s our count so far? That’s Basic, SNOBOL4, Assembly, Pascale, Modula II, C, and Lisp. Seven languages.

It wasn’t long after that I was introduced to the old timer, the granddaddy of them all: Fortran. Fortran (or FORTRAN for FORmula TRANslation) is as old as dirt, and has existed forever–at least as long as man. I kid you not, there are cave paintings that could successfully compile through a Fortran compiler.

Fortran was one of the few languages I learned in college that I used in my professional life. Fortran was the language used for Peace Shield, the Saudi Arabian Air Defense System. My job was to take the Fortran created by three separate companies, and reverse engineer it into a data dictionary in order to facilitate the documentation project.

I loved this job. I would take home Fortran pads (Fortran was position dependent–the position in the page where you typed the characters in the program had a significant impact on what happened with the program) and work on the design of my data dictionary tools in the evenings and weekends. Eventually the company gave me one of the very first Compaq portable computers to use, which had an amber screen with black letter and which would crash, on average, once a week.

To mention ‘structured programming’ and Fortran in one breath would, at the least, generate raised eyebrows among the folks working on Peace Shield. The less polite would guffaw. Fortran, at least in those days, was not known to be a highly structured programming language. In fact, there was most likely only one other language that would be even worse to maintain and that was Cobol (COBOL).

(Now, I never learned Cobol. I caught a whiff of Cobol in college and didn’t like the smell and managed to get my degree and go 20 years in the industry without, once, having to write Cobol. I felt pretty clever, I tell you, for managing this–until I saw friend after friend retire early from all that money they made thanks to the Y2K frenzy. Happiest, smuggest people you ever did see.)


Icon, C++, Eiffel, Smalltalk

There was Icon, which was the attempted commercial version of SNOBOL4, but which never had a strong following. But I had a chance to chat with the creator, always fun. And it’s still active. And free.

Speaking of free, when I worked in the Database group at Boeing, they were nuts about Eiffel. Yes, while the rest of the world was heading into C++, they were into Eiffel. I hadn’t heard anything about this language for a while, so I searched around and found a Joel on Software forum entry on Eiffel. Seems like it costs thousands of dollars to get a development environment in this language. Thousands of dollars. For that kind of money, the applications should write themselves, let you go out and have a smoke, drink a latte.

In the Acoustic and Linguistics group, we worked with C++ and Smalltalk. We had one of the first Smalltalk environments in all of Boeing. I remember how we would provide demonstrations for visiting management, each of us with our fingers crossed because the applications would fail as often as not. But hey! No spaghetti code here! This was the Real Thing, babies: we were object-oriented a-l-l-l-l the way.

All the way down, that is.

Our count is now at 12, adding in Smalltalk, C++, Eiffel, Icon, and Fortran.

PowerBuilder, Java, JavaScript

I didn’t get into any new languages until I moved to Oregon. I did work with SQL and QUEL and shell scripting on five different Unix flavors, and though I consider these ‘languages’ others may not, so I won’t count them.

In Oregon, I learned the joys of creating applications with an application environment such as Visual Basic, and especially, PowerBuilder. My first tech book was on PowerBuilder. When I was approached about writing another, the editor gave me a choice between two brand new languages: JavaScript and Java. I asked which she thought would have more of a future and she said JavaScript. I found out later, she meant to say Java, but JavaScript has managed to survive nicely, too.

Java, Java, Java. At one point in time the world ran on Java, and it’s still one of the most common languages for corporate web-based applications. As the language became more popular, more additions were added to the language, and it grew in complexity until our sweet, modern language became this many-headed hydra, otherwise known as J2EE.

No language should become so complex and ever changing that developers in the language have to spend all their time keeping up with the mods. But you know, COBOL lost favor so the suits had to have some language to blame.

As for JavaScript, I ended up writing the book on JavaScript, another on Dynamic HTML, and contributed to others associated with this language. It has also grown in complexity, but it started so simple, there was room for growth. If there was any problem with JavasScript (other than those of security), it was because some companies didn’t believe they needed to play nice with others. Now this same company has promised to be good.

Uh huh.


It was during this time that I got into web development, which meant Perl. We have a lot of options for web development now, but then it was pretty much Perl and, well, Perl. (Don’t talk to me about applets–misbegotten sons of the devil.)

There were and are a lot of good applications written in Perl. There were and are a lot that are shite, too. Perl is a language easy to use poorly. It is a good language. I’m glad I learned it. I’m glad I used it. I’m glad I no longer have to use it. I paid my Perl dues.

And we’re now at 16, with PowerBuilder, Java, JavaScript, and Perl thrown into the mix.

From Oregon to Vermont, where I worked primarily in PowerBuilder and ASP, writing components in Visual J++, C++, and Basic, so no new languages here. From Vermont to Boston, where PB started to lose favor as Java gained in popularity. It was during this time, too, that I also did some work with Borland’s Delphi–the newest incarnation of Pascal that used to be a cornerstone of the Borland IDE products. That is, until the company dumped them earlier this month.


Then someone told me about this new web scripting language. I first thought it would be another Perl, and went, “Oh no, I’m into Java. Go away.” But this language was nothing like Perl. If anything, it was like ASP or JSP–it was a language embedded within a web page, and which was processed dynamically when the page was accessed. It was called “PHP”, and I loved it.

The first versions of PHP had significant problems and performance issues, but darn if it wasn’t easy to use! After years of languages that demanded a total life commitment from the developer, here was this cute and furry little language that you only needed to pat on the head now and again. It was so easy to use!

Still, the Java developers and the Perl developers and C++ developers and so on, looked down their nose at this cute little scripting language and ignored it. Ignored it until they looked around one day and noticed something…

PHP was ubiquitous.

PHP was used to create photo galleries and weblogging tool and commerce systems. There were libraries and modules and code samples one could use and they were all easy and free and best of all–you could drop these into your site and use without having to beg your ISP to add them to the system.

Just like with JavaScript, PHP had room to grow when it was originally created. As each new version was released, the language tightened, strengthened, and even popular web sites found that their PHP pages served up just fine.

All in the all, though, the best thing about the language was that developing in PHP didn’t make you cool. There were no developers writing convoluted, obtuse, articles about some little known and barely interesting aspect of the language. Groups of hackers didn’t huddle, late into the night, exchanging PHP horror stories.

No, most of the cool kids stayed with oldtimers like Java, Perl, or C++, or went to new kids like Python–leaving the way open for just anyone to develop with PHP.

And they did.

The Uncool PHP kids

Since the people developing with PHP weren’t cool they did uncool things like demand that the language maintain its simplicity and ease of use. Of course, the fact that anyone could code in PHP meant that the code produced could vary in quality. But there is another odd thing about PHP and the code developed with it–most of it is free. Not only is most of it free, most of it’s open source. So even if the code starts out hinky, doesn’t mean it has to stay hinky.

How do you eat spaghetti? You use a fork.

Python, Java, JavaScript, Ruby, Delphi, PHP

In the last few years, I played around with Python, and I’ve kept my Java dusted, and we all know what happened to JavaScript, the little language that could. But it wasn’t until recently that there’s been a new challenger for my affection. After all, they say Rubies are a girl’s best friend.

And with Ruby, Python, Delphi, and above all, PHP, we have 20. That’s twenty languages. Of course, writing all of this has made it impossible for me to blame the language when my code is crap.

Darn it.

I remember when I was slashdotted for Parable of the Languages, back in 2002. Mark Pilgrim chuckled about the fact that the page was written in PHP, and wondered when it would melt down. At that time, I wondered the same and would have agreed with Tim about PHP being vulnerable.

Now, four years later, PHP bids fair to be the baddest bitch in the ‘hood’.

Don’t Forget…C#

Tcha! And I forgot one language: C#. I actually rather like C# too. Almost wrote a book on it.

The memory is the first to go.


Technology Weblogging

We interrupt this commercial break with a word about RSS

Recovered from the Wayback Machine.

It had all the makings of a true Real Life Drama:

In an effort to defuse what could only be termed mutiny in the ranks, otherwise known as the ‘Atom Effect’, Dave Winer turns the copyright of the RSS 2.0 specification over to Harvard, attaching a Creative Commons License reflecting something about share and share alike. The nobility of the act stuns people–well other than those who questioned how much of the specification he was entitled to claim as his copyright. Oh, and those people who kept insisting that Creative Commons licenses were not designed to cover something such as software or specifications.

Accepting the accolades as only what he was due, the Big Dog then anoints a committee of three to watch over our sleeping beauty, the little syndication feed that was. But these caretakers take little care and run for the hills–whether of gold or sanity, only they can say. Poor little feed lies there, alone and vulnerable, while its bastard cousin, Atom, is fed care and attention and grows up to be a big, strapping specification that can bite through ambiguity and confusion, like Jaws bit through surfer girls.

It is then, when our precious little orangy bundle of joy is at its most aloneness that even Bigger Dogs enter the picture: Apple and Microsoft, seeing the light (or, more likely, seeing a potential new profit stream) embrace RSS and in the process, fracture, bruise, and even somewhat maim it. “The problem is,” the masses cry out, “the specification is too open, too ill-defined.”

Enter now, a new hero: Rogers Cadenhead. Stalwart defender of Popish dignity and bearer of thick, wavy, locks of silver. Big Dog taps Rogers on the shoulder with his sword and says to him, “You shall be my defender, the RSS Champion”.

–curtain closes for intermission, while scenery is changed–

Now enters the story a host of new players: 8 new keepers of the RSS flame to support our champion. Their task? They come not to destroy RSS 2.0 but to praise it. They seek to clear the confusion, to cut away the darkness that surrounds this neurotic little bundle of joy. Where before there were endless questions of interpretation, and breaking tools right and left, the Nine Champions of the Rin…urh, sorry, wrong movie, scratch that….the Nine Champions of the Specification will make it all better!

(Loosely translated for the prop department: They come to change little RSS 2.0’s diaper, because it had done a doo-doo and now stinks to high heaven. )

But hark? What’s this? What’s this rumble in the distance. Oh, no! It’s Big Dog, and he’s got his lawyer!

But the Lawyer brings no books or suits or habius or even corpses. He opens the door long enough to make statement and then moves on to other things that come ten by ten. The statement? Nothing has changed on RSS 2.0. Harvard still owns it, but the community may do what they will within the bounds of a Creative Commons license. Leading to, (now pay attention, this is going to go fast)…

A community, which now it seems, must absorb the Nine Champions of RSS 2.0, because they have been banished from the round table that was the RSS Advisory Board. A Board that is no more, created by a man who resigned from it, and who gave up any intellectual ownership of the specification, but still retains ownership of the specification, to wit, making decisions about who is or is not on a board that no longer exists for a technical specification given intellectual property rights by a University that had little or no involvement with the specification, under a license that has little or no applicability to specifications, mainly created for songsters and photogs and other artsy types AND which has little or no legal standing within the rules of the land because there are no rules of the land when great bodies of water separate most of it.

Have no fear, though, as our hero, the RSS Champion can see his way clear through this confounding maze. I will not waiver he cries. “While my heart beats and I draw breath, I will not be swayed from my sacred duty. Nay! Though you may torture me with unclosed tags and malformed dates, I will hold true to my task. To the end. To the bitter end!” His dedication shines so brightly, members of the advisory board are heard to murmur “What?”

His passion even moves former foes–those who had vowed to pull RSS 2.0 from its throne and install one of their own choosing (see reference re above: Atom, Effort of). They are so moved, they pull their validators from their leather sheaths and hold them high in support and salute, crying out, Hey, cool.

All are not in one accord, though, for Big Dog is angered, mightily angered. Why? To know this is to know one of the universe’s least interesting facts. All we need know is that Big Dog is angered at the Champion and the Nine defenders of RSS 2.0, and so he sends out of the darksome mists an imp to torment both our hero and his new allies.

See? You can’t make this stuff up. And a few years ago, the battles between these opposing forces would have received much attention and the thundering of the post and counter-post would have shaken even the political webloggers who might–might–take time out from verbally eviscerating each other to take notice.

But there was a party put on by a player, to celebrate a book authored by other players, with words about how to become players, sponsored by other groups hoping to become players, drinking wine pushed by a hopeful, attended by 500 or so close friends, each with a startup, a product, an agenda or, at minimum, a weblog.

And no one cared about old enemies and ancient battles, the hard work of our hero and his allies, other daring do and RSS 2.

The end.


Pets on parade

I and my roommate attended the Mardi Gras Pet Parade in the Soulard district today. It was cold, about ten degrees with the wind chill. As such, the numbers were down, but those that attended, two legged and four, had a great time.

This was my first time in this district and I loved it. You can see the same French influence in this neighborhood that defines New Orleans, which most likely explains why the Mardi Gras in St. Louis is the third largest in the country.

I imagine if the weather was warmer, there would have been many more parade members and onlookers. There is an advantage to going to events when the weather is harsh–the event becomes more intimate.

In addition to the show, I also added some of my favorite photos to the end of this post. I had a wonderful time, even if I did freeze from the toes up. I hope I communicated some of my pleasure and fun to you through the photos.

This dog was as cool as his shades.

The participants cared very deeply for their pets, and this was reflected in the face of this man, holding his dog before the parade.

A magnificent dog, but not one that liked to be approached by other people or dogs.

Many of the dogs had beads or only a few odds and ends tucked about their sweaters. Others, though, were dripping with Mardi Gras beads and feather boas, and so on.

A quiet moment of reflection.

There were two cats in the parade. Two very brave cats. And one brave owner to be holding her cat.

I think the reason this is my favorite is self-explanatory.

Photography Places

Thank You JohnnyB

I received a new comment today to my post, Confluence. The post was based on a trip I took last year to Cairo, Illinois, and the comment was from a man who signed himself JohnnyB:

I grew up in Illinois in the 1960s and remember the race riots in Cairo in 1967 and 1969 and the white flight that followed. The town went from a bustling community of 11,000, about 70% white, to a bombed-out, burned-out, shuttered, near ghost town of about 3,600, about 70 percent black. They have a great high school basketball team, despite the fact that the school is nearly bankrupt, they don’t have weight or training rooms and seldom hold home games because teams from other towns are afraid to enter Cairo. Amazing that such decline could take place in an incredible location at the confluence of two of America’s great waterways and along a major North-South Interstate highway.

Confluence is one of the few posts I have that I keep in moderation rather than closed to comments. There isn’t anything in it to attract the spammers, and from time to time, someone drops in and writes something that just stops me. Like today.

City Street

JohnnyB came to my site when he searched on the term “race riots Cairo Illinois”. My post is about half way down in the first page of the returned search results. Among the entries higher up was one for an NPR article related to a CD that released last year: Stace England’s Greetings from Cairo, Illinois.

This album is a collection of songs that reflect a variety of genres: ranging from old blues to modern folk rock. In it, England seeks to re-tell the history and story of Cairo, Illinois–the town that the artist refers to as the most fascinating town in America. I can agree with England, having been through it on a hot summer day, with the hot, white light of the sun reflecting off of broken brick and cracked cement; with a hand lettered sign pointing to cat city–an old office building taken over by wild cats. There’s something about Cairo. Something that both pulls you in, and then pushes you away when you get too close.

Mansion Two

Having grown up in Cairo, NPR journalist Rachael Jones writes about her initial reluctance to listen to England’s album.

The last thing I expected to feel listening to Greetings From Cairo, Illinois was pride. Before hearing the first song, I almost dismissed musician Stace England as a well-meaning but clueless interloper who thought he had figured out all of Cairo’s problems over a few beers.

But England wasn’t just some fly by night troubadour trying to profit from Cairo’s woes. With the help of 50 other local musicians and singers, England had employed an impressive musical range to try and explain the puzzle that is Cairo.

Robert Baird of of the now defunct Harp Magazine, wrote of the CD:

It’s best to run from CD booklets whose notes begin with declarations like, “Cairo, Illinois, is the most fascinating town in America.” But here, Illinois native and former House Afire member Stace England takes Americana to its most literal extreme and paints a song-history of former full-throttle river town Cairo (pronounced Kay-Ro). It swings from massed-chorus gospel (the traditional “Goin’ Down to Cairo”) and blues (Henry Spaulding’s “Cairo Blues”) to originals like the guitar-scratching funk of “Jesse’s Comin’ to Town” (for Jesse Jackson) and finally the rocked-up alt-country of “Prosperity Train,” which is definitely not stopping in Cairo anytime soon. The latter tune, the one best able to stand by itself outside the album’s concept, is enlivened by the voice and attitude of Jason Ringenberg of Scorchers fame. Along the way we meet General U.S. Grant, an “equal opportunity lynch mob” and the Committee of Ten Million, a racist organization called “White Hats” thanks to the pale hard hats they wore. Fascinating.

After a visit to England’s site and weblog, I checked and sure enough, the album was listed in both iTunes and eMusic. I downloaded it from eMusic and spent the last few hours listening to it; more than once with several songs, such as Grant Slept Here:

Ullyses S. Grant slept here.
He was a hard chargin’, hard drinkin’, smoking civil war stud.
Marching his troops in the Mississippi mud.

And White Hats, with a chorus of:

White hats and minds full of hate,
equality is going to have to wait.
We live by the gun, and that’s the way you might die, boy.

White Hats is about the 1967 race riot that left the town gasping its dying breath. It’s these riots that JohnnyB references in his comment. Hearing White Hats and the other music on the album was like listening to the song that ran through my head when I walked through Cairo that summer afternoon. It combines both a hope and a despair, because for all the surreal destruction of the town, there is something there. Something…fascinating.

Gem Theater

From my comments, another traveler through the town, Dawn, wrote:

Thank you for sharing your visit of Cairo, Illinois. My boyfriend and I got off Interstate 57 late last night and ended up in Cairo, and have been so terribly haunted by it, and discussed it all the way home to Milwaukee. It was like a Twilight Zone episode, and we were truly frightened and disturbed by what we saw, but mostly saddened and wanting to learn more about the fate of this town. If you have any more photos, I’d love if you would share them with us. I’ve written a lengthy journal entry about Cairo, and would like to revisit it again soon… it has really captured my heart.

The photos I took were going to be the start of my Song of the South collection. I started these with enthusiasm that soon crumbled in the face of disinterest in both the photos and Cairo, and to be honest the lands that border the Mississippi. For a brief moment, the Sip and this part of the country was hip, but it took the devastation of New Orleans to create this interest. However, I don’t think I can count on the destruction of a major city happening on a regular basis.

For the most part, the lands along the lower Mississippi destruct slowly–like an old man sinking under the waters of the Sip when it breaks through the levees; one work roughened old brown hand reaching out to grasp at the muddy bank,but you can’t tell whether it’s to pull himself out or push himself further under.

This, though, is the true beauty, the true song of of the south. This is what Walker Evans saw with his camera. This is what I have always felt, luring me in to its history and stories and unforgiving waters and broken towns. This is what England captures in his music, and I want to capture in my own pictures. Someday.

Thanks for stopping by, JohnnyB. Thanks for the reminder.

Once the Trolly is gone, all that remains are the tracks

RDF Semantics

The elephant strikes again

Danny Ayers and Bill de hÓra got into a bit of back and forth on RDF and Bill’s response reminded me again of the blind wise men and the elephant. Each person describes a different creature when asked to describe the whole from just the part they touched: one touching the leg assumes the creature is a large, stumpy creature; the tail, skinny and flexible and so on.

Bill lists out several areas where attention paid by the SemWeb group could increase overall adoption of RDF. In turn:


Better communication, algorithms, tools, etc. to map RDF into relational databases. How can we do so and increase efficiency. This one has actually happened, but perhaps not been as marketed. I know that in the Java world, the Jena folks have put a great deal of thought and energy into efficient RDF storage opimized for SPARQL access (do we use Sparql now?). As Danny stated, tests have been made in systems with millions and millions of triples stored, and relatively quick access of same using Sparql–as quick as a relational query against joined relational tables.

I think this is one that has to go back to Bill: exactly what language/API or data store solution did you use that resulted in such slow performance?

Bill’s issues associated with integration was, at least to me, a bit confusing. I don’t think one can say to companies: use RDF thus and thus and you’ll save so much money, because one can’t say the same about the relational model or the network model or even the old hierarchical model. However, give us a specific task, and we might be able to point out where RDF can be used effectively. Or perhaps we’ll say, no, a relational model is better for that purpose. We might even recommend hierarchical–no one model is perfect for every use.

Where Bill seems to be focused is on data interchange: moving data from tool to tool. Well, now that is one I am very familiar with and this is one that can be extremely effectively managed by RDF as much, or more, than a specifically defined XML vocabulary.

Think of a hub-and-spoke system, whereby heterogeneous applications all access data from a common core, which acts as a buffer to prevent hard coded dependencies between these applications. One can define an XML format to be used between each application and the buffer, but this means that each application has to create XML to whatever format is needed for each buffer. Commercial applications won’t do this, so this means the company has to create a mapping–a layer between the application’s API and the system core, which adds to the overall complexity of the system.

The company developers have to do this not because the business model might differ in whatever degree between the core and the application, but because XML is physically dependent, and this means that the mapping has to be just so before the data can even be processed in order to be merged. In other words: there’s a pure tech dependency on the structure of the XML that transcends even the business model.

RDF eliminates this. A statement is a statement is a statement. It removes positional dependencies, very similar to how the relational model removed such when it was adopted over the older network or hierarchical models. If all the spokes ‘spoke’ RDF (sorry, couldn’t resist), then all that the hub/core would need to do is map each to the other, and this doesn’t even require any additional coding if such business mapping is defined using OWL. All that would be required to add a new application that produces an RDF conversion of its data export/service response is the addition of rules to the core’s rules database using OWL.

You can’t get there with relational databases. I know, I worked with EDI (Electronic Data Interchange) for years. You also can’t get there with XML because there is no rules mechanism inherent in XML. Of course not: why over-complicate a nice, clean syntactic format? XML wasn’t meant to be a rules database. Relational wasn’t meant to be a rules database (but does very nicely for pre-defined, isolated business model use). RDF, on the other hand, eats rules for lunch.

Think of Scotty: Use the right tool for the job.

Moving on to Bill’s list, his big item is ORM (Object-Relational Mapping) and widgets, and it’s true, I’ve not necessarily worked with an object-relational mapping or direct form to RDF widgets. As such, I can’t respond to this one, other than to say if people have created these, I’d like to see them myself.

I think what’s a bigger issue, though, is that Bill demonstrates the wise men and the elephant conundrum: Bill has certain items he considers important, including one that I wouldn’t necessarily consider important. He sees ORM as bigger than syndication feeds, yet for all my tweaking of syndication feed folks, I consider feeds probably one of the most significant advances in technology in years. Why? Because it has had a major impact on relatively standard behavior: how we get access to current news.

That’s the deal: Bill is thinking purely as a developer working with specific problems, and wants to see how RDF can help him. If we continue to get caught up in specific tech-to-tech comparions, RDF will continuously be placed into a position of loss: being compared against specific uses of technology for which it really wasn’t designed, and when it comes up short, which of course it will, being discounted in such a way that it’s not considered for use where it would be effective.

What the RDF community needs to do is go beyond just the technology-to-technology mapping and look at the overall picture: where does the semantic web community want to go, and what piece of this best fits RDF?

Sheila Lennon writes about the John Markoff Times’ article on common sense and Web 3.0 and gives her interpretation of what she sees as the semantic web:

Real world: When restaurants are online in realtime (yet to happen), my computer could display Providence restaurants serving cordon bleu tonight at what prices, ask me to choose one (around when?), then make a reservation, reserve a portion of chicken cordon bleu for me, and notify the restaurant’s computer if I’m hung up in traffic. It will not think about chicken cordon bleu. Its mouth will not water.

And — being my agent — it will not suggest I’ve had enough calories already today and should have salad instead.

Spot on. Sheila is looking at the elephant, not the trunk, tail, and so on.

My mistake with my first interest in RDF and the semantic web is I wanted a web of meaning. Perhaps something like this will happen in the future, but I doubt it because from my earlier attempts at getting others involved I found out something important: what I wanted was not what most people wanted. What most people want is what Sheila is describing: systems that work together seamlessly; that integrate immediately; that help us do something we couldn’t do before.

However, they don’t want these systems to do what we can do well, which is have an opinion or differentiate based on nebulous qualities such as taste and desire. We do this very well ourselves, thank you. What we need from computers is to help us sift through the raw stuff and that’s where the semantic web enters the picture.

Ultimately the semantic web consists of data stores in relational databases, hierarchical data structures, RDF, and even tags embedded into a page–anything that gets us closer to realtime data access (“What’s cooking tonight?”), ‘smart’ agents, and the restaurant’s cooking schedule integrating with our portable GPS devices (and given a rule of locations in thus and thus zone is equivalent to so many minutes from restaurant). No one data model will work for all of this, which is why we need to carve out that piece that best belongs to RDF, and stop trying to force it into a relational model replacement, or microformat killer.

(“Woman on camel comes upon man in the desert; crawling on his hands and knees, faintly crying out “Water, water.” She grabs her bladder filled with pomegranate juice and jumps down, holding the the opening to his lips. The man tastes the juice and pushes her away. “I asked for water”, he says.)

Which leads us back to the last issue of Bill’s I’m going to touch on and that is tags and other microformats. I have been one of those who scoffed at microformats, and I still do. I can see the value of tags, but whether you call them ‘keyword’ associations or categories, they’re a way of adding a description to an item, but not necessarily anything more complex. As such, they have value, but only to a point: in many social software tools such as Flickr, people use these as mnemonics more for themselves than others. Their value to a global whole is directly proportional to the amount of time a person puts into the effort, and most people don’t care that much.

Where tags work well is when a group of people get together and mutually decide on one tag to differentiate the association, such as the tags for a conference. People use the agreed on tag because it’s simple (the tag has already been provided), and they can immediately see the usefulness of such (querying on the tag returns items associated with the event).

Thus the same requirements for metadata can be defined for microformats and RDF: we have to make the effort to define such easy. We have to demonstrate value.

Now, one can say microformats make things easier, but I have a real problem with shoving everything under the sun into one single HTML attribute: class. The class attribute is defined to hold values for stylesheet settings or ‘whatever other use devised by user agents’. What we’ve done, as end users, is shove both microformat AND Ajax information into these attributes, and frankly, I don’t know how much this is impacting on and will continue to impact on these ‘user agents’.

For instance, if I have eight different terms within a single class attribute, all properly separated from each other, does Firefox look at each of these, and then spend time reviewing the stylesheet settings to see if any match? If so, and this use of class is scattered all about a biggish page, and the CSS stylesheets are quite large, this strikes me as impacting, perhaps significantly, against page load times.

We are misusing the class attribute, and that’s my biggest pushback against microformats. The same goes for the use of the class attribute with Ajax.

Now, generating an RDF output from metadata associated with a page, and then serving this up when you tack ‘/rdf/’ (or ‘/meta/’) to the end of the page URL strikes me as a superior method of providing metadata to smart agents. The browsers don’t have to deal with microformat creators and RDF/XHTML mappers converting the HTML class attribute into a CLOB, and the resulting metadata doesn’t have to be limited to whatever layout elements are provided through valid uses of HTML. I’ve never had anyone give me a reason why they feel this is wrong.

(Declarative HTML for Ajax developers is another thing, and best left for another post.)

If the pages are dynamically generated, then the metadata page can be dynamically generated. If the pages are static, when they’re created, the metadata page can be created. And if someone comes along and says something about the page being created by hand, I’m going to come back with, “Oh yeah?”

One last issue that Bill had in his list was with the syntax of RDF/XML. We get so hung up on this so frequently that I think it would be a good idea for the W3C to re-visit this one. After all, if the organization is revisiting HTML in the interest of moving forward, there is that much more reason to revisit RDF/XML.