Quelle poésie (Le Cœur supplicié)

Mon triste cœur bave à la poupe...
Mon cœur est plein de caporal !
Ils y lancent des jets de soupe,
Mon triste cœur bave à la poupe...
Sous les quolibets de la troupe
Qui lance un rire général,
Mon triste cœur bave à la poupe,
Mon cœur est plein de caporal !

Ithyphalliques et pioupiesques
Leurs insultes l'ont dépravé;
À la vesprée, ils font des fresques
Ithyphalliques et pioupiesques;
Ô flots abracadabrantesques,
Prenez mon cœur, qu'il soit sauvé !
Ithyphalliques et pioupiesques,
Leurs insultes l'ont dépravé.

Quand ils auront tari leurs chiques,
Comment agir, ô cœur volé ?
Ce seront des refrains bachiques
Quand ils auront tari leurs chiques !
J'aurai des sursauts stomachiques
Si mon cœur triste est ravalé !
Quand ils auront tari leurs chiques,
Comment agir, ô cœur volé ?

Arthur Rimbaud, 1871

Traduction : Rimbaud vomit à la poupe d'un bateau, en train de se faire enc**** par une troupe de soldats avinés (source).

Anti-trendisme

Un rasoir Gillette normal et actuel

Communiqué de l'OAKC

We have the nounours. Stop the kikoololing. Else...

Buzzwords repository

I was thinking too about Web Services.

Here's what I'd like to do: an RDF database (queried using RDQL or SPARQL) with a SOAP interface. The big point is WSDL.

Image described in the above paragraph

Some thoughts on XMLNS's XHTML version...

My previous post was not that clear about the relations between XPDL and DOAML's XMLNS. First of all, when I say "XMLNS" here, I mean "the XHTML version of the XMLNS", or, more precisely "the XHTML document you get if you point your browser to the namespace URI and request a MIME-type different from application/rdf+xml".

Secondly, this document must present briefly the main facts about the ontology, its goals, and the ways to get in touch with the community. This, for sure, must be done using existing RDF documents. It would be a perfect example of what can be acomplished through the definition and use of metadata: automatic page generation and (somewhat) automatic page updates. We already have all the pieces to build this puzzle: a little bit of DOAP data, some OWL data from the ontology, and some DCMI metadata for the XHTML document in itself.

We just need to pick the right informations from the right document. But here begin the bad news. We don't have any way of querying an RDF document using the advantages of its XML serialization. We can use SPARQL to query RDF documents, or XQuery to query an XML document, or, last but not least, XSL to transform an XML document. I would like to see a language / document type / whatever that would mix up XSL advantages (producing XML documents without breaking the "all-XML" chain, eg), but use SPARQL (or any other RDF query language, maybe more XPath-like, but playing with triples) instead of XPath...

But we don't have it now. Then we must use XSL, in order to transform XML documents into other XML documents. This truely sucks, because XSL cannot handle well the unpredictable syntax of RDF, and cannot reason either on its meaning. But we admit that we have syntaxically consistant RDF documents (we do it ourselves!), and go on with XSL.

We have now a little pack of XHTML documents, invalid against the DTD for sure (no <head />, no <body />...), but that we will unite together into a unique, valid XHTML document, using XInclude. And here comes my previous post. In a few words, it says that make breaks the "all-XML" chain and that Ant Java sucks, whereas XPDL rocks the Holy Trout.

Why I want XPDL for DOAML's XMLNS representation

[Follow-up of this post]

I think I know what I want to do on this page. I want an XHTML summary of DOAML, as provided in its DOAP document, informations about the ontology, extracted from the OWL data present in the RDFS, and finally, a quick list of the classes and properties defined by DOAML, and maybe some data I provide in XHTML - with, of course, the "look'n'feel" of the rest of the DOAML website.

I can make it using a Makefile, that will generate each chunk of data, ie apply stylesheets on the RDFS and the DOAP documents in order to generate XHTML documents, then put them along in the final XHTML document using XInclude, without forgetting to <link /> DOAML website's CSS, and pass it through tidy.

But... well, call me an <xml:geek/>, but I want to specify this in XML! And call me an extremist, but I can't stand Java, since it nearly screwed my last year's TPE (I have coded long-to-run programs, for example a PHP stuff that read the 50 Megs of a transcription of the X chromosom, but I have never coded such a long-to-start program: I had to launch it 10 minutes before the beginning of my oral exam!... anyway.), therefore I won't use Ant. Furthermore, Ant is somewhat too generalist.

But here comes the XML Pipeline Definition Language. I simply love it! But... yeah, you guessed it, Sun has implemented it... in Java, of course (well, that sounds logical when you know that Norman works at Sun Microsystems... why, but whyyyyy???). But save the last dance for me: implementing it in C, using libxml2, is simple as ABC... if only I knew C.

Well, in principle, that does not sound that difficult: the processdefs give you all the command-lines you have to call in order to execute what the user wants (although predefined ones, such as implementation.xslt-transform, or implementation.xinclude, implementation.schema-validate, etc, would be very useful... and maybe refering to them as URIs, too). You look at the dependencies (quite easy to my mind), and there you go, you launch the stuff... and it works.

libxml has all what we need, from XML Signatures verification to XSLT transformations, and also XIncludes, DTD Validation, etc. We may need some bits of external code (such as Tidy), but using the command-line form of the processdefs helps us with it.

Escape, yes, but don't forget the Archives!

Tsunami Hazard Zone - In case of earthquake, go to high ground or inlandLet's talk about Anouck. She is creating her FOAF document, but she receives tons of spam every day, and wouldn't like her new FOAF file to be one more way for spammers to get her mail address. Therefore she uses foaf:sha1sum in order to protect her privacy, but also to be identifyable within the Semantic Web. Her mail address is mailto:anouck@example.org, and its SHA-1 hash is 11a61224bc19649d4f3f2dec2406c88eff10c19e. Her FOAF document basically looks like this:

<foaf:Person>
 <foaf:name>Anouck</foaf:name>
 <foaf:mbox_sha1sum>11a61224bc19649d4f3f2dec2406c88eff10c19e</foaf:mbox_sha1sum>
</foaf:Person>

But she hears about SHA-1 being broken. The FOAF community decide to create foaf:mbox_sha256sum, and Anouck immediately replaces her old SHA-1 checksum by the brand new SHA-256 checksum:

<foaf:Person>
 <foaf:name>Anouck</foaf:name>
 <foaf:mbox_sha256sum>a4b57c86f7efd0f7322ffe906c4e323b621f12df87006699b0728081ca092436</foaf:sha256sum>
</foaf:Person>

And she thinks everything is perfect. Her mail address is perfectly protected from the spammers. Actually, it is, SHA-256 being - at the moment - resistant to the attacks. But what about archives ? What about old copies of her FOAF file, containing the same mail address, but hashed using SHA-1? There must tons of way to grab it! Google cache, Semantic Web crawlers, etc.

If the "go to high ground" technique is a very good way to save your life in case of a tsunami, it isn't is the case of protecting your mail address from spammers, just because of the archives... I wonder if there is a way to overcome this problem.

[Side note] The tsunami sign comes from a PDF by the Departement of Geology of the State of Oregon, USA.

[Edit] You can try to generate SHA-256 checksums with this page I created, based on a class I found on the Net. Remember that foaf:mbox_sha256sum does not exist yet!

Un câble transatlantique

J'ai regardé ce soir sur Arte un documentaire sur le télégraphe transatlantique... Et je me suis posé une question, peut-être plus conne que d'habitude : comment ont-ils pu faire passer un câble en plein milieu de la dorsale médio-atlantique ?

Cette dorsale n'est pas une dorsale de routeurs, mais un endroit où deux plaques lithosphériques (deux morceaux de la croûte terrestre) se séparent, et où de la nouvelle croûte est formée. Dans le cas de la dorsale médio-atlantique, c'est de la croûte océanique, composée principalement de basalte et de gabbro, qui est formée. Dans la région qui nous intéresse (entre l'Ecosse et Terreneuve), la dorsale sépare les plaques Eurasienne et Nord-Américaine. Au niveau de la dorsale, le manteau en fusion affleure, et du magma remonte donc. Au contact de l'eau, le changement brutal de température fait se solidifier le matériel en fusion.

Illustration du principe de la remontée du magma décrit plus haut.

On peut donc se demander comment ont-ils fait pour faire passer un câble en plein milieu (d'autant plus qu'en 1858, on ne connaissait pas la tectonique des plaques, "inventée" par Alfred Wegener en 1912 !). On voit bien sur cette carte, et sur un agrandissement que le câble coupe orthogonalement la dorsale.

En fait, Cyrus Field a fait passer son câble transatlantique sur un plateau surélévé, qui coupe la dorsale, comme on le voit sur cette carte :

Altitude des fonds marins de l'Atlantique. On distingue, au centre, la dorsale médio-atlantique.

Ce plateau doit couper la dorsale, et permettre au câble de ne pas fondre... Mais il se peut que mon interprétation soit fausse :) Je vous conseille au passage de lire Regional Oceanography, et notamment les chapitres 14 à 16 qui traitent de l'Atlantique pour des informations générales ; et "Developing the theory", in "This Dynamic Earth", une publication de l'USGS pour des informations précises sur la tectonique des plaques et les phénomènes de divergence.

Enfin, je ne pourrais conclure sans penser que la plupart des données de Wikipedia, dont j'ai usé et abusé dans cet article, sont hébergées en Floride... et qu'elles passent par un câble transatlantique... Comparez le débit d'un télégraphe non-multiplexé à celui d'un câble TAT-14 actuel... (voyez sur Wikipedia pour des informations sur les débits) :)

StarAc' RDF Vocabulary

(StarAc' is a french abbreviation of Star Academy, a reality show by Endemol).

Most of these proposed properties have an rdfs:domain of foaf:Person.

  • starac:cantSing
  • starac:cantDance
  • starac:cantSingAndDance
  • starac:makesTheRareAudienceFlee
  • starac:horrorEvenAtKaraoke

What do you think about that? (english translation is somewhat approximative...)

Little problems with a template system...

I'm trying to rebuild from scratch my CMS, Fluorine CMS. And in this process, I have to code some template engine. I thought I could do it using XML. Here's a functional schema:

Fluorine CMS template engine functional schema

Basically, you got to read the schema from right to left ;) Keep in mind that "XHTML output" is just to make the schema smaller, because it'll be used to generate RSS feeds / export, RDF metadata, maybe some DocBook output... well, anything in XML.

There are two big kind of interaction between Fluorine and its Template Engine: namespaces and contexts.

If you're coding a plugin that, let's say, outputs "hello world" in the generated XML, you register a namespace ("hello" bound to "http://www.example.org/", eg), and you can use <hello:xxx>. "xxx" can be any XML-valid name (ie nearly anything). It's you the one who handles all the freaky "behind the scene" stuff in your plugin. You just need to register a namespace to make the Template Engine aware of your existence, and follow a very simple API: declare a static handler() func in your class (with some args).

My little baby sister can do it with ease
It's easier than learning your ABCs...

Kylie Minogue, Loco-Motion

But if you want to output some more complex stuff, using a template (eg in a menu), you need to register a context. It's more or less the same thing than registering a namespace, but it only tells Fluorine CMS to pass you everything it encounters in <caf2:template for="urn:...">. The URN is the one you registered, caf2 is Fluorine's default namespace name.

My problems comes from here: if you want to make a plugin, you have to build an internal XML tree in order to repeat it as many times as you need! Not that easy, heh? I chose to use SAX, because it fits the "line-per-line" (or linear) parsing of the template file (pure XML, using XInclude and stuff) I need... but maybe I should use DOM? Using both would be a little crazy, as it's rare to encounter both on a server... What do you think of that?