Archive for February, 2009


the semicolon and I; past, present and future

Yesterday I was rummaging to my bookshelf, filled with books of people long gone from here, looking for some excitement. Boy did I get it: Eats, shoots and leaves, by Lynne Truss. You native English speakers probably already heard of it. It’s a book about punctuation; as in the stuff that is not letters or whites-space in a sentence.

Only the lack of candles and subsequent forced sleep withheld me from reading this masterpiece in one go. For within its pages it was revealed to me that I’m just a larva in the land of punctuation. Not once in my life did I seriously reflect upon the history and culture behind the stuff that holds our text together. I’m ashamed at how long I have dabbled in the shadows of ignorance; and I’ve got a journalism degree for Chrissakes (I’m not a native English speaker though; so don’t start sending me gloating know-it-all criticism all of a sudden!). But my eyes have opened now. At least I now have a framework that can aid me in reflection. With that in hand I can hopefully tear down the wall before me, composed of years of habit, and push on through to the valley of concious choice.

I was a bit afraid of reading it though; for I just discovered the semicolon not so very long ago. If you would run all the posts of this blog through a simple program counting the ratio of semicolons to text, I’m sure you will see an exponential upward curve. I enjoyed the semicolon, because I felt it was mine. When do you ever see people use the semicolon nowadays? I felt sophisticated. It was MY punctuation mark.

In all honesty I didn’t have a clue of its proper use. I just guessed. And I gathered that my readership wouldn’t know either, and so would take my word for it, so to speak, and admire me for being so bold and knowledgable to dare to use the semicolon.

But this book could set me straight. Dispel my improper use. I could afterwards still feign knowledge of course, but in my heart I would know I was raping language, and I would not use it anymore; disgusted by the way I had treated it all those months. My love for a punctuation mark stabbed to death by language-conventions.

And then another thought crept up: have I grown so old as to start caring about conventions? Isn’t language a mallable ball of mud; of which we are the masters? Isn’t it us who dictates the language? Much like we should dictate our will on society, and certainly not the other way around. Have I become a part of the punctuation establishment? In truth I couldn’t find the answer to that question. And before you know, you are sucked into contemplating the fundaments of your core convictions. Yes, the book is THAT deep.

When I finally arrived at the treatment of the semicolon, I had already been led through epic battles over the comma. The comma is a punctuation mark to fight for, so it seems. People have been hanged for its improper use (well, the author actually dispels this myth a bit, but hey). Great man had defended their right to its spurious use, and equally great man had denounced it with great bravado: ‘threatening each other with ashtrays’, we learn, over the correct punctuation of ‘red, white, and blue’.

So the stage was set for the elusive semicolon. But as you probably already gathered, there was disappointment ahead. Not in my way of using it though, but it appears the semicolon has social issues. Never before had I picked up a sign that there appears to be a pecking order in the ranks of punctuation.

Invented by the godfather of printing, the Venetian Aldus Manutius the Elder (1450-1515), who incidentally also invented italics, the semicolon is indeed a dying breed. Newspapers prefer short sentences. People in general are unsure of its use. But this fate doesn’t grant it a free pass to status however. Yes, the of the semicolon requires skill; but many a prominent writer looks upon it with disdain. George Orwell tried to do without in Coming Up For Air. Donald Barthelme thinks it’s “ugly, ugly as a tick on a dog’s belly”. Lynne mentions the word middle-class a couple of times. A punctuation mark! Middle-class! Yes, the author is English, and no, she doesn’t adhere to this conviction herself; but still…

And with this cheap and unfounded insinuation, the dye was cast. I couldn’t shake it off. Old wounds, barely healed, ripped wide-open; blood splattering in all directions. The semicolon was middle-class. Therefore I was middle-class. What makes matters worse is that I AM middle-class. It was confirmed. I am of the class that pays lip-service to the rich, while serving as a buffer against the poor; grey, spineless and unimaginative. I am grey, spineless and unimaginative; because I love the semicolon.

The (working-class) writer then goes on to expound on the weak character of those writers – not all middle-class – that DO love the semicolon. Writers that succumb to the lure of the semicolon seem to have a hard time to get away from its orbit. The semicolon is like heroine. Some famous 20th century writer supposedly proclaimed on his deathbed that he ‘should have used less semicolons’. Virginia Wolfe couldn’t kick the habit, and George Bertrand Shaw wrote T.E. Lawrence concerning his use of colons and semicolons, stating that   ‘you are no more to be trusted with a pen, than a child with a torpedo’.

And I have to admit it is true. The semicolon is under my skin now; begging my left-hand pinky to push the button. But I’m glad I am aware now. And after a night’s sleep, I don’t care what Lynne says anymore. Me and the semicolon can make it work; with mutual respect; like a middle-class couple; until death do us part.


Custom activity-update howto

After a discussion on #sugar, I noticed that setting up a custom update-mechanism for Activities/XO bundles on XO’s is a bit of a lost art. I had to dig through the Sugar code a bit to get a clear understanding. I’ve updated the wiki (see, but it might be useful to give other deployments a heads-up on what’s involved through this syndicated post.

So the XO has a nice gui activity-updater, accessable by opening the control-panel, and then choosing the activity updater. Figures. The updater gives you two valuable functions: Updating existing activities, and installing new ones. At the moment the updater can’t be instructed to delete certain activities though, which is to bad, because otherwise deployments could contain just about all the administration of activities within one central place.

Out of the box an XO will check a default wiki-page on the wiki. The XO expects a list of links to relevant builds of activities, together with some metadata embedded in the span/div that surrounds it. The XO will loop through all the activities in your Activities dir, it checks if it’s got a custom update url defined in its file. If so it’ll try to update from that url. Either way, it will also check the version on the page and will use the highest one. If it finds a newer build, it will include it in the list of suggested updates. If the XO finds an activity that’s not yet installed it will also be included in the list, but new activities will not be checked for updates from the url defined in its file.

As a local deployment you would want to control yourself to which version you want to update. You want to make sure the new version works for your build, and for your objectives, and not the ones of some random guy that happens to updates the according wiki-page. So what you do is point the XO to an update page under your control, which points the XO to the activities you want to put on it. To override the default update page, put a file with either /etc/olpc-update/activity-groups or /home/olpc/Activities/.groups on your system, with the relevant update urls on different lines (yes, you can have multiple).

At OLE Nepal we manage the activities on the schoolserver. So we’ve got a canonical set of activities in a folder reachable through http. In the same folder we put a dynamically generated page in the right format. A cron job checks the folder every hour, grovels the activity/info file of every one of them, and writes out a page with the correct metadata. In this way managing the right set of activities becomes a drag-and-drop affair.

As for the format of the page, take a look at a snippet from our page generator script, invoked by a little cron script:

def makeItemString(actId, actVer, actUrl, actName):
    return """
      <span class="olpc-activity-info">
          <span class="olpc-activity-id" style="display:none;">%s</span>
          <span class="olpc-activity-version" style="display:none;">%s</span>
          <span class="olpc-activity-url"><a href='%s'>%s</a></span>
    """ % (actId, actVer, actUrl, actName)

So the updater will search for nodes with have olpc-activity-info as class name. Then it also wants to know the activity-id, the activity-version, and the activity-url, all extracted from the activity info file in the XO bundle.

As written above, if an installed activity has an update-url defined in its file by the activity creator, the XO will check the url for a version greater than the one in the groups file url. The latest version will be installed. This is seen as a feature, but I disagree. The url of some random page should NOT be checked. Again, we want to have control over what gets installed, and we can’t leave the risk of broken activities to chance or evil activity-developers. So I hacked the Sugar updater code ever so slightly and put it in our pilgrim local build:

The simplest way to not check the url is to open /usr/share/sugar/shell/controlpanel/model/ and edit refresh_existing to not call _retrieve_update_version, but assign the values it would return if no update-url was found; so a tuple containing:

(0 if _DEBUG_MAKE_ALL_OLD else act.get_activity_version()), None, None, 0

And since the updater doesn’t check for new versions of new activities, we don’t need to make provisions for them.

And that’s about it. This gives us control enough over which activity is installed on our deployment XO’s. Cases not covered though by this mechanism are new bundles installed by the children themselves, and children installing versions newer than the ones we put in the schoolserver (which can be remedied easily enough by making sure the first tuple value above is always 0). But I’m not sure not addressing them should be regarded as missing features, or wanted behaviour.

[update] I sent a mail with some of my thoughts to the sugar-devel list and C. Scott Ananian layed out some excellent ideas for enhancing the updater to resolve to deficiencies mentioned above.