Stubbornly letting go

Recovered from the Wayback Machine.

Loren Webster writes compellingly, wonderfully, about the virtues of stubbornness:

More importantly, stubbornness got me through Vietnam. Unlike most of my fellow soldiers, I had few illusions about that war, but my stubbornness and unwillingness to give in to my feelings of despair got me through my tour there. I was determined to stay alive, and if that meant never taking a drink, never smoking anything stronger than a cigarette and experiencing the whole hell that it was while stone-cold-sober because that gave me the best chance of coming out alive, that’s what I would do. Stuck in a platoon that was dramatically understaffed with sergeants and experienced soldiers, I felt it necessary to assume responsibilities that aged me long before I should have been. Sheer stubbornness got me through that war without enduring psychological problems and allowed me to deal with the hostility I met in the “liberal” groups I ran with when I returned home.

I see a stubborn streak in all of the webloggers whose writing I enjoy on a daily basis. I sometimes wonder if this strength to hold one’s ground is the reason why I do like their writing, regardless of what they write about.

I am not a stubborn person. There are a few universal truths I hold on to with fierce grip: protection of the environment, a great dislike of war in any form, a disgust of hypocrisy, the importance of treating fairly with one another, and a love and appreciation of beauty no matter its form. However, outside of these philosophical generalizations, I hold on to very little else with any great strength.

You only have to look at how many times I’ve moved to see this. From Kettle Falls to Seattle to Salt Lake City to Seattle to Yakima to Phoenix to Yakima to Ellensburg to Seattle to Portland to Vermont to Boston to San Francisco, and finally here to St. Louis. And I don’t have even the excuse of being in the military to provide reason for my restlessness.

I also let go of people, as easily as I let go of places. The slightest hint that I have no place among the people I’m with, and I walk away. It’s in my nature to let go before being let go. Yet none of us have a place within any group that isn’t of our own making. Rather than walking away so easily, perhaps I should have held on, but found a different grip.

Technology Weblogging

The beauty of change

Recovered from the Wayback Machine.

It would seem that Google has changed its algorithms and webloggers no longer dominate. I checked my own name, Shelley, and found I’m an ignominious second pager now. Still, we webloggers are facing this algorithmic demotion in stride, with humor, and wit.

However, the only way to know Google’s algorithmic change’s true effect, is to run a test. Searching on poem change, I find:

Five months ago the stream did flow,
The lilies bloomed within the sedge,
And we were lingering to and fro,
Where none will track thee in this snow,
Along the stream, beside the hedge.
Ah, Sweet, be free to love and go!
For if I do not hear thy foot,
The frozen river is as mute,
The flowers have dried down to the root:
And why, since these be changed since May,
Shouldst thou change less than they.

Elizabeth Barret Browning, Change upon Change

You would have liked
Who I could have been,
But he died with the rest of my dreams.
I could have changed this,
But I tried too hard…
…I tried.

Paul Graves, Change

I made a deal with God
a few years ago
and told him
“This is it!
until the end of this year
I return the money
if they give me too much,
from then on
I feel free to keep it.”

Moshe Benarroch, Change

Returning home

I left home when I was young, at old age I returned home,

I still had the hometown accent, though my hair had turned grey.

I met the hometown children who knew me not,

Laughingly the children ask me, where I was from.

He Zhi Zhang 659AD to 744AD – A Tang Poem

i cannot feel my skin right now. if i pinch myself, it does not hurt. if i embed my fingernails in my arm, i cannot feel it. only my fingers can feel the pressure of digging into my arm. if i cross my right leg over my left leg, only my right leg can feel anything. if i cross them the other way, only my left leg can feel. right now, there is a tiny itch on my right leg. when i scratch it, i can no longer feel my leg. it therefore no longer itches. theoretically all i would have to do to stop the itching would be to put my elbow on my leg. but then if i moved my right leg, i would feel it again without feeling my elbow. this would only be useful if i had an itch on my elbow.

crushing a bird :: pocket change


No, Google seems to work fine. Just fine


Morning ritual

I love to get up early in the morning and sit at my desk and watch the morning ritual unfold. From my window on the second floor I can see the entire neighborhood, watch the people go about their lives.

Every morning, between 8 and 8:30, an elderly couple take their morning walk, he in the same lightweight gray suit, she in layers of bright colorful wrappings; he in the lead, she always walking at least four feet back. Always crossing the road in the exact same spot, never speaking.

He wore a hat at first but lately has been going bare headed. She would hold her outer robe between her teeth to hide her lower face, but lately she’s allowed her face to show, though her head is always covered — bright pink and green. Perhaps its my imagination, but it seems as if the distance between them is growing less, ever so slightly, by inches.

Yesterday, I was astonished when at the corner, he turned around and spoke to his wife. At that moment, they were almost side by side. As if aware of this unseemly display of public affection, they widened the distance between themselves, and she adjusted the covering on her head to make sure no hair was showing.

I wonder if he’ll be wearing a hat again today?


The RDF Query-O-Matic

Recovered from the Wayback Machine.

Note that my current server does not support Tomcat-based application. The Java-based Query-o-Matic is disabled until I can move it to the appropriate environment.

I created a small application, the RDF Query-o-Matic, using Java and HP’s Jena (a Java RDF API), and hosted it on my Tomcat server. The Query-o-Matic accepts the name of an RDF file (any valid RDF file), and an RDFQL (RDF Query Language) query, and will print out a test value found as a result of that query. I created the tool as a way of testing queries without having to go back into my code as I work.

You don’t have to be a techie, or a programmer, or familiar with RDF or even XML to work with RDFQL, as the Query-o-Matic will demonstrate. All you need is a bit of logic, and a familiarity with old nursery rhymes.

Taking it one step at a time…

RDF is a meta-model of information, similar to the relational data model. RDF/XML is a way of serializing the model information, as one would use a relational database to store relational data. Carrying the analogy to its natural conclusion, as SQL is to relational data, RDFQL is to RDF data.

RDFQL is actually not that complex. The key is remembering that every ’statement’ in an RDF file is made up of a subject, predicate (property), and value. If you view Mark Pilgrim’s FOAF file in graphical format, using the RDF Validator (access here), the predicate (property) always appears on an arc – the subject is to the left of the arc and the value of the predicate, the object, is to the right. Every RDF statement can be broken down into one of these <subject, predicate, object> triples.

RDF queries are nothing more than patterns based on this triple. This might sound confusing, but not if you take the queries one step at a time.

For instance, if I want to access and print out all of the NAME elements in Mark Pilgrim’s FOAF file, I would use a query like the following:

select ?name where (?subject, <>, ?name)

In this query, the SELECT clause (’select ?name’) references the variable I’ll access from the results; the rest of the query, the WHERE clause has the actual query. In this instance, I don’t care what the subject is so I’m using a placeholder ?subject that’s basically ignored. It’s followed by the predicate that forms the query, in this case the NAME. Since all elements in RDF belong to a namespace, I’m preceding the element with its namespace, and including the whole within angle brackets.

The angle brackets are used to destinguish an element from a literal value

Following the predicate is another placeholder, this one for the name element’s value (i.e. the actual names).

The whole is entered into the Query-o-matic as follows:


query: select ?name where (?subject, <>, ?name)

value to print: name

View the result.

Let’s say I want to refine the query – I only want the value of ‘name’ for the subject f8dy. I would then need to modify the query to add the subject as well as the predicate:


query: select ?name where (<>, <>, ?name)

value to print: name

This time only one value is returned (if Mark’s RDF file doesn’t change), Mark Pilgrim.

Well, this is great for finding all elements of a certain type of if you’re accessing a specific statement given a subject. but what if you want to find all elements of a certain type that have a specific relationship with another element? After all, the power of RDF is the ability to record statements and relate these same statements to one another.

Piece of cake. All you have to remember is an old, old nursery rhyme:

The itsy bitsy spider
Crawled up the water spout
Down came the rain
And washed the spider out
Out came the sun
And dried up all the rain
And the itsy bitsy spider
Crawled up the spout again

If you sang this as a kid (or sing this song with your own kids), you would play out the motion of the spider climbing by placing your hands together, the small finger of your right hand against the thumb of your left, and the small finger of your left against the right thumb. As you sing the song, you twist your hands, keeping the top two digits in contact, bringing up the bottom in a circular motion, re-joining these digits at the top. You would repeat this action, twisting on the top digits, bringing up the bottom and so on, never breaking the contact between the two hands.

The objective with your hands during this song was to always keep contact between the two and still have motion. That’s the basic foundation of more complex queries in RDFQL: mapping one element of one triple, to another element on another triple in a chained path that eventually gets you from point A all the way to point Z.

As an example, within Mark’s FOAF file, he has listed a group of people that he ‘knows’, each of whom has a NAME. To print out just the names of these people, we’ll need to adjust the query to find each statement that has ‘know’ as predicate, and then use the object of that statement, as the subject of the next triple. This gets us a list of people who Mark knows. To get their actual names, the NAME element is then used in the predicate of the second triple, to refine the result.

Well, this one definitely needs an example:


query: select ?name where
(?a, <>, ?object),
(?object, <>, ?name)

print: name

In this, the first triple returns statements where the predicate is the ‘knows’ element – all known people. The results of this triple are then passed to the next. In the second triple, the object of the first triple – the identifier as it were of the individual people, is the subject of the new triple. This will return all of the properties for each of the known people. Since we’re only interested in the ‘name’ property, we further refine the query to only return the name values, which are printed out.

Check out the results.

The key to this query working is that not all objects (property values) are literal values – sometimes they can be subjects, too, as occurs with the ‘knows’ relationship in FOAF. These objects can then be plugged in as the subject of a new query (note the highlighted ?object), and the results combined to return not only ‘names’ of people, but names of people that Mark knows.

Just like walking that spider up the wall.

Of course, not all queries are going to be as straight forward as they are in the FOAF example, and the next installment on RDFQL will take a look at additional and increasingly complex examples. In addition, the Tomcat/Java Query-o-Matic will be joined by its PHP cousin: Query-o-matic Light.


Pilgrim’s rock

One year ago today, Mark Pilgrim set a dangerous precedent: when told by his boss to remove his weblog or else he would lose his job, he said no, and was fired. Defying management was bad enough, but to make matters worse, since that fateful day Mark has enjoyed success after success — a better job, respect and success online, even getting engaged.

Mark, that’s not how these things are supposed to happen. When management gives you an order, you’re supposed to grovel; and if you don’t and get fired, you’re supposed to end up on the street, destitute, homeless, begging lattes on the street corner.

Next thing you know, with the example you set, all workers are going to want to be treated with dignity and respect. Sheesh!

You’re a dangerous man, Mark. And only your kitty and I and every corporate manager in America knows it.