ABTI-American University of Nigeria (AAUN) in Yola, eh?

So I'm compelled to add a preface t this post: I am in no way associated with AAUN, and I suspect that writing in the comments section of this post is not the best way to contact that University.

via Emeka Okafor I discovered this brand new University. It's a very interesting development for several personal reasons. First of all, my father started our family's history of study in US-style universities when he left just after the Biafran war to pursue Materials Engineering at the American University in Cairo (after the Biafran war made it impossible for him to take up a full-ride scholarship he'd earned at the University of California. He subsequently went to get his Ph.D. at Case Western University, Cleveland). He told me that he had been a fan of the VOA, and so he applied for American scholarships. When he missed the time window for UC, he took the next available scholarship, for the nearest US-Style University, which happened to be in Cairo.

Nigerian Universities have been traditionally British-style, which I personally prefer, with my limited experience of having attended one American-style and one British-style University.

The AAUN front page says:

AAUN is the first American-style University in sub-Saharan Africa. Our mission is to offer a world-class, American style education to students who do not wish to spend four years studying in the United States.

Well and good, but the "about" page says:

AAUN is intended to be the first world-class university in West Africa and will be one of the premier universities on the continent.

What the fuck? How dare they? Ask the employers of the countless products of West African universities pursuing professions across the globe whether their employees' Universities were not world class. West African has a very impressive history of Universities, and in their great ages, University of Nigeria, Nsukka (UNN, which I attended) and University of Ibadan, just to mention two examples in Nigeria, were undoubtedly world class. Yes, many of these institutions have fallen on hard times, but the AAUN claim seems to ignore even their past achievements. It seems the colonial attitude is still alive and well.

One thing I will say is that universities such as UNN are more traditional Universities, rather than vocational in nature. I think this is usually a good thing, but in the present circumstances throughout much of West African, it makes sense to focus on vocational education, as AAUN does. We need to grow our professional class as quickly as possible. There might be a little shortfall in available opportunities for such training, but if we can keep our markets working properly, economic forces will find efficient use for them in time, as it did in India, for example. Worst case it will just increase the brain drain, but contrary to many others, I think that brain drain from West Africa is not an obviously egregious problem (or at least that it's not obviously worse than low educational attainment of natives).

Another reason for my interest in this announcement is that I lived in Yola, Nigeria for a couple of years growing up. My father lectured at the Federal University of Technology, Yola for a while in the mid-80s. Yola is, I think, an odd location for the first of any kind of University. It's a fairly remote and sleepy town in the unfashionable North East of the country. In any case, all the best to AAUN, and to those applying to study in the charter Spring 2006 term. I like the high-tech accoutrements that will apparently be standard on campus.

[Uche Ogbuji]

via Copia

I must be missing something about XOXO (and maybe microformats in general)

As I mentioned I started working with XBEL as a way to manage my Web feeds. It occurred to me that I should consider XOXO for this purpose, since it hsa more traditionally been put up in opposition to OPML.

Well, I don't get it. Sure, it's simple XHTML with some conventions for overlaid semantics, but how does that do anything for interoperability of Webfeed subscription lists? I've taken a look at attention.xml, and that seems more thoroughly specified, but it's way overkill for my needs.

Look, all I need to do is represent a categorized structure of feeds items with the following information per item:

  1. Web feed URL (e.g. RSS or Atom link)
  2. title
  3. optional description or notes
  4. optional Web site URL (e.g. Link to HTML or XHTML page for Weblog)

The trouble with OPML is that there are dozens of ways to encode these four bits of information, and as I've found, tools pretty much range all across that dozen. Besides, OPML is really poor XML design. That's a practical and not just aesthetic concern, because I expect to manage this information partly by hand.

XBEL is much better markup design, but I don't know that it has a natural way to represent the distinction between feed and content URL for the same item ("bookmark").

Everything I heard about XOXO led me to believe that this is a slam dunk, but hardly. The XOXO "spec" is not all that illuminating, and from what I can gather there or elsewhere, there are also a dozen ways I could encode the above information. Perhaps:

<li>
  Weblog home
  Weblog feed
  <dl>
    <dt>description</dt>
    <dd>That good ole Weblog</dd>
  </dl>
</li>

Perhaps (so that the likely HTML rendering is not jumbled):

<li>
  <ul>
    <li>Weblog home</li>
    <li>Weblog feed</li>
  </ul>
  <dl>
    <dt>description</dt>
    <dd>That good ole Weblog</dd>
  </dl>
</li>

But since Weblog contents could be XML, is it really safe to use media type as the distinguishing mark between Web site and Web feed links? OK, so perhaps:

<li>
  <ul>
    <li>Weblog home</li>
    <li>Weblog feed</li>
  </ul>
  <dl>
    <dt>description</dt>
    <dd>That good ole Weblog</dd>
  </dl>
</li>

But now I've invented a relationship vocabulary (I guess this is technically my own microformat) and why would I expect another XOXO tool to use rel="website" and rel="webfeed"?

I could go on with possible variations. I do like the way that I can simply refer to the XHTML Hypertext Attributes Module to get some general ideas about semantics, but that's not really good enough because I have a fairly specific need.

I imagine someone will say that XOXO is just a general outlining format, and can't specify such things because it's all about being micro. But in that case why do people put XOXO itself as a solution for Webfeed corpus exchange? I can't see how XOXO can do the job without overlaying yet another microformat on it. And if we need to stack microformat on microformat to address such a simple need, what's wrong with good old macroformats: you know: a real, specialized XML format.

I've really only spent an hour or two exploring XOXO (although according to the microformats hype I shouldn't expect to need more time than that), so maybe I'm missing something. If so, I'd be grateful for any enlightening comments.

[Uche Ogbuji]

via Copia

Trying to revive the #atom IRC channel

John L Clark and I separately needed a place to hang out and discuss Atom. The Atom Wikis talk of "#atom on freenode IRC network", but that channel was empty when John and I separately checked. In the hopes of reviving such a useful forum he and I now stay logged on there. If you're interested in Atom, consider joining us. I'm currently working on several Atom projects, both billable and non-billable, so I expect I'll be knee-deep on the format, and maybe the protocol, for a while.

[Uche Ogbuji]

via Copia

EULA this!

<DmncAtrny> I will write on a huge cement block "BY ACCEPTING THIS BRICK THROUGH YOUR WINDOW, YOU ACCEPT IT AS IS AND AGREE TO MY DISCLAIMER OF ALL WARRANTIES, EXPRESS OR IMPLIED, AS WELL AS DISCLAIMERS OF ALL LIABILITY, DIRECT, INDIRECT, CONSEQUENTIAL OR INCIDENTAL, THAT MAY ARISE FROM THE INSTALLATION OF THIS BRICK INTO YOUR BUILDING."
<DmncAtrny> And then hurl it through the window of a Sony officer
<DmncAtrny> and run like hell

via Quote Database

Disclaimer: I sure as hell don't condone cinder-block hurling (except perhaps as part of kinematics experiments performed in abandoned parking lots), EULA or no.

But isn't Sony's stupidity a marvel to behold?

[Uche Ogbuji]

via Copia

Help needed with Python/SAX implementation comparison

If you want to help clarify the implementation differences across Python/SAX implementations and you are familiar with XSLT, please respond to Mike Brown's request for help. Andrew Clover's similar work for Python DOM implementations has proved a very useful resource, and it would be nice to have the same for SAX. Mike has done the hard part. He just needs someone to carry it across the finish line. I did discuss some of the unfortunate Python/SAX confusion in "Practical SAX Notes". A tabular analysis would be a nice addition to that discussion.

[Uche Ogbuji]

via Copia

I already said OPML is crap, right? I had to hack through another reminder today.

So today I tried to import OPML (yeah, that very OPML) into Findory (see last entry). The OPML is based on what I originally exported from Lektora and has been through all my feed experiments. A sample entry:

<outline url="http://www.parand.com/say/index.php/feed/" text="Parand Tony Darugar" type="link"/>

What does Findory tell me? 97 feeds rejected for "invalid source". Great. Now I actually have to get my hands dirty in OPML again. I check the spec. Of course there's no useful information there. I eventually found this Wiki of OPML conventions. I saw the type='rss' convention, but that didn't seem to make a difference. I also tried xmlUrl rather than url, like so:

<outline xmlUrl="http://www.parand.com/say/index.php/feed/" text="Parand Tony Darugar" type="link"/>

This time the Findory import works.

But not only do several of the feed readers I use have url rather than xmlUrl, but the XBEL to URL XSLT I've found assumes that name as well. The conventions page also mentions title versus text as a way to provide formatting in some vague way, but I've seen OPML feeds use only title and nary a text to be seen anywhere. Besides, what's wrong with the XML way of allowing formatting: elements rather than attributes. It's enough to boil the brain.

Speaking of XBEL, that's actually how I'm managing my feeds now, as I'll discuss further in the next entry. Now that Web feeds have become important to me I'll be using a sane format to manage them, thank you very much. I'll do the XSLT thing to export OPML for all the different tools that insist on tag soup. That is, of course, if I can figure out what precise shade of OPML each tool insists on. Today's adventure with feed URL attributes makes me wonder whether there is any escaping the chaos.

[Uche Ogbuji]

via Copia

Still looking for a feed reader, perhaps

Earlier I trawled around for a new way of reading my Web feeds. Readers were kind enough to mention Rojo in comments, and I've been using it ever since, but I'm not so sure anymore. It's very nice, but there are a couple of UI nits, and I have a sneaking suspicion it's not showing all new stories. I'm not set on ditching it yet, but I'm looking around again. I found the very useful resources "1 week comparison: SearchFox, Feedster, Pluck, Bloglines, Rojo, and NewsGator", and the follow-up "3 week shakedown, 2 RSS readers remain.". He's leaning towards SearchFox (which a Copia reader had mentioned earlier) and Rojo. Someone in his comments mentioned Findory as well. I went to www.searchfox.com and signed up, but I guess that's the wrong site. I went to rss.searchfox.com, but you have to e-mail them to get a beta account. I'll give my initial impressions on SearchFox if and when I get an account. As for Findory, the first issue is that I couldn't figure out how to import OPML. I went back to the comment from which I learned about it and found that the key URL is http://findory.com/s/, but I don't think this is very clear on their Web site.

After some OPML silliness (more on that later) I completed the import and found that clicking the "favorites" link in the upper right hand side is the key to focusing on your own feeds, and not all the other stuff Findory wants to show you. I don't think it will work for me though, because it's not the newspaper style aggregator that I prefer.

[Uche Ogbuji]

via Copia

Programmatic Access to Repository (SOAP/FtRPC)

This is meant to be a follow-up to my last entry to cover the programmatic remote procotols supported by the 4Suite repository.

FtRPC

The 4Suite repository supports an internal RPC protocol with a Python implementation that provides programmatic access to the repository. The automated 4Suite build process has recently changed significantly so you can browse the Python API documentation (courtesy of John L Clark's build). Each repository could serve it's own instance (the default port is 8803)

SOAP

The 4Suite repository supports a SOAP mapping that essentially attempts to serve as a translation mechanism between SOAP and the internal repository API. A repository instance can manage a SOAP server instance (the default port is 8090).

SOAP Service Namespace

The namespace URI associated with the SOAP service is:

http://xmlns.4suite.org/reserved#services

Authentication

Each SOAP message can have authentication information in the SOAP Header. The format is:

<SOAP-ENV:Header>
  <ftsoap:authenticationHeader>
    <ftsoap:sessionId>..</>
    <ftsoap:sessionKey>..</>
    <ftsoap:authenticatingUser>.. user .. </>
    <ftsoap:authenticatingPassword></>
  </>
</>

where SOAP is bound to:

http://schemas.xmlsoap.org/soap/envelope/Header

Session authentication is supported with the first two header entries. The other two are for simple / basic authentication (very similar to HTTP scenario).

Message-to-Repo API Mapping

SOAP messages are invoked against repository resources. The local name of the SOAP-ENV:Body child element (in the ftsoap namespace) is mapped to the name of the method to invoke. The child elements are mapped to parameters to the methods. There are certain special parameters:

  • scrpath (the repository path of the resource to execute the method against)
  • base64 (a boolean value indicating whether or not the content is Base 64 encoded – fault by default)
  • src (the content – transmitted as pure text or Base 64 encoded)
  • updateSrc (used by the xUpdate method as the XUpdate document – transmitted as pure text or Base 64 encoded)

The method is invoked with one of the following as the response:

  • ftsoap:successReponse (if there is nothing returned)
  • ftsoap:valueResponse (the value returned – it's string representation)
  • ftsoap:Resource (if a resource itself is returned)
  • SOAP-ENV:Fault (includes Base 64 encoded traceback string)

ftsoap:Resource diagram

[Uche Ogbuji]

via Copia

Hip-Hop in its essence is Palestinian

This is a hunting season the prey is one more home
Of a dove trying to survive under the hawk’s regime
(page ripped) lets try something more optimistic:
each day I wake up and see like a 1000 cops
maybe they came to arrest a dealer…(he’s ever here, over here, oh no
they came to destroy his neighbor’s home)
what is happening here? A hate bubble surrounding the ghetto
why is it hard for him? And who’s going to answer him? Anywhere
I go, excuses are there to greet me
I broke the law? No no the law broke me
enough, enough (enough, enough) gentlemen (gentlemen)
I was born here, my grandparents were also born here, you will not sever me
From my roots (you will not sever me from my roots) understand, even if
I have faith in this “if you wish it is not a legend” regime
You still haven’t allowed me to build a porch to stand on and express it

—Tamer Nafar of DAM—"Born Here" translated lyrics

When explaining Hip-Hop to people my motto has always been: "Hip-Hop in its essence is regional", based, of course, on the word play at the heart of one of Hip-Hop's greatest songs, Common's "I Used to Love H.E.R.". I'm always blown away at how kids the world over take the basic art form, and make it so emphatically theirs. The quickest way to get clowned in many countries is to try to rap just like 50 Cent, or even just like Talib Kweli. Same goes for DJing and the other elements. It's already been the case in Florida, Georgia, Tennessee, Louisiana, Texas, Illinois, East Great Lakes, Los Angeles, the Bay area and more places within the U.S. Hip Hop was born in New York (with much courtesy from Jamaican immigrants), but anywhere it's picked up, it takes on an instant regional flavor. This is the strength of Hip-Hop.

I personally look out for the different Hip-Hop flavors of Paris, Lyon Zürich, Toronto, Dakar, Lagos, Havana, Tokyo, and many such places. It looks as if I'll have to add the West Bank to that listing.

Via Ethan Zuckerman I learned about a precious blossoming of Hip-Hop in Palestine. I've listened to a bunch of the linked tracks and watched a bunch of the videos. This shit is mad hot. The kids are articulate, angry and yet extraordinarily circumspect. Like many very sad observers of the Israeli/Palestinian conflict, I've found too little distinction made between Israeli, hard-line Zionist, Palestinian, terrorist, refugee, etc. These Palestinian rappers vent their frustration with the heavy-handed tactics of Israeli security forces without succumbing completely to the "annihilate Israel" logic of extremists. Sure there are parts of the Israeli side of the story that you're never going to get a fair hearing from in Palestinian rap, but no one could reasonably expect any more in such a polarized situation.

I personally believe that it's the "keep it real" ethic of Hip-Hop that makes it possible and even essential in such horrible conflicts for people to speak their mind without losing their minds. "Keep it real" is the same ethic that allows Hip-Hop to adapt so completely in wide-ranging locales. It can have negative consequences, from glorifying violence and sexism to causing smaller-scale conflict such as the Tupac/Biggie feud, but you rarely have to strain your ears before you find the culture quite willingly criticizing itself. And there is plenty of karma to balance out the negatives. Just last month (1) (2) there was a U.S. release of an amazing hip-hop collaboration between a Emmanuel Jal, a Sudanese Christian former child soldier and Abdel Gadir Salim, a Sudanese Muslim bandleader. This is a conflict that has risen to levels of total war and genocide. I don't expect the release of Ceasefire will end the very deep-seated Sudanese strife, but it is just another example of how Hip-Hop brings people and cultures together even while it thrives on authentic cultural identity. Hip-Hop in its essence is Sudanese.

Sidebar. I went to watch Mos Def (purportedly), Talib Kweli, Pharoahe Monch and Jean Grae at the Ogden Theater in Denver on Thursday. Mos Def was a no-show due to illness, but Talib Kweli is the one I wanted to see the most, anyway, and it would be my first time watching Pharoahe in concert. All the performers held it down solid, and as often happens when I go to such ensemble concerts, I had a pleasant surprise. K'naan, front man of The Dustyfoot Philospher, is a Toronto-based Somali rapper I'd never heard of. He did a superlative set rapping and singing while playing a traditional drum, with two other drummers working beside backup strings, organ, and a DJ. It was all-out boom-bap with unmistakable East African flavor. He moved the crowd to near hysteria (not bad for the act with leftover billing). He didn't get much into the simmering disputes between Somalia and Eritrea, but he definitely waxed eloquent about how real it is just to keep life and limb together in so much of his Motherland, and the many international and home-grown outrages that fuel the tragedies (keeping it real: he's as hard on Black warlords as he is on White colonists). Yeah. Hip-Hop in its essence is also Somalian.

As my peeps used to say in the early 90s: "Peace in the Middle East".

[Uche Ogbuji]

via Copia

RESTful Behavior of 4Suite Repository HTTP Server

As a consequence of a recent question in the #4suite channel about support for remote web services (in the general sense) and a recent reoccuring need to refer to scattered notes, mailing list threads, and such, this is my attempt to document the HTTP behavior of the repository (emphasizing those that are RESTful).

Authentication

Servers (unique per port and repository instance) can request mandatory HTTP Authentication. In which case all requests without an HTTP Authorization header (or an undecipherable one) will result in a 401 reponse.

Upon authentication failure (for servers that request mandatory authentication), a 401 response is sent back indicating the given user failed authentication.

For all others, a 403 request is sent back.

Interpreting Request URIs

The 4Suite Repository HTTP Server interprets Request URIs as:

  1. Repository Paths
  2. XSLT Invokations
  3. URI Patterns

Repository Paths

Repository Paths are direct references to repository resources.

GET Requests

The resources are returned as is with the 'Content-type' header set to their Internet Media Type. The 'Last-Modified' header is populated with the date of last modification (as given by the repository) in order to help remote clients cache resource references.

If the resource doesn't exist, a 404 response is returned.

PUT Requests

If the path refers to an existing resource, it's content is updated with the body of the request. Otherwise, a new resource is created using the body of the request as the content and the Content-type header as the Internet Media Type.

The RFC semantics of this verb don't map so cleanly where the resource does not exist. The server is bound (by RFC2616) to attempt to interpret all Content-* headers. So, other than Content-length, all other such headers result in a 501 response (not supported).

Any XML-related content-type entries (?:text|application)/.*\+?xml to be REGEX-specific) will cause an XML document to be created. These have 'special' behavior in the repository and invokes some additional introspection of the content (the document could be a user, group, RDF document, an XML->RDF mapping, etc..).

Otherwise, an attempt to parse the body of the request (via 4Suite XML's Domlette) is made. If successful, then the repository assumes an XML document is being created (and the same additional introspection occurs).

If the new resource is created successfully, a 201 response is sent.

DELETE Requests

The resource identified by the path is deleted from the repository. Upon failure, the appropriate reponse code is sent: 404, 401, 500

POST Requests

POST requests only have meaning in the contenxt of XSLT invokations, in which case the request body is considered the source document for the XSLT transformation.

XSLT Invokation

I can't speak with ful authority on the subject, but from my sufficient (so far) understanding (which is limited to the use of XSLT as a server-side mechanism for HTML form and XForms submission processing) the default mechanism for triggering XSLT invokations is:

Request URI-based Invokation

The path portion of the URI is interpreted as the repository path of the source document. The 'xslt' parameter is the repository path of the XSLT document to use for the transformation. The remaining parameters are interpreted as name/value pairs of top-level XSLT parameters to pass on to the XSLT processor.

POST-based Invokation

The interpretation is the same except that all the request arguments (as submitted from an HTML form, for instance) except 'xslt' are interpretated as name/value pairs of top-level XSLT parameters as well.

Older Akara Entries on the subject

URI Patterns as RESTful Services

This is a more recent development, but portions of the server document include Server rules. The original excerpt / references on these can be found here but in summary each server can register the combination of certain URI patterns (as given by a REGEX expression) and request methods (GET,PUT,and/or POST) with XSLT invocations. This includes full control over the parameters and source document (using the original request URI).

Somewhat related

FTSS URI Scheme

Chimezie Ogbuji

via Copia