<?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>AkaSig &#187; Développement</title>
	<atom:link href="http://www.akasig.org/category/informatique/developpement/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.akasig.org</link>
	<description>Innover, servir, entreprendre.</description>
	<lastBuildDate>Mon, 15 Feb 2010 11:19:32 +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>The &#8220;social horror stories&#8221; prize</title>
		<link>http://www.akasig.org/2009/12/11/the-social-horror-stories-prize/</link>
		<comments>http://www.akasig.org/2009/12/11/the-social-horror-stories-prize/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 22:37:17 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Affaires non classees]]></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>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=1107</guid>
		<description><![CDATA[&#8220;Technologie et Innovation Sociale&#8221; is a French initiative which aims at having more technology-based solutions available to solve major social issues. It&#8217;s a would-be incubator for hightech social enterprises. As a first step, Technologie et Innovation Sociale wants to identify those major social issues : which ones are real stakes ? which ones are to [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<a href="http://www.slideshare.net/ericchatry/technologie-innovation-sociale-2492502">Technologie et Innovation Sociale</a>&#8221; is a French initiative which aims at having more technology-based solutions available to solve major social issues. It&#8217;s a would-be incubator for hightech social enterprises. As a first step, <em>Technologie et Innovation Sociale</em> wants to identify those major social issues : which ones are real stakes ? which ones are to be prioritized ? which ones are the most urgent ones ? How to proceed ? If plain surveys are to be published on the Internet, then we will identify social issues for geeks and internauts, for the information haves. What about the information have-nots ? How to leverage the power of Web 2.0 technologies and have online volunteers sort, classify and prioritize those issues ? How to gain some legitimity and to preserve some representativeness ? Here are my suggestions.</p>
<p>Let&#8217;s launch a &#8220;social horror stories&#8221; prize and website. It&#8217;s an open and collaborative website where any user can register and publish any social horror story : <em>&#8220;John Doe is a bank employee. He is also homeless. This week, it&#8217;s snowing and it&#8217;s -12°C at night. The homeless shelters are full and John Doe could not find any bed yesterday. It was so cold he stuffed his coat with personal papers before trying to sleep in the park. He died of hypothermia. One of the papers he was using in his coat was his last last paysheet. Read the full story &#8220;Homeless dying without bonus&#8221; in the Coldcity New Tribune Dec 10, 2009.&#8221;</em> The more they propose such stories the higher their &#8220;storytelling&#8221; score. <em><br />
</em></p>
<p>The story (and any data published on the site) is published under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">share-alike Creative Commons license</a>. All content and data can be fully downloaded, copied, aggregated, analyzed, criticized and redistributed by anyone under the same license. Hence users get the guarantee that their contributions are kept from being owned and controlled by some editors for their sole interest.</p>
<p>The user adds any available reference in order to check the facts.</p>
<p>Further contributors read this story as a blog post. They tag this story with freely chosen keywords (selecting from or added to a search-as-you-type list) :  <em>&#8220;homeless, weather, death, cold, bank, shelters, urgent, revolting, astonishing, fact-checked, important, life-or-death, so-modern, poverty, &#8230;&#8221;</em>. The more they tag, the higher their &#8220;tagging&#8221; score. Some tags are worth a higher increase in score : these are tags selected by the site editor for special purposes (<em>&#8220;worth-donating-my-money, worth-petitioning, worth-more-attention-by-the-government, </em><em>illustrative-of-a-very-common-issue, unsolvable, </em><em>&#8230;&#8221;</em>).</p>
<p>The story itself can be edited by any reader (wikipedia-style), and the record of subsequent changes are being kept and displayed with a click. Comments allow users to self-regulate these changes through discussion. If needed, controversial stories can be locked by a group of power-contributors and displayed as such, following a (hopefully rare) vote by commenters about the &#8220;controversiness&#8221; of editions for this stories by commenters.</p>
<p>The site proeminently displays a list of tags : &#8220;<em>urgent, important, incredible, imaginary, cheesy, &#8230;</em>&#8220;. Clicking on the &#8220;<em>revolting</em>&#8221; tag (or any other tag) displays an (<em>almost</em>-randomly-picked) pair of stories sharing this tag. The user is presented with a simple question : <em>In your opinion, which one of these stories and the underlying social issues they illustrate is the most &#8220;revolting&#8221; one ?</em> The user clicks their answer and is given another pair of horror storie/social issues to compare in a given dimension. The more they click such story-fights, the higher their &#8220;ranking&#8221; score. Stories are also ranked along tags according to the number of pair-fights they win.</p>
<p>The higher a story gets ranked on a tag, the higher the &#8220;tagging&#8221; score of the person who put this tag on the story and the higher the &#8220;storytelling&#8221; score of the authors of this story.</p>
<p>The site is invite-only. Each user has a single sponsor (the person who sent them the invitation). The higher a score for a person (+1), the higher the score for their sponsor (+1/2), the higher the score of the sponsor of this sponsor (+1/4), etc. This multi-level scoring gives a strong incentive for users to recruit good storytellers, good rankers, good recruiters and so on.</p>
<p>What can are these scores used for ? First, it&#8217;s like a game : there is a hall of fame for best taggers, best storytellers, best recruiters, best rankers, best overall user and so on. In each category and for the overall ranking, the top best gamers/users win the prize. What&#8217;s the prize ? It&#8217;s money of course !</p>
<p>Not usual money users can save in their bank accounts though. It&#8217;s money donated to the NGO of their choice (proabably selected in a huge pre-filtered list). There will be money donated to some NGOs. But which ones ? The winner choose.</p>
<p>How much money is to be donated ? There is a jauge on the home page displaying the amount of donation at stake. The initial amount may be low. But any user can donate to the game (paypal or similar micropayment systems). Corporate sponsors can bid on special category prizes (check the &#8220;Hilton Hotels prize for the most revolting homeless story&#8221;). Philanthropists money is donated to the NGOs picked by the users.</p>
<p>In the end what do we get ? Much fun. Better awareness and illustration of a wide variety of more or less common and revolting social issues. A huge and free (as in &#8220;free speech&#8221;, not as in &#8220;free beer&#8221;) base of content and data which can be used as a rich and stimulating source of inspiration for would-be social entrepreneurs and social innovators. Some insights about the perception people have of social issues and topics. Further data analysis can nourish a democratic debate about these issues and their relative importance and prioritization by public policy makers and social innovators. The site can act as a specialized social news aggregators platform as well as an advertising platform for social innovators proposing solutions in their respective field of action (along the corresponding tag).</p>
<p>That&#8217;s it.</p>
<p>At the moment, my best source of inspiration for a somehow similar implementation of such ideas (beyond the wikipedia) is <a href="http://stackoverflow.com/">Stack Overflow</a> (which is still far from implementing all aspects of this though).</p>
<p>In fact I first had this whole idea for <a href="http://www.wecena.com/">Wecena</a>, my own social venture. I think such a scheme could be used to have volunteer contributors collaboratively rank and analyze the potential social impact of nonprofit projects. This would not be a &#8220;social horror stories prize&#8221; but a &#8220;social innovation project&#8221; prize in my very case. Some sort of a collaborative alternative to <a href="http://en.wikipedia.org/wiki/Social_Return_on_Investment">Social Return On Investment (SROI) analysis</a>. And the multilevel-scoring-coupled-with-donations scheme could be used by me in order to recruit additional IT corporations as philanthropists for the nonprofits organizations I serve. I remixed my initial idea for the purpose of stimulating the conversation at Technologie et Innovation Solidaire. I hope this can be useful.</p>
<p>Please tell me what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/12/11/the-social-horror-stories-prize/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>8</slash:comments>
		</item>
		<item>
		<title>La téléconférence du geek</title>
		<link>http://www.akasig.org/2009/11/10/la-teleconference-du-geek/</link>
		<comments>http://www.akasig.org/2009/11/10/la-teleconference-du-geek/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 13:11:19 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[le wecena]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=1098</guid>
		<description><![CDATA[Une grande SSII a enfin signé avec l&#8217;une des associations qui bénéficie du wecena. Le communiqué de presse est prêt. L&#8217;appel au volontariat destiné aux 4000 salarié est prêt à être envoyé. Il ne me manquait plus qu&#8217;une chose pour faire nickel : avoir une solution de téléconférence gratuite pour accueillir les volontaires à distance, [...]]]></description>
			<content:encoded><![CDATA[<p>Une grande SSII a enfin signé avec l&#8217;une des associations qui bénéficie du wecena. Le communiqué de presse est prêt. L&#8217;appel au volontariat destiné aux 4000 salarié est prêt à être envoyé. Il ne me manquait plus qu&#8217;une chose pour faire nickel : avoir une solution de téléconférence gratuite pour accueillir les volontaires à distance, répondre aux questions des personnes intéressées (managers, volontaires en puissance, etc.). J&#8217;ai donc dû mettre au point un système de téléconférence spécial geek dont j&#8217;espère bientôt faire la démo. Voici mes notes de travail, prenez-en soin !</p>
<p>Sous ubuntu 9.04, j&#8217;ai installé webcamstudio, téléchargeable via http://www.ws4gl.org/, installable depuis un dépôt ou bien depuis les sources, facile à compiler avec NetBeans sous Ubuntu (installer le paquet NetBeans). Webcamstudio est un logiciel en Java qui permet de créer une webcam virtuelle qui peut capture l&#8217;image de votre bureau, des animations, du texte, un canal IRC, une vidéo Youtube, le flux video d&#8217;une vraie webcam branchée sur le PC&#8230;<br />
Mettre la sortie en 320&#215;240 pour éviter tout risque d&#8217;incompatibilité avec le site qui va diffuser la vidéo (ustream.tv par exemple).<br />
WCS créé un device &#8220;Video loopback&#8221; de type &#8220;Video 4 Linux&#8221; (et pas Video 4 Linux 2).<br />
Lancer l&#8217;utilitaire gstreamer-properties pour vérifier que ubuntu arrive à lire cette webcam et informe ubuntu de la webcam par défaut. Video / entrée / Video for linux 1, device = Video Loopback 1. Faire un test pour vérifier que ubuntu détecte bien la webcam virtuelle créée par webcamstudio.<br />
Aller sur ustream.tv et y créer son compte utilisateur.<br />
Sur le site de webcamstudio, il y a une explication pour savoir comment faire en sorte que flashplayer accepte d&#8217;utiliser comme il se doit la webcam virtuelle : fait aller sur un site macromedia.com pour y régler les paramètres de sécurité du flashplayer de votre navigateur : &#8220;toujours autoriser www.ustream.tv, cdn1.ustream.tv&#8221; (et aussi quantserve. com ?).<br />
Puis se logger dans ustream et aller dans l&#8217;interface de broadcast. Y sélectionner son périphérique vidéo (video loopback) et son périphérique audio (&#8220;linux microphone&#8221;).<br />
Ensuite, il y a un certain nombre de réglages à faire pour avoir du son diffusé. On lance donc l&#8217;utilitaire &#8220;pavucontrol&#8221; de pulseaudio sur ubuntu (à partir de la 9.04). Cet utilitaire permet de :</p>
<ul>
<li>régler chaque périphérique audio d&#8217;entrée (les sources) et de sortie (les sinks)</li>
<li>régler aussi les &#8220;moniteurs&#8221; qui sont des genres de périphériques virtuels créés par pulseaudio ; notamment, pulseaudio créée un &#8220;moniteur&#8221; associé à votre périphérique de sortie son (vos hauts-parleurs) ; ce moniteur se comporte comme une sorte de microphone virtuel qui serait branché sur vos hauts-parleurs et vous permet de capturer tout son émis par votre PC pour pouvoir l&#8217;enregistrer à nouveau ou le diffuser en streaming par exemple,</li>
<li>relier chaque logiciel qui produit du son (lecture) ou en capture (enregistrement) à un périphérique de sortie son de son choix, y compris aux &#8220;moniteurs&#8221; ; en l&#8217;occurence avec une seule carte son en sortie (pas de casque audio USB), vous n&#8217;avez qu&#8217;un seul choix pour les logiciels de lecture. Par contre, pour les logiciels de capture, vous pouvez choisir de capturer ce qui entre dans le microphone ou bien ce qui entre dans le moniteur de la sortie de votre carte son, à savoir ce qui sort de la carte son&#8230; Vous suivez ? J&#8217;explique&#8230;</li>
</ul>
<p>En pratique, le périphérique de sortie par défaut, c&#8217;est la sortie carte son (un casque dans mon cas). Et le périphérique d&#8217;entrée par défaut, c&#8217;est mon microphone du casque audio. Je mets en sourdine le microphone de ma webcam.<br />
De plus, le site ustream.tv qui diffuse votre video et votre son est utilisé via votre navigateur web, firefox dans mon cas. Firefox apparaît donc dans pavucontrol de 2 manières :</p>
<ol>
<li>en tant que logiciel de lecture (c&#8217;est le son joué par firefox), je le relie à la sortie de ma carte son mais je le mets en sourdine le temps de mon broadcast (sinon, ça pourrait faire de l&#8217;écho).</li>
<li>mais aussi et surtout en tant que logiciel d&#8217;enregistrement (c&#8217;est l&#8217;applet flash de ustream.tv qui capture mon son) que je relie au moniteur pulseaudio de ma carte son de manière à enregistrer tout le son qui sort de ma carte et pas seulement ma voix captée par mon microphone mais aussi les MP3 joués en local, les conversations téléphoniques via un softphone, etc.</li>
</ol>
<p>Le problème, c&#8217;est que ma voix qui entre dans le microphone ne ressort pas dans la sortie de ma carte son. Sinon, ça me ferait de l&#8217;écho dans les oreilles. Donc ma voix n&#8217;est plus capturée par l&#8217;applet flash de firefox/ustream puisque celle-ci est maintenant associée au moniteur de la sortie son.<br />
Pour contourner ce problème, on créé une loopback audio grâce à 2 utilitaires de pulseaudio. Ouvrez une fenêtre de terminal et tapez-y parec | pacat.<br />
parec apparaît dans pavucontrol en tant que logiciel de capture son à qui on demande de capter l&#8217;entrée son du microphone. Il envoie ce son (ma voix) vers pacat via un pipe. pacat, lui, apparaît dans pavucontrol comme logiciel de lecture. Et il envoie forcément sa sortie (ma voix) vers la carte son. Donc ya de l&#8217;écho. Tant pis, on diminue le son dans le casque (physiquement), si ça gêne.<br />
Mais on obtient le résultat recherché : à savoir permettre à firefox/ustream de capturer non seulement ma voix mais également tout ce qui sort des logiciels audio du PC.<br />
Maintenant, l&#8217;audioconférence. Pour cela, j&#8217;utilise un softphone, en l&#8217;occurence Twinkle (ou parfois Ekiga). J&#8217;ai un compte SIP chez un opérateur de voix sur IP. Je recommande ippi.fr, c&#8217;est gratuit. Ippi.fr offre (gratuitement via SIP) des salles d&#8217;audioconférence. J&#8217;appelle donc avec twinkle cette salle d&#8217;audioconférence. Twinkle apparaît dans pavucontrol à la fois comme logiciel de lecture et comme logiciel d&#8217;enregistrement. En tant que logiciel d&#8217;enregistrement, je lui demande simplement d&#8217;enregistrer ma voix. En tant que logiciel de lecture, je lui demande juste de faire son travail, c&#8217;est-à-dire d&#8217;envoyer le son produit par les interlocuteurs de l&#8217;audioconférence vers la sortie de ma carte son, de manière à ce qu&#8217;il puisse être capté, comme ma voix à travers le moniteur pulseaudio de cette sortie, sur lequel est branché la capture audio de firefox/ustream.<br />
Et voila.<br />
Les inconvénients actuels :</p>
<ul>
<li>ça bouffe un max de CPU tout ça : twinkle, webcamstudio, firefox avec l&#8217;applet flash de ustream, pulseaudio en plus. C&#8217;est tout juste tenable sur mon laptop dual core 2&#215;1,2 GHz. On peut rendre les choses vivables grâce à un ajustement des priorités via &#8220;sudo htop&#8221;. pulseaudio tourne d&#8217;office à haute priorité (-11). Je mets manuellement twinkle à -2 (prioritaire). Et firefox à -1 et on laisse webcamstudio à 0. Toutes les applis non prioritaires (applets Gnome par exemple) peuvent être passées à 1 (non prioritaires). Faute de ce type de réglages, l&#8217;audioconférence peut être ingérable ou la capture sur ustream de trop mauvaise qualité (y compris des pertes de trames entraînant une désynchronisation de la voix et de l&#8217;image si on demande à ustream d&#8217;enregistrer le broadcast pour la postérité). Autre possibilité de contournement : faire tourner le tout sur un PC plus puissant. Autre possibilité de contournement, faire une conférence main libre avec un téléphone normal. On évite ainsi le softphone mais le son capté le sera via un microphone près du téléphone.</li>
<li>j&#8217;entends de l&#8217;écho quand je parle (à cause de parec|pacat). Possibilités de contournement : est-ce qu&#8217;utiliser le module-loopback de pulseaudio règlerait ce problème (pacmd load-module module-loopback) ? a priori non. Autre possibilité de contournement : le téléphone main libre à côté du PC. Autre possibilité : baisser le son du casque quand je parle et le remonter quand j&#8217;ai fini de parler. Autre possibilité : trouver un moyen pour dire à pulseaudio qu&#8217;un logiciel de capture devrait combiner 2 périphériques d&#8217;entrées au lieu d&#8217;un seul : le microphone qui capte ma voix et le moniteur de la sortie son qui ne capterait plus ma voix (on se passerait de parec|pacat).</li>
<li>ma webcam est une caméra sur batterie, il faut que je pense à la brancher sur secteur sinon&#8230; elle se vide.</li>
<li>il faudrait voir si on ne peut pas diffuser une meilleure qualité d&#8217;image (640&#215;480) et ce que ça implique en terme de CPU.</li>
</ul>
<p>Au final, je me dis qu&#8217;il faut que je remette la main sur mon téléphone SIP matériel (Gigaset de Siemens) et ça simplifera mon problème de CPU. Mais ça ne donne pas une solution &#8220;portable&#8221;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/11/10/la-teleconference-du-geek/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to record VoIP calls from your PC ?</title>
		<link>http://www.akasig.org/2009/07/29/how-to-record-voip-calls-from-your-pc/</link>
		<comments>http://www.akasig.org/2009/07/29/how-to-record-voip-calls-from-your-pc/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 07:51:03 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[My hacks]]></category>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=1085</guid>
		<description><![CDATA[Beyond having low and flat rates, beyond allowing mobility without a mobile phone, voice-over-IP has another advantage : it allows calls to be recorded. Here is how to proceed (assuming you are geeky enough&#8230;).
For instance, this week, I could not physically join an interesting meeting between French NGO leaders and IT professionnals considering how to [...]]]></description>
			<content:encoded><![CDATA[<p>Beyond having low and flat rates, beyond allowing mobility without a mobile phone, voice-over-IP has another advantage : it allows calls to be recorded. Here is how to proceed (assuming you are geeky enough&#8230;).</p>
<p>For instance, this week, I could not physically join <a href="http://groups.google.fr/group/informethique/web/prsentation">an interesting meeting between French NGO leaders and IT professionnals considering how to best volunteer for these NGOs</a>. So I gave the organizer of the meeting a VoIP phone (Siemens Gigaset) and asked him to call the Asterisk-powered SIP call conference system our nonprofit has (thank you Fred and JML  for this !). It allowed me to join the meeting as a distant caller and&#8230; to record a big MP3 file of the 3-hours long discussion.</p>
<p>For recording this voice-over-IP conference, here is my setup. I was calling from a linux PC, 2GB of RAM and a great free software SIP-compatible softphone called <a href="http://www.twinklephone.com/">Twinkle</a> (greater than <a href="http://www.ekiga.org/">Ekiga</a> IMHO). My voice-over-IP provider was our Asterisk server. I could have used any other free SIP provider, such as ippi. <a href="http://www.ippi.fr/">Ippi is great and I am a happy customer of their service.</a></p>
<p>I was also running <a href="http://www.wireshark.org/">the Wireshark packet sniffer</a> as root. After the call, I had to post-process the VoIP packets Wireshark captured. Wireshark decoded them and extracted the audio content of the conversation. Then I used <a href="http://audacity.sourceforge.net/">Audacity</a> to normalize, level and compress the audio and to save it as a big podcast-ready MP3 file.</p>
<p>The tricky parts :</p>
<p>- The Siemens Gigaset can&#8217;t (easily ?) be configured to call an SIP address which does not have the same domain as the SIP account it is using. For instance, if the audioconference system is at sip:conference@sipprovider.org then you&#8217;d better configure the phone to use a sip:mygigaset@sipprovider.org account rather than a sip:mygigaset@anotherprovider.org Too bad&#8230; :(</p>
<p>- You should warn the participants they are being recorded. Not only can this be required by your local laws but it also gives them another incentive to think of speaking close to the phone which is recording them in the meeting room.</p>
<p>- During the conversation, people in the meeting room would sometimes forget the presence of the phone and speak too far from its microphone. Hence I had to say &#8220;Can&#8217;t hear you !&#8221; from time to time and participants would take the phone in their hand as if it were a microphone. Local participants (in the meeting room) would even call the distant participants &#8220;the phone&#8221; and say &#8220;Hello, phone, how are you ?&#8221; and stuff like that. It was a bit as if the phone was yet another participant speakers had to take into their hand in order to be heard and recorded. Quite funny. Having the phone close to the speaker is also a matter of discipline and habit for the meeting organizer.</p>
<p>- Distant participants like me would use the &#8220;mute&#8221; feature of  their local (soft-) phone so that they can&#8217;t be heard when not talking, so that there is less background noise in the conversation.</p>
<p>- I would have preferred to have at least one local participant available in a text-based chatroom (think IRC channel) or at least in some instant-messaging system. This would have allowed me to remind the phone has to be kept close to the current speaker and stuff like that without having to loudly say &#8220;Can&#8217;t hear you&#8221;. Unfortunately, the only IM-available participant was the main organizer who quickly forgot his screen and keyboard so that he could focus on the discussion going on.</p>
<p>- A 3-hours call required a lot of RAM for wireshark, even though the captured packets were being saved on the hard-drive ; when post-processing the packets, I had to split the session into 4 smaller parts so that wireshark would not crash when doing its audio extraction.</p>
<p>- When post-processing one of these smaller packet captures, wireshark would sometimes not detect the accurate nature of the packets : instead of seeing them as Real-Time Protocol (RTP) packets which they indeed were, it detected them a &#8220;OICQ&#8221; packets. So I had to force wireshark into considering them as RTP files (using its &#8220;Decode&#8230;&#8221; command).</p>
<p>- In order to have wireshark decode and save an audio file from the RTP streams, the command to be used is &#8220;RTP / Show all streams&#8221; from its &#8220;Statistics&#8221; menu. Then you use the &#8220;Analyze&#8221; button and then the &#8220;Save Payload&#8221; button. I had to select the &#8220;.raw&#8221; (vs. &#8220;.au&#8221;) format for the audio file because of the codec used by the VoIP phones.</p>
<p>- When saving the audio file, I decided to save distinct files for the forward (my voice, sent from my softphone to the audioconference service) and reversed stream (the meeting voices, sent from the audioconference service to my softphone). This allows distinct and finer audio postprocessing (the audio levels were different).</p>
<p>- In audacity, I chose to first normalize the audio tracks, then level them (it adjusts the audio level when the speaker changes or talks to far from the phone) then audio-compress them a bit. I would then merge the parts and tracks into a single mono audio file. Stereo does not make much sense in the case of a many-participants call but can be useful if you record a 2-participants conversation.</p>
<p>That&#8217;s it. Now I have to finish the audio-postprocessing of my MP3 and find some place on the Net where to upload it for the participants. What do you think ? Do you have some tricks to share on this topic ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/07/29/how-to-record-voip-calls-from-your-pc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>1 million de salles d&#8217;attentes&#8230; pour la recherche scientifique</title>
		<link>http://www.akasig.org/2009/03/13/1-million-de-salles-dattentes-pour-la-recherche-scientifique/</link>
		<comments>http://www.akasig.org/2009/03/13/1-million-de-salles-dattentes-pour-la-recherche-scientifique/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 21:59:37 +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 hacks]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=935</guid>
		<description><![CDATA[Hier soir, je tchattais avec mon pote Yann. Comme à notre habitude, on échange nos idées farfelues du moment. Cette fois-ci, c&#8217;est mon tour. Qu&#8217;en pensez-vous ?
(22:37:13) Sig: si les 1 million de salle d&#8217;attente qui existent dans le monde accueillaient chacune un vieux PC à bout de souffle pour faire des calculs pour la [...]]]></description>
			<content:encoded><![CDATA[<p>Hier soir, je tchattais avec mon pote Yann. Comme à notre habitude, on échange nos idées farfelues du moment. Cette fois-ci, c&#8217;est mon tour. Qu&#8217;en pensez-vous ?</p>
<blockquote><p>(22:37:13) Sig: si les 1 million de salle d&#8217;attente qui existent dans le monde accueillaient chacune un vieux PC à bout de souffle pour faire des calculs pour la recherche scientifique<br />
(22:37:35) Sig: alors on pourrait accélérer la découverte de remèdes contre les maladies type Alzheimer et une trentaine d&#8217;autres maladies.<br />
(22:37:45) Yann: ok<br />
(22:37:50) Sig: Rien qu&#8217;en France, il y a environ 100.000 salles d&#8217;attente<br />
(22:38:15) Yann: et j&#8217;ai deja 1 PC a bout de souffle, pu ke 99 999 a trouver ;)<br />
(22:38:21) Sig: Or j&#8217;ai 40 vieux PC stockés chez moi et chez ma grand-mère ainsi qu&#8217;un système logiciel pour les contrôler à distance via le Net<br />
(22:38:33) Yann: Ok je capitule !<br />
(22:38:34) Sig: j&#8217;ai pas d&#8217;écran mais yen a pas besoin pour la recherche scientifique<br />
(22:38:42) Sig: :)<br />
(22:38:49) Sig: et l&#8217;idée de salle d&#8217;attente, c&#8217;est de dire :<br />
(22:39:06) Sig: vous voyez ce PC et la pile de tracts posée dessus, prenez-en un :<br />
(22:39:36) Yann: de tract ?<br />
(22:39:38) Sig: &#8221; Emmenez moi (le tract) chez un autre médecin/dentiste/salle d&#8217;attente pour qu&#8217;il puisse demander, lui aussi, son PC de recherche médical en allant sur http://&#8230;&#8221;<br />
(22:39:50) Yann: ok<br />
(22:39:51) Sig: l&#8217;idée est d&#8217;utiliser la salle d&#8217;attente comme lieu de viralité<br />
(22:40:02) Yann: ca marche bien ca deja !!!!!!<br />
(22:40:08) Sig: oui (rhumes&#8230;)<br />
(22:40:10) Sig: :)<br />
(22:40:13) Yann: oui ;)<br />
(22:40:28) Yann: (on n&#8217;a deja notre theme publicitaire ;o)  )<br />
(22:40:41) Sig: ensuite, les tracts peuvent inviter les gens à donner des vieux PC au projet ou à participer à la distribution<br />
(22:40:52) Sig: de vieux PC récupérés vers les nouvelles salels d&#8217;attente en demande.<br />
(22:40:59) Yann: ok<br />
(22:41:29) Sig: Enfin, dernier point, lorsque on peut récupérer des écrans, j&#8217;ajoute un logiciel sur le PC :<br />
(22:41:50) Sig: pour que les gens qui passent en moyenne 35 minutes dans la salle d&#8217;attente mettent leur cerveau au service de la recherche scientifique<br />
(22:42:03) Yann: ???<br />
(22:42:18) Yann: je ne suis plus la !<br />
(22:42:19) Sig: sur des projets sur le principe de galaxyzoo.org, clickworkers, foldit, stardust@home (tu iras voir galaxyzoo.org c&#8217;est super joli)<br />
(22:42:27) Sig: le principe de galaxyzoo :<br />
(22:42:48) Sig: on te montre une photo d&#8217;une galaxie jamais vue par l&#8217;être humain (tu es le premier car elle a été prise en photo par un téléscope robotisé)<br />
(22:42:52) Sig: et tu as 2 boutons :<br />
(22:43:02) Sig: bouton 1 : &#8220;elle tourne dans le sens des agiuilles d&#8217;une montre&#8221;<br />
(22:43:08) Sig: bouton 2 : &#8220;elle tourne dans l&#8217;autre sens&#8221;<br />
(22:43:30) Sig: des millions de clics permettent au labo d&#8217;astronomie d&#8217;Oxford de mieux connaître la création de l&#8217;univers<br />
(22:43:38) Yann: comment ?<br />
(22:43:42) Sig: ya pas mal d&#8217;autres projets qui fleurissent actuellement dans d&#8217;autres domaines scientifiques sur ce principe<br />
(22:43:44) Sig: comment :<br />
(22:43:54) Sig: certaines théories sur l&#8217;expansion de l&#8217;univers disent :<br />
(22:44:08) Sig: &#8220;il devrait y avoir 50% de galaxies qui tournent comme-ci et 50% comme ça&#8221;<br />
(22:44:20) Sig: et d&#8217;autres disent &#8220;non, 51% dans ce sens, et 49% dans l&#8217;autre sens&#8221;<br />
(22:44:43) Sig: ce projet permet d&#8217;invalider les théories fausses et d&#8217;avancer dans notre compréhension du passé et de l&#8217;avenir du cosmos&#8230; c bo. :)<br />
(22:44:52) Sig: il suffisait de compter :)<br />
(22:45:05) Yann: oui, bien vu :)<br />
(22:45:10) Yann: Mes comments :<br />
(22:45:14) Sig: oui<br />
(22:45:22) Yann: l&#8217;idee me plait !<br />
(22:45:26) Sig: ok<br />
(22:45:33) Yann: les pb ke j&#8217;anticipe :<br />
(22:45:53) Yann: PC en reseau ds cabinet medical = pb deontologie potentiel<br />
(22:46:03) Yann: du moins y aura des gens a penser ca<br />
(22:46:29) Yann: ensuite, l&#8217;installation  = tres time consuming !!!!!!<br />
(22:46:32) Sig: ok j&#8217;y avais pas pensé mais c&#8217;est une bonne remarque<br />
(22:46:36) Sig: (pour le pb de sécurité/déontologie)<br />
(22:46:45) Yann: et la maintenance aussi !<br />
(22:47:00) Sig: pour l&#8217;install et la maintenance, non aucun pb :<br />
(22:47:04) Sig: 100% automatisé !<br />
(22:47:13) Yann: j&#8217;te sens ds l&#8217;exces d&#8217;optimisme la non ?<br />
(22:47:24) Sig: et si le pb est trop grave pour être traité en automatique, il faut que quelqu&#8217;un (bénévole) vienne remplacer le PC par un autre<br />
(22:47:47) Sig: non non j&#8217;utilise un logiciel fait pour gérer de manière automatique des milliers de PC dans des centres de recherche.<br />
(22:47:56) Yann: tu ne va pas automatiser le pc qu&#8217;il faut physiquement deposer au sol ds 100 000 salles d&#8217;attente !!!!<br />
(22:48:14) Sig: non le transport et le branchement restent à la charge des bénévoles<br />
(22:48:26) Yann: ne néglige pas cette contrainte, elle estr forte&#8230;.mais&#8230;.<br />
(22:48:29) Sig: oui<br />
(22:48:39) Yann: C ds les obstacvle qu&#8217;on trouves d&#8217;autres idees<br />
(22:49:07) Yann: Ca me parait hyper lourd a gerer (rien que l&#8217;aspect physique et maintenance sur place qd necessaire)<br />
(22:49:14) Yann: par contre ca me donne 1 idee<br />
(22:49:23) Yann: C tellement lourd comme contrainte<br />
(22:49:33) Yann: qu&#8217;il faut 1 partenaire serieux !<br />
(22:49:38) Yann: style la secu !!!!<br />
(22:49:52) Yann: t&#8217;imagine en terme d&#8217;image !!!!!<br />
(22:49:57) Sig: mmm&#8230; la sécu&#8230; pkoi pa<br />
(22:50:12) Yann: ou autre organisme, type mutuelles&#8230;<br />
(22:50:21) Yann: ou pfizer ou Rhone poulenc&#8230;.<br />
(22:50:28) Yann: le privé du cabinet medical koi !<br />
(22:50:38) Sig: oui je pensais aux labos pharmaceutiques<br />
(22:50:46) Yann: bingo<br />
(22:50:54) Sig: dans le cadre d&#8217;un mécénat alors ?<br />
(22:51:02) Yann: sauf que eux vont vouloir mettre le nez ds le soft<br />
(22:51:05) Yann: (oui)<br />
(22:51:12) Yann: afficher de la pub etc<br />
(22:51:21) Yann: et la on a un pb de deontologie potentiel !<br />
(22:51:30) Sig: ils ne peuvent pas afficher de la pub pour des produits c&#8217;est interdit dans les salles d&#8217;attente<br />
(22:51:31) Yann: mais ca me parait faisable<br />
(22:51:39) Yann: pffffff<br />
(22:51:55) Sig: mais ils peuvent afficher de la communication sur leur entreprise (pas commercial mais &#8220;communication institutionnelle&#8221;)<br />
(22:51:55) Yann: les pub de cigarettes aussi C interdit ds les kfé !<br />
(22:52:10) Yann: C pareil !<br />
(22:52:25) Sig: pas du point de vue du conseil de l&#8217;ordre, je pense.<br />
(22:52:29) Yann: C juste le credit d&#8217;impot qui change ;)<br />
(22:52:34) Sig: oui<br />
(22:52:55) Yann: je suis ok avec toi : C moralement acceptable pr des mecs ds des bureaux<br />
(22:53:25) Yann: mais C pareil, ds le meme but : vendre a la prolo de la salle d&#8217;attente du doliprane plutot que du generique paracetamol !<br />
(22:53:32) Sig: yes<br />
(22:53:46) Yann: je n&#8217;aime pas ca, mais j&#8217;suis lucide !<br />
(22:54:03) Yann: bref : l&#8217;idee me parait bonne des le depart ;)<br />
(22:54:12) Sig: ok :)<br />
(22:54:31) Yann: autre &#8220;pb&#8221; : il faut travailler au moins 1 an a tps plein pr lancer un truc pareil !<br />
(22:54:39) Yann: t&#8217;as 1 an devant toi toi ?<br />
(22:54:49) Sig: je vois pas le besoin  de travailler un an dessus<br />
(22:55:00) Sig: &#8220;yaka&#8221; trouver un médecin prêt à expérimenter<br />
(22:55:07) Yann: les contacts, ajuster les idées etc ???<br />
(22:55:36) Yann: C un projet a part entiere ton truc la !<br />
(22:55:48) Yann: limite faut monter 1 asso<br />
(22:55:57) Yann: dc statut a rediger etc<br />
(22:56:07) Yann: j&#8217;arrive meme pas a faire mes cpte !!!<br />
(22:56:08) Sig: fo voir comment ça se goupille mais, à la limite, ça pourrait se faire &#8220;à la mode open source&#8221;, avec peu de moyens et sans structure juridique<br />
(22:56:20) Yann: la le pro C toi !<br />
(22:56:24) Yann: je te fais confiance !<br />
(22:56:31) Sig: en pratique, la question qui compte, c&#8217;est :<br />
(22:57:02) Sig: est-ce que tu connais un heureux propriétaire de salle d&#8217;attente que tu pourrais convaincre d&#8217;accueillir un PC connecté à son ADSL pour la recherche scientifique ?<br />
(22:57:19) Yann: reponse immediate : non !<br />
(22:57:32) Yann: mais suis optimiste : j&#8217;peux trouver oui ;)<br />
(22:57:38) Sig: :)<br />
(22:57:59) Sig: de mon côté, je vais en causer avec notre pédiatre qui est très impliqué dans des assos<br />
(22:58:16) Yann: j&#8217;vois mon doc fin mars (en pcipe si j&#8217;y pense)<br />
(22:58:17) Sig: et sinon, j&#8217;essaierai avec une copine orthophoniste<br />
(22:58:38) Yann: et moi je garde ca en tete, on connais tous forcement des docs !<br />
(22:58:51) Sig: en attendant, fo que je te laisse pour aller contrôler la fin d&#8217;installation automatique de 2 PC qui tournent depuis tout à l&#8217;heure dans ma cuisine<br />
(22:59:03) Yann: j&#8217;crois que la maman du copain de ma soeur est pediatre<br />
(22:59:11) Sig: eh eh :)<br />
(22:59:19) Sig: nous vivons dans un monde de salles d&#8217;attente !<br />
(22:59:53) Yann: &#8220;si la maison du bonheur existait, la plus grande piece serait la salle d&#8217;attente&#8221;<br />
(22:59:58) Yann: de PasDeMoi<br />
(23:00:02) Sig: ok<br />
(23:01:05) Yann: allé a +<br />
(23:01:13) Sig: a+</p></blockquote>
<p>Qu&#8217;en pensez-vous ? Vous connaissez une salle d&#8217;attente accueillante pour un de mes vieux PC ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2009/03/13/1-million-de-salles-dattentes-pour-la-recherche-scientifique/feed/</wfw:commentRss>
		<slash:comments>5</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>Wow, 10 millions de dollar pour rendre le monde meilleur</title>
		<link>http://www.akasig.org/2008/09/25/wow-10-millions-de-dollar-pour-rendre-le-monde-meilleur/</link>
		<comments>http://www.akasig.org/2008/09/25/wow-10-millions-de-dollar-pour-rendre-le-monde-meilleur/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 16:28:19 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Affaires non classees]]></category>
		<category><![CDATA[Développement]]></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[Mécénat]]></category>
		<category><![CDATA[le wecena]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=775</guid>
		<description><![CDATA[C&#8217;est Noël ? C&#8217;est la surenchère ? Nokia promet 150 000 dollars dans un concours d&#8217;idées d&#8217;applications innovantes et solidaires. Et voilà-t-y pas que Google en promet 10 millions, pour réaliser les cinq de vos projets qui sont les plus susceptibles de rendre le monde meilleur. De quoi être époustouflifié même quand on sait que [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est Noël ? C&#8217;est la surenchère ? Nokia promet <a href="http://www.akasig.org/2008/09/24/150-000-dollars-pour-linnovation-technologique-a-vocation-sociale-ou-environnementale/">150 000 dollars dans un concours d&#8217;idées d&#8217;applications innovantes et solidaires</a>. Et voilà-t-y pas que <a href="http://www.project10tothe100.com/">Google en promet 10 millions, pour réaliser les cinq de vos projets qui sont les plus susceptibles de rendre le monde meilleur</a>. De quoi être <em>époustouflifié</em> même quand on sait que la X-Prize foundation envisage <a href="http://blog.longnow.org/2008/09/15/peter-diamandis-long-term-x-prizes/">des concours d&#8217;innovations avec des récompenses allant de 100 millions à 1 milliard de dollars</a> ! Google est d&#8217;ailleurs un membre actif des concours de cette fondation.</p>
<p>Allez, avec un peu de chances, j&#8217;aurai peut-être le plaisir d&#8217;offrir <a href="http://www.akasig.org/2008/07/14/appel-aprojets-informatiques-dinteret-general/">un lot de consolation</a> à quelques innovateurs solidaires français ? Quelques équivalents-temps plein d&#8217;ingénieurs et consultants informaticiens, gratuitement, pour votre projet d&#8217;intérêt général, ça vous tente ?</p>
<p>Au passage, je remercie Monsieur D., <span style="text-decoration: line-through;">de Chambéry</span> d&#8217;Albertville, qui a bien voulu me signaler cette initiative de Google que j&#8217;avais loupée. Monsieur D. est parfois timide alors il m&#8217;avait contacté par mail plutôt que via un commentaire sur ce blog. ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2008/09/25/wow-10-millions-de-dollar-pour-rendre-le-monde-meilleur/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>150 000 dollars pour l&#8217;innovation technologique à vocation sociale ou environnementale</title>
		<link>http://www.akasig.org/2008/09/24/150-000-dollars-pour-linnovation-technologique-a-vocation-sociale-ou-environnementale/</link>
		<comments>http://www.akasig.org/2008/09/24/150-000-dollars-pour-linnovation-technologique-a-vocation-sociale-ou-environnementale/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 16:29:39 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[Entreprises responsables]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[le wecena]]></category>
		<category><![CDATA[challenge]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[nokia]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=773</guid>
		<description><![CDATA[Nokia lance un concours pour développeurs d&#8217;applications solidaires pour téléphones portables. 150 000 dollars seront offerts aux développeurs des applications mobiles qui seront les plus susceptibles de rendre le monde meilleur. N&#8217;oublions pas que les populations des pays du tiers-monde sont bien plus équipées en téléphones portables qu&#8217;en ordinateur, par exemple.
Alors, forcément, ça me donne [...]]]></description>
			<content:encoded><![CDATA[<p>Nokia lance <a href="http://www.callingallinnovators.com/">un concours pour développeurs d&#8217;applications solidaires pour téléphones portables</a>. 150 000 dollars seront offerts aux développeurs des applications mobiles qui seront les plus susceptibles de rendre le monde meilleur. N&#8217;oublions pas que les populations des pays du tiers-monde sont bien plus équipées en téléphones portables qu&#8217;en ordinateur, par exemple.</p>
<p>Alors, forcément, ça me donne envie d&#8217;en rajouter une couche. C&#8217;est pourquoi je propose aux candidats français de ce concours de bénéficier du wecena pour développer leur projet : je vous propose gratuitement les compétences de nombreux ingénieurs et consultants, au titre d&#8217;une forme innovante de mécénat, <a href="http://www.wecena.com/apropos">le wecena</a>. Les conditions à remplir sont détaillées <a href="http://www.akasig.org/2008/07/14/appel-aprojets-informatiques-dinteret-general/">dans mon appel à projet</a>. Dans le cas d&#8217;un concours comme celui de Nokia, cela veut avant tout dire qu&#8217;il faut déclarer en préfecture une association d&#8217;intérêt général en France pour porter le projet, ou s&#8217;associer à une association existante.</p>
<p>via <a title="World Changing announces Nokia contest" href="http://www.worldchanging.com/archives/008664.html">WorldChanging</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2008/09/24/150-000-dollars-pour-linnovation-technologique-a-vocation-sociale-ou-environnementale/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rapid prototyping with microcontrollers ?</title>
		<link>http://www.akasig.org/2008/08/25/rapid-prototyping-with-microcontrollers/</link>
		<comments>http://www.akasig.org/2008/08/25/rapid-prototyping-with-microcontrollers/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 14:57:14 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[written in English]]></category>

		<guid isPermaLink="false">http://www.akasig.org/?p=758</guid>
		<description><![CDATA[I have no clue about micro-electronics and embedded systems. I am a Web application architect and developer, working with very high-level programming languages such as Python (or Perl or Java). I hardly remember assembly language from my childhood experiments with an Apple IIe and almost never touched C or C++. But I have been dreaming [...]]]></description>
			<content:encoded><![CDATA[<p>I have no clue about micro-electronics and embedded systems. I am a Web application architect and developer, working with very high-level programming languages such as Python (or Perl or Java). I hardly remember assembly language from my childhood experiments with an Apple IIe and almost never touched C or C++. But I have been dreaming lately of rapid-prototyping some advanced non-Web application in an embedded system using my programming skills. So I thought I could share bits of my ignorance here. Please bear with me and give me some hints in order for me to best get out of darkness ! :)</p>
<p><a href="http://en.wikipedia.org/wiki/Microcontroller">Microcontrollers</a> are now gaining capabilities that are comparable to microprocessors of early personal computers. The two most popular microcontroller (uC) series are <a href="http://en.wikipedia.org/wiki/PIC_microcontroller">Microchip PIC uCs</a> and <a href="http://en.wikipedia.org/wiki/Atmel_AVR">Atmel AVR uCs</a>. For instance the PIC18F25J10-I/SO costs around 3 or 5 euros per unit at <a href="http://radiospares-fr.rs-online.com">Radio Spares</a> (I am in France: think <a href="http://uk.rs-online.com/web/">RS in the UK</a> or <a href="http://www.alliedelec.com/">Allied Electronics in the USA</a>). It has the following characteristics: 40 MHz, RS-232 capabilities (serial port), a &#8220;C compiler optimized architecture&#8221;, 48 kB of program memory (Flash mem) and around 4 or 5 kB of data memory (SRAM + EEPROM).</p>
<p>There are nice peripherals available, too. For instance<a href="http://radiospares-fr.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&amp;R=6263796"> this Texas Instrument CC2500</a> 2.4GHz RF data transceiver (= transmitter + receiver) at around 2 to 3 euros per unit or current sensors approximately at the same price. In fact, periphals possibilities are limitless&#8230;</p>
<p>For free software hackers, there was a linux version for such chips : <a href="http://www.uclinux.org/">uCLinux</a>. But is it still an active project ? I think I read that the comon linux kernel now includes everything that is required for it to run in embedded sytems. What about GNU utilities ? I know there are things like <a href="http://en.wikipedia.org/wiki/Busybox">busybox</a> on bigger but still embedded processors (phones). Anything equivalent on microcontrollers ?</p>
<p>There are <a href="http://www.piclist.com/techref/microchip/simulators.htm">simulators</a> that will&#8230; let you pretend your desktop computer has a microcontroller inside, or sort of. :)</p>
<p>There is at least <a href="http://www.uclibc.org">one C library for microcontrollers.</a> C is considered as a &#8220;high-level programming language&#8221; in the embeddeds world ! That is to say that assembly language has been the norm. <a href="http://www.piclist.com/tecHREF/microchip/languages.htm">Some higher-levels languages can be used with microcontrollers</a>, including some exotic-to-me Pascal-like languages like <a href="http://www.idcomm.com/personal/lorenblaney/">XPlo</a> or <a href="http://www.pmpcomp.fr/">PMP</a> or Java-like but <a href="http://lists.ucla.edu/pipermail/virgil/">living dead</a> things like <a href="http://compilers.cs.ucla.edu/virgil/index.html">Virgil</a> and&#8230; what about my beloved Python ?</p>
<p>There are at least 2 projects aiming at allowing Python-programming on microcontrollers. <a href="http://pyastra.sourceforge.net/">pyastra</a> is a &#8220;Python assembler translator&#8221; that can be used with some PIC12, PIC14 and PIC16 uCs. But <a href="https://sourceforge.net/project/stats/detail.php?group_id=106265&amp;ugn=pyastra&amp;type=svn&amp;mode=12months">it looks dead</a>. <a href="http://pymite.python-hosting.com/">Pymite</a> looks sexier but <a href="http://pymite.python-hosting.com/report/1?sort=created&amp;asc=0">not much more active</a> :</p>
<blockquote><p><span class="searchword0">PyMite</span> is a flyweight Python interpreter written from scratch to execute on 8-bit and larger microcontrollers with resources as limited as 64 KiB of program memory (flash) and 4 KiB of RAM. <span class="searchword0">PyMite</span> supports a subset of the Python 2.5 syntax and can execute a subset of the Python 2.5 bytecodes. <span class="searchword0">PyMite</span> can also be compiled, tested and executed on a desktop computer.</p></blockquote>
<p>At the moment, it seems like Python programming on microcontrollers is a dead end. Nothing worth investing time and efforts unless you want to also have to maintain a Python compiler&#8230; Same may be true for Java, not mentioning Perl. In fact, it seems to me that the object-oriented crowds are too far from microcontrollers applications to generate enough interest in initiatives such as Pymite, at the moment. Oh, and I am knowingly ignoring C++ which I did not investigate, having no experience in C++.</p>
<p>So what is left in terms of (open source) programming languages that would be of higher level than C ? The best guess I can make is <a href="http://gcbasic.sourceforge.net/">Great Cow Basic</a>, which is a free software Basic (procedural) language. <a href="http://gcbasic.sourceforge.net/examples.html">Example programs</a> look nice to me. <a href="http://gcbasic.sourceforge.net/update.html">It has been active recently</a>. And it supports <a href="http://gcbasic.sourceforge.net/chips.html">most of the chips I would consider experimenting with</a>.</p>
<p>Next steps for me, I guess, would be to pick a PIC simulator and an IDE for Great Cow Basic (any eclipse plugin ?). Then I will probably have to figure out how a Basic program can be executed on a simulated PIC. And how a PIC simulator can be useful without all of the electronics that would surround it in any real setup. I&#8217;ll see that. When I have time to pursue my investigations and experiments in this micro-world.</p>
<p>And <a href="http://www.piclist.com/techref/piclist/begin.htm">piclist</a> is a great site for beginners.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2008/08/25/rapid-prototyping-with-microcontrollers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Alitheia core de SQO-OSS pour mesurer la qualité du code</title>
		<link>http://www.akasig.org/2008/08/04/alitheia-core-de-sqo-oss-pour-mesure-le-code/</link>
		<comments>http://www.akasig.org/2008/08/04/alitheia-core-de-sqo-oss-pour-mesure-le-code/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 14:27:08 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ecrit en français]]></category>
		<category><![CDATA[My wishlist]]></category>
		<category><![CDATA[Open source]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2008/08/04/alitheia-core-de-sqo-oss-pour-mesure-le-code/</guid>
		<description><![CDATA[Un projet de recherche financé par la commission européenne (SQO-OSS) distribue, sous licence open source bien entendu, un logiciel qui analyse la qualité du code source d&#8217;un logiciel. Ce logiciel s&#8217;appelle Alitheia.
Alitheia parcourt des dépôts de code du style subversion/CVS (et notamment ceux de sourceforge). Des plugins fournissent des mesures du code (nombre de lignes [...]]]></description>
			<content:encoded><![CDATA[<p>Un projet de recherche financé par la commission européenne (<a href="http://www.sqo-oss.org/">SQO-OSS</a>) distribue, sous licence open source bien entendu, un logiciel qui analyse la qualité du code source d&#8217;un logiciel. Ce logiciel s&#8217;appelle <a href="http://www.sqo-oss.org/xwiki/bin/view/About/What+Is+SQO-OSS">Alitheia</a>.</p>
<p>Alitheia parcourt des dépôts de code du style subversion/CVS (et notamment ceux de sourceforge). Des plugins fournissent des mesures du code (nombre de lignes de code, nombre de lignes de commentaires, etc.). Des modules d&#8217;Alitheia effectuent des statistiques à partir de ces mesures afin d&#8217;estimer la qualité globale du produit analysé. Alitheia se présente soit sous forme d&#8217;une application Web, soit, bientôt, sous forme d&#8217;un plugin pour Eclipse.</p>
<p>L&#8217;intérêt pratique d&#8217;Alitheia me semble actuellement limité: il y a peu de mesures disponibles dans la version de démo en ligne, la version pour Eclipse n&#8217;est pas encore disponible, les mesures sont effectuées au niveau de chaque fichier source et ne semblent pas encore agrégées au niveau du projet en lui-même (on peut savoir combien de lignes de commentaires il y a dans tel fichier mais pas dans le projet complet). Actuellement, la fonction la plus amusante semble être la mesure de la &#8220;productivité&#8221; de chaque développeur.</p>
<p>A terme, ce logiciel me semble très prometteur. Son intérêt dépendra essentiellement de la richesse des plugins de mesure disponibles, de l&#8217;existence d&#8217;un site public permettant de comparer entre eux les projets phare de sourceforge et tigris par exemple, et de la capacité d&#8217;Alitheia à produire des indicateurs agrégés significatifs. En ce qui concerne les plugins de mesure, j&#8217;espère qu&#8217;on va non seulement avoir des plugins mesurant des caractéristiques du code mais aussi (voire même surtout), des plugins mesurant la qualité de la communauté du projet: fréquence et délai des réponses sur les mailing lists, fréquentation du canal IRC de support, nombre et qualité des plugins et modules additionnels, durée de vie d&#8217;une version, etc. <a href="http://www.sqo-oss.org/xwiki/bin/view/Main/BlogRss?xpage=rdf">A suivre !</a></p>
<p>(via <a href="http://www.lemondeinformatique.fr/actualites/lire-un-outil-pour-mesurer-la-qualite-des-projets-open-source-26577.html">Le Monde Informatique</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2008/08/04/alitheia-core-de-sqo-oss-pour-mesure-le-code/feed/</wfw:commentRss>
		<slash:comments>1</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>9</slash:comments>
		</item>
		<item>
		<title>eXtreme Consulting?</title>
		<link>http://www.akasig.org/2007/06/22/extreme-consulting/</link>
		<comments>http://www.akasig.org/2007/06/22/extreme-consulting/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 10:29:54 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Affaires non classees]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ecrit en français]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2007/06/22/extreme-consulting/</guid>
		<description><![CDATA[Can agile methods such as eXtreme Programming (XP) be applied to consulting activities? What could eXtreme Consulting (XC) mean? Do you need to analyze the whole big picture before starting the delivery of good recommendations?
In XP iterations, users tell user stories which are prioritized and then transformed by rotating pairs of programmers into tested features. [...]]]></description>
			<content:encoded><![CDATA[<p>Can agile methods such as <a title="eXtreme Programming" href="http://en.wikipedia.org/wiki/Extreme_Programming">eXtreme Programming</a> (XP) be applied to consulting activities? What could eXtreme Consulting (XC) mean? <a href="http://dps.csis.pace.edu:8077/CoursePages.DpS2007.DcS801821.DiscussionForums.AgileSoftwareDevelopment.ExtremeConsulting">Do you need to analyze the whole big picture before starting the delivery of good recommendations</a>?</p>
<p>In XP iterations, users tell user stories which are prioritized and then transformed by rotating pairs of programmers into tested features. These features enable new uses of technology.</p>
<p>In XC iterations, I guess there would be decision makers telling decision making stories. These stories would be prioritized and then transformed by rotating pairs of consultants into argued and accepted recommendations. These recommendations would enable new decisions.</p>
<p>What about the agility of decision makers themselves, people who are to lead changes in their scope of responsibility? Couldn&#8217;t they follow similar methods and benefit from eXtreme Change Making (XCM)? In XCM iterations, there would be change leaders telling change leadership stories. These stories would be prioritized and then transformed by rotating pairs of change makers into tested change commitments from stakeholders in the organization. These commitments would enable changes in the organization, its rules and processes.</p>
<p>Had you ever heard of XC or XCM before reading this? What do you think? Why would such things be of any interest?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2007/06/22/extreme-consulting/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Missions solidaires pour prestas en intercontrat</title>
		<link>http://www.akasig.org/2007/02/23/missions-solidaires-pour-prestas-en-intercontrat/</link>
		<comments>http://www.akasig.org/2007/02/23/missions-solidaires-pour-prestas-en-intercontrat/#comments</comments>
		<pubDate>Fri, 23 Feb 2007 15:18:07 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<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[le wecena]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2007/02/23/missions-solidaires-pour-prestas-en-intercontrat/</guid>
		<description><![CDATA[Christian, Bader, Jef et Jjay m&#8217;ont donné quelques pistes pour améliorer mon idée: comment convaincre des sociétés informatiques de s&#8217;investir dans des projets technologiques à vocation solidaire? Merci à tous les 4!
Un gros risque, c&#8217;est que ce genre de choses &#8220;terminent à la comm&#8217;&#8221; comme l&#8217;indique Christian. Les SSII n&#8217;ont probablement &#8220;aucune velléité de changer [...]]]></description>
			<content:encoded><![CDATA[<p>Christian, Bader, Jef et Jjay m&#8217;ont donné quelques pistes pour améliorer <a href="http://www.akasig.org/2007/02/07/recherche-informatique-a-vocation-sociale/">mon idée: comment convaincre des sociétés informatiques de s&#8217;investir dans des projets technologiques à vocation solidaire</a>? Merci à tous les 4!<br />
Un gros risque, c&#8217;est que ce genre de choses &#8220;terminent à la comm&#8217;&#8221; comme l&#8217;indique Christian. Les SSII n&#8217;ont probablement &#8220;aucune velléité de changer le monde&#8221;, en tout cas, ce n&#8217;est pas leur vocation. Leur préoccupation évidente semble être &#8220;le profit court terme&#8221;. Mais pourquoi les SSII n&#8217;emploient-elles pas leurs prestataires en inter-contrat <a href="http://www.01net.com/article/256861.html">à des projets profitables</a> pour elles à plus long terme (projets internes, contribution open source, &#8230;) plutôt que de les laisser <a href="http://www.peutetreunereponse.net/article-3640644.html">moisir dans un coin</a> le temps qu&#8217;un commercial arrive à les recaser chez un client? D&#8217;une boîte à l&#8217;autre et d&#8217;une personne à l&#8217;autre, l&#8217;<a href="http://www.developpez.net/forums/archive/index.php/t-140181.html">inter-contrat est vécu plus ou moins bien</a>, avec des situations parfois <a href="http://jesuischef.free.fr/index.php/tag/Intercontrat">cocasses</a>. En tout cas, l&#8217;intercontrat est une source de<a href="http://www.01net.com/article/227167.html"> problèmes</a> pour les SSII <a href="http://solutions.journaldunet.com/emploi/dossier/0503intercontrat/050310_analyse.shtml">et pour</a> <a href="http://solutions.journaldunet.com/emploi/dossier/0503intercontrat/sommaire.shtml">leurs employés</a>.</p>
<p>D&#8217;un autre côté, il y a peut-être des leviers accessibles pour faire changer cette situation et, du même coup, répondre aux besoins technologiques des innovateurs sociaux.</p>
<blockquote><p>La notion d&#8217;entrepreuriat social, ou d&#8217;ethique est très à la mode chez toutes les entreprises qui ont une médiocre image de ce côté là (ça inclue banques et SSII amha).</p></blockquote>
<p>Que faire? Voici vos suggestions:</p>
<blockquote><p>faire que les CLIENTS des SSII soient attentifs à ces démarches (dans leur processus de décision ), et comme par hasard tout se débloque</p></blockquote>
<blockquote><p>[Peut-être créer des] jeux-projets-concours [:] sélection des meilleurs projets et financement + aide logistique, ça peut marcher.</p>
<p>[De toute façon,] les idées ne peuvent pas venir de l&#8217;intérieur [et il faut que la solution permette d'] identifier une retombée financière à quelques mois</p>
<p>Ce n&#8217;est pas les SSII qu&#8217;il faut convaincre mais d&#8217;abord ceux qui travaille dans ces entreprises (de préférence d&#8217;une taille respectable à mon avis). S&#8217;ils sont motivés ils peuvent faire bouger leur management et toi tu peux les aider à trouver les arguments pour cela.</p></blockquote>
<p>J&#8217;ai envie d&#8217;extraire de ces suggestions quelques éléments pour un cahier des charges : la solution doit&#8230;</p>
<ul>
<li>apporter une carotte économique pour la SSII, du profit à court terme, peut-être en impliquant certains clients</li>
<li>s&#8217;appuyer à fond sur la motivation des employés, exploiter celle-ci par des formes d&#8217;animation adéquates</li>
<li>être économique viable (entreprise sociale, donc entreprise également)</li>
</ul>
<p>Et si on achetait les prestataires en inter-contrats à leur SSII à un pourcentage symbolique de leur tarif journalier habituel? Cela fournirait l&#8217;incitation économique à leur SSII: <em>&#8220;Du moment que je sais que je peux disposer de cet intercontrat dès que je le veux pour le mettre chez en client, pourquoi ne pas le vendre à 1% de son prix habituel à un client &#8216;entreprise sociale&#8217;. Si, en plus, ça redore un peu l&#8217;image de marque de la boîte et que ça motive certains employés, c&#8217;est ça de gagné en plus!&#8221;</em>?</p>
<p>Et si ce montant symbolique était réuni par les employés motivés pour participer à l&#8217;opération et changer le monde à leur échelle? Pour 10 à 20 employés en mission (selon les périodes et les sociétés), il y en a, disons, 1 en intercontrat. Avec un abonnement/cotisation de quelques dizaines ou centaines d&#8217;euros par an et par personne, on réunit le montant nécessaire pour financer une mission solidaire. <em>&#8220;Aujourd&#8217;hui, je suis chez un client. Mais demain, ça pourrait être moi en intercontrat. Alors, comme j&#8217;aimerais bien que certains de mes collègues et moi puissions avoir un véritable impact sur l&#8217;environnement/les plus pauvres/la démocratie/le développement des pays du Sud/la priorité de mon choix grâce à ce que l&#8217;on sait faire le mieux (la techno), j&#8217;achète avec eux le droit de participer à une telle mission lors de mon prochain intercontrat&#8221;</em>.</p>
<p>Cette solution consisterait donc à créer un fournisseur de missions solidaires pour prestataires en intercontrat. Les clients sont des prestas qui veulent profiter d&#8217;un futur intercontrat pour essayer de changer le monde à leur échelle (plutôt que de se faire chier à éviter les patates et à traîner dans l&#8217;agence ou au siège). Les produits sont des missions à forte qualité sociale/environnementale pilotées par des pros du secteur, des gens de terrain qui peuvent vite faire sentir au presta les problèmes sociaux/environnementaux ou autres à traiter. Les autres fournisseurs, ce sont des SSII qui voient d&#8217;un bon oeil l&#8217;idée d&#8217;arrondir leurs fins de mois en vendant certains intercontrats sur un second marché, ultra-discount.</p>
<p>Comment répondre aux questions que ce genre de proposition pourrait soulever? Qu&#8217;est-ce qui donnerait suffisamment envie et confiance à un presta pour qu&#8217;il achète à l&#8217;avance, avec des collègues, son droit de participer à une mission technologique solidaire sur le terrain de son choix? Cette idée a sans doute un côté complètement délirant, mais qu&#8217;est-ce qu&#8217;on pourrait en faire de bien et d&#8217;un peu plus près de la réalité? Qu&#8217;est-ce que cela vous inspire? A votre tour!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2007/02/23/missions-solidaires-pour-prestas-en-intercontrat/feed/</wfw:commentRss>
		<slash:comments>3</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>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>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>Web scraping with Python (part II)</title>
		<link>http://www.akasig.org/2005/03/11/web-scraping-with-python-part-ii/</link>
		<comments>http://www.akasig.org/2005/03/11/web-scraping-with-python-part-ii/#comments</comments>
		<pubDate>Fri, 11 Mar 2005 10:30:44 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Développement]]></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/?p=599</guid>
		<description><![CDATA[The first part of this article dealt with retrieving HTML pages from the web with the help of a mechanize-propelled web crawler. Now your HTML pieces are safely saved locally on your hard drive and you want to extract structured data from them. This is part 2, HTML parsing with Python. For this task, I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sig.levillage.org/?p=588">The first part of this article</a> dealt with retrieving HTML pages from the web with the help of a <a href="http://wwwsearch.sourceforge.net/mechanize/">mechanize</a>-propelled web crawler. Now your HTML pieces are safely saved locally on your hard drive and you want to extract structured data from them. This is part 2, HTML parsing with Python. For this task, I adopted a slightly more imaginative approach than for my crawling hacks. I designed a data extraction technology based on HTML templates. Maybe this could be called &#8220;reverse-templating&#8221; (or something like template-based reverse-web-engineering).</p>
<p>You may be used with HTML templates for producing HTML pages. An HTML template plus structured data can be transformed into a set of HTML pages with the help of a proper templating engine. One famous technology for HTML templating is called <a href="http://zpt.sourceforge.net/">Zope Page Templates</a> (because this kind of templates is used within the <a href="http://www.zope.org/">Zope application server</a>). ZPTs use a special set of additional HTML tags and attributes referred to by the &#8220;tal:&#8221; namespace. One advantage of ZPT (over competing technologies) is that ZPT are nicely rendered in WYSIWYG HTML editors. Thus web designers produce HTML mockups of the screens to be generated by the application. Web developpers insert tal: attributes into these HTML mockups so that the templating engine will know which parts of the HTML template have to be replaced by which pieces of data (usually pumped from a database). As an example, web designers will say <em>&lt;title&gt;Camcorder XYZ&lt;/title&gt;</em> then web developpers will modify this into <em>&lt;title tal:content=&#8221;camcorder_name&#8221;&gt;Camcorder XYZ&lt;/title&gt;</em> and the templating engine will further produce a <em>&lt;title&gt;Camcorder Canon MV6iMC&lt;/title&gt;</em> when it processes the &#8220;MV6iMC&#8221; record in your database (it replaces the <em>content</em> of the <em>title</em> element with the value of the <em>camcorder_name</em> variable as it is retrieved from the current database record). This technology is used to merge structured data with HTML templates in order to produce Web pages.</p>
<p>I took inspiration from this technology to design parsing templates. The idea here is to reverse the use of HTML templates. In the parsing context, HTML templates are still produced by web developpers but the templating engine is replaced by a parsing engine (known as <em>web_parser.py</em>, see <a href="#web_parser_zip_file">below</a> for the code of this engine). This engine takes HTML pages (the ones you <a href="http://sig.levillage.org/?p=588">previously crawled and retrieved</a>) plus ZPT-like HTML templates as input. It then outputs structured data. First your crawler saved <em>&lt;title&gt;Camcorder Canon MV6iMC&lt;/title&gt;</em>. Then you wrote <em>&lt;title tal:content=&#8221;camcorder_name&#8221;&gt;Camcorder XYZ&lt;/title&gt;</em> into a template file. Eventually the engine will output <em>camcorder_name = &#8220;Camcorder Canon MV6iMC&#8221;</em>.</p>
<p>In order to trigger the engine, you just have to write a small launch script that defines several setup variables such as :
<ul>
<li> the URL of your template file,</li>
<li> the list of URLs of the HTML files to be parsed,</li>
<li> whether you would like or not to pre-process these files with an HTML tidying library (this is useful when the engine complains about badly formed HTML),</li>
<li> an arbitrary keyword defining the domain of your parsing operation (may be the name of the web site your HTML files come from),</li>
<li> the charset these HTML files are made with (no automatic detection at the moment, sorry&#8230;)</li>
<li> the output format (csv-like file or semantic web document)</li>
<li> an optional separator character or string if ever you chose the csv-like output format</li>
</ul>
<p>The easiest way to go is to copy and modify my example launch script (<em>parser_dvspot.py</em>) included in the <a href="#web_parser_zip_file">ZIP distribution of this web_parser</a>.</p>
<p>Let&#8217;s summarize the main steps to go through :
<ol>
<li> install <a href="http://utidylib.berlios.de/">utidylib</a> into your python installation</li>
<li> copy and save <a href="#web_parser_zip_file">my modified version of BeautifulSoup</a> into your python libraries directory (usually <em>&#8230;/Lib/site-packages</em>)</li>
<li> copy and save my engine (<a href="#web_parser_zip_file"><em>web_parser.py</em></a>) into your local directory or into you python libraries directory</li>
<li> choose a set of HTML files on your hard drive or directly on a web site,</li>
<li> save one of these files as your template,</li>
<li> edit this template file and insert the required pseudotal attributes (see below for pseudotal instructions, and see <a href="#web_parser_zip_file">the example dvspot template <em>template_dvspot.zpt</em></a>),</li>
<li> copy and edit my example launch script so that you define the proper setup variables in it (<a href="#web_parser_zip_file">the example <em>parser_dvspot.py</em></a> contains more detailed instructions than above), save it as <em>my_script.py</em></li>
<li> launch your script with a <em>python my_script.py &gt; output_file.cowl</em> (or <em>python my_script.py &gt; output_file.cowl</em>)</li>
<li> enjoy yourself and your fresh <em>output_file.owl</em> or <em>output_file.csv</em> (import it within Excel)</li>
<li> give me some feedback about your reverse-templating experience (preferably as a comment on <a href="http://sig.levillage.org/?p=599">this blog</a>)</li>
</ol>
<p>This is just my first attempt at building such an engine and I don&#8217;t want to make confusion between real (and mature) tal attributes and my pseudo-tal instructions. So I adopted <em>pseudotal</em> as my main namespace. In some future, when the specification of these reverse-templating instructions are somewhat more stabilized (and if ever the &#8220;tal&#8221; guys agree), I might adopt tal as the namespace. Please also note that the engine is somewhat badly written : the code and internal is rather clumsy. There is much room for future improvement and refactoring.</p>
<p>The current version of this reverse-templating engine now supports the following template attributes/instructions (see source code for further updates and documentation) :
<ul>
<li> <strong>pseudotal:content</strong>  gives the name of the variable that will contain the content of the current HTML element</li>
<li> <strong>pseudotal:replace</strong>  gives the name of the variable that will contain the entire current HTML element</li>
<li> (NOT SUPPORTED YET) <strong>pseudotal:attrs</strong>  gives the name of the variable that will contain the (specified?) attribute(s ?) of the current HTML element</li>
<li> <strong>pseudotal:condition</strong>  is a list of arguments ; gives the condition(s) that has(ve) to be verified so that the parser is sure that current HTML element is the one looked after. This condition is constructed as a list after BeautifulSoup fetch arguments : a python dictionary giving detailed conditions on the HTML attributes of the current HTML element, some content to be found in the current HTML element, the scope of research for the current HTML element (recursive search or not)</li>
<li> <strong>pseudotal:from_anchor</strong>  gives the name of the <em>pseudotal:anchor</em> that is used in order to build the relative path that leads to the current HTML element ; when no from_anchor is specified, the path used to position the current HTML element is calculted from the root of the HTML file</li>
<li> <strong>pseudotal:anchor</strong>  specifies a name for the current HTML element ; this element can be used by a <em>pseudotal:from_anchor</em> tag as the starting point for building the path to the element specified by <em>pseudotal:from_anchor</em> ; usually used in conjunction with a <em>pseudotal:condition</em> ; the default anchor is the root of the HTML file.</li>
<li> <strong>pseudotal:option</strong>  describes some optional behavior of the HTML parser ; is a list of constants ; contains NOTMANDATORY if the parser should not raise an error when the current element is not found (it does as default) ; contains FULL_CONTENT when data looked after is the whole content of the current HTML element (default is the last part of the content of the current HTML element, i.e. either the last HTML tags or the last string included in the current element)</li>
<li> <strong>pseudotal:is_id_part</strong>  a special &#8216;id&#8217; variable is automatically built for every parsed resource ; this id variable is made of several parts that are concatenated ; this <em>pseudotal:is_id_part</em> gives the index the current variable will be used at for building the id of the current resource ; usually used in conjunction with <em>pseudotal:content</em>, <em>pseudotal:replace</em> or <em>pseudotal:attrs</em></li>
<li> (NOT SUPPORTED YET) <strong>pseudotal:repeat</strong>  specifies the scope of the HTML tree that describes ONE resource (useful when several resources are described in one given HTML file such as in a list of items) ; the value of this tag gives the name of a class that will instantiate the parsed resource scope plus the name of a list containing all the parsed resource</li>
</ul>
<p>The current version of the engine can output structured data either as a CSV-like output (tab-delimited for example) or as an RDF/OWL document (of Semantic-Web fame). Both formats can easily be imported and further processed with Excel. The RDF/OWL format gives you the ability to process it with all the powerful tools that are emerging along the Semantic Web effort. If you feel adventurous, you may thus import your RDF/OWL file into <a href="http://protege.stanford.edu/">Stanford&#8217;s Protege semantic modeling tool</a> (or into <a href="http://www.eclipse.org/">Eclipse</a> with its <a href="http://owl-eclipse.projects.semwebcentral.org/">SWEDE plugin</a>) and further process your data with the help of a SWRL rules-based inference engine. The future <a href="http://www.daml.org/rules/proposal/">Semantic Web Rules Language</a> will help at further processing this output so that you can powerfully compare RDF data coming from distinct sources (web sites). In order to be more productive in terms of fancy buzz-words, let&#8217;s say that this reverse-templating technology is some sort of a web semantizer. It produces semantically-rich data out of flat web pages.</p>
<p>The current version of the engine makes an extensive use of <a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a>. Maybe it should have been based on a more XMLish approach instead (using XML pathes ?). But it would have implied that the HTML templates and HTML files to be processed should then have been turned into XHTML. The problem is that I would then have relied on utidylib but this library breaks too much some mal-formed HTML pages so that they are not valuable anymore.</p>
<p><strong>Current known limitation</strong> : there is currently no way to properly handle some situations where you need to make the difference between two similar anchors. In some cases, two HTML elements that you want to use as distinct anchors have in fact exactly the same attributes and content. This is not a problem as long as these two anchors are always positioned at the same place in all the HTML page that you will parse. But, as soon as one of the anchors is not mandatory or it is located after a non mandatory element, the engine can get lost and either confuse the two anchors or complain that one is missing. At the moment, I don&#8217;t know how to handle this kind of situation. Example : long lists of specifications with similar names where some specifications are optional (see canon camcorders as an example : difference between lcd number of pixels and viewfinder number of pixels). The worst case scenario would be when there is a flat list of HTML paragraphs. The engine will try to identify these risks and should output some warnings in this kind of situations.</p>
<hr />
<p><a name="web_parser_zip_file" />Here are the contents of the <a href="http://sig.levillage.org/b2-img/web_parser.zip">ZIP distribution</a> of this project (<a href="http://www.gnu.org/copyleft/gpl.html">distributed under the General Public License</a>) :</p>
<ul>
<li> <em>web_parser.py</em> : this is the web parser engine.</li>
<li> <em>parser_dvspot.py</em> : this is an example launch script to be used if you want to parser HTML files coming from the dvspot.com web site.</li>
<li> <em>template_dvspot.zpt</em> : this is the example template file corresponding to the excellent dvspot.com site</li>
<li> <em>BeautifulSoup.py</em> : this is MY version of BeautifulSoup. Indeed, I had to modify <a href="http://www.crummy.com/software/BeautifulSoup/">Leonard Richardson&#8217;s official one</a> and I couldn&#8217;t obtain any answer from him at the moment regarding my suggested modifications. I hope he will soon answer me and maybe include my modifications in the official version or help me overcoming my temptation to fork. My modifications are based on the official 1.2 release of beautifulsoup : I added &#8220;center&#8221; as a nestable tag and added the ability to match the content of an element with the help of wildcards. You should save this BeautifulSoup.py file into the &#8220;Lib\site-packages&#8221; folder of your python installation.</li>
<li> <em>README.html</em> is the file you are currently reading, also <a href="http://sig.levillage.org/?p=599">published on my blog</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/03/11/web-scraping-with-python-part-ii/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Mesurer la qualité du Web tout en surfant</title>
		<link>http://www.akasig.org/2005/03/03/mesurer-la-qualite-du-web-tout-en-surfant/</link>
		<comments>http://www.akasig.org/2005/03/03/mesurer-la-qualite-du-web-tout-en-surfant/#comments</comments>
		<pubDate>Thu, 03 Mar 2005 13:03:16 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ecrit en français]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=593</guid>
		<description><![CDATA[La conformité aux standards ouverts définis dans le cadre du W3C est un élément important dans la qualité du Web tel qu&#8217;on le connaît. Pour ceux d&#8217;entre vous qui sont développeurs Web et souhaitent vérifier la conformité des pages qu&#8217;ils consultent, rien de plus simple : avec l&#8217;extension HTML Validator de Firefox, une petite icône [...]]]></description>
			<content:encoded><![CDATA[<p>La conformité aux standards ouverts définis dans le cadre du <a href="http://www.w3.org/">W3C</a> est un élément important dans la qualité du Web tel qu&#8217;on le connaît. Pour ceux d&#8217;entre vous qui sont développeurs Web et souhaitent vérifier la conformité des pages qu&#8217;ils consultent, rien de plus simple : <a href="http://www.fredcavazza.net/index.php?2005/03/02/604-verifier-la-conformite-w3c-tout-en-surfant">avec l&#8217;extension HTML Validator de Firefox, une petite icône en bas de Firefox vous indique si la page pose ou non problème</a>. Mieux encore, l&#8217;extension vous indique comment corriger le problème si vous pouvez modifier cette page !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/03/03/mesurer-la-qualite-du-web-tout-en-surfant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
