<?xml version="1.0" encoding="ISO-8859-15"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jean, aka Sig(gg) &#187; Architecture</title>
	<atom:link href="http://www.akasig.org/category/informatique/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.akasig.org</link>
	<description>Innover, servir, entreprendre.</description>
	<lastBuildDate>Thu, 19 Aug 2010 20:55:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SVG as an alternative to Flash, here comes bliotux</title>
		<link>http://www.akasig.org/2009/12/22/svg-as-an-alternative-to-flash-here-comes-bliotux/</link>
		<comments>http://www.akasig.org/2009/12/22/svg-as-an-alternative-to-flash-here-comes-bliotux/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 15:43:50 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[le wecena]]></category>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=1115</guid>
		<description><![CDATA[As a follow-up to my SMIL-animated SVG for accessible textbooks article, here is a copy of the README file of wecena.bliotux. I currently have 4 full-time wecena volunteers currently making accessible textbooks for children with cognitive disabilities (mainly dyspraxia) under the supervision of an INSERM medical research lab and of a dyspraxia-related non-profit organization, Dyspraxique [...]]]></description>
			<content:encoded><![CDATA[<p>As a follow-up to my <a href="http://www.akasig.org/2009/11/27/smil-animated-svg-for-adapted-textbooks/">SMIL-animated SVG for accessible textbooks article</a>, here is a copy of the README file of wecena.bliotux. I currently have 4 full-time <a href="http://www.wecena.com/apropos">wecena</a> volunteers currently <a href="http://www.wecena.com/beneficiaires/dyspraxique-mais-fantastique-dmf/adaptation-de-manuels-scolaires-pour-enfants-ayant-des-troubles-de-lapprentissage">making accessible textbooks for children with cognitive disabilities</a> (mainly <a href="http://en.wikipedia.org/wiki/Dyspraxia">dyspraxia</a>) under the supervision of an <a href="http://www.unicog.org/">INSERM medical research lab</a> and of <a href="http://www.dyspraxie.org/">a dyspraxia-related non-profit organization, Dyspraxique Mais Fantastique</a>. They currently use <a href="http://www.fruitsdusavoir.org/index.php?page=10">Didapages, a Flash-powered proprietary authoring tool</a> to make these would-be accessible textbooks. But we are not satisfied by this tool and I wanted to propose an open-standards free software alternative. So I wrote wecena.bliotux as a proof-of-concept of such an alternative technological framework.</p>
<p>Beyond dyspraxia and children with disabilities, I think bliotux may be of some use for any developer looking for an alternative to Flash as a technology to make highly-graphical, ineractive and animated offline or online applications. <a href="http://svn.gna.org/svn/wecena/trunk/wecena.bliotux/">The source code is available under the wecena subversion repository</a> (until I create a dedicated repository). Here is a full copy of <a href="http://svn.gna.org/svn/wecena/trunk/wecena.bliotux/docs/README.html">the README file</a> :</p>
<h1>wecena.bliotux</h1>
<p>
            This software package is a framework for building web applications having the following buzzwords</p>
<ul>
<li>
                    <strong>web</strong><br />
                    apps: run in your web browser
                </li>
<li>
                    <strong>offline</strong><br />
                    apps: no web server, no Internet connection required
                </li>
<li>
                    <strong>rich</strong><br />
                    applications : highly graphical user interfaces, using SVG
                </li>
<li>
                    <strong>animated</strong><br />
                    applications : pages can include (interactive) animations using (SMIL-powered) animated SVG templates
                </li>
<li>
                    <strong>interactive</strong><br />
                    : interaction/behaviour is defined in a  simple Javascript file corresponding to a given page
                </li>
<li>
                    with <strong>persistence</strong><br />
                    of user data and application state : using local storage with persistence engines such as Google Gears (or HTML5 localstorage when it&#8217;s mature enough in Firefox)
                </li>
<li>
                    <strong>template-based</strong><br />
                    : pages sharing a common layout/structure are based on template files
                </li>
<li>
                    <strong>document-oriented</strong>: a simple data structure in a data.js file defines the data used to populate the corresponding SVG template for any given page
                </li>
<li>
                    <strong>free software</strong>: distributed under the Affero GPL License (even though I am not 100% sure of the exact meaning of the Affero version for offline applications BTW&#8230;)
                </li>
<li>
                    based on <strong>open standards</strong>: SVG now (Daisy Profile for SMIL+SVG, CSS and WAI-ARIA in the roadmap) rather than based on proprietary technologies such as Microsoft Silverlight or Adobe Flash
                </li>
<li>
                    highly <strong>accessible</strong><br />
                    even though using JavaScript (see open standards&#8230;)
                </li>
<li>
                    as <strong>cross-browser</strong><br />
                    compatible as possible: apps should run on any web browser as long as they offer some support for SVG and Javascript; and bliotux users should not have to care much about browser compatibily.
                </li>
</ul>
<p>
            The original aim of this package is to build a non-Flash interactive animations management framework so that<a href="http://www.wecena.com/beneficiaires/dyspraxique-mais-fantastique-dmf/adaptation-de-manuels-scolaires-pour-enfants-ayant-des-troubles-de-lapprentissage">accessible<br />
                textbooks can be made for children with cognitive disabilities (mainly dyspraxia)</a>.<br />
            But it could be used to produce any set of interactive animations<br />
            such as books, websites, interactive animations or I don&#8217;t know what.<br />
            You imagine.<br />
            You experiment.<br />
            You tell me what it may be useful for !
        </p>
<p>
            The following JavaScript libraries are used</p>
<ul>
<li>
                    <a href="http://jquery.com/">jQuery</a>
                </li>
<li>
                    <a href="http://keith-wood.name/svg.html">jQuery.SVG</a><br />
                    (<a href="http://raphaeljs.com/">RaphaelJS</a><br />
                    might have been a better choice).
                </li>
<li>
                    <a href="http://code.google.com/p/jquery-jstore/">jQuery.jStore</a><br />
                    (<a href="http://pablotron.org/software/persist-js/">PersistJS</a><br />
                    might have been an acceptable choice).
                </li>
<li>
                    <a href="http://gears.google.com/">Google Gears</a><br />
                    (as a dependency of jStore because <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=507361">the implementation of HTML localstorage by Firefox has a bug</a>)
                </li>
<li>
                    <a href="http://blog.ianbicking.org/javascript-doctest.html">doctestjs</a><br />
                    (because I would be so cool if only I could figure out how to use Javascript doctests for this project&#8230;)
                </li>
</ul>
<p>
            <em>Disclaimer with regards to JavaScript as a programming language :</em><br />
			Ahemm&#8230; Javascript was selected because we wanted to have one and only one language to be used both for the making<br />
            of bliotux-powered templates and pages and for their execution.<br />
            And their execution should not require any<br />
            prior installation of software : the web browser should be the only required stuff.<br />
            And Javascript seems to be the only open-standards-oriented way to offer rich interactivity to SVG in web browsers.<br />
			Too bad.
        </p>
<h1>How to use wecena.bliotux ?</h1>
<p>
            At the moment wecena.bliotux is nothing but a proof-of-concept.<br />
            More will come in case the project I&#8217;m working on selects this technology<br />
            as a viable alternative to the Flash-based proprietary product we are<br />
            currently using in order to make accessible textbooks for children<br />
            with cognitive disabilities.
        </p>
<h2>Download and install bliotux</h2>
<p>
            It&#8217;s in <a href="http://svn.gna.org/svn/wecena/trunk/wecena.bliotux/">a subversion repository</a>.<br />
            There is <a href="https://gna.org/svn/?group=wecena">some subversion documentation available in<br />
                case you don&#8217;t know how to download software from a subversion repository</a>. Bliotux is stored<br />
            in the wecena repository but it will get its own repository some day.
        </p>
<h2>Create a template</h2>
<p>
            Bliotux pages are based on templates.<br />
            Let&#8217;s create a first template.
        </p>
<h3>Name your template</h3>
<p>
            Choose a name for your template. In this example,<br />
            the name is<br />
            <code><br />
                simpleOperation<br />
            </code><br />
            because it is a template page for textbooks<br />
            for children learning additions and other simple mathematical operations.
        </p>
<p>
            Name a template folder accordingly.<br />
            For instance, I have<br />
            <code><br />
                wecena.bliotux/templates/simpleOperation/<br />
            </code>
        </p>
<h3>Define the layout of your template</h3>
<p>
            This part is the job of a graphics designer.
        </p>
<p>
            The layout of a template is defined by a SVG file.<br />
            (Download, install and) use any SVG editor to create such a file.<br />
            I personnally use Inkscape, which is free software.
        </p>
<p>
            Your SVG template should be named<br />
            <code><br />
                layout.svg<br />
            </code><br />
            and<br />
            should be stored under the template folder.<br />
            Here it goes:<br />
            <code><br />
                wecena.bliotux/templates/simpleOperation/layout.svg<br />
            </code>
        </p>
<p>
            The next version of Inkscape should allow you to use its new timeline-based animation editor capabilities to add<br />
            animation to your template.<br />
            At the moment, you will have to have an XML developer edit the source code of your SVG<br />
            template and add animation (animated SVG) instructions &#8220;by hand&#8221; if needed.
        </p>
<p>
            Here is a clue about how to possibly accelerate the development of such SVG animations without waiting for the<br />
            next version of Inkscape : </p>
<ol>
<li>
                    Download and install Open Office Impress
                </li>
<li>
                    Make a (duplicate) sketch of your layout in Impress
                </li>
<li>
                    Add the desired animation effects to it using the rich set of animation features Impress offers
                </li>
<li>
                    Save your animated Impress presentation in its native .ODP format
                </li>
<li>
                    Open this file using an archive handler (such as winzip under windows) :<br />
                    Open Office files are nothing but ZIP archives containing XML and graphics
                </li>
<li>
                    Edit the source code of the main XML file this .ODP archive contains.
                </li>
<li>
                    Ask your XML developer to copy, paste and adapt the animations instructions therein<br />
                    into your<br />
                    <code><br />
                        layout.svg<br />
                    </code><br />
                    file.<br />
                    (The animation instructions can easily be located : they use the<br />
                    <code><br />
                        anim:<br />
                    </code><br />
                    namespace).
                </li>
</ol>
<h3>Define the interactivity of your template</h3>
<p>
            This part is the job of a Javascript developer.
        </p>
<p>
            This is the hardest part if you are not a developer.<br />
            It should be easy if you have any experience in web development.
        </p>
<p>
            In the case of a children textbook for teaching additions and other simple mathematical operations,<br />
            we&#8217;d like our &#8220;simpleOperation&#8221; template to display a simplified virtual keyboard with numbers.<br />
            When the child clicks on a number, this number is added to a &#8220;result&#8221; text element in the template layout.<br />
            So we need to know how to use an SVG element (the number we want to click on) as an interactive button<br />
            which will display some text result as the content of an other SVG element.
        </p>
<p>
            The interactivity of your template is first prepared in your<br />
            <code><br />
                layout.svg<br />
            </code><br />
            file.<br />
            Using Inkscape XML Editor (Ctrl + Shift + X), you add event attributes<br />
            to the SVG elements you want to add some interactivity to. This involves accessing<br />
            the XML source code of the SVG file, which you should not be afraid of thanks to<br />
            Inkscape XML Editor.
        </p>
<p>
            For instance, let&#8217;s say you have a SVG group of elements which you want to<br />
            act as a button. You select this group using Inkscape. You press Ctrl+Shift+X. The<br />
            XML Editor opens. There you see the group of elements as a &lt;g &#8230; &gt; element.<br />
            You then want to add interactivity to this group. You have to add a<br />
            <code><br />
                onclick<br />
            </code><br />
            attribute.<br />
            The value of this attribute should be &#8220;clickButton(evt)&#8221;. This means that whenever the<br />
            user mouse clicks on this button, a MouseEvent event called &#8220;evt&#8221; will be fired and<br />
            some Javascript function called &#8220;clickButton&#8221; will have to handle this event so that<br />
            something special happens.
        </p>
<p>
            Now you have injected some interactivity attributes into the XML source code of<br />
            the SVG file of your template. This source code now includes things like this :<br />
            <code><br />
                &lt;g onclick="clickButton(evt)" ...<br />
            </code>
        </p>
<p>
            Let&#8217;s develop this clickButton Javascript function so that you define what should<br />
            happen whenever the button is clicked. This definition is written in a Javascript file<br />
            you have to name &#8220;interaction.js&#8221; and which sits under the template folder:<br />
            <code><br />
                wecena.bliotux/templates/simpleOperation/interaction.js<br />
            </code>
        </p>
<p>
            For instance, this file could contain the code below (see included examples, too, if needed) :
<pre>
function clickButton(evt){
    alert('You clicked the button !');
    $('.whereResultShouldBeDisplayed', svg.root()).html('Clicked !');
    $('.someSVGElementsWhichShouldBeEmptiedWhenButtonGetsClicked', svg.root()).html('');
    storageSave('.whereResultShouldBeDisplayed', 'Clicked !');
    storageSave('.someSVGElementsWhichShouldBeEmptiedWhenButtonGetsClicked, '');
}
</pre>
</p>
<p>
            If you are as unfamiliar with Javascript as I am, you need some more explanations here.<br />
            What does this function says ?
        </p>
<p>
            It says that it takes an input parameter called &#8220;evt&#8221;. But it won&#8217;t use it in this case.
        </p>
<p>
            It first displays a popup alert window with a message (&#8216;You clicked&#8230;&#8217;)
        </p>
<p>
            Then it changes the content of the SVG displayed in the web browser. It writes the text &#8216;Clicked !&#8217; in<br />
            every SVG (or HTML BTW) element which has an attribute called &#8220;class&#8221; (the same attribute which can be used<br />
            for CSS files) including the value &#8220;whereResultShouldBeDisplayed&#8221;.
        </p>
<p>
            For instance, let&#8217;s say you have this text element in your layout.svg file :
<pre>
&lt;text
  id="text4790"
  y="386.98224"
  x="454.43787"&gt;
  &lt;tspan
    y="386.98224"
    x="454.43787"
    id="tspan4786"
    class="whereResultShoudlBeDisplayed someOtherClass"&gt;Not clicked yet.&lt;/tspan&gt;
&lt;/text&gt;
</pre>
<p>            Then, once the user clicks the button, your interaction.js file will have this text element changed into this :
<pre>
&lt;text
  id="text4790"
  y="386.98224"
  x="454.43787"&gt;
  &lt;tspan
    y="386.98224"
    x="454.43787"
    id="tspan4786"
    class="whereResultShoudlBeDisplayed someOtherClass"&gt;Clicked !&lt;/tspan&gt;
&lt;/text&gt;
</pre>
</p>
<p>
            Can you see the difference ?
        </p>
<p>
            For more information about how Javascript can have the web browser manipulate<br />
            the content of the page at runtime, please see jQuery API documentation. Just remember to<br />
            apply jQuery selectors to the root of the SVG document (<br />
            <code><br />
                svg.root()<br />
            </code>) and you should be fine.
        </p>
<p>
            There is also this call to storageSave in your interactivity function. What does it mean ?
        </p>
<p>
            <code><br />
                storageSave<br />
            </code><br />
            is a function defined by bliotux.<br />
            It takes 2 input parameters : a key and its value.<br />
            It will have this pair of (key, value) made persistent in the local web browser.<br />
            Even if the browser (and possibly computer) is closed (shutdown), this (key, value) pair is still available<br />
            and can be later retrieved using another bliotux function :<br />
            <code><br />
                storageLoad(key)<br />
            </code>.<br />
            Next time the same page is displayed, any SVG element which corresponds to key (as a jQuery selector) will have<br />
            its content filled with value.
        </p>
<p>
            In this example, storing the text<br />
            <code><br />
                "Clicked !"<br />
            </code><br />
            as<br />
            the value of the key<br />
            <code><br />
                .whereResultShouldBeDisplayed<br />
            </code><br />
            means 2 things:</p>
<ol>
<li>
                    this text<br />
                    <code><br />
                        "Clicked !"<br />
                    </code><br />
                    can be further retrieved with any Javascript call to<br />
                    <code><br />
                        storageLoad('.whereResultShouldBeDisplayed')<br />
                    </code>
                </li>
<li>
                    next time this page is displayed using the same web browser, the<br />
                    <code><br />
                        "Clicked !"<br />
                    </code><br />
                    text will be added to all SVG elements which have the<br />
                    <code><br />
                        whereResultShouldBeDisplayed<br />
                    </code><br />
                    class attribute in their source code.
                </li>
</ol>
<p>            As a result of this, the state of each page can be made persistent<br />
            so that when the user returns to a given page he already interacted with<br />
            this page displays the exact same info/aspect/behaviour as before.
        </p>
<p>
            Now you have your<br />
            <code><br />
                interaction.js<br />
            </code><br />
            file which defines the full interactivity of your template document.
        </p>
<h2>Create a page</h2>
<p>
            Creating a page is much easier than creating the template a page is based on.<br />
            But it requires writing some (extremely simple) code using any text editor (Windows notepad&#8230;).<br />
            Any brave user should be enabled to do so.
        </p>
<p>
            You have a full bliotux template, including an SVG layout (possibly including animation) and Javascript interactivity.<br />
            Now let&#8217;s create a page based on this template.
        </p>
<h3>Name the folder with the page name</h3>
<p>
            In this example, let&#8217;s name a first page<br />
            <code><br />
                Sesamath_CP_page-094_exercice-001<br />
            </code><br />
            along the name of a French free (as in free speech) textbook vendor.<br />
            In order to do so, we create this folder:<br />
            <code><br />
                wecena.bliotux/pages/Sesamath_CP_page-094_exercice-001/<br />
            </code>
        </p>
<p>
            When we want to access this page, we&#8217;ll have to direct our web browser to such an URL as<br />
            <code><br />
                file:///home/jean/wecena.bliotux/index.xhtml?page=Sesamath_CP_page-094_exercice-001<br />
            </code>
        </p>
<h3>Define the template this page uses</h3>
<p>
            Which template will this page use ?<br />
            The answer comes as a Javascript file we have to create:<br />
            <code><br />
                wecena.bliotux/pages/Sesamath_CP_page-094_exercice-001/data.js<br />
            </code>
        </p>
<p>
            This file contains the declaration of variables describing this page.<br />
            The variable called template defines the template to be used for this page:
<pre>
var template = 'simpleOperation';
</pre>
</p>
<h3>Populate the template</h3>
<p>
            The next variable in this<br />
            <code><br />
                data.js<br />
            </code><br />
            file define data which will get injected into the template so that<br />
            the page is built :
<pre>
var data = {
  '.pageCentaine':'',
  '.pageDizaine':'9',
  '.pageUnite':'4',
  '.exerciceCentaine':'',
  '.exerciceDizaine':'',
  '.exerciceUnite':'2',
  '.operande1Centaine':'',
  '.operande1Dizaine':'',
  '.operande1Unite':'7',
  '.operateur':'-',
  '.operande2Centaine':'',
  '.operande2Dizaine':'',
  '.operande2Unite':'5',
  '.resultatCentaine':'',
  '.resultatDizaine':'',
  '.resultatUnite':'',
};
</pre>
</p>
<p>
            This data associative array lists (key, value) pairs which define which content should be injected where.<br />
            The key (for instance<br />
            <code><br />
                .pageCentaine<br />
            </code><br />
            ) is a jQuery selector to be applied to the root of the SVG template.<br />
            The value is some SVG code which is to be inserted as the content of any SVG element matching the key.
        </p>
<p>
            Rather than using<br />
            <code><br />
                id<br />
            </code><br />
            attributes as selectors (<br />
            <code><br />
                #pageCentaine<br />
            </code><br />
            ), it seems preferable to use<br />
            <code><br />
                class<br />
            </code><br />
            attributes (<br />
            <code><br />
                .pageCentaine<br />
            </code><br />
            ) which carry the meaning (semantics) of the corresponding SVG element and can be reused<br />
            several times in the same template (whereas IDs should be unique, I suppose).<br />
            Anyway, the SVG template should be edited so that the corresponding<br />
            <code><br />
                class<br />
            </code><br />
            attribute are present where needed.
        </p>
<h3>Include some page-specific graphics</h3>
<p>
            Using the mechanism of templates and the data.js file, you may have your SVG template include some areas where<br />
            pages could have specific bitmap (JPEG, PNG) files displayed.<br />
            This is just the matter of including such a JPEG file in the<br />
            <code><br />
                layout.svg<br />
            </code><br />
            file,<br />
            giving the corresponding SVG element an appropriate class attribute (using Inkscape XML editor for instance)<br />
            and then defining in<br />
            <code><br />
                data.js<br />
            </code><br />
            the name of the picture file to insert in this area of your layout for this specific page.
        </p>
<p>
            But you can also have given pages include full SVG files.<br />
            For instance, the left part of<br />
            <code><br />
                simpleOperation/layout.svg<br />
            </code><br />
            is meant to display a funny but didactic illustration<br />
            where characters (such as Tux the penguin) invite the child to perform the mathematical operation at hand.<br />
            Such an illustration could contain page-specific animations.<br />
            Adding an animated GIF file would not be enough.<br />
            The full power of SVG for animations may be required.<br />
            In such cases, you can define an svgParts variable in the data.js file of the page :
<pre>
var svgParts = {
  '#illustration': 'illustration.svg'
}
</pre>
<p>            This variable says : &#8220;Hey, bliotux, please look at my template<br />
            and find the SVG element with<br />
            <code><br />
                illustration<br />
            </code><br />
            as the value of its<br />
            <code><br />
                id<br />
            </code><br />
            attribute.<br />
            Then replace this full SVG element with the first<br />
            <code><br />
                g<br />
            </code><br />
            element (SVG group) you will find<br />
            in the<br />
            <code><br />
                illustration.svg<br />
            </code><br />
            file sitting under this page folder. Thanks.&#8221;
        </p>
<h1>That&#8217;s it</h1>
<p>
            You can access and test your page at a URL which should look a bit like that (the exact path depends on the folder hierarchy<br />
            on your hard drive):<br />
            <code><br />
                file:///home/jean/wecena.bliotux/index.xhtml?page=Sesamath_CP_page-094_exercice-001<br />
            </code>
        </p>
<p>
            Side note : Now I realize I can&#8217;t use doctestjs for this document so it&#8217;s pretty useless to me.<br />
            It would have been much useful if only I had figured out a way to have some Javascript code generate<br />
            a template document in the filesystem during the doctest so that I can further test bliotux on it<br />
            using doctestjs. Maybe later&#8230;
        </p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/12/22/svg-as-an-alternative-to-flash-here-comes-bliotux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SMIL-animated SVG for accessible textbooks</title>
		<link>http://www.akasig.org/2009/11/27/smil-animated-svg-for-adapted-textbooks/</link>
		<comments>http://www.akasig.org/2009/11/27/smil-animated-svg-for-adapted-textbooks/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 17:22:01 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[le wecena]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=1101</guid>
		<description><![CDATA[Dyspraxia is a serious learning disability for 250.000 children in elementary schools in France. Not that French children are particularly disadvantaged. It just happens that it seems to be a very wide spread kind of disability and the proportion of dyspraxic children should roughly be the same from country to country. In order to overcome [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Dyspraxia">Dyspraxia</a> is a serious learning disability for 250.000 children in elementary schools in France. Not that French children are particularly disadvantaged. It just happens that it seems to be a very wide spread kind of disability and the proportion of dyspraxic children should roughly be the same from country to country. In order to overcome this obstacle, <a href="http://dyspraxie.org/">the nonprofit organization I currently work for</a> is leading the way toward adapting the ergonomy of existing paper textbooks and helping textbook editors creating the accessible (and digital) textbook of the future. Maybe you&#8217;ve heard of any similar initiatives ?</p>
<p>Their first attemps were made using a French e-learning authoring tool called <a href="http://www.fruitsdusavoir.org/">Didapages</a>. Up to <a href="http://www.fruitsdusavoir.org/index.php?page=10">version 1.1</a> it was free for non-commerciale uses. Version 2 is much more commercially oriented. And closed-source. And only runs on Windows. And despite its ease of use for educators and non-IT specialists, it has several drawbacks and limitations, partly due to the technology it uses, Flash, and partly because its developer does not think he can build a sustainable business model using free software licensing. Too bad. I am looking for an alternative solution, as some part of its user community does.</p>
<p>Free software packages such as <a href="http://www.nottingham.ac.uk/xerte/">Xerte</a>, <a href="http://sourceforge.net/apps/trac/exe/wiki">eXe</a>, <a href="http://scenari-platform.org/projects/scenari/fr/pres/co/">Scenari</a>, <a href="http://www.docebo.org/doceboCms/">Docebo</a> and others look attractive. But none is the ideal solution : either they are also based on Flash, or their community is almost non-existant and their development may have stopped some time ago. Educators are not developers. And the crowd of educators might be missing a critical mass of developers in order for a very striving free software community to have developped around any elearning authoring tool. The bells and whistles of proprietary products have much more appeal to the average teacher.</p>
<p>From a technology perspective, I had a look at open standards for acessible, animated and interactive contents. W3C, please show me the way. The relevant standards seem to be :</p>
<ul>
<li> <a href="http://www.w3.org/TR/html5/">HTML 5</a> for content, with its <a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29">Javascript-animated &#8220;canvas&#8221; element</a> for sprite-based animations (for bitmaps graphics) ;</li>
<li><a href="http://en.wikipedia.org/wiki/Synchronized_Multimedia_Integration_Language">SMIL</a> for animated documents and for limited interactivity, possibly also combined/extended with Ecmascript for more interactivity ;</li>
<li><a href="http://www.w3.org/Style/CSS/">CSS</a> for styling, possibly some day with <a href="http://en.wikipedia.org/wiki/CSS_Animation">Webkit-like CSS animation</a> but this option does not excite me much ; CSS animation may require Javascript or SMIL</li>
<li><a href="http://www.w3.org/Graphics/SVG/">SVG</a> for graphics : there is such a thing as <a href="http://en.wikipedia.org/wiki/SVG_animation">SVG Animation</a>, and Ecmascript can be embedded in a SVG file in order to provide more interactivity and to overcome some current interactivity limitation of SMIL ; SVG is for vector graphics but could also embed (and animate) bitmap graphics (used as sprites).</li>
</ul>
<p>The advantage of SMIL and SMIL-animated SVG over Flash seems to be that SMIL is a declarative technology. This &#8220;document&#8221; model allows less dependency on scripting and more flexibility through earlier or further transformations (with templating, XSLT or content management engines). This allows the animation and, to a lesser extent, interactivity aspects of educational content to be a native part of the content itself and not to be an afterthought. It facilitate later and looser coupling with further technologies. It allows more <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">ReSTfullness</a> (restafari !). It does not cause cancer. Well, I don&#8217;t know. It tastes good. (note to myself : consider discarding this whole paragraph) :)</p>
<p>Flash applets, on the other hand, can be made somewhat accessible but this may not be an easy task for the average Flash developer, and SMIL sounds like a much more accessibility-friendly technology. There even is <a href="http://www.w3.org/TR/SMIL/smil-daisy-profile.html">a DAISY profile for SMIL</a> documents. I should have a deeper look into these profiles.</p>
<p>But interactivity with specific application logic seems to require a bit of scripting anyway, doesn&#8217;t it ? Here comes Ecmascript with SMIL, which should probably be limited to a minimum. Can you always provide accessibility-safe fallback mechanisms for a SMIL document if you introduce scripting for interactivity ? I am not sure. I will have to figure this out. Maybe the DAISY SMIL profile tells me more about this.</p>
<p>After a first glance at these standards and being an non-expert in animated contents, it seems to me that there ARE available and mature open standards which cover most of the accessible and digital textbook related concerns. There should be no need to develop any addiction for Flash authoring systems.</p>
<p>But the problem is that these standards are still &#8220;emerging&#8221;. They were proposed several years ago, are slowly maturing and their support in modern web browsers only starts to become a reality. The most advanced support for SMIL-animated SVG comes with Opera. And is said to be available in Firefox 3.6 as far as I understood. I&#8217;ll test this stuff with Opera until Firefox 3.6 comes to ubuntu. The lack of consistent support for SMIL and SVG animation can be overcome with the use of free software SDK or Javascript libraries which take SMIL elements as input and generate equivalent Javascript instructions as output. For instance, the <a href="http://raphaeljs.com/">RaphaelJS Javascript library</a> allows browsers to support animated SVG even if such a support is not built-in for them. As far as I understand, the <a href="http://www.amplesdk.com/">Ample SDK</a> allows SMIL animations to be supported by non SMILable browsers, too.</p>
<p>The main problem is not in web browser support, though. The main problem is that there is almost no (free software) authoring tools for such animation and interactivity technologies. <a href="http://limsee2.gforge.inria.fr/">Limsee2</a> is a code editor/development environment for SMIL (does it support SVG animation ?) but its INRIA authors stopped working on it some time ago. And there seems to be no real community behind it. <a href="http://limsee3.gforge.inria.fr/public-site/">Limsee3</a> is not a further version of Limsee 2 (despite the name). It is a WYSIWYG SMIL authoring tool but it does not seem to support SVG animation (does it ?). And it may also probably stop being developed as soon as the governmental subsidies behind the corresponding research project end. Yet another research package soon to be dying on the labs shelves ?</p>
<p>This sends me back to my above observation about the non-existence of a sufficiently-big or proficient-enough community of educators who can use AND develop such advanced authoring tools with accessibility in mind. Too bad&#8230;</p>
<p><a href="http://www.assembla.com/wiki/show/MadSwatter">Madswatter</a> and <a href="http://osflash.org/ajaxanimator">Ajax animator</a> are very early prototypes for animation authoring environments. There are other free software attempts currently aiming at proposing a proper animation editor: <a href="http://geesas.sourceforge.net/clash/">clash/geesas</a> (which is a fork of <a href="http://www.pencil-animation.org/">pencil</a>) and <a href="http://moing.org/">moing</a>&#8230; Maybe you&#8217;ve heard of other projects ? <a href="http://www.inkscape.org/">Inkscape</a> has <a href="http://wiki.inkscape.org/wiki/index.php/Animation-%28Timeline%29">some plan for introducing SMIL authoring capabilities</a>. There even is a mockup of the user interface for the timeline-based authoring of animations. This is <a href="https://blueprints.launchpad.net/inkscape/+spec/svg-animation">work in progress</a>. Well, maybe this is more than just a work on blueprints : <a href="http://wiki.inkscape.org/wiki/index.php/Roadmap">the Inkscape roadmap</a> mentions simple and limited animation authoring as a feature for their next release (version 0.48) ! The 0.49 version should focus on much more support for animated SVG. Exciting ! This topic is hot right now. Itches are starting to be scratched a lot !</p>
<p>That being said, I realize I already have a tool for authoring animations. It&#8217;s <a href="http://www.openoffice.org/product/impress.html">Open Office Impress</a>. And the Impress wiki tells me that <a href="http://wiki.services.openoffice.org/wiki/Impress/API/Animations">its animation are based on SMIL</a> ! When I have a look at the xml file saved by Impress (inside its ODP zipped archive), I can indeed see SMIL element names and attribute names mixed with Open Office specific elements and attributes, even though the resulting document may not be SMIL compliant, strictly speaking. A limited effort (XLST or a custom extension) may allow to produce real SMIL documents.</p>
<p>Instead of using elearning-specific authoring tools (think Xerte, eXe, &#8230;), what if futur editing software for educational contents were tools I (or any educator) already have on my desk : Inkscape for the creation of bits of animated graphics and/or Open Office Impress for the layout and animation of the overall animated document? In Inkscape, the &#8220;properties&#8221; window of any object even reveals some event fields for Ecmascript/Javascript instructions (onclick, onmouseover, etc.). Too bad Impress can&#8217;t properly import SVG content. But maybe this is not required. In the end, e-learning specific tools would be required anyway for the packaging of the resulting animated and interactive content into Learning Management Systems such as Moodle. Such content packages would need to be made SCORM or AICC compatible so that they expose their navigational and educational structure to these platforms via a standard API. <a href="http://www.atutor.ca/view/16/2779/1.html">I read the SCORM is not ideal as such an API from an accessibility perspective</a> because it heavily relies on Javascript (it is a Javascript API). But does the use of a scripting language always prevent accessibility ? I don&#8217;t know. SCORM may be nice for portability from LMS to LMS. But so nice for accessibility.</p>
<p>At the moment, I feel like the ideal authoring chain of tools for educational content / textbooks would be as follows :</p>
<ol>
<li>Inkscape in order to create the graphism, layout and animation of individual educational &#8220;applets&#8221; : cross words, coloring books, simulations, geometry tools, &#8230; the result being saved as an animated (and partial SMIL-interactivity) SVG file with event-hooks being defined so that we can go to the next step</li>
<li>an ECMAscript code editor (I am not into this emacs thing&#8230; Eclipse anyone ?) in order to transform this animated SVG file into an animated AND interactive SVG piece of content</li>
<li>Open Office Impress in order to create the layout, structure and general content of your course/manual/textbook chapter/whatever, inserting the SVG file and adding further animations as well as individual multimedia items (sound clips, videos, hyperlinks), the result being saved as a SMIL/HTML document</li>
<li>More scripting edition of this document if needed (but would it be needed at this stage ? I can&#8217;t tell)</li>
<li>CSS styling would be made ready for the document at this stage or earlier (can Open Office make any use of existing CSS stylesheets or would it always mix them into its own content format ?)</li>
<li>a SCORM packager such as <a href="http://www.reload.ac.uk/editor.html">Reload Editor</a> would import this content and allow the author to specify the SCORM relevant bits of information, the result being saved as a Moodle-ready package</li>
<li>Your favority Moodle-like LMS platform would serve the content to users, possibly running on their laptop in an offline fashion</li>
</ol>
<p>This whole chain of tools would probably benefit from being powered by a web content management system (Plone ? Drupal ?) so that the assembly line is smoother and allows widespread collaboration, with workflows, access control and so on. No need to get stuck back to the Dreamweaver era of the I-am-waiting-for-the-Dreamweaver-guy-to-update-my-textbook.</p>
<p>Now it&#8217;s your turn. What do you think ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/11/27/smil-animated-svg-for-adapted-textbooks/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Le code du wecena est libre</title>
		<link>http://www.akasig.org/2009/03/03/le-code-du-wecena-est-libre/</link>
		<comments>http://www.akasig.org/2009/03/03/le-code-du-wecena-est-libre/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 22:19:15 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Zope & Plone]]></category>
		<category><![CDATA[le wecena]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=931</guid>
		<description><![CDATA[&#8220;Vive le wecena libre !&#8221; comme qui dirait l&#8217;autre. Ce petit message pour signaler à ceux que cela intèresse que j&#8217;ai libéré le code qui me permet de faire tourner wecena.com. En d&#8217;autres termes, ce logiciel libre est désormais distribué (publiquement) sous licence GNU Affero General Public License v.3.
Le code en question constitue une suite [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Vive le wecena libre !&#8221; comme qui dirait l&#8217;autre. Ce petit message pour signaler à ceux que cela intèresse que j&#8217;ai libéré le code qui me permet de faire tourner wecena.com. En d&#8217;autres termes, ce logiciel libre est <a title="La forge du wecena" href="https://gna.org/projects/wecena">désormais distribué (publiquement) sous licence GNU Affero General Public License v.3</a>.</p>
<p>Le code en question constitue une suite de produits d&#8217;extension pour <a href="http://www.plone.org/">le système de gestion de contenu Web Plone</a>. Certains de ces produits sont spécifiques au fonctionnement du wecena (les produits wecena_core et wecena_integration). Certains autres sont plus génériques et peuvent avoir leur utilité hors wecena. Je pense notamment à wecena_dynamicroles pour améliorer la flexibilité du système de sécurité de Plone et à wecena_ldapuser pour synchroniser de manière bidirectionnelle les utilisateurs Plone avec les entrées d&#8217;un annuaire LDAP.</p>
<p>Votre expertise python/Zope/Plone est plus que bienvenue si vous voulez vous amuser avec ces produits et filer un coup de main au passage !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/03/03/le-code-du-wecena-est-libre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to get visual performance profiles from plone doctests ?</title>
		<link>http://www.akasig.org/2009/02/05/how-to-get-visual-performance-profiles-from-plone-doctests/</link>
		<comments>http://www.akasig.org/2009/02/05/how-to-get-visual-performance-profiles-from-plone-doctests/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 15:45:55 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[Zope & Plone]]></category>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=904</guid>
		<description><![CDATA[I am developping a couple of Plone 3.x products. They have some tests, including a huge functional doctest which takes a long time to run (about a couple of hours !) but covers some of my most interesting use cases. I wanted to use these tests in order to get some insights about possible performance [...]]]></description>
			<content:encoded><![CDATA[<p>I am developping a couple of Plone 3.x products. They have some tests, including a huge functional doctest which takes a long time to run (about a couple of hours !) but covers some of my most interesting use cases. I wanted to use these tests in order to get some insights about possible performance bottlenecks and other optimization hot points in my code. The result of my effort was a very nice visual chart showing these bottlenecks and hotpoints.</p>
<p><strong>[update: added another visualization package, see at the end of the post]</strong></p>
<p>Here is how I had to proceed (note that I am more of a foolish and coward hacker than an expert and I decline any responsibility on the consequences of following my howto !) :</p>
<p><strong>1. Give your python a suitable profiler</strong></p>
<p>Plone 3.x requires zope 2.10 which in turn requires python 2.4. More recent versions are not supported AFAICS. Problem: python2.4 does not have a reliable performance profiling module. Its &#8220;hotshot&#8221; module is both <a href="http://bugs.python.org/issue984219">slow</a> (when loading statistics) and badly <a href="http://bugs.python.org/issue900092">bugged</a> : it crashes when you have it load some of the profiles it can generate. You have to add a better profiler to your python environment, namely <a href="http://www.python.org/doc/2.5.4/lib/module-profile.html">cProfile</a> (which is shipped with python 2.5).</p>
<p>I am a terrible sysadmin and I don&#8217;t really understand (and care about) how python manages its pathes and accesses its libraries. So I did this :</p>
<ol>
<li>download and unzip the source tarball of python 2.5 so that you get cProfile source code</li>
<li>locate relevant files referring to lsprof (the old name of cProfile), using a <em>grep -R lsprof *</em> on the source directory</li>
<li>I personnally located the following files (I leave cProfile test files apart) :<em> Lib/cProfile.py</em> <em>Modules/_lsprof.c</em> and <em>Modules/rotatingtree.*</em> (.c and .h)</li>
<li>download and unzip the source tarball of python 2.4</li>
<li>copy the located cProfile files from their python 2.5 location to the proper dirs into the source code of your fresh python 2.4</li>
<li>update python 2.4 &#8217;s setup.py file so that the line below is added just after the hoshot one : <em>exts.append( Extension(&#8216;_lsprof&#8217;, ['_lsprof.c', 'rotatingtree.c']) )</em></li>
<li>did I mention I am so bad at hacking things that I don&#8217;t even provide a patch for the operations above ?</li>
<li>compile python 2.4 using a ./configure then make</li>
</ol>
<p>At this point, you must have an executable python interpreter version 2.4 which includes cProfile. You can check by launching this python and trying a <em>import cProfile</em> which should not fail.</p>
<p>I replaced my system python2.4 by then doing a <em>sudo make altinstall</em> but I also had to manually tweak my system files so that this new python2.4 gets properly called (I am using ubuntu 8.10 intrepid, BTW) :</p>
<blockquote><p>cd /usr/bin</p>
<p>sudo mv ./python2.4 ./python2.4.5</p>
<p>sudo ln -s /usr/local/bin/python2.4</p></blockquote>
<p>Now, a plain command line call to python2.4 should give you an interpreter prompt which lets you import cProfile if you dare. I suffered some colateral damage here : the python prompt lost its ability to have previous lines copied at the prompt by pressing the Up/Down arrows. And I had to re-install reportlab from the source (some of my products depend on pisa which depends on reportlab). Anyone knows how to restore this Up/Down arrow capability ?</p>
<p><strong>2. Recreate your buildout using this new python version</strong></p>
<p>So that zope gets recompiled using your new python version :<strong><br />
</strong></p>
<blockquote><p>rm -Rf parts bin develop-eggs</p>
<p>python2.4 bootstrap.py</p>
<p>bin/buildout</p></blockquote>
<p><strong>3. Patch zope testrunner so that it supports cProfile instead of only supporting hotshot</strong></p>
<p>I got a bit confused because my buildout contains 2 zope testrunners. It took me some time to figure out which was which : the one which is used by the zope instance your buildout creates is the one which is shipped with zope 2.10 and is located at <em>parts/zope2/lib/python/zope/testing/</em>. The other one I have is in the zope.testing egg. I don&#8217;t know how and why I got such an egg. Anyway, this egg supports both hotshot and cProfile whereas zope 2.10 testrunner doesn&#8217;t. So I hacked the weaker/older zope 2.10 testrunner with some inspiration from zope.testing so that cProfile can be used when running tests. Here is the diff you can use for enhancing  <em>parts/zope2/lib/python/zope/testing/testrunner.py</em>. Oops, left version is the modified one, right version is the original one.</p>
<blockquote><p>38,69d37<br />
&lt; before_tests_hooks = []<br />
&lt; after_tests_hooks = []<br />
&lt; available_profilers = {}<br />
&lt;<br />
&lt; try:<br />
&lt;     import cProfile<br />
&lt;     import pstats<br />
&lt; except ImportError:<br />
&lt;     pass<br />
&lt; else:<br />
&lt;     class CProfiler(object):<br />
&lt;         &#8220;&#8221;"cProfiler&#8221;"&#8221;<br />
&lt;         def __init__(self, filepath):<br />
&lt;             self.filepath = filepath<br />
&lt;             self.profiler = cProfile.Profile()<br />
&lt;             self.enable = self.profiler.enable<br />
&lt;             self.disable = self.profiler.disable<br />
&lt;<br />
&lt;         def finish(self):<br />
&lt;             self.profiler.dump_stats(self.filepath)<br />
&lt;<br />
&lt;         def loadStats(self, prof_glob):<br />
&lt;             stats = None<br />
&lt;             for file_name in glob.glob(prof_glob):<br />
&lt;                 if stats is None:<br />
&lt;                     stats = pstats.Stats(file_name)<br />
&lt;                 else:<br />
&lt;                     stats.add(file_name)<br />
&lt;             return stats<br />
&lt;<br />
&lt;     available_profilers['cProfile'] = CProfiler<br />
&lt;<br />
75,98c43<br />
&lt;     pass<br />
&lt; else:<br />
&lt;     class HotshotProfiler(object):<br />
&lt;         &#8220;&#8221;"hotshot interface&#8221;"&#8221;<br />
&lt;<br />
&lt;         def __init__(self, filepath):<br />
&lt;             self.profiler = hotshot.Profile(filepath)<br />
&lt;             self.enable = self.profiler.start<br />
&lt;             self.disable = self.profiler.stop<br />
&lt;<br />
&lt;         def finish(self):<br />
&lt;             self.profiler.finish()<br />
&lt;<br />
&lt;         def loadStats(self, prof_glob):<br />
&lt;             stats = None<br />
&lt;             for file_name in glob.glob(prof_glob):<br />
&lt;                 loaded = hotshot.stats.load(file_name)<br />
&lt;                 if stats is None:<br />
&lt;                     stats = loaded<br />
&lt;                 else:<br />
&lt;                     stats.add(loaded)<br />
&lt;             return stats<br />
&lt;<br />
&lt;     available_profilers['hotshot'] = HotshotProfiler<br />
&#8212;<br />
&gt;     hotshot = None<br />
288c233<br />
&lt;     if len(available_profilers) == 0 and options.profile:<br />
&#8212;<br />
&gt;     if hotshot is None and options.profile:<br />
320,324c265,266<br />
&lt;         if available_profilers.has_key(&#8216;cProfile&#8217;): prof = available_profilers['cProfile'](file_path)<br />
&lt;         else: prof = available_profilers['hotshot'](file_path)<br />
&lt;         before_tests_hooks.append(prof.enable)<br />
&lt;         after_tests_hooks.append(prof.disable)<br />
&lt;<br />
&#8212;<br />
&gt;         prof = hotshot.Profile(file_path)<br />
&gt;         prof.start()<br />
335c277,278<br />
&lt;             prof.finish()<br />
&#8212;<br />
&gt;             prof.stop()<br />
&gt;             prof.close()<br />
342c285,292<br />
&lt;         stats=prof.loadStats(prof_glob)<br />
&#8212;<br />
&gt;         stats = None<br />
&gt;         for file_name in glob.glob(prof_glob):<br />
&gt;             loaded = hotshot.stats.load(file_name)<br />
&gt;             if stats is None:<br />
&gt;                 stats = loaded<br />
&gt;             else:<br />
&gt;                 stats.add(loaded)<br />
&gt;<br />
459d408<br />
&lt;                 [hook() for hook in before_tests_hooks]<br />
461d409<br />
&lt;                 [hook() for hook in after_tests_hooks]<br />
656,659c604<br />
&lt;     [hook() for hook in before_tests_hooks]<br />
&lt;     results = run_tests(options, tests, layer_name, failures, errors)<br />
&lt;     [hook() for hook in after_tests_hooks]<br />
&lt;     return results<br />
&#8212;<br />
&gt;     return run_tests(options, tests, layer_name, failures, errors)</p></blockquote>
<p>Oh, BTW, this diff also lets you filter out the profiling of the setup and teardown steps of your tests which are of poor value compared to actual tests. <a href="https://bugs.launchpad.net/zope3/+bug/159467">Thanks to Daniel Nouri</a> for this.</p>
<p>At this point, you should have given your zope instance the capability of profiling tests using cProfile. You can check it by asking for a debug prompt from zope : <em>bin/instance debug</em> The prompt you get should allow you to safely <em>import cProfile</em></p>
<p><strong>4. Profile your test</strong></p>
<p>Say you have a Products called Products.DearProduct with some tests. Profile them :</p>
<blockquote><p>bin/instance test -s Products.DearProduct &#8211;profile</p></blockquote>
<p>At this point, you should get a tests_profile.*.prof file saved in the current dir. It contains the performance profile cProfile generated, using the pstats format. You can <a href="http://www.python.org/doc/2.5.4/lib/profile-stats.html">manually load and analyze this data</a>. Or <a href="http://www.vrplumber.com/programming/runsnakerun/">have a limited GUI show you what it&#8217;s like</a>. Or you can go for the nicer, more insightful version which follows.</p>
<p><strong>5. Visualize and analyze the performance profile you generated</strong></p>
<p>Thanks to <a href="http://zebert.blogspot.com/2009/01/profiling-made-easy.html">Ingeniweb folks</a>, I heard of <a href="http://code.google.com/p/jrfonseca/wiki/Gprof2Dot">gprof2dot</a> and <a href="http://code.google.com/p/jrfonseca/wiki/XDot">xdot</a>. Download them (the scripts, not the folks). Use them to generate and display a very nice graph :</p>
<blockquote><p>chmod 744 gprof2dot.py</p>
<p>chmod 744 xdot.py</p>
<p>./gprof2dot.py -f pstats -o profile.dot tests_profile.*.prof</p>
<p>./xdot.py profile.dot</p></blockquote>
<p>Note the * you may replace with the ID of the profile generated above. Or you can use the fancy but dangerous one-liner below which runs the tests,  generates the profile, generates the corresponding graph, displays the results of tests and displays the graph for analysis :</p>
<blockquote><p>rm -f tests_profile.*.prof &amp;&amp; rm -f profile.pstats &amp;&amp; rm -f profile.dot &amp;&amp; bin/single-instance test -s Products.MyDearProduct &#8211;profile &gt; /tmp/test.txt ; ./gprof2dot.py -f pstats -o profile.dot tests_profile.*.prof &amp;&amp; less /tmp/test.txt ; ./xdot.py profile.dot</p></blockquote>
<p>At this point, you should be starring at nice colored graph which represent the flow of your tests and the method which may be performance bottlenecks. And you should be hoping that it was worth the effort.</p>
<p><strong>[Here starts the update]</strong></p>
<p>After some contemplation moment, I tried to analyze the graph of my tests and did not feel extremely happy with this graph visualization. It indeed shows me that the slowlyness of functional doctest is mostly due to the testing framework (zope.testbrowser, etc.). This slowlyness &#8220;hides&#8221; the optimization opportunities of my code. And I don&#8217;t know how to exclude some products from the being profiled or from being present in the profile stats (I would have liked to filter out zope.testbrowser and other Plone-specific things). But, all hope is not lost, here comes <a href="http://kcachegrind.sourceforge.net/html/Home.html">kcachegrind</a>:</p>
<blockquote><p>sudo apt-get install kcachegrind</p>
<p>sudo easy-install pyprof2calltree</p>
<p>pyprof2calltree -o output.calltree.stats -i tests_profile.*.prof -k</p></blockquote>
<p>Using kcachegrind with the help of pyprof2calltree, I was able to focus on my product methods and identify those methods which deserve some caching. Added some @memoize decorators and reran the profiled tests so that I could enjoy the performance improvement&#8230; Happy I am, happy thou shalt be.</p>
<p>What do you think ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/02/05/how-to-get-visual-performance-profiles-from-plone-doctests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appel à projets informatiques d&#8217;intérêt général</title>
		<link>http://www.akasig.org/2008/07/14/appel-aprojets-informatiques-dinteret-general/</link>
		<comments>http://www.akasig.org/2008/07/14/appel-aprojets-informatiques-dinteret-general/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 14:12:11 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Affaires non classees]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Entreprises responsables]]></category>
		<category><![CDATA[Humains en réseaux]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Mécénat]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[le wecena]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2008/07/14/appel-aprojets-informatiques-dinteret-general/</guid>
		<description><![CDATA[Vous connaissez un projet informatique qui pourrait contribuer à rendre le monde meilleur ? A sauver la planète ? A créer une innovation Internet d&#8217;utilité publique ? Ou juste à faciliter la vie de votre association ? A faire avancer une grande cause ou une toute petite ? A faire avancer la science ? Alors [...]]]></description>
			<content:encoded><![CDATA[<p>Vous connaissez un projet informatique qui pourrait contribuer à rendre le monde meilleur ? A sauver la planète ? A créer une <a href="http://www.akasig.org/2005/09/07/a-la-recherche-des-innovations-internet-d-utilite-publique/">innovation Internet d&#8217;utilité publique</a> ? Ou juste à faciliter la vie de votre association ? A faire avancer une grande cause ou une toute petite ? A faire avancer la science ? Alors répondez à cet appel car je pense pouvoir booster ce projet en recrutant pour lui des mécènes informatiques.</p>
<p>En effet, dans le cadre de ma nouvelle entreprise, je propose mes services professionnels à tout projet informatique d&#8217;intérêt général: je fournis (<strong>à coût zéro</strong>, cf plus bas) mes compétences en tant que directeur de projets informatiques innovants ainsi que l&#8217;accès aux compétences de très nombreux autres ingénieurs informaticiens, sur leur temps de travail. Vous voulez des compétences d&#8217;ingénieurs informaticiens pour rendre le monde meilleur ? En voila !</p>
<p>Notez que je ne place, a priori, aucune limitation de thème ou de domaine : lutte contre la pauvreté, recherche scientifique, défense de l&#8217;environnement, santé, handicap, protection de l&#8217;enfance, etc. peu importe du moment que ce projet va vraiment dans le sens de l&#8217;intérêt général et de l&#8217;utilité publique (cf. ci-dessous).</p>
<p><strong>Les conditions à remplir</strong></p>
<p>Pour que mon entreprise puisse intervenir, <strong>votre projet informatique doit absolument</strong> :</p>
<ul>
<li><em>être &#8220;d&#8217;intérêt général&#8221;</em>, c&#8217;est-à-dire être porté par un organisme ayant le droit, en France, d&#8217;émettre des reçus fiscaux en échange des dons reçus (mécénat)</li>
<li>ne pas être un tout petit projet: il doit nécessiter, de la part des mécènes, <em><strong>au moins</strong> 1 ingénieur à temps plein</em></li>
<li>être porté par <em>une équipe déjà active</em> : je peux fournir entre 2 fois et 5 fois le temps que vous passez déjà sur le projet, en tant que bénévoles ou salariés ; si vous ne travaillez pas déjà sur le projet, je ne peux rien faire (0 fois 2 égal 0 !)</li>
<li>être un projet qui en vaut vraiment la peine: avoir un véritable impact social, direct ou indirect, une utilité clairement mesurable et motivante, répondre à un défi de société à petite ou à grande échelle, être source, levier ou moteur de changement pour la société&#8230;</li>
<li>ne pas nécessiter de présence physique importante<em> </em>en dehors de<em> la région parisienne</em> (je démarre petit et près de chez moi, même si je suis un adepte du travail à distance et des &#8220;conf call&#8221;), bref être plutôt localisé près de Paris</li>
</ul>
<p><strong>Qu&#8217;est-ce qu&#8217;un projet informatique d&#8217;intérêt général ?</strong></p>
<p>Un projet informatique est d&#8217;intérêt général si il est porté par un organisme bénéficiant du régime fiscal français du mécénat. Ah, ah&#8230; mystère, qu&#8217;est-ce que c&#8217;est que ce truc ? La <a href="http://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000018014446&amp;cidTexte=LEGITEXT000006069577">loi française d&#8217;août 2003 sur le mécénat</a> reste mal connue mais elle représente une source de revenus importante pour les organismes d&#8217;intérêt général. Plusieurs types d&#8217;organismes répondent à ce critère. Pour faire simple, il peut s&#8217;agir d&#8217;une association loi 1901 :</p>
<ul>
<li><em> à but non lucratif</em> : elle ne reverse pas de TVA, ne paye pas d&#8217;impôts sur les sociétés, a des administrateurs et un bureau bénévoles et désintéressés, ne vient pas concurrencer des entreprises commerciales ou alors elle le fait à des prix beaucoup plus bas que le marché et principalement pour un public défavorisé et sans &#8220;pratiques commerciales&#8221; (publicité, &#8230;) ; demandez l&#8217;avis d&#8217;un comptable si besoin</li>
<li>et dont l&#8217;objet est à caractère philanthropique, éducatif, social, humanitaire, sportif, familial, culturel, artistique, environnemental, culturel, littéraire, scientifique&#8230;</li>
<li>et dont les activités ne bénéficient pas à un cercle restreint de personnes (contrairement aux syndicats ou aux associations d&#8217;anciens élèves d&#8217;une école par exemple &#8230;)</li>
</ul>
<p>Au besoin, une association loi 1901 peut être facilement créée pour porter ce projet (statuts et déclaration en préfecture) et réunir les conditions de l&#8217;intérêt général. Il n&#8217;y a pas de condition d&#8217;ancienneté ni de taille de l&#8217;association. Il n&#8217;y a pas non plus forcément besoin d&#8217;obtenir un agrément administratif (comme ce serait le cas pour les associations &#8220;reconnues d&#8217;utilité publique&#8221;, ce qui est une reconnaissance très difficile à obtenir de nos jours).</p>
<p>Pour en savoir plus sur la notion d&#8217;intérêt général, je vous invite à consulter <a href="http://www.mecenat.culture.gouv.fr/mecenat.php">le site mécénat du ministère de la culture</a> ainsi que <a href="http://www.admical.asso.fr/default.asp?contentid=166">les explications de l&#8217;Association pour le Développement du Mécénat Industriel et Commercial (ADMICAL)</a>.<a href="http://www.admical.asso.fr/default.asp?contentid=166"> </a></p>
<p><strong>Comment je peux aider, en pratique ?</strong></p>
<p>Si vous consacrez déjà du temps à votre projet, je peux donc démultiplier cet effort.</p>
<p>Exemple: avec 4 autres bénévoles, vous consacrez au moins, chacun, une journée par semaine à votre projet (soit un équivalent temps plein, 5 jours de travail par semaine), alors je peux vous fournir, en complément, l&#8217;équivalent de 2 ingénieurs à temps plein (10 jours de travail par semaine), voire plus si votre projet est très simple à gérer.</p>
<p>Cette aide prendra la forme de:</p>
<ul>
<li>un<em> accompagnement permanent par mon entreprise</em> : au moins une demi-journée d&#8217;assistance et de conseil par semaine, en fonction du volume de votre projet ; plus un service de représentation et de suivi de votre projet auprès des entreprises mécènes,</li>
<li>des <em>interventions individuelles</em> d&#8217;un grand nombre (50, 100, 200&#8230;?) de professionnels de l&#8217;informatique, ingénieurs, techniciens ou consultants, pour des durées variables et parfois courtes (par exemple une semaine), sur leur temps de travail,</li>
<li>la possibilité de renforcer votre équipe bénévole par les contributions ultérieures de certains de ces intervenants sur leur temps libre (constitution éventuelle d&#8217;une communauté à la mode open source si votre projet s&#8217;y prête)</li>
<li>l&#8217;accès à un <em>système d&#8217;information sécurisé</em> sur le Web pour gérer votre projet, vos intervenants, vos relations avec les mécènes et automatiser la gestion de toute la paperasse administrative qui va avec (contrats, convention de mécénat, reçus fiscaux, &#8230;)</li>
</ul>
<p><strong>Comment ça marche ?</strong></p>
<p>Je créé actuellement une entreprise à vocation sociale dont l&#8217;objectif est de fournir aux innovateurs sociaux les mêmes moyens informatiques que ceux dont disposent les entreprises les plus modernes. Mon activité s&#8217;appuie sur le mécénat de sociétés de services en informatique (SSII) qui s&#8217;engagent dans des démarches de &#8220;développement durable&#8221; (ou, plus exactement, de &#8220;responsabilité sociale de l&#8217;entreprise&#8221;). Elles souhaitent faire du mécénat de compétences en informatique par mon intermédiaire : faire don du temps de travail de leurs ingénieurs et consultants sous la forme d&#8217;une prestation de service gratuite gérée via le Web. J&#8217;appelle ça &#8220;faire du wecena&#8221; (Wecena, c&#8217;est le nom de <a title="wecena, le mécénat de compétences en informatique" href="http://www.wecena.com/">ma boîte</a> !).</p>
<p>Le financement de cette aide est indirectement assuré à 100% par l&#8217;Etat français, grâce à la loi sur le mécénat des entreprises. En effet, l&#8217;Etat accorde une réduction d&#8217;impôts importante à toute entreprise qui décide d&#8217;aider concrètement un organisme d&#8217;intérêt général (don d&#8217;argent, don en nature, don de compétences et temps de travail&#8230;). Les SSII mécènes que je rencontre sont prêtes à se lancer dans l&#8217;aventure en proposant à leurs ingénieurs de faire avancer votre projet pendant ces périodes de temps que l&#8217;on appelle l&#8217;&#8221;inter-contrat&#8221; (ou intercontrat ou &#8220;période de stand-by&#8221; ou &#8230;) : il s&#8217;agit de ces périodes de quelques jours à quelques mois qui commencent lorsque l&#8217;ingénieur termine un projet pour un client et n&#8217;est pas encore affecté à un autre projet pour un nouveau client.</p>
<p>Cela impose une contrainte importante dans la gestion de votre projet: les ingénieurs réalisant la prestation de service vont se relayer à un rythme très rapide, certains ne seront présents que 48H tandis que d&#8217;autres seront disponibles 2 ou 3 mois dans l&#8217;année. La durée moyenne d&#8217;intervention individuelle se situe quelque part entre une semaine et un mois (selon le métier de l&#8217;intervenant et l&#8217;état du marché de l&#8217;informatique, et aussi selon la politique du mécène). C&#8217;est le rôle de mon entreprise que de vous aider à gérer cette contrainte. Notez que cette contrainte a également quelques avantages : si votre projet est suffisament simple et &#8220;découpable&#8221; en petites tâches (à l&#8217;aide de méthodes et d&#8217;outils de gestion adaptées, que je vous fournis), vous aurez ainsi l&#8217;occasion de proposer votre cause à une multitude d&#8217;intervenants que vous pourrez recruter en autant de bénévoles potentiels une fois leur mission de wecena terminée. C&#8217;est par exemple le cas de projets portant sur de l&#8217;initiation à l&#8217;informatique, de l&#8217;animation d&#8217;atelier informatique auprès de personnes défavorisées, d&#8217;interventions multiples d&#8217;installation de PC ou de réseau local&#8230; Pour des projets plus complexes (développement, conseil, &#8230;), votre implication est plus importante et le wecena ne peut pas représenter plus de 2 fois le temps que vous y consacrez déjà.</p>
<p><strong>Quelques exemples de projet</strong></p>
<p>Pour vous aider à vous faire une idée du type de projet qui peuvent bénéficier du wecena, voici quelques exemples de projets que j&#8217;ai déjà présenté à des mécènes :</p>
<ul>
<li>conception et réalisation d&#8217;un logiciel innovant pour faciliter l&#8217;utilisation du clavier et de la souris par des personnes ayant un handicap moteur</li>
<li>amélioration de l&#8217;infrastructure informatique d&#8217;une ONG travaillant dans la lutte contre l&#8217;exclusion: remplacement d&#8217;un parc de postes de travail, interventions d&#8217;administration système sur des serveurs de fichiers et d&#8217;application, &#8230;</li>
<li>déploiement d&#8217;un progiciel de reporting financier sur des prestations de services en mode projet pour une association recevant d&#8217;importantes subventions publiques</li>
<li>refonte d&#8217;applicatifs Web pour la gestion documentaire, la gestion des relations et contacts et la gestion des adhésions pour une association Internet dans le domaine de la famille et de la protection de l&#8217;enfance</li>
<li>création d&#8217;un blog par un écrivain public d&#8217;une ONG franco-africaine pour sensibiliser des étudiants français au problématiques du développement Nord-Sud</li>
<li>assistance à la webisation d&#8217;un système de gestion d&#8217;établissements de santé pour une association du secteur sanitaire et social</li>
<li>initiations informatiques et formation aux logiciels internes pour des bénévoles retraités d&#8217;une association humanitaire</li>
</ul>
<p>Ce ne sont que quelques exemples pour vous donner le ton. Aucun de ces projets n&#8217;a encore démarré.</p>
<p><strong>Avertissement</strong></p>
<p>Mon entreprise en est encore à une phase de démarrage et d&#8217;expérimentation. Je ne peux actuellement vous garantir ni que votre projet en particulier sera sélectionné par un mécène (les projets les plus solides et les plus ambitieux auront plus de chances bien entendu) ni même de pouvoir démarrer mon accompagnement tout de suite. En effet, l&#8217;aide que je peux vous apporter est en soi un projet (créer une entreprise&#8230;) : j&#8217;y crois énormément puisque j&#8217;ai quitté mon employeur précédent pour me lancer dans cette aventure, et j&#8217;y consacre tout mon temps et mes compétences. Mais, ceci dit, démarrer ce genre d&#8217;entreprise sociale innovante prend du temps et représente aussi une part de risque, d&#8217;incertitude, bref d&#8217;aventure&#8230; Le premier projet que j&#8217;accompagnerai pourrait démarrer fin 2008 (si les étoiles s&#8217;alignent comme prévu) ou au plus tard début 2009 (si j&#8217;ai moins de chance). Les mécènes que je rencontre sont déjà sur le pied de guerre et ont déjà commencé à examiner les projets informatiques que je leur présente. Certains ont déjà exprimé leur préférence et se mettent en ordre de bataille&#8230; En croisant les doigts, j&#8217;espère qu&#8217;un premier projet pourrait démarrer peu après la rentrée scolaire 2008.</p>
<p><strong>Pour participer à l&#8217;aventure&#8230;<br />
</strong></p>
<p>Vous connaissez une équipe qui porte un projet informatique d&#8217;intérêt général et a besoin de temps d&#8217;informaticiens pour aller plus loin et plus vite ? Faites-lui suivre l&#8217;adresse de cet article !</p>
<p>Votre projet répond aux conditions présentées ci-dessus ?  Pour vous en assurer, posez la question via un commentaire ci-dessous ou contactez-moi directement par email à l&#8217;adresse suivante: projets (chez) wecena (point) com ou bien encore à mon adresse de blogueur: sig (chez) akasig (point) org. <a title="Wecena, le mécénat de compétences en informatique" href="http://www.wecena.com/">Le site Web de mon entreprise</a> ne devrait pas ouvrir ses portes avant le démarrage du premier projet. En attendant, c&#8217;est ici que ça se passe. Vous avez des conseils à me donner, des avis ou des contacts à partager ou des suggestions à faire ? Ils seront bienvenus: je vous invite également à utiliser la fonction commentaires de ce blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2008/07/14/appel-aprojets-informatiques-dinteret-general/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Plone + Freemind = eternal love ?</title>
		<link>http://www.akasig.org/2008/06/19/plone-freemind-eternal-love/</link>
		<comments>http://www.akasig.org/2008/06/19/plone-freemind-eternal-love/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 14:04:48 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Web sémantique]]></category>
		<category><![CDATA[Zope & Plone]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2008/06/19/plone-freemind-eternal-love/</guid>
		<description><![CDATA[Congratulations to Plone and Freemind, two great open source software packages, which have celebrated weddings recently and have promptly released a new born &#8220;Plone Freemind v.1.0&#8221; extension product for Plone. I have been really fond of Plone and Freemind for several years now. It&#8217;s good news to learn that Freemind mindmaps can now be published [...]]]></description>
			<content:encoded><![CDATA[<p>Congratulations to Plone and Freemind, two great open source software packages, which have celebrated weddings recently and have promptly released a new born &#8220;<a href="http://plone.org/products/plonefreemind">Plone Freemind v.1.0</a>&#8221; extension product for Plone. I have been really fond of Plone and Freemind for several years now. It&#8217;s good news to learn that Freemind mindmaps can now be published and managed via a Plone site&#8230; even though I yet have to imagine some valuable use for this ! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2008/06/19/plone-freemind-eternal-love/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pierre Levy vs Tim Berners-Lee, round 0.1</title>
		<link>http://www.akasig.org/2008/05/14/pierre-levy-vs-tim-berners-lee-round-01/</link>
		<comments>http://www.akasig.org/2008/05/14/pierre-levy-vs-tim-berners-lee-round-01/#comments</comments>
		<pubDate>Wed, 14 May 2008 09:53:21 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Humains en réseaux]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2008/05/14/pierre-levy-vs-tim-berners-lee-round-01/</guid>
		<description><![CDATA[Yesterday, I attended a research seminar at the &#8220;Université de Paris 8&#8243;. Pierre Levy is a philosopher and professor and head of the collective intelligence chair at the University of Ottawa, Canada. He presented the latest developments in his work on IEML, which stands for Information Economy Meta Language. Things are taking shape on this [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I attended<a href="http://www.ieml.org/spip.php?article133"> a research seminar at the &#8220;Université de Paris 8&#8243;</a>. <a href="http://en.wikipedia.org/wiki/Pierre_Levy">Pierre Levy</a> is a philosopher and professor and head of the collective intelligence chair at the University of Ottawa, Canada. He presented the latest developments in his work on <a href="http://www.ieml.org/">IEML</a>, which stands for Information Economy Meta Language. Things are taking shape on this side and this presentation gave me the opportunity to better understand how IEML compares to the technologies of the Semantic Web (SW).<br style="font-weight: bold" /></p>
<p><span style="font-weight: bold">IEML: not another layer on top of the SW cake </span></p>
<p>IEML is proposed as an alternative to SW ontologies. In SW, the basic technology is <a href="http://en.wikipedia.org/wiki/Uniform_Resource_Identifier">URI</a> (Uniform Resource Identifier) which uniquely (and hopefully permanently) identify concepts (&#8220;resources&#8221;). Triples then combine these URIs into assertions which then form a graph of meaning that is called an ontology. IEML introduces identifiers which are not URIs. The main difference between URIs and IEML identifiers is that IEML identifiers are semantically rich. They carry meaning. They are meaningful. From a given IEML identifier, one could derive some (or ideally all?) of the semantics of the concept it identifies. Indeed these identifiers are composed of 6 semantic primitives. These 6 primitives are Emptiness, Virtual, Actual, Sign, Being, Thing (E,V,A,S,V and T) and were chosen to be as universal as possible, i.e. not dependent on any specific culture or natural language. The IEML grammar is a way to combine these primitives and logically build concepts with them (also using the notion of triples-based graphs). These primitives are comparable to the <a href="http://en.wikipedia.org/wiki/DNA">4 bases of DNA</a> (A,C,T and G) that are combined into a complex polymer (DNA) : with a limited alphabet, IEML can express an astronomically huge number of concepts in the same way the 4 letters-alphabet of DNA can express a huge number of phenotypes.</p>
<p><span style="font-weight: bold">Meaningness of identifiers</span></p>
<p>When I realized that the meaningful IEML identifiers are similar in their role to URIs, my first reaction was of being horrified. I have struggled for years against &#8220;old-school&#8221; IT workers who tend to rely on database keys for deriving properties of records. In a former life in the IT department of big industrial corporation, I was highly paid to design and impose a meaningless unique person identifier in order to uniquely and permanently identify the 200 000 employees and contractors of that multinational company in its corporate directory. The main superiority in meaningless identifiers is probably that they can be permanent: you don&#8217;t have to change the identifier of an object (of a person for instance) when some property of this object changes over time (the color of the hair of the person, or Miss Dupont getting married and getting called Misses Durand while still keeping the same corporate identifier).</p>
<p>The same is true for URIs whenever it is feasible: if a given resource is to change over time, its URI should not be dependent on its variable property (http://someone.com/blond/big/MissDurand having to change into http://someone.com/white/big/MissesDupont is a bad thing).</p>
<p>The same may not be true when concepts (not people) are to be identified. Concepts are supposed to be permanent and abstract things with IEML (as in the SW I guess). If some meaningful semantic component of a given concept changes then&#8230; it&#8217;s no longer the same concept (even though we may keep using the same word in a natural language in order to identify this derived concept).</p>
<p>In the old days, IT workers used to introduce meaning in identifiers so that (database) records could more easily be managed by humans, especially during tasks like visually classifying or sorting records in a table or getting an immediate overview of what a given record is about. But this often got seen as a bad practice when the cost of storage (having specific fields for properties that used to be stored as part of a DB key) and the cost of computation (getting a GUI for querying/filtering a DB based on properties) got lower. More often that not, the meaningful key was not permanent and this introduced perverse effects including having to assign a new key to a given record when some property changed or managing human errors when the properties &#8220;as seen in the key&#8221; were no longer in sync with the &#8220;real&#8221; properties of the record according to some field.</p>
<p>That&#8217;s probably part of the rationale behind the best practices in URI design and <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer#REST.27s_central_principle:_resources">web architecture</a>: an URI should be as permanent as possible I guess, in order not to change when the properties of a resource it identifies change over time. Thus web architectures are made more robust to time.</p>
<p>With IEML, we are back to the ol&#8217;times of meaningful identifiers. Is it such a bad thing ? Probably not because the power of IEML relies in the meaningness of these identifiers which allow all sorts of computational operations on the concepts. Anyway, that&#8217;s probably one of the biggest basic difference between IEML and the SW ontologies.</p>
<p><span style="font-weight: bold">Matching concepts with IEML</span></p>
<p>Another aspect of IEML struck me yesterday: IEML gives no magic solution to the problem of mapping (or matching) concepts together. In the SW universe, there is this recurring issue of getting two experts or ontologies agree on the equivalence of 2 resources/concepts: are they really the same concept expressed with distinct but equivalent URIs ? or are they distinct concepts ? How to solve semantic ambiguities ? Unless we get a solution to this issue, the grand graph of semantic data can&#8217;t be universally unified and people get isolated in semantic islands which are nothing more than badly interconnected domain ontologies. This is called the problem of <a href="http://en.wikipedia.org/wiki/Ontology_mapping">semantic integration</a>,  ontology mapping, ontology matching or <a href="http://en.wikipedia.org/wiki/Ontology_matching">ontology alignment</a>.</p>
<p>A couple of years ago, I hoped that IEML would solve this issue. IEML being such a regular and to-be-universal language, one could project any concept onto the IEML semantic space and obtain the coordinates (identifier) of this concept in this space. A second person or expert or ontology could also project its own concepts. Then it would just be a matter of calculating the distance between these points in the IEML space. (IEML provides ways of calculating such distances). And if the distance was inferior to some threshold, 2 concepts could then be considered as equivalent for a given pragmatic purpose.</p>
<p>But yesterday, I realized that the art of projecting concepts into the IEML space (i.e. assigning an identifier to a concept) is very subjective. Even though a Pierre Levy could propose a 3000-concepts dictionary that assigns IEML coordinates (identifiers) to concepts that are also identified by a short natural language sentence (like in a classic dictionary), this would not prevent a Tim Berners-Lee to come with a very different dictionary that assigns different coordinates to the same described concepts. Thus the distance between a Pierre-Levy-based IEML word and a TBL-based IEML word would be &#8230; meaningless.</p>
<p>In the SW, there is a basic assumption that anyone may come with a different URI for the same concepts and the URIs have to be associated via a &#8220;same as&#8221; property so that they are said to refer to the very same concept. When you get to bunches of URIs (2 ontologies for instance), you then have to match these URIs which refer to the same concepts. You have to align these ontologies. This can be a very tedious, manual and tricky process. The SW does not unify concepts. It only provides a syntax to represent and handle them. Humans still have to interprete them and match them together when they want to communicate with each other and agree on the meaning that these ontologies carry.</p>
<p>The same is more or less true with IEML. With IEML, identifiers are not arbitrarily defined (meaningful identifiers) whereas SW URIs are almost arbitrarily defined (meaningless identifiers). But the meaningful IEML identifiers only carry human meaning if they refer to the same (or similar) human/IEML dictionary.</p>
<p>Hence it seems to me that IEML is only valuable if some consensus exists about how to translate human concepts into the IEML space. It is only valuable to the extent that there is some universally accepted IEML dictionary. At least for basic concepts (primitives and simple combinations of IEML primitives). The same is true in the universe of SW technologies and there are some attemps at building &#8220;top ontologies&#8221; that are proposed as shared referentials for ontology builders to align their own ontologies with. But the alignment process, even if theoretically made easier with the existence of these top ontologies is still tricky, tedious and costly. And the critical mass has not been reached in sharing the use of such top ontologies. There is no top consensus to refer to.</p>
<p>Pierre Levy proposes a dictionary of about 3000 IEML words (identifiers) that represent almost all possible low-level combinations of IEML primitives. He invites people to enhance or extend his dictionary, or to come with their own dictionaries. Let&#8217;s assume that only minor changes are made to the basic Pierre Levy dictionary. Let&#8217;s assume that several conflicting dictionary extensions are made for more precise concepts (higher-level combinations of IEML primitives) . Given the fact that these conflicting extensions still share a basic foundation (the basic Pierre Levy dictionary), would the process of comparing and possibly matching IEML-expressed concepts be made easier ? Even though IEML does not give any automagical solution to the problem of ontology mapping, I wonder whether it makes things easier or not.</p>
<p>In other words, is IEML a superior alternative to SW ontologies ?</p>
<p><span style="font-weight: bold">Apples and bananas</span></p>
<p>Yesterday, someone asked: &#8220;<span style="font-style: italic">If someone assigns IEML coordinates to the concept of bananas, how will these coordinates compare to the concept of apples ?</span>&#8221; The answer did not satisfy me because it was along the lines of : &#8220;<span style="font-style: italic">IEML may not be the right tool for comparing bananas to apples</span>.&#8221;. I don&#8217;t see why it would be more suitable for comparing competencies to achievements than for comparing bananas to apples. Or I misunderstood the answer. Anyway&#8230;</p>
<p>Pierre Levy made much effort in describing the properties of his abstract IEML space so that IT programmers could start programming libraries for handling and processing IEML coordinates and operations. There even is a programming language being developped that allows semantic functions and operations to be applied to IEML graphs and to allow quantities (economic values, energy potentials, distances) to flow along IEML-based semantic graphs. Hence the name of Information <span style="font-style: italic">Economy</span>.</p>
<p>So there are (or will soon be) tools and services for surviving in the IEML space. But I strongly feel that there is a lack of tools for moving back and forth between the world of humans and the IEML space. How would you say &#8220;bananas&#8221; in IEML ? Assuming this concept is not already in a consensual dictionary.</p>
<p>As far as I understand the process of assigning IEML coordinates to the concept of &#8220;bananas&#8221; is somehow similar to the process of guessing the &#8220;right&#8221; (or best?) chinese ideogram for bananas. I don&#8217;t speak chinese at all. But I imagine one would have to combine existing ideograms that would best describe what a banana is. For instance, &#8220;<a href="http://en.wikipedia.org/wiki/Banana">bananas</a>&#8221; could be written with a combination of the ideograms that mean &#8220;<span style="font-style: italic">fruits of herbaceous plant cultivated throughout the tropics and grow in hanging clusters</span>&#8220;. It could also be written with a combination of the ideograms that mean &#8220;<span style="font-style: italic">fruits of the plants of the genus Musa that are native to the tropical region of Southeast Asia and Australia.</span>&#8221; Distinct definitions of bananas could refer to distinct combinations of existing IEML concepts (<em>fruits + herbaceous plant + hanging clusters + tropics</em> or <em>fruits + plants + genus Musa + Southeast Asia + Australia</em>). Would the resulting IEML coordinates be far away from each other ? Could a machine infer that these concepts are closely related if not practically equivalent to each other ? How dependent would the resulting distance be on conflicts or errors in underlying IEML dictionaries ?</p>
<p>I ended the day with this question in my mind: How robust is the IEML translation process to human conflicts, disagreements and errors ? Is it more robust than the process of building and aligning SW ontologies ? Its robustness seems to me as the main determinent factor of the feasibility of the new collective-intelligence-based civilization Pierre Levy promises. If only there were a paper comparing this process to what the SW already provides, I guess people would realize the value of IEML.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2008/05/14/pierre-levy-vs-tim-berners-lee-round-01/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web scraping, web mashing</title>
		<link>http://www.akasig.org/2007/03/08/web-scraping-web-mashing/</link>
		<comments>http://www.akasig.org/2007/03/08/web-scraping-web-mashing/#comments</comments>
		<pubDate>Thu, 08 Mar 2007 11:51:29 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2007/03/08/web-scraping-web-mashing/</guid>
		<description><![CDATA[5 Ways to Mix, Rip, and Mash Your Data introduces promising web and desktop applications that extract structured data feeds from web sites and mix them together into something possibly useful to you. Think of things like getting filtered Monster job ads as a convenient RSS feed, along with job ads from your other favorite [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.techcrunch.com/2007/03/02/5-ways-to-mix-rip-and-mash-your-data/">5 Ways to Mix, Rip, and Mash Your Data</a> introduces promising web and desktop applications that extract structured data feeds from web sites and mix them together into something possibly useful to you. Think of things like getting filtered Monster job ads as a convenient RSS feed, along with job ads from your other favorite job sites. This reminds me my Python hacks for automating <a href="http://www.akasig.org/2004/12/29/web-scraping-with-python-part-1-crawling/">web crawling</a> and <a href="http://www.akasig.org/2005/03/11/web-scraping-with-python-part-ii/">web scraping</a>. Sometimes, I wish I could find time for working a bit further on that&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2007/03/08/web-scraping-web-mashing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web 2.0 architectures with Java</title>
		<link>http://www.akasig.org/2006/12/05/web-20-architectures-with-java/</link>
		<comments>http://www.akasig.org/2006/12/05/web-20-architectures-with-java/#comments</comments>
		<pubDate>Tue, 05 Dec 2006 10:15:30 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Humains en réseaux]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/2006/12/05/web-20-architectures-with-java/</guid>
		<description><![CDATA[Here are two things to go beyond Web Services (with ReSTfullness in mind):

the &#8220;Web-Oriented Architecture&#8221; (WOA) concept is a lightweight version of the &#8220;Service-Oriented Architecture&#8221; concept, in a more Web 2.0 fashion.
restlets are a Java framework for Web 2.0 applications; they replace servlets API and facilitate the composition of &#8220;mashups&#8221; or Web applications relying on [...]]]></description>
			<content:encoded><![CDATA[<p>Here are two things to go beyond Web Services (with <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">ReSTfullness</a> in mind):</p>
<ul>
<li>the <a href="http://blogs.zdnet.com/Hinchcliffe/?p=27">&#8220;Web-Oriented Architecture&#8221; (WOA) concept</a> is a lightweight version of the <a href="http://en.wikipedia.org/wiki/Service-Oriented_Architecture">&#8220;Service-Oriented Architecture&#8221; concept</a>, in a more <a href="http://en.wikipedia.org/wiki/Web_2.0">Web 2.0</a> fashion.</li>
<li><a href="http://www.restlet.org/"><strogn>restlets</strogn></a> are a Java framework for Web 2.0 applications; they replace servlets API and facilitate the composition of &#8220;mashups&#8221; or Web applications relying on information collected from other live Web applications; there even is an open source reference implementation that is about to reach maturity and is actively developped</li>
</ul>
<p><strong>Take-away</strong>: beyond theory (ReST), there now are concepts (WOA) and tools (restlets) for building composite Web applications without requiring SOAP, WSDL and the whole bunch of overbloated WS-* standards that come with them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2006/12/05/web-20-architectures-with-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WikiCalc: Web 2.0 spreadsheets wikified</title>
		<link>http://www.akasig.org/2006/07/26/wikicalc-web-20-spreadsheets-wikified/</link>
		<comments>http://www.akasig.org/2006/07/26/wikicalc-web-20-spreadsheets-wikified/#comments</comments>
		<pubDate>Wed, 26 Jul 2006 10:03:41 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/2006/07/26/wikicalc-web-20-spreadsheets-wikified/</guid>
		<description><![CDATA[WikiCalc is a nice piece of GPLed software that pusblishes wiki pages that are structured like Excel spreadsheets are: one can view and edit tables, modify calculation formulas in cells, manage their formatting through the web browser, etc. It brings to spreadsheets the inherent advantages of many wikis: ease of use for Web publications, ease [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.softwaregarden.com/wkcalpha/">WikiCalc</a> is a nice piece of GPLed software that pusblishes wiki pages that are structured like Excel spreadsheets are: one can view and edit tables, modify calculation formulas in cells, manage their formatting through the web browser, etc. It brings to spreadsheets the inherent advantages of many wikis: ease of use for Web publications, ease of modification, revisions track for undoing unwanted changes by other users, RSS views on recent changes made to the page. It brings to wikis the inherent advantages of spreadsheets: live calculations, nice formatting, compliance with corporate way of thinking and managing things (will we see a WikiSlides with bulletpoints and animations in some future?). More than this, WikiCalc lets spreadsheets grab input data from external web sites and do live calculations from it: some formulas generate HTTP requests to web services in order to retrieve the latest value for a stock quote, weather forecasts, and so on. Last but not least, the flexible architecture of WikiCalc allows an offline use still via the user&#8217;s browser and a synchronization mechanism will let the online version get updated once the connection is restored.</p>
<p>A <a href="http://www.socialtext.com/screencasts/wikicalc1/">nice 10 min long WikiCalc screencast with audio</a> is available here.</p>
<p>In a former life, I was managing a team of web project managers in a multinational industrial corporation. As my boss wanted to get simple-to-update weekly/monthly status report about every project, we had tried using a wiki page per project in order to publish and update those reports. It was tedious and not nicely formatted for a corporate environment. I imagine that a nice immediate use of WikiCalc would be to let small project teams update project status reports on an intranet, including nicely formatted timelines and budget indicators. It would still maintain the update effort at a minimal and convenient level and would preserve the wiki flexibility of linking to the project documentation and resources.</p>
<p>We knew structured wiki pages for managing forms or category schemes. WikiCalc introduces spreadsheet structures while preserving the open and unstructured spirit of wikis. Next steps for future wikis would be to allow semantic structures to be managed the wiki-way, like in <a href="http://sig.levillage.org/2004/01/02/wiki-smantique/">some</a> early <a href="http://en.wikipedia.org/wiki/Semantic_Wiki">semantic wiki</a> prototypes. [update: see <a href="http://dannyayers.com/2006/03/31/wikicalc-and-the-1">Danny Ayers blog entries</a> on how WikiCalc could relate to the Semantic Web vision]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2006/07/26/wikicalc-web-20-spreadsheets-wikified/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mise en relation par le web sémantique</title>
		<link>http://www.akasig.org/2006/02/15/mise-en-relation-par-le-web-semantique/</link>
		<comments>http://www.akasig.org/2006/02/15/mise-en-relation-par-le-web-semantique/#comments</comments>
		<pubDate>Wed, 15 Feb 2006 08:35:26 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Humains en réseaux]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=643</guid>
		<description><![CDATA[Le projet européen de recherche Vikef vise à développer des technologies de mise en relation de personnes grâce aux technologies du Web Sémantique. Principale application envisagée: la mise en relation de professionnels dans des salons et de scientifiques lors de conférences. Lancé en avril 2004, le projet prendra fin en mars 2007. Ce projet est [...]]]></description>
			<content:encoded><![CDATA[<p>Le projet européen de recherche <a href="http://www.vikef.net/">Vikef</a> vise à développer des technologies de mise en relation de personnes grâce aux technologies du Web Sémantique. Principale application envisagée: <a href="http://istresults.cordis.lu/index.cfm/section/news/tpl/article/BrowsingType/Features/ID/80327">la mise en relation de professionnels dans des salons et de scientifiques lors de conférences</a>. Lancé en avril 2004, le projet prendra fin en mars 2007. Ce projet est <a href="http://www.vikef.net/partners.htm">mené notamment par</a> Xerox, l&#8217;insitut Fraunhofer et Telefonica.<br />
Spontanément, je ne peux m&#8217;empêcher de me réjouir d&#8217;un tel projet et de m&#8217;inquiéter de l&#8217;utilisabilité des applications qui vont en découler: va-t-on demander aux utilisateurs de modéliser leurs centres d&#8217;intérêts? Ca ne me paraît pas très réaliste. Je demande à voir !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2006/02/15/mise-en-relation-par-le-web-semantique/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Invention d&#8217;un système de coaching automatique sur téléphone mobile</title>
		<link>http://www.akasig.org/2005/11/01/invention-dun-systeme-de-coaching-automatique-sur-telephone-mobile/</link>
		<comments>http://www.akasig.org/2005/11/01/invention-dun-systeme-de-coaching-automatique-sur-telephone-mobile/#comments</comments>
		<pubDate>Tue, 01 Nov 2005 21:05:48 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Ma pub (CV...)]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=1002</guid>
		<description><![CDATA[[Ceci est le résumé de l'une de mes réalisations professionnelles. Je m'en sers pour faire ma pub dans l'espoir de séduire de futurs partenaires. Plus d'infos à ce sujet dans le récit de mon parcours professionnel.]
En 2005, le projet de recherche informatique MobiLife, mené conjointement par 22 entreprises et universités européennes, dispose d&#8217;un logiciel pour [...]]]></description>
			<content:encoded><![CDATA[<p><em>[Ceci est le résumé de l'une de mes réalisations professionnelles. Je m'en sers pour <a href="http://www.akasig.org/category/ma-pub-mon-cv/">faire ma pub</a> dans l'espoir de séduire de futurs partenaires. Plus d'infos à ce sujet dans <a href="http://www.akasig.org/tag/moncv/">le récit de mon parcours professionnel</a>.]</em></p>
<p>En 2005, <a href="http://www.ist-mobilife.org/">le projet de recherche informatique MobiLife</a>, mené conjointement par 22 entreprises et universités européennes, dispose d&#8217;un logiciel pour téléphone mobile qui permet à un sportif de visualiser son contexte d&#8217;entraînement : rythme cardiaque, lieu, heure&#8230; En tant qu&#8217;ingénieur de recherche, je suis chargé d&#8217;inventer un système exploitant ce type de données pour offrir à l&#8217;utilisateur des recommandations personnalisées et dépendant du contexte. Je propose aux partenaires un scénario utilisateur qui est accepté puis j&#8217;en supervise l&#8217;implémentation. J&#8217;implémente une partie du système côté serveur (J2EE) et côté téléphone (J2ME). L&#8217;application devient ainsi capable d&#8217;apprendre les habitudes d&#8217;entraînement du sportif, bonnes ou mauvaises, de prédire ses prochains choix d&#8217;exercice, de les comparer à ce que recommenderait un entraîneur expert dans les mêmes conditions et, sur cette base, d&#8217;alerter le sportif par des petits clips videos personnalisés sur son téléphone : &#8220;<em>Attention, il est tard et après 2 exercices de course sur le tapis roulant, vous avez habituellement tendance à trop forcer sur l&#8217;exercice suivant ; vous devriez plutôt passer sur le vélo pour un exercice de difficulté moyenne de 10 minutes</em>&#8220;. Le système inventé est transposable dans d&#8217;innombrables situations de mobilité : coaching alimentaire, formation continue, gestes pour l&#8217;environnement, guides touristiques,&#8230; A l&#8217;occasion d&#8217;une journée portes ouvertes des laboratoires Motorola, j&#8217;organise la démonstration de cette application devant 40 journalistes et analystes européens.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/11/01/invention-dun-systeme-de-coaching-automatique-sur-telephone-mobile/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Critiques du web sémantique</title>
		<link>http://www.akasig.org/2005/09/06/critiques-du-web-semantique/</link>
		<comments>http://www.akasig.org/2005/09/06/critiques-du-web-semantique/#comments</comments>
		<pubDate>Tue, 06 Sep 2005 12:26:29 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=635</guid>
		<description><![CDATA[Le Web Sémantique est l&#8217;objet de nombreuses critiques. On reproche principalement à cette vision technologiste son manque de pragmatisme. Voici les références de deux articles illustrateurs de ces critiques.
Clay Shirky soutient que la gestion d&#8217;ontologies n&#8217;est pas une sinécure et que les technologies de &#8220;social tagging&#8221;/&#8221;folksonomies&#8221; sont une alternative beaucoup plus adaptée à l&#8217;Internet que [...]]]></description>
			<content:encoded><![CDATA[<p>Le Web Sémantique est l&#8217;objet de nombreuses critiques. On reproche principalement à cette vision technologiste son manque de pragmatisme. Voici les références de deux articles illustrateurs de ces critiques.</p>
<p>Clay Shirky <a href="http://shirky.com/writings/ontology_overrated.html">soutient que la gestion d&#8217;ontologies n&#8217;est pas une sinécure</a> et que les technologies de &#8220;social tagging&#8221;/&#8221;folksonomies&#8221; sont une alternative beaucoup plus adaptée à l&#8217;Internet que ne l&#8217;est la vision du Web Sémantique des spécialistes des ontologies. Selon moi, l&#8217;alternative proposée (le <em>social tagging</em>) est bonne mais la critique anti-ontologies est exagérée car je ne pense pas que la vision de Tim Berners-Lee du web sémantique soit autant portée sur une modélisation ontologique top-down des connaissances que l&#8217;on veut bien le dire. Bref, pour moi, la solution d&#8217;avenir ce serait quelque chose du genre &#8220;semantic social tagging&#8221;. Cet article est un bon point de départ pour découvrir les folksonomies, comparées à la modélisation ontologique des connaissances.</p>
<p>Sur un ton plus comique, on peut trouver <a href="http://lists.xml.org/archives/xml-dev/200504/msg00260.html ">une libre reprise d&#8217;un sketch des comiques anglais &#8220;Monty Python&#8221;</a> qui se moque de l&#8217;approche top-down des spécialistes du web-sémantique ; la critique est aisée depuis que <a href="http://sig.levillage.org/?p=414">Tim Berners Lee a été adoubé chevalier par la reine d&#8217;Angleterre</a>&#8230; Elle n&#8217;en reste pas moins tout à fait amusante et intéressante.</p>
<p>Au passage, je vous suggère une manière simple de se représenter le web sémantique : imaginez que le web devienne non pas simplement un gros document hyper-texte mais également une grosse base de données. Avec le web sémantique, les applicatifs (agents ou non) pourront &#8220;librement&#8221; traiter des données produites par d&#8217;autres applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/09/06/critiques-du-web-semantique/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>From flat text to structured data</title>
		<link>http://www.akasig.org/2005/09/05/from-flat-text-to-structured-data/</link>
		<comments>http://www.akasig.org/2005/09/05/from-flat-text-to-structured-data/#comments</comments>
		<pubDate>Mon, 05 Sep 2005 15:20:12 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Humains en réseaux]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=634</guid>
		<description><![CDATA[This article shows an example of how to build structured data sets from flat text. The example given is the detection of existing relationships between (ex-)members of the British government by data-mining the wikipedia. This relates to &#8220;bubble-up folksonomies&#8221;. These folks at the BBC are smart !
]]></description>
			<content:encoded><![CDATA[<p>This article shows <a href="http://www.hackdiary.com/archives/000070.html">an example of how to build structured data sets from flat text</a>. The example given is the detection of existing relationships between (ex-)members of the British government by data-mining the wikipedia. This relates to &#8220;bubble-up folksonomies&#8221;. These folks at the BBC are smart !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/09/05/from-flat-text-to-structured-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to ReSTfully Ajax</title>
		<link>http://www.akasig.org/2005/08/25/09/</link>
		<comments>http://www.akasig.org/2005/08/25/09/#comments</comments>
		<pubDate>Thu, 25 Aug 2005 08:29:33 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Humains en réseaux]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=630</guid>
		<description><![CDATA[Here are some pointers for learning more about the Ajax programming model and how to properly design your Ajax application :

Ajax is said to be the cross-platform successor to Java&#8230; huh&#8230; (David, thank you for this pointer)
Ajax should be ReSTfully considered before use
Is Ajax ReSTless and dirty ?

While I am mentionning the Representational State Transfer [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some pointers for learning more about the <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">Ajax programming model</a> and how to properly design your Ajax application :
<ul>
<li>Ajax is said <a href="http://arstechnica.com/news.ars/post/20050808-5183.html">to be the cross-platform successor to Java</a>&#8230; huh&#8230; (David, thank you for this pointer)</li>
<li>Ajax <a href="http://intertwingly.net/blog/2005/03/16/AJAX-Considered-Harmful/">should be</a> <a href="http://sig.levillage.org/?p=560">ReST</a>fully considered before use</li>
<li><a href="http://www.weiqigao.com/blog/2005/05/29/questioning_ajax.html">Is Ajax ReSTless and dirty ?</a></li>
</ul>
<p>While I am mentionning the <a href="http://sig.levillage.org/?p=560">Representational State Transfer (ReST) architecture style</a>, here are some additional and valuable resources on this topic :
<ul>
<li>Do we need a <a href="http://www.manageability.org/blog/stuff/brainstorming-a-restful-toolkit/view">ReST toolkit for application developpers</a> ? What would it look like ?</li>
<li>NetKernel is <a href="http://hughw.blogspot.com/2005/03/netkernel-restful-application-server.html">claimed to be such a ReSTful toolkit</a></li>
<li><a href="http://www.dehora.net/journal/2005/02/the_integrators_dilemma.html">A ReSTful toolkit for application developers would be a low cost disruption to the heavyweight SOA products that are (by far) overshooting the market of IT departments in big corporations</a> ; it nicely fits <a href="http://sig.levillage.org/?p=629">the Christensen model of disruptive innovations</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/08/25/09/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Comparator</title>
		<link>http://www.akasig.org/2005/07/24/comparator/</link>
		<comments>http://www.akasig.org/2005/07/24/comparator/#comments</comments>
		<pubDate>Sun, 24 Jul 2005 19:45:43 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Web sémantique]]></category>
		<category><![CDATA[Zope & Plone]]></category>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=624</guid>
		<description><![CDATA[Comparator is a small Plone product I recently hacked for my pleasure. It&#8217;s called comparator until it gets a nicer name, if ever. I distribute it here under the GNU General Public License. It allows users to select any existing content type (object class) and to calculate a personnalized comparison of the instances of this [...]]]></description>
			<content:encoded><![CDATA[<p>Comparator is a small Plone product I recently hacked for my pleasure. It&#8217;s called comparator until it gets a nicer name, if ever. I distribute it <a title="Comparator for Plone" href="http://sig.levillage.org/b2-img/Comparator.zip">here</a> under the GNU General Public License. It allows users to select any existing content type (object class) and to calculate a personnalized comparison of the instances of this class. For example, if you choose to compare &#8220;News Items&#8221;, then you select the news items properties you want to base your comparison upon (title, creation date, description, &#8230;). You give marks to any value of these properties (somewhat a tedious process at the moment but much room for improvement in the future, there). Comparator then let&#8217;s you give relative weights to these properties so that the given marks are processed and the compared instances are ranked globally.</p>
<p>It&#8217;s a kind of basic block for building a comparison framework, for building Plone applications that compare stuff (any kind of stuff that exists within your portal, including semantically agregated stuff). Let&#8217;s say that your Plone portal is full of descriptions of beers (with many details about all kinds of beers). Then adding a comparator to your portal will let your users give weights to every beer property and rank all the beers according to their personal tastes.</p>
<p>Comparator is based on Archetypes and was built from an UML diagram with ArchgenXML. Comparator fits well in <a href="http://sig.levillage.org/?p=612">my vision of semantic agregation</a>. I hope you can see how. Comments welcome !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/07/24/comparator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Daisy vs. Plone, feature fighting</title>
		<link>http://www.akasig.org/2005/06/09/daisy-vs-plone-feature-fighting/</link>
		<comments>http://www.akasig.org/2005/06/09/daisy-vs-plone-feature-fighting/#comments</comments>
		<pubDate>Thu, 09 Jun 2005 20:52:58 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Web sémantique]]></category>
		<category><![CDATA[Zope & Plone]]></category>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=619</guid>
		<description><![CDATA[A Gouri-friend of mine recently pointed me to Daisy, a &#8220;CMS wiki/structured/XML/faceted&#8221; stuff he said. I answered him it may be a nice product but not enough attractive for me at the moment to spend much time analyzing it. Nevertheless, as Gouri asked, let&#8217;s browse Daisy&#8217;s features and try to compare them with Plone equivalents [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://amphi-gouri.org/blog">Gouri-friend of mine</a> recently pointed me to <a href="http://cocoondev.org/daisy/">Daisy</a>, a &#8220;CMS wiki/structured/XML/faceted&#8221; stuff he said. I answered him it may be a nice product but not enough attractive for me at the moment to spend much time analyzing it. Nevertheless, as Gouri asked, let&#8217;s browse <a href="http://cocoondev.org/daisy/features.html">Daisy&#8217;s features</a> and try to compare them with Plone equivalents (given that I never tried Daisy).</p>
<blockquote><p>The Daisy project encompasses two major parts: a featureful document repository</p></blockquote>
<p>Plone is based on an object-oriented repository (Zope&#8217;s ZODB) rather than a document oriented repository.</p>
<blockquote><p>and a web-based, wiki-like frontend.</p></blockquote>
<p>Plone has its own web-based fronted. Wiki features are provided with an additional product (Zwiki).</p>
<blockquote><p>If you have different frontend needs than those covered by the standard Daisy frontend, you can still benefit hugely from building upon its repository part.</p></blockquote>
<p>Plone&#8217;s frontend is easily customizable either with your own CSS, with inherting from existing ZPT skins or with a WYSIWYG skin module such as CPSSkin.</p>
<blockquote><p>Daisy is a Java-based application</p></blockquote>
<p>Plone is Python-based.</p>
<blockquote><p>, and is based on the work of many valuable open source packages, without which Daisy would not have been possible. All third-party libraries or products we redistribute are unmodified (unforked) copies.</p></blockquote>
<p>Same for Plone. Daisy seems to be based on Cocoon. Plone is based on Zope.</p>
<blockquote><p>Some of the main features of the document repository are:<br />
* Storage and retrieval of documents.</p></blockquote>
<p>Documents are one of the numerous object classes available in Plone. The basic object in Plone is&#8230; an object that is not fully extensible by itself unless it was designed to be so. Plone content types are more user-oriented than generic documents (they implement specialized behaviours such as security rules, workflows, displays, &#8230;). They will be made very extensible when the next versions of the &#8220;Archetypes&#8221; underlying layer is released (they include through-the-web schema management feature that allow web users to extend what any existing content type is).</p>
<blockquote><p>* Documents can consists of multiple content parts and fields, document types define what parts and fields a document should have.</p></blockquote>
<p>Plone&#8217;s perspective is different because of its object orientation. Another Zope product called Silva is more similar to Daisy&#8217;s document orientation.</p>
<blockquote><p>Fields can be of different data types (string, date, decimal, boolean, &#8230;) and can have a list of values to choose from.</p></blockquote>
<p>Same for Archetypes based content types in Plone.</p>
<blockquote><p>Parts can contain arbitrary binary data, but the document type can limit the allowed mime types. So a document (or more correctly a part of a document) could contain XML, an image, a PDF document, &#8230; Part upload and download is handled in a streaming manner, so the size of parts is only limitted by the available space on your filesystem (and for uploading, a configurable upload limit).</p></blockquote>
<p>I imagine that Daisy allows the upload and download of documents having any structure, with no constraint. In Plone, you are constrained by the object model of your content types. As said above this model can be extended at run time (schema management) but at the moment, the usual way to do is to define your model at design time and then comply with it at run time. At run time (even without schema management), you can still add custom metadata or upload additional attached files if your content type supports attached files.</p>
<blockquote><p>* Versioning of the content parts and fields. Each version can have a state of &#8216;published&#8217; or &#8216;draft&#8217;. The most recent version which has the state published is the &#8216;live&#8217; version, ie the version that is displayed by default (depends on the behaviour of the frontend application of course).</p></blockquote>
<p>The default behaviour of Plone does not include real versioning but document workflows. It means that a given content can be in state &#8216;draft&#8217; or &#8216;published&#8217; and go from one state to another according to a pre-defined workflow (with security conditions, event triggering and so). But a given object has only one version by default.<br />
But there are additional Plone product that make Plone support versioning. These products are to be merged into Plone future distribution because versioning has been a long awaited feature. Note that, at the moment, you can have several versions of a document to support multi-language sites (one version per language).</p>
<blockquote><p>* Documents can be marked as &#8216;retired&#8217;, which makes them appear as deleted, they won&#8217;t show up unless explicitely requested. Documents can also be deleted permanently.</p></blockquote>
<p>Plone&#8217;s workflow mechanism is much more advanced. A default workflow includes a similar retired state. But the admin can define new workflows and modify the default one, always referring to the user role. Plone&#8217;s security model is quite advanced and is the underlying layer of every Plone functionality.</p>
<blockquote><p>* The repository doesn&#8217;t care much what kind of data is stored in its parts, but if it is &#8220;HTML-as-well-formed-XML&#8221;, some additional features are provided:<br />
o link-extraction is performed, which allows to search for referers of a document.<br />
o a summary (first 300 characters) is extracted to display in search results<br />
o (these features could potentially be supported for other formats also)</p></blockquote>
<p>There is no such thing in Plone. Maybe in Silva ? Plone&#8217;s reference engine allows you to define associations between objects. These associations are indexed by Plone&#8217;s search engine (&#8220;catalog&#8221;) and can be searched.</p>
<blockquote><p>* all documents are stored in one &#8220;big bag&#8221;, there are no directories.</p></blockquote>
<p>Physically, the ZODB repository can have many forms (RDBMS, &#8230;). The default ZODB repository is a single flat file that can get quite big : Data.fs</p>
<blockquote><p>Each document is identified by a unique ID (an ever-increasing sequence number starting at 1), and has a name (which does not need to be unique).</p></blockquote>
<p>Each object has an ID but it is not globally unique at the moment. It is unfortunately stored in a hierarchical structure (Zope&#8217;s tree). Some Zope/Plone developpers wished &#8220;Placeless content&#8221; to be implemented. But Daisy must still be superior to Plone in that field.</p>
<blockquote><p>Hierarchical structure is provided by the frontend by the possibility to create hierarchical navigation trees.</p></blockquote>
<p>Zope&#8217;s tree is the most important structure for objects in a Plone site. It is too much important. You can still create navigation trees with shortcuts. But in fact, the usual solution in order to have maximum flexibility in navigation trees is to use the &#8220;Topic&#8221; content type. Topics are folder-like object that contain a dynamic list of links to objects matching the Topic&#8217;s pre-defined query. Topic are like persistent searches displayed as folders. As a an example a Topic may display the list of all the &#8220;Photo&#8221;-typed objects that are in &#8220;draft&#8221; state in a specific part (tree branch) of the site, etc.</p>
<blockquote><p>* Documents can be combined in so-called &#8220;collections&#8221;. Collections are sets of the documents. One document can belong to multiple collections, in other words, collections can overlap.</p></blockquote>
<p>Topics too ? I regret that Plone does easily not offer a default way to display a whole set of objects in just one page. As an example, I would have enjoyed to display a &#8220;book&#8221; of all the contents in my Plone site as if it were just one single object (so that I can print it&#8230;) But there are some Plone additional products (extensions) that support similar functionalities. I often use &#8220;Content Panels&#8221; to build a page by defining its global layout (columns and lines) and by filling it with &#8220;views&#8221; from exisiting Plone objects (especially Topics). Content Panels mixed with Topics allow a high flexibility in your site. But this flexibility has some limits too.</p>
<blockquote><p>* possibility to take exclusive locks on documents for a limitted or unlimitted time. Checking for concurrent modifications (optimistic locking) happens automatically.</p></blockquote>
<p>See versioning above.</p>
<blockquote><p>* documents are automatically full-text indexed (Jakarta Lucene based). Currently supports plain text, XML, PDF (through PDFBox), MS-Word, Excel and Powerpoint (through Jakarta POI), and OpenOffice Writer.</p></blockquote>
<p>Same for Plone except that Plone&#8217;s search engine is not Lucene and I don&#8217;t know if Plone can read OpenOffice Writer documents. Note that you will require additional modules depending on your platform in order to read Microsoft files.</p>
<blockquote><p>* repository data is stored in a relation database. Our main development happens on MySQL/InnoDB, but the provisions are there to add support for new databases, for example PostgreSQL support is now included.</p></blockquote>
<p>Everything is in the ZODB. By default stored as a single file. But can also be stored in a relational database (but this is usually useless). You can also transparently mix several repositories in a same Plone instance. Furthermore, instead of having Plone directly writing in the ZODB&#8217;s file, you can configure Plone so that it goes through a ZEO client-server setup so that several Plone instances can share a common database (load balancing). Even better, there is a commercial product, ZRS, that allows you to transparently replicate ZODBs so that several Plone instances setup with ZEO can use several redundant ZODBs (no single point of failure).</p>
<blockquote><p>The part content is stored in normal files on the file system (to offload the database). The usage of these familiar, open technologies, combined with the fact that the daisywiki frontend stores plain HTML, makes that your valuable content is easily accessible with minimal &#8220;vendor&#8221; lock-in.</p></blockquote>
<p>Everything&#8217;s in the ZODB. This can be seen as a lock-in. But it is not really because 1/ the product is open source and you can script a full export with Python with minimal effort, 2/ there are default WebDAV + FTP services that can be combined with Plone&#8217;s Marshall extension (soon to be included in Plone&#8217;s default distribution) that allows you to output your content from your Plone site. Even better, you can also upload your structured semantic content with Marshall plus additional hacks as I mentioned <a href="http://sig.levillage.org/?p=612">somewhere else</a>.</p>
<blockquote><p>* a high-level, sql-like query language provides flexible querying without knowing the details of the underlying SQL database schema. The query language also allows to combine full-text (Lucene) and metadata (SQL) searches. Search results are filtered to only contain documents the user is allowed to access (see also access control). The content of parts (if HTML-as-well-formed-XML) can also be selected as part of a query, which is useful to retrieve eg the content of an &#8220;abstract&#8221; part of a set of documents.</p></blockquote>
<p>No such thing in Plone as far as I know. You may have to Pythonize my friend&#8230; Except that Plone&#8217;s tree gives an URL to every object so that you can access any part of the site. But not with a granularity similar to Daisy&#8217;s supposed one. See silva for more document-orientation.</p>
<blockquote><p>* Accesscontrol: instead of attaching an ACL to each individual document, there is a global ACL which allows to specify the access rules for sets of documents by selecting those documents based on expressions. This allows for example to define access control rules for all documents of a certain type, or for all documents in a certain collection.</p></blockquote>
<p>Access control is based on Plone&#8217;s tree, with inheritance (similar to Windows security model in some way). I suppose Plone&#8217;s access control is more sophisticated and maintainable than Daisy&#8217;s one but it should require more investigation to explain why.</p>
<blockquote><p>* The full functionality of the repository is available via an HTTP+XML protocol, thus providing language and platform independent access. The documentation of the HTTP interface includes examples on how the repository can be updated using command-line tools like wget and curl.</p></blockquote>
<p>Unfortunately, Plone is not ReST enough at the moment. But there is some hope the situation will change with Zope 3 (Zope&#8217;s next major release that is coming soon). Note that Zope (so Plone) supports HTTP+XML/RPC as a generic web service protocol. But this is nothing near real ReSTful web services&#8230;</p>
<blockquote><p>* A high-level, easy to use Java API, available both as an &#8220;in-JVM&#8221; implementation for embedded scenarios or services running in the daisy server VM, as well as an implementation that communicates transparently using the HTTP+XML protocol.</p></blockquote>
<p>Say Python and XML/RPC here.</p>
<blockquote><p>* For various repository events, such as document creation and update, events are broadcasted via JMS (currently we include OpenJMS). The content of the events are XML messages. Internally, this is used for updating the full-text index, notification-mail sending and clearing of remote caches. Logging all JMS events gives a full audit log of all updates that happened to the repository.</p></blockquote>
<p>No such mechanism as far as I know. But Plone of course offers fully detailed audit logs of any of its events.</p>
<blockquote><p>* Repository extensions can provide additional services, included are:<br />
o a notification email sender (which also includes the management of the subscriptions), allowing subscribing to individual documents, collections of documents or all documents.</p></blockquote>
<p>No such generic feature by default in Plone. You can add scripts to send notification in any workflow transition. But you need to write one or two lines of Python. And the management of subscriptions is not implemented by default. But folder-like object support RSS syndication so that you can agregate Plone&#8217;s new objects in your favorite news aggregator;</p>
<blockquote><p>o a navigation tree management component and a publisher component, which plays hand-in-hand with our frontend (see further on)</p></blockquote>
<p>I&#8217;ll see further on&#8230; :)</p>
<blockquote><p>* A JMX console allows some monitoring and maintenance operations, such as optimization or rebuilding of the fulltext index, monitoring memory usage, document cache size, or database connection pool status.</p></blockquote>
<p>You have several places to look at for this monitoring within Zope/Plone (no centralized monitoring). An additional Plone product helps in centralizing maintenance operations. Still some ground for progress here.</p>
<blockquote><p>The &#8220;Daisywiki&#8221; frontend<br />
The frontend is called the &#8220;Daisywiki&#8221; because, just like wikis, it provides a mixed browsing/editing environment with a low entry barrier. However, it also differs hugely from the original wikis, in that it uses wysiwyg editing, has a powerful navigation component, and inherits all the features of the underlying daisy repository such as different document types and powerful querying.</p></blockquote>
<p>Well, then we can just say the same for Plone and rename its skins the Plonewiki frontend&#8230; Supports Wysiwyg editing too, with customizable navigation tree, etc.</p>
<blockquote><p>* wysiwyg HTML editing<br />
o supports recent Internet Explorer and Mozilla/Firefox (gecko) browsers, with fallback to a textarea on other browsers. The editor is customized version of HTMLArea (through plugins, not a fork).</p></blockquote>
<p>Same for Plone (except it is not an extension of HTMLArea but of a similar product).</p>
<blockquote><p>o We don&#8217;t allow for arbitrary HTML, but limit it to a small, structural subset of HTML, so that it&#8217;s future-safe, output medium independent, secure and easily transformable. It is possible to have special paragraph types such as &#8216;note&#8217; or &#8216;warning&#8217;. The stored HTML is always well-formed XML, and nicely layed-out. Thanks to a powerful (server-side) cleanup engine, the stored HTML is exactly the same whether edited with IE or Mozilla, allowing to do source-based diffs.</p></blockquote>
<p>No such validity control within Plone. In fact, the structure of a Plone document is always valid because it is managed by Plone according to a specific object model. But a given object may contain an HTML part (a document&#8217;s body as an example) that may not be valid. If your documents are to have a recurrent inner structure, then you are invited to make this structure an extension of an object class so that is no more handled as a document structure. See what I mean ?</p>
<blockquote><p>o insertion of images by browsing the repository or upload of new images (images are also stored as documents in the repository, so can also be versioned, have metadata, access control, etc)</p></blockquote>
<p>Same with Plone except for versioning. Note that Plone&#8217;s Photo content type support automatic server-side redimensioning of images.</p>
<blockquote><p>o easy insertion document links by searching for a document</p></blockquote>
<p>Sometimes yes, sometimes no. It depends on the type of link you are creating.</p>
<blockquote><p>o a heartbeat keeps the session alive while editing</p></blockquote>
<p>I don&#8217;t know how it works here.</p>
<blockquote><p>o an exlusive lock is automatically taken on the document, with an expire time of 15 minutes, and the lock is automatically refreshed by the heartbeat</p></blockquote>
<p>I never tried the Plone extension for versioning so I can&#8217;t say. I know that you can use the WebDAV interface to edit a Plone object with your favorite text processing package if you want. And I suppose this interface properly manages this kind of issues. But I never tried.</p>
<blockquote><p>o editing screens are built dynamically for the document type of the document being edited.</p></blockquote>
<p>Of course.</p>
<blockquote><p>* Version overview page, from which the state of versions can be changed (between published and draft), and diffs can be requested. * Nice version diffs, including highlighting of actual changes in changed lines (ignoring re-wrapping).</p></blockquote>
<p>You can easily move any object in its associated workflow (from one state to another, through transitions). But no versioning. Note that you can use Plone&#8217;s wiki extension and this extension supports supports diffs and some versioning features. But this is not available for any Plone content type.</p>
<blockquote><p>* Support for includes, i.e. the inclusion of one document in the other (includes are handled recursively).</p></blockquote>
<p>No.</p>
<blockquote><p>* Support for embedding queries in pages.</p></blockquote>
<p>You can use Topics (persistent queries). You can embed them in Content Panels.</p>
<blockquote><p>* A hierarchical navigation tree manager. As many navigation trees as you want can be created.</p></blockquote>
<p>One and only one navigation tree by default. But Topics can be nested. So you can have one main navigation tree plus one or more alternatives with Topics (but these alternatives are limited for some reasons.).</p>
<blockquote><p>Navigation trees are defined as XML and stored in the repository as documents, thus access control (for authoring them, read access is public), versioning etc applies. One navigation tree can import another one. The nodes in the navigation tree can be listed explicitely, but also dynamically inserted using queries. When a navigation tree is generated, the nodes are filtered according to the access control rules for the requesting user. Navigation trees can be requested in &#8220;full&#8221; or &#8220;contextualized&#8221;, this last one meaning that only the nodes going to a certain document are expanded. The navigtion tree manager produces XML, the visual rendering is up to XSL stylesheets.</p></blockquote>
<p>This is nice. Plone can not do that easily. But what Plone can do is still done with respect to its security model and access control, of course.</p>
<blockquote><p>* A navigation tree editor widget allows easy editing of the navigation trees without knowledge of XML. The navigation tree editor works entirely client-side (Mozilla/Firefox and Internet Explorer), without annoying server-side roundtrips to move nodes around, and full undo support.</p></blockquote>
<p>Yummy.</p>
<blockquote><p>* Powerful document-publishing engine, supporting:<br />
o processing of includes (works recursive, with detection of recursive includes)<br />
o processing of embedded queries<br />
o document type specific styling (XSLT-based), also works nicely combined with includes, i.e. each included document will be styled with its own stylesheet depending on its document type.</p></blockquote>
<p>OK</p>
<blockquote><p>* PDF publishing (using Apache FOP), with all the same features as the HTML publishing, thus also document type specific styling.</p></blockquote>
<p>Plone document-like content type offer PDF views too.</p>
<blockquote><p>* search pages:<br />
o fulltext search<br />
o searching using Daisy&#8217;s query language<br />
o display of referers (&#8220;incoming links&#8221;)</p></blockquote>
<p>Fulltext search is available. No query language for the user. Display of refers is only available for content type that are either wiki pages or have been given the ability to include references from other objects.</p>
<blockquote><p>* Multiple-site support, allows to have multiple perspectives on top of the same daisy repository. Each site can have a different navigation tree, and is associated with a default collection. Newly created documents are automatically added to this default collection, and searches are limited to this default collection (unless requested otherwise).</p></blockquote>
<p>It might be possible with Plone but I am not sure when this would be useful.</p>
<blockquote><p>* XSLT-based skinning, with resuable &#8216;common&#8217; stylesheets (in most cases you&#8217;ll only need to adjust one &#8216;layout&#8217; xslt, unless you want to customise heavily). Skins are configurable on a per-site basis.</p></blockquote>
<p>Plone&#8217;s skins are using the Zope Page Templates technology. This is a very nice and simple HTML templating technology. Plone&#8217;s skins make an extensive use of CSS and in fact most of the layout and look-and-feel of a site is now in CSS objects. These skins are managed as objects, with inheritance, overriding of skins and other sophisticated mechanism to configure them.</p>
<blockquote><p>* User self-registration (with the possibility to configure which roles are assigned to users after self-registration) and password reminder.</p></blockquote>
<p>Same is available from Plone.</p>
<blockquote><p>* Comments can be added to documents.</p></blockquote>
<p>Available too.</p>
<blockquote><p>* Internationalization: the whole front-end is localizable through resource bundles.</p></blockquote>
<p>Idem.</p>
<blockquote><p>* Management pages for managing:<br />
o the repository schema (the document types)<br />
o the users<br />
o the collections<br />
o access control</p></blockquote>
<p>Idem.</p>
<blockquote><p>* The frontend currently doesn&#8217;t perform any caching, all pages are published dynamically, since this also depends on the access rights of the current user. For publishing of high-trafic, public (ie all public access as the same user), read-only sites, it is probably best to develop a custom publishing application.</p></blockquote>
<p>Zope includes caching mechanisms that take care of access rights. For very high-trafic public sites, a Squid frontend is usually recommended.</p>
<blockquote><p>* Built on top of Apache Cocoon (an XML-oriented web publishing and application framework), using Cocoon Forms, Apples (for stateful flow scenarios), and the repository client API.</p></blockquote>
<p>By default, Zope uses its own embedded web server. But the usual setup for production-grade sites is to put an Apache reverse-proxy in front of it.</p>
<p>My conclusion : Daisy looks like a nice product when you have a very document-oriented project, with complex documents with structures varying much from documents to documents ; its equivalent in Zope&#8217;s world would be Silva. But Plone is much more appropriate for everyday CMS sites. Its object-orientation offers both a great flexibility for the developer and more ease of use for Joe-six-pack webmaster. Plone still lacks some important technical features for its future, namely ReSTful web service interfaces, plus placeless content paradigm. Versioning is expected soon.</p>
<p>This article was written in just one raw, late at night and <span style="text-decoration: line-through;">with no re-reading</span> reviewed once thanks to Gouri. It may be wrong or badly lacking information on some points. So your comments are much welcome !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/06/09/daisy-vs-plone-feature-fighting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Semantic Web reports for corporate social responsability</title>
		<link>http://www.akasig.org/2005/05/26/semantic-web-reports-for-corporate-social-responsability/</link>
		<comments>http://www.akasig.org/2005/05/26/semantic-web-reports-for-corporate-social-responsability/#comments</comments>
		<pubDate>Thu, 26 May 2005 16:05:37 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Entreprises responsables]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=618</guid>
		<description><![CDATA[With that amount of buzzwords in the title, I must be ringing some warning bells in your minds. You would be right to get cautious with what I am going to say here because this is pure speculation. I would like to imagine how annual (quarterly ?) corporate reports should look like in some near [...]]]></description>
			<content:encoded><![CDATA[<p>With that amount of buzzwords in the title, I must be ringing some warning bells in your minds. You would be right to get cautious with what I am going to say here because this is pure speculation. I would like to imagine how annual (quarterly ?) corporate reports should look like in some near future.</p>
<p>In my opinion, they should carry on <a href="http://www.worldchanging.com/archives/002369.html">the current trend on emphasizing corporate social responsability</a>. In order to do so, they should both embrace innovative reporting standards and methodologies and support these methodologies by implementing them with <a href="http://www.fredcavazza.net/index.php?2005/04/29/669-le-web-semantique-au-secours-des-analystes-financiers">&#8220;semantic web&#8221;-like technologies</a>. In such a future, it would mean that financial analyst (and eventually stakeholders) should be able to browse through specialized web sites which would <a href="http://www.bloglines.com/">aggregate</a> meaningful data published in these corporate reports. In such specialized web sites, investors should be able to compare comparable data, marks and ratings regarding their favorite corporations. They should be given functionalities like the one you find in <a href="http://mondrian.sourceforge.net/olap.html">multidimensional analysis tools</a> (business intelligence), even if they are as simplified as in <a href="http://www.myrateplan.com/cellphones/">interactive purchase</a> <a href="http://www.amazon.com/gp/search/finder/104-8851977-2843122?productGroupID=loose%5fdiamonds">guides</a> [via <a href="http://www.fredcavazza.net/index.php?2005/05/17/695-2-exemples-d-assistants-d-achat">Fred</a>]. In such a future, I would be able to subscribe to such a web service, give my preferences and filters in financial, social and environmental terms. This service would give me a snapshot of how the selected corporations compare one to each other regarding my preferences and filters. Moreover, I would receive as an RSS feed an alert whenever <a href="http://ecartypeconseils.blogspot.com/">a new report</a> is published or when some thresholds in performance are reached by the corporations I monitor.</p>
<p>Some technological issues still stand in the way of such future. They are fading away. But a huge amount of methodological and political issues stand there also&#8230; What if such technologies come to maturity ? Would they push corporations, rating agencies, analysts and stakeholders to change their minds and go in the right direction ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/05/26/semantic-web-reports-for-corporate-social-responsability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From OWL to Plone</title>
		<link>http://www.akasig.org/2005/04/28/from-owl-to-plone/</link>
		<comments>http://www.akasig.org/2005/04/28/from-owl-to-plone/#comments</comments>
		<pubDate>Thu, 28 Apr 2005 15:10:00 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Web sémantique]]></category>
		<category><![CDATA[Zope & Plone]]></category>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=612</guid>
		<description><![CDATA[I found a working path to transform an OWL ontology into a working Plone content-type. Here is my recipe :

Choose any existing OWL ontology
With Protege equipped with its OWL plugin, create a new project from your OWL file.
Still within Protege, with the help of its UML plugin, convert your OWL-Protege project into a UML classes [...]]]></description>
			<content:encoded><![CDATA[<p>I found a working path to transform an OWL ontology into a working <a href="http://www.plone.org/">Plone</a> content-type. Here is my recipe :</p>
<ol>
<li>Choose <a href="http://protege.stanford.edu/plugins/owl/ontologies.html">any existing OWL ontology</a></li>
<li>With <a href="http://protege.stanford.edu/">Protege</a> equipped with <a href="http://protege.stanford.edu/plugins/owl/">its OWL plugin</a>, create a new project from your OWL file.</li>
<li>Still within Protege, with the help of <a href="http://protege.stanford.edu/plugins/uml/">its UML plugin</a>, convert your OWL-Protege project into a UML classes project. You get an XMI file.</li>
<li>Load this XMI file into an UML project with <a href="http://www.gentleware.com/">Poseidon</a>. Save this project under the .zuml Poseidon format.</li>
<li>From poseidon, export your classes a new xmi file. It will be Plone-friendly.</li>
<li>With a text editor, delete some accentuated characters that Poseidon might have added to your file (for example, the Frenchy Poseidon adds a badly accentuated &#8220;Modele sans titre&#8221; attribute into your XMI) because the next step won&#8217;t appreciate them</li>
<li><em>python Archgenxml.py -o YourProduct yourprojectfile.xmi </em>turns your XMI file into a valid Plone product. Requires <a href="http://www.plone.org/">Plone</a> and <a href="http://plone.org/documentation/archetypes/download">Archetypes</a> (see <a href="http://plone.org/documentation/archetypes/">doc</a>) latest stable version plus <a href="http://plone.org/documentation/archetypes/archgenxml-manual/documentation/tutorial/archgenxml-getting-started">ArchgenXML</a> head from the <a href="http://tortoisesvn.tigris.org/">subversion</a> <a href="http://svn.plone.org/archetypes/ArchGenXML/trunk/">repository</a>.</li>
<li>Launch your Plone instance and install YourProduct as a new product from your Plone control panel. Enjoy YourProduct !</li>
<li>eventually populate it with an appropriate <a href="http://plone.org/documentation/archetypes/ArchetypesDeveloperGuide/index_html#marshaller-im-export-of-archetypes-content">marshaller</a>.</li>
</ol>
<p>Now you are not far from using <a href="http://sig.levillage.org/?p=554">Plone as a semantic aggregator</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/04/28/from-owl-to-plone/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Une voix en vrac</title>
		<link>http://www.akasig.org/2005/04/05/une-voix-en-vrac/</link>
		<comments>http://www.akasig.org/2005/04/05/une-voix-en-vrac/#comments</comments>
		<pubDate>Tue, 05 Apr 2005 14:15:44 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Humains en réseaux]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=607</guid>
		<description><![CDATA[La philosophie des carnets web, c&#8217;est d&#8217;écrire &#8220;avec sa vraie voix&#8220;. Gilles (celui qui est en vrac), fait encore mieux : il parle sur son carnet, avec sa vraie voix. Voici donc le premier carnettier francophone (que je connaisse) qui se met au screencasting, grâce au logiciel Camtasia. Du côté anglo-saxon, c&#8217;est Jon Udell qui [...]]]></description>
			<content:encoded><![CDATA[<p>La philosophie des carnets web, c&#8217;est d&#8217;écrire &#8220;avec sa <a href="http://sig.levillage.org/?p=116">vraie voix</a>&#8220;. Gilles (celui qui est <a href="http://gillesenvrac.ca/carnet/">en vrac</a>), <a href="http://gillesenvrac.ca/carnet/2005/04/camstasia-pour-la-formation-des-usagers/">fait encore mieux</a> : <a href="http://www.communautaire.qc.ca/carnets/media/carnet1.html">il <strong>parle</strong> sur son carnet, avec sa vraie voix</a>. Voici donc le premier carnettier francophone (que je connaisse) qui se met au <a href="http://conforme.phidji.com/2005/02/screencasting.asp">screencasting</a>, grâce au logiciel <a href="http://www.techsmith.com/products/studio/default.asp">Camtasia</a>. Du côté anglo-saxon, c&#8217;est <a href="http://weblog.infoworld.com/udell/">Jon Udell</a> qui a ouvert la voi<strike>x</strike>e du screencasting. Ne loupez pas l&#8217;excellente <a href="http://weblog.infoworld.com/udell/2005/01/22.html">démonstration de la wikipedia en screencasting par Jon Udell</a>.<br />
Gilles, tu as une voix délicieusement québécoise !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/04/05/une-voix-en-vrac/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
