Archives pour la catégorie Informatique

Place de marchés pour SSII, et le mécénat ?

Mon job consiste à mobiliser (et superviser) les compétences de professionnels de l’informatique pour les mettre au service de projets informatiques d’intérêt général. Actuellement, j’assiste l’association Dyspraxique Mais Fantastique et l’INSERM dans la réalisation d’un projet d’informatisation de manuels scolaires pour les rendre utilisables par les 250.000 enfants handicapés en France qui ont des troubles de l’apprentissage (dyspraxie). Pour cela, certaines SSII, telles que Groupe Open et Neoxia, acceptent de « prêter » (gratuitement) des ingénieurs volontaires à temps plein, le temps pour eux de trouver leur prochaine mission lucrative (situations d’intercontrat). C’est nécessaire (et généreux) puisque le projet est réalisé en l’absence de tout budget (comme c’est souvent le cas dans le secteur associatif).

Afin de mobiliser le plus grand nombre de volontaires et de SSII possibles, j’essaie donc de voir si les places de marché Web destinées aux SSII pourraient m’aider à faire connaître ces besoins de compétences en mécénat. Voici les places de marché que j’ai repérées, en connaissez-vous d’autres ? Pensez-vous que ce soit un moyen pertinent pour faire connaître les besoins des associations en matière de compétences informatiques ?

Tout d’abord, les places de marchés pour lesquelles le dépôt d’appels d’offres (« recherche développeur JavaScript/jQuery en intercontrat ») est payant (par abonnement) :

  • Boondeo, à partir de 59 EUR HT/mois (gratuit pour les donneurs d’ordre non-SSII)
  • AB-Informatique, à partir de 75 EUR HT/mois
  • Freelance-info, à partir de 135 EUR HT/mois
  • SSIIMarket, à partir de 95 EUR HT/mois (et non pas 155 comme indiqué précédemment)
  • HiTechPros, à partir de 228 EUR HT/mois
  • Consulink, à partir de 245 EUR HT/mois

Du fait de son ancienneté, de sa présence dans la presse (et de son prix ?), le leader semble être HiTechPros. Mais je n’ai pas les moyens de souscrire à un abonnement de ce type pour un an (engagement minimum de rigueur, pour la plupart), n’ayant aucune idée de la probabilité que mes appels d’offres recueillent des réponses de commerciaux de SSII puisqu’il s’agit d’opérations de mécénat.

Passons donc aux places de marchés pour lesquelles le dépôt d’appels d’offres est gratuit :

  • Marches-TIC, j’envoie mon appel d’offres ; zut, je suis le seul appel d’offres et il n’y a « que » 186 prestataires inscrits,
  • Prestataires.com, filiale de Quotatis (qui propose également des devis dans un tas d’autres secteurs d’activités), très « pro » et « process » (un peu trop parfois ?) ; je m’inscris mais pas sûr que leur « service qualité » laissera passer mon annonce plutôt inhabituelle… on verra,
  • ePresta.com, 1120 prestataires (tous informatiques ? tous actifs), allez hop j’envoie mon appel à compétences,
  • 123presta, présentation agréable et conviviale ; je m’inscris et j’envoie mon appel à compétences,
  • prestataires-informatique, zut le site plante, je le signale au webmaster via leur formulaire de contact

J’ai repéré d’autres plates-formes avec dépôt gratuit, mais qui se rémunèrent par commission sur les transactions effectuées. Or, pour une opération de mécénat, la prestation est réalisée sans paiement donc la formule ne colle pas trop… Voici cependant les coordonnées de ces autres plate-formes qui fonctionnent par commission : APSIT, Outsoorce, ProgOnline, OpteamIS, Net-ITBusiness.

Certaines autres places de marchés semblent essentiellement destinées aux indépendants/freelance côté prestataires. Or ceux-ci n’ont pas de volumes d’intercontrat suffisants pour que je puisse les solliciter de manière utile et efficace dans le cadre du wecena. Il s’agit par exemple de Kalifeye, de Magazine-Enligne (étrange, ce site…).

Au final, et en attendant le jour où une place de marchés pour SSII participera au développement du mécénat informatique en diffusant mes appels à compétences en intercontrat, c’est sur des Hubs Viadeo que j’ai pu le plus facilement diffuser mon appel :

Côté Linked-In, j’ai diffusé mon appel sur le groupe IT Ile-de-France mais je ne trouve pas d’autres groupes pertinents.

Maintenant « yapluka » attendre que ça morde ? Vous connaissez d’autres bons spots de pêche à l’intercontrat ?

Je donne 20 PCs administrés à distance. Qui en veut ?

J’ai dans mon salon et dans la cave de ma grand-mère (si si) une grosse vingtaine de vieux PC (sans écrans) récupérés auprès de mon ancien employeur. Ils sont paramétrés pour être administrés et maintenus à distance par moi et mes copains via un logiciel d’installation automatique (logiciel FAI) et un logiciel de gestion de configuration à distance (logiciel BCFG2, similaire à puppet). C’est un linux Xubuntu qui est installé dessus. Il suffit qu’ils soient branchés à Internet pour que je puisse intervenir dessus sans avoir à me déplacer.

A l’origine, ils étaient destinés à une association de quartier au Val Fourré à Mantes-la-Jolie mais l’asso n’a pas réussi à se retrouver un local suite à une grosse opération de vandalisme dont ils ont été victimes et, depuis, les PC dorment et sont inutilisés. J’ai pensé un moment installer BOINC dessus et à les utiliser comme radiateurs électriques pour faire avancer la science mais je ne suis pas passé à l’acte. J’ai même imaginé essayer de convaincre des médecins et autres libéraux à chauffer leurs salles d’attente pour la recherche médicale, ou pour chauffer un local commercial. Mais trouver des libéraux ou commerçants prêts à adopter un radiateur pour la science n’est pas chose facile, surtout quand on a une entreprise à développer.

Alors voila, ces PC dorment chez moi et chez ma grand-mère. Ma grand-mère en a raz-le-bol que je squatte ainsi sa cave. Mon grand-père préfèrerait y mette des bouteilles à la place… Alors, cher lecteur, si jamais tu connais quelqu’un que ça intéresse de récupérer ces machines pour les rendre utiles, je suis prêt à les donner :

  • soit, idéalement, pour qu’ils soient utilisés dans un cadre associatif/solidaire/social auquel cas je suis prêt à continuer à les administrer/maintenir/configurer à distance à titre bénévole depuis mon serveur associatif (nous avions même préparé une charte pour expliquer cela, disponible par email),
  • soit pour les garder comme radiateurs et je leur fait faire du calcul distribué pour contribuer à la recherche scientifique,
  • soit, au pire, pour qu’ils soient réinstallés et utilisés comme bon semblera ou récupérés « pour pièces » parce que c’est vraiment idiot de garder ces machines inutilisées chez moi.

Du point de vue performance, il s’agit de machines avec de l’ordre de 512 Mo de RAM et moins de 10 Go de disque, avec carte ethernet mais pas toujours de carte son. Grâce à Xubuntu, ils sont très rapides pour utiliser le web, le mail, du tchat et de la bureautique. Vous pourriez vous dire « ce sont des vieilles machines donc lentes » mais je vous assure que, comparées à la rapidité d’une machine sous Windows Vista, vous apprécierez la légèreté de Xubuntu pour faire du web ou du mail. Ceci dit, ils ne sont pas assez puissants pour faire des jeux videos modernes ou du montage video par exemple.

Les machines sont à récupérer en région parisienne ou près de Bordeaux.

Les personnes intéressées peuvent me contacter directement par email ou via mes autres coordonnées.

SVG as an alternative to Flash, here comes bliotux

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 Mais Fantastique. They currently use Didapages, a Flash-powered proprietary authoring tool 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.

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. The source code is available under the wecena subversion repository (until I create a dedicated repository). Here is a full copy of the README file :

wecena.bliotux

This software package is a framework for building web applications having the following buzzwords

  • web
    apps: run in your web browser
  • offline
    apps: no web server, no Internet connection required
  • rich
    applications : highly graphical user interfaces, using SVG
  • animated
    applications : pages can include (interactive) animations using (SMIL-powered) animated SVG templates
  • interactive
    : interaction/behaviour is defined in a simple Javascript file corresponding to a given page
  • with persistence
    of user data and application state : using local storage with persistence engines such as Google Gears (or HTML5 localstorage when it’s mature enough in Firefox)
  • template-based
    : pages sharing a common layout/structure are based on template files
  • document-oriented: a simple data structure in a data.js file defines the data used to populate the corresponding SVG template for any given page
  • free software: 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…)
  • based on open standards: 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
  • highly accessible
    even though using JavaScript (see open standards…)
  • as cross-browser
    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.

The original aim of this package is to build a non-Flash interactive animations management framework so thataccessible
textbooks can be made for children with cognitive disabilities (mainly dyspraxia)
.
But it could be used to produce any set of interactive animations
such as books, websites, interactive animations or I don’t know what.
You imagine.
You experiment.
You tell me what it may be useful for !

The following JavaScript libraries are used

Disclaimer with regards to JavaScript as a programming language :
Ahemm… Javascript was selected because we wanted to have one and only one language to be used both for the making
of bliotux-powered templates and pages and for their execution.
And their execution should not require any
prior installation of software : the web browser should be the only required stuff.
And Javascript seems to be the only open-standards-oriented way to offer rich interactivity to SVG in web browsers.
Too bad.

How to use wecena.bliotux ?

At the moment wecena.bliotux is nothing but a proof-of-concept.
More will come in case the project I’m working on selects this technology
as a viable alternative to the Flash-based proprietary product we are
currently using in order to make accessible textbooks for children
with cognitive disabilities.

Download and install bliotux

It’s in a subversion repository.
There is some subversion documentation available in
case you don’t know how to download software from a subversion repository
. Bliotux is stored
in the wecena repository but it will get its own repository some day.

Create a template

Bliotux pages are based on templates.
Let’s create a first template.

Name your template

Choose a name for your template. In this example,
the name is

simpleOperation

because it is a template page for textbooks
for children learning additions and other simple mathematical operations.

Name a template folder accordingly.
For instance, I have

wecena.bliotux/templates/simpleOperation/

Define the layout of your template

This part is the job of a graphics designer.

The layout of a template is defined by a SVG file.
(Download, install and) use any SVG editor to create such a file.
I personnally use Inkscape, which is free software.

Your SVG template should be named

layout.svg

and
should be stored under the template folder.
Here it goes:

wecena.bliotux/templates/simpleOperation/layout.svg

The next version of Inkscape should allow you to use its new timeline-based animation editor capabilities to add
animation to your template.
At the moment, you will have to have an XML developer edit the source code of your SVG
template and add animation (animated SVG) instructions « by hand » if needed.

Here is a clue about how to possibly accelerate the development of such SVG animations without waiting for the
next version of Inkscape :

  1. Download and install Open Office Impress
  2. Make a (duplicate) sketch of your layout in Impress
  3. Add the desired animation effects to it using the rich set of animation features Impress offers
  4. Save your animated Impress presentation in its native .ODP format
  5. Open this file using an archive handler (such as winzip under windows) :
    Open Office files are nothing but ZIP archives containing XML and graphics
  6. Edit the source code of the main XML file this .ODP archive contains.
  7. Ask your XML developer to copy, paste and adapt the animations instructions therein
    into your

    layout.svg

    file.
    (The animation instructions can easily be located : they use the

    anim:

    namespace).

Define the interactivity of your template

This part is the job of a Javascript developer.

This is the hardest part if you are not a developer.
It should be easy if you have any experience in web development.

In the case of a children textbook for teaching additions and other simple mathematical operations,
we’d like our « simpleOperation » template to display a simplified virtual keyboard with numbers.
When the child clicks on a number, this number is added to a « result » text element in the template layout.
So we need to know how to use an SVG element (the number we want to click on) as an interactive button
which will display some text result as the content of an other SVG element.

The interactivity of your template is first prepared in your

layout.svg

file.
Using Inkscape XML Editor (Ctrl + Shift + X), you add event attributes
to the SVG elements you want to add some interactivity to. This involves accessing
the XML source code of the SVG file, which you should not be afraid of thanks to
Inkscape XML Editor.

For instance, let’s say you have a SVG group of elements which you want to
act as a button. You select this group using Inkscape. You press Ctrl+Shift+X. The
XML Editor opens. There you see the group of elements as a <g … > element.
You then want to add interactivity to this group. You have to add a

onclick

attribute.
The value of this attribute should be « clickButton(evt) ». This means that whenever the
user mouse clicks on this button, a MouseEvent event called « evt » will be fired and
some Javascript function called « clickButton » will have to handle this event so that
something special happens.

Now you have injected some interactivity attributes into the XML source code of
the SVG file of your template. This source code now includes things like this :

<g onclick="clickButton(evt)" ...

Let’s develop this clickButton Javascript function so that you define what should
happen whenever the button is clicked. This definition is written in a Javascript file
you have to name « interaction.js » and which sits under the template folder:

wecena.bliotux/templates/simpleOperation/interaction.js

For instance, this file could contain the code below (see included examples, too, if needed) :

function clickButton(evt){
    alert('You clicked the button !');
    $('.whereResultShouldBeDisplayed', svg.root()).html('Clicked !');
    $('.someSVGElementsWhichShouldBeEmptiedWhenButtonGetsClicked', svg.root()).html('');
    storageSave('.whereResultShouldBeDisplayed', 'Clicked !');
    storageSave('.someSVGElementsWhichShouldBeEmptiedWhenButtonGetsClicked, '');
}

If you are as unfamiliar with Javascript as I am, you need some more explanations here.
What does this function says ?

It says that it takes an input parameter called « evt ». But it won’t use it in this case.

It first displays a popup alert window with a message (‘You clicked…’)

Then it changes the content of the SVG displayed in the web browser. It writes the text ‘Clicked !’ in
every SVG (or HTML BTW) element which has an attribute called « class » (the same attribute which can be used
for CSS files) including the value « whereResultShouldBeDisplayed ».

For instance, let’s say you have this text element in your layout.svg file :

<text
  id="text4790"
  y="386.98224"
  x="454.43787">
  <tspan
    y="386.98224"
    x="454.43787"
    id="tspan4786"
    class="whereResultShoudlBeDisplayed someOtherClass">Not clicked yet.</tspan>
</text>

Then, once the user clicks the button, your interaction.js file will have this text element changed into this :

<text
  id="text4790"
  y="386.98224"
  x="454.43787">
  <tspan
    y="386.98224"
    x="454.43787"
    id="tspan4786"
    class="whereResultShoudlBeDisplayed someOtherClass">Clicked !</tspan>
</text>

Can you see the difference ?

For more information about how Javascript can have the web browser manipulate
the content of the page at runtime, please see jQuery API documentation. Just remember to
apply jQuery selectors to the root of the SVG document (

svg.root()
) and you should be fine.

There is also this call to storageSave in your interactivity function. What does it mean ?


storageSave

is a function defined by bliotux.
It takes 2 input parameters : a key and its value.
It will have this pair of (key, value) made persistent in the local web browser.
Even if the browser (and possibly computer) is closed (shutdown), this (key, value) pair is still available
and can be later retrieved using another bliotux function :

storageLoad(key)
.
Next time the same page is displayed, any SVG element which corresponds to key (as a jQuery selector) will have
its content filled with value.

In this example, storing the text

"Clicked !"

as
the value of the key

.whereResultShouldBeDisplayed

means 2 things:

  1. this text

    "Clicked !"

    can be further retrieved with any Javascript call to

    storageLoad('.whereResultShouldBeDisplayed')
  2. next time this page is displayed using the same web browser, the

    "Clicked !"

    text will be added to all SVG elements which have the

    whereResultShouldBeDisplayed

    class attribute in their source code.

As a result of this, the state of each page can be made persistent
so that when the user returns to a given page he already interacted with
this page displays the exact same info/aspect/behaviour as before.

Now you have your

interaction.js

file which defines the full interactivity of your template document.

Create a page

Creating a page is much easier than creating the template a page is based on.
But it requires writing some (extremely simple) code using any text editor (Windows notepad…).
Any brave user should be enabled to do so.

You have a full bliotux template, including an SVG layout (possibly including animation) and Javascript interactivity.
Now let’s create a page based on this template.

Name the folder with the page name

In this example, let’s name a first page

Sesamath_CP_page-094_exercice-001

along the name of a French free (as in free speech) textbook vendor.
In order to do so, we create this folder:

wecena.bliotux/pages/Sesamath_CP_page-094_exercice-001/

When we want to access this page, we’ll have to direct our web browser to such an URL as

file:///home/jean/wecena.bliotux/index.xhtml?page=Sesamath_CP_page-094_exercice-001

Define the template this page uses

Which template will this page use ?
The answer comes as a Javascript file we have to create:

wecena.bliotux/pages/Sesamath_CP_page-094_exercice-001/data.js

This file contains the declaration of variables describing this page.
The variable called template defines the template to be used for this page:

var template = 'simpleOperation';

Populate the template

The next variable in this

data.js

file define data which will get injected into the template so that
the page is built :

var data = {
  '.pageCentaine':'',
  '.pageDizaine':'9',
  '.pageUnite':'4',
  '.exerciceCentaine':'',
  '.exerciceDizaine':'',
  '.exerciceUnite':'2',
  '.operande1Centaine':'',
  '.operande1Dizaine':'',
  '.operande1Unite':'7',
  '.operateur':'-',
  '.operande2Centaine':'',
  '.operande2Dizaine':'',
  '.operande2Unite':'5',
  '.resultatCentaine':'',
  '.resultatDizaine':'',
  '.resultatUnite':'',
};

This data associative array lists (key, value) pairs which define which content should be injected where.
The key (for instance

.pageCentaine

) is a jQuery selector to be applied to the root of the SVG template.
The value is some SVG code which is to be inserted as the content of any SVG element matching the key.

Rather than using

id

attributes as selectors (

#pageCentaine

), it seems preferable to use

class

attributes (

.pageCentaine

) which carry the meaning (semantics) of the corresponding SVG element and can be reused
several times in the same template (whereas IDs should be unique, I suppose).
Anyway, the SVG template should be edited so that the corresponding

class

attribute are present where needed.

Include some page-specific graphics

Using the mechanism of templates and the data.js file, you may have your SVG template include some areas where
pages could have specific bitmap (JPEG, PNG) files displayed.
This is just the matter of including such a JPEG file in the

layout.svg

file,
giving the corresponding SVG element an appropriate class attribute (using Inkscape XML editor for instance)
and then defining in

data.js

the name of the picture file to insert in this area of your layout for this specific page.

But you can also have given pages include full SVG files.
For instance, the left part of

simpleOperation/layout.svg

is meant to display a funny but didactic illustration
where characters (such as Tux the penguin) invite the child to perform the mathematical operation at hand.
Such an illustration could contain page-specific animations.
Adding an animated GIF file would not be enough.
The full power of SVG for animations may be required.
In such cases, you can define an svgParts variable in the data.js file of the page :

var svgParts = {
  '#illustration': 'illustration.svg'
}

This variable says : « Hey, bliotux, please look at my template
and find the SVG element with

illustration

as the value of its

id

attribute.
Then replace this full SVG element with the first

g

element (SVG group) you will find
in the

illustration.svg

file sitting under this page folder. Thanks. »

That’s it

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
on your hard drive):

file:///home/jean/wecena.bliotux/index.xhtml?page=Sesamath_CP_page-094_exercice-001

Side note : Now I realize I can’t use doctestjs for this document so it’s pretty useless to me.
It would have been much useful if only I had figured out a way to have some Javascript code generate
a template document in the filesystem during the doctest so that I can further test bliotux on it
using doctestjs. Maybe later…

SMIL-animated SVG for accessible textbooks

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 this obstacle, the nonprofit organization I currently work for 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’ve heard of any similar initiatives ?

Their first attemps were made using a French e-learning authoring tool called Didapages. Up to version 1.1 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.

Free software packages such as Xerte, eXe, Scenari, Docebo 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.

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 :

  • HTML 5 for content, with its Javascript-animated « canvas » element for sprite-based animations (for bitmaps graphics) ;
  • SMIL for animated documents and for limited interactivity, possibly also combined/extended with Ecmascript for more interactivity ;
  • CSS for styling, possibly some day with Webkit-like CSS animation but this option does not excite me much ; CSS animation may require Javascript or SMIL
  • SVG for graphics : there is such a thing as SVG Animation, 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).

The advantage of SMIL and SMIL-animated SVG over Flash seems to be that SMIL is a declarative technology. This « document » 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 ReSTfullness (restafari !). It does not cause cancer. Well, I don’t know. It tastes good. (note to myself : consider discarding this whole paragraph) :)

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 DAISY profile for SMIL documents. I should have a deeper look into these profiles.

But interactivity with specific application logic seems to require a bit of scripting anyway, doesn’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.

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.

But the problem is that these standards are still « emerging ». 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’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 RaphaelJS Javascript library allows browsers to support animated SVG even if such a support is not built-in for them. As far as I understand, the Ample SDK allows SMIL animations to be supported by non SMILable browsers, too.

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. Limsee2 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. Limsee3 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 ?

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…

Madswatter and Ajax animator are very early prototypes for animation authoring environments. There are other free software attempts currently aiming at proposing a proper animation editor: clash/geesas (which is a fork of pencil) and moing… Maybe you’ve heard of other projects ? Inkscape has some plan for introducing SMIL authoring capabilities. There even is a mockup of the user interface for the timeline-based authoring of animations. This is work in progress. Well, maybe this is more than just a work on blueprints : the Inkscape roadmap 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 !

That being said, I realize I already have a tool for authoring animations. It’s Open Office Impress. And the Impress wiki tells me that its animation are based on SMIL ! 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.

Instead of using elearning-specific authoring tools (think Xerte, eXe, …), 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 « properties » window of any object even reveals some event fields for Ecmascript/Javascript instructions (onclick, onmouseover, etc.). Too bad Impress can’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. I read the SCORM is not ideal as such an API from an accessibility perspective because it heavily relies on Javascript (it is a Javascript API). But does the use of a scripting language always prevent accessibility ? I don’t know. SCORM may be nice for portability from LMS to LMS. But so nice for accessibility.

At the moment, I feel like the ideal authoring chain of tools for educational content / textbooks would be as follows :

  1. Inkscape in order to create the graphism, layout and animation of individual educational « applets » : cross words, coloring books, simulations, geometry tools, … 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
  2. an ECMAscript code editor (I am not into this emacs thing… Eclipse anyone ?) in order to transform this animated SVG file into an animated AND interactive SVG piece of content
  3. 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
  4. More scripting edition of this document if needed (but would it be needed at this stage ? I can’t tell)
  5. 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 ?)
  6. a SCORM packager such as Reload Editor 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
  7. Your favority Moodle-like LMS platform would serve the content to users, possibly running on their laptop in an offline fashion

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.

Now it’s your turn. What do you think ?

La téléconférence du geek

Une grande SSII a enfin signé avec l’une des associations qui bénéficie du wecena. Le communiqué de presse est prêt. L’appel au volontariat destiné aux 4000 salarié est prêt à être envoyé. Il ne me manquait plus qu’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’ai donc dû mettre au point un système de téléconférence spécial geek dont j’espère bientôt faire la démo. Voici mes notes de travail, prenez-en soin !

Sous ubuntu 9.04, j’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’image de votre bureau, des animations, du texte, un canal IRC, une vidéo Youtube, le flux video d’une vraie webcam branchée sur le PC…
Mettre la sortie en 320×240 pour éviter tout risque d’incompatibilité avec le site qui va diffuser la vidéo (ustream.tv par exemple).
WCS créé un device « Video loopback » de type « Video 4 Linux » (et pas Video 4 Linux 2).
Lancer l’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.
Aller sur ustream.tv et y créer son compte utilisateur.
Sur le site de webcamstudio, il y a une explication pour savoir comment faire en sorte que flashplayer accepte d’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 : « toujours autoriser www.ustream.tv, cdn1.ustream.tv » (et aussi quantserve. com ?).
Puis se logger dans ustream et aller dans l’interface de broadcast. Y sélectionner son périphérique vidéo (video loopback) et son périphérique audio (« linux microphone »).
Ensuite, il y a un certain nombre de réglages à faire pour avoir du son diffusé. On lance donc l’utilitaire « pavucontrol » de pulseaudio sur ubuntu (à partir de la 9.04). Cet utilitaire permet de :

  • régler chaque périphérique audio d’entrée (les sources) et de sortie (les sinks)
  • régler aussi les « moniteurs » qui sont des genres de périphériques virtuels créés par pulseaudio ; notamment, pulseaudio créée un « moniteur » 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’enregistrer à nouveau ou le diffuser en streaming par exemple,
  • 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 « moniteurs » ; en l’occurence avec une seule carte son en sortie (pas de casque audio USB), vous n’avez qu’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… Vous suivez ? J’explique…

En pratique, le périphérique de sortie par défaut, c’est la sortie carte son (un casque dans mon cas). Et le périphérique d’entrée par défaut, c’est mon microphone du casque audio. Je mets en sourdine le microphone de ma webcam.
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 :

  1. en tant que logiciel de lecture (c’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’écho).
  2. mais aussi et surtout en tant que logiciel d’enregistrement (c’est l’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.

Le problème, c’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’écho dans les oreilles. Donc ma voix n’est plus capturée par l’applet flash de firefox/ustream puisque celle-ci est maintenant associée au moniteur de la sortie son.
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.
parec apparaît dans pavucontrol en tant que logiciel de capture son à qui on demande de capter l’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’écho. Tant pis, on diminue le son dans le casque (physiquement), si ça gêne.
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.
Maintenant, l’audioconférence. Pour cela, j’utilise un softphone, en l’occurence Twinkle (ou parfois Ekiga). J’ai un compte SIP chez un opérateur de voix sur IP. Je recommande ippi.fr, c’est gratuit. Ippi.fr offre (gratuitement via SIP) des salles d’audioconférence. J’appelle donc avec twinkle cette salle d’audioconférence. Twinkle apparaît dans pavucontrol à la fois comme logiciel de lecture et comme logiciel d’enregistrement. En tant que logiciel d’enregistrement, je lui demande simplement d’enregistrer ma voix. En tant que logiciel de lecture, je lui demande juste de faire son travail, c’est-à-dire d’envoyer le son produit par les interlocuteurs de l’audioconférence vers la sortie de ma carte son, de manière à ce qu’il puisse être capté, comme ma voix à travers le moniteur pulseaudio de cette sortie, sur lequel est branché la capture audio de firefox/ustream.
Et voila.
Les inconvénients actuels :

  • ça bouffe un max de CPU tout ça : twinkle, webcamstudio, firefox avec l’applet flash de ustream, pulseaudio en plus. C’est tout juste tenable sur mon laptop dual core 2×1,2 GHz. On peut rendre les choses vivables grâce à un ajustement des priorités via « sudo htop ». pulseaudio tourne d’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’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’image si on demande à ustream d’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.
  • j’entends de l’écho quand je parle (à cause de parec|pacat). Possibilités de contournement : est-ce qu’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’ai fini de parler. Autre possibilité : trouver un moyen pour dire à pulseaudio qu’un logiciel de capture devrait combiner 2 périphériques d’entrées au lieu d’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).
  • ma webcam est une caméra sur batterie, il faut que je pense à la brancher sur secteur sinon… elle se vide.
  • il faudrait voir si on ne peut pas diffuser une meilleure qualité d’image (640×480) et ce que ça implique en terme de CPU.

Au final, je me dis qu’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 « portable »…

Sauvegardes à distance pour associations ou PME

Mercredi dernier, j’ai rencontré Reporters d’Espoir, une association d’intérêt général qui a une activité d’agence de presse diffusant des informations et actualités positives au sujet de solutions innovantes pour des problèmes majeurs de société. Reporters d’Espoir emploie quelques permanents et journalistes et dispose d’une dizaine de PC, comme une petite PME ou de nombreuses autres petites associations employeur. Quand on a ce type d’organisation et que l’on n’a aucun informaticien sous la main, on manque cruellement de solutions informatiques basiques telles que, par exemple, un système de sauvegarde fiable.

Idéalement, une telle association aurait pu trouver un geek linuxien qui leur aurait installé un vieux PC sur le réseau local, sous Ubuntu, et qui aurait paramétré BackupPC pour que le problème des sauvegardes soit réglé.

A défaut d’avoir accès à ce type de compétences, je leur ai plutôt recommandé d’avoir recours à un fournisseur de sauvegarde à distance, via Internet. Voici donc quelques indications pour les aider à sélectionner le fournisseur de sauvegarde à distance (« remote backup », « online backup ») le plus adéquat.

Avec ce type de service, le principe est d’installer un logiciel client sur chaque PC à sauvegarder. A intervalles réguliers, ce logiciel se connecte à un serveur du fournisseur de sauvegarde et y copie les nouvelles données repérées sur le disque dur (sauvegarde incrémentale). De temps en temps, il fait aussi une sauvegarde complète. Bien sûr, il faut pour cela paramétrer ce logiciel sur chaque PC. A moins, encore mieux, que le fournisseur ne propose une page Web sécurisée qui permet de piloter de manière centrale le paramétrage de sauvegarde de tous les logiciels clients de sauvegarde installé sur les PC de l’organisation. Une interface Web permet également de déclencher des restaurations de données en cas de crash (avec accès à un historique complet de ces données). Le fournisseur fait payer soit au nombre de PC à sauvegarder soit à la quantité de données à conserver (espace disque) soit une combinaison des deux.

Pour comprendre ce dont il s’agit, avec d’autres mots, lisez ceci. Plus précisément, mais en anglais, voici un article d’introduction. Et une liste de fournisseurs possibles (les fonctionnalités indiquées dans la colonne « commentaire » peuvent avoir leur importance). Un petit sondage pour repérer quelques noms de fournisseurs parmi les plus populaires. Enfin, quelques autres articles peut-être intéressants pour repérer le bon fournisseur :

Le mieux à faire est de :

  1. lire les 1ers articles ci-dessus pour comprendre ce qui fait la différence entre un bon service de sauvegarde et un service inadéquat
  2. repérer les 3 services les plus populaires
  3. les essayer pendant quelques temps (y compris essayer les fonctionnalités de restauration)
  4. après essai, en piocher un et s’y abonner

Bonne chance.
Et vous, avez-vous déjà essayé ce type de service de sauvegarde à distance ? Qu’en avez-vous pensé ?

Mobile health applications for Africa

My friends at Pesinet are building a mobile health technology and system which will save the life of thousands of babies in poor countries such as Mali, in Africa. It happens that I identified several similar solutions and I want to share these pointers with them (and with you !).

The open mobile consortium (OMC) is definitely an organization Pesinet should get to know in details and consider joining. RapidSMS is a mobile, SMS-based, data collection solution promoted by the OMC.Rapid Android is a mobile, Android-based system also by the OMC. The Open Data Kit is another OMC solution for mobile data collection and exploitation. Mesh4X, yet another OMC solution, for information sharing. CommCare aims at supporting mobile health workers. The OMC does not only provide technology but also access to expertise and insights from other social innovators.

LittleFish is another open source initiative which aims (aimed until 2002 ?) at providing  technologies for mobile health workiers. Why do they seem to have stopped ? Maybe there are some interesting lessons to learn from their experience for Pesinet ?

The Grameen Foundation runs an « AppLab » program which aims at creating applications and technologies for social development. One of their project builds technology for community health workers in Ghana (also funded by the Bill and Melinda Gates Foundation).

Do you know any other similar initiatives ?

How to record VoIP calls from your PC ?

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…).

For instance, this week, I could not physically join an interesting meeting between French NGO leaders and IT professionnals considering how to best volunteer for these NGOs. 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… to record a big MP3 file of the 3-hours long discussion.

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 Twinkle (greater than Ekiga IMHO). My voice-over-IP provider was our Asterisk server. I could have used any other free SIP provider, such as ippi. Ippi is great and I am a happy customer of their service.

I was also running the Wireshark packet sniffer 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 Audacity to normalize, level and compress the audio and to save it as a big podcast-ready MP3 file.

The tricky parts :

– The Siemens Gigaset can’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’d better configure the phone to use a sip:mygigaset@sipprovider.org account rather than a sip:mygigaset@anotherprovider.org Too bad… :(

– 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.

– 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 « Can’t hear you ! » 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 « the phone » and say « Hello, phone, how are you ? » 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.

– Distant participants like me would use the « mute » feature of  their local (soft-) phone so that they can’t be heard when not talking, so that there is less background noise in the conversation.

– 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 « Can’t hear you ». 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.

– 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.

– 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 « OICQ » packets. So I had to force wireshark into considering them as RTP files (using its « Decode… » command).

– In order to have wireshark decode and save an audio file from the RTP streams, the command to be used is « RTP / Show all streams » from its « Statistics » menu. Then you use the « Analyze » button and then the « Save Payload » button. I had to select the « .raw » (vs. « .au ») format for the audio file because of the codec used by the VoIP phones.

– 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).

– 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.

That’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 ?

Le wecena sur Planète Terra : qui sera le premier mécène ?

Planète Terra, c’est le site Web d’actualité du développement durable, petit frère du magazine Terra Economica. Planète Terra consacre un article à Wecena dans le cadre de sa présentation des projets soutenus par l’incubateur social Antropia (ESSEC/Caisse d’Epargne).

J’en profite pour rebondir sur la fin de l’article :

Mais aucune SSII n’a encore signé avec Wecena. Les circuits de décision sont longs. « Je les travaille au corps » assure Jean Millerat.

En effet, ça fait bientôt 2 ans que je me consacre à temps plein à ce projet. Environ 9 mois pour amorcer le dispositif, identifier les premiers projets associatifs et atteindre les premiers contacts sérieux avec des directions de moyennes et grosses SSII. Puis 1 an de travail avec ces directions pour les préparer à franchir le pas. Faut-il s’étonner qu’aucune SSII n’ait encore signé ?

Je vous avoue que, moi aussi, je commence à trouver le temps long… Après tout, il faudra bien que, d’une manière ou d’une autre, je nourisse ma famille nombreuse lorsque j’aurai épuisé mon financement actuel ! A force de croiser les doigts pour un démarrage « dans les semaines qui viennent », je me demande si je ne vais pas me faire des noeuds et avoir quelques difficultés pour taper au clavier.

D’un côté, il y a des raisons de douter du succès et je vais partager avec vous 3 histoires de SSII qui hésitent et n’arrivent pas (encore) à passer à l’acte :

La 1ère SSII emploie quelques milliers de consultants. Après plusieurs mois de préparation avec la responsable communication et mécénat, nous arrivons en septembre 2008 et avons obtenu l’accord de principe des principales directions de la boîte : managers de business units, direction financière, direction développement durable du Groupe, direction RH… Le DG est bienveillant. On envisage une signature « pour octobre, novembre ou décembre, le temps de prendre le DG entre 4-zyeux pour lui demander son feu vert final ». Mais la crise éclate, un gros projet interne prend du retard et bloque les nouvelles initiatives, le DG se met à douter (ne devrait-on pas plutôt essayer de faire faire de la recherche à nos intercontrats pour obtenir du crédit d’impôts recherche ?)… Le projet de signature est repoussé aux calendes grecques alors que j’y avais cru pour fin 2008. Glurps.

Deuxième SSII, deuxième histoire, également quelques milliers de consultants. Le président est très intéressé et souhaite démarrer quelque chose. Il exprime sa préférence pour l’un des projets bénéficiaires. Mais attention, « ne dites pas à mes managers qu’il s’agit d’un petit projet pilote » cela risquerait de les démotiver. Un an plus tard et malgré RDV et échanges par email, la responsable mécénat n’a toujours pas eu le temps d’étudier de près « les aspects administratifs et financiers » du wecena et le projet semble dans les choux. Déception.

Troisième SSII, quelques centaines de consultants, un comité de direction super-dynamique et qui m’accueille dès les jours suivants notre prise de contact. Je leur envoie la liste des projets à soutenir mais ils n’ont pas assez de compétences « nouvelles technologies » actuellement en disponibilité. En effet, il y a peu de demandes pour de compétences AS/400 ou mainframe dans le monde de l’innovation sociale. Qu’à cela ne tienne, je leur trouve un projet ne nécessitant aucune compétence nouvelles technologies. Quand est-ce qu’on démarre ? Je relance une dizaine de fois. Ils ne semblent plus avoir de raisons d’hésiter mais… 3 mois plus tard et c’est toujours le silence radio (ou presque, cf. plus bas).

Alors, on peut se permettre de douter n’est-ce pas ?

Oui, mais… la première qualité de l’entrepreneur serait, paraît-il, la perséverance. En plus, dans l’économie de communion, on n’oublie pas que l’on n’est pas seul aux commandes de sa boîte : il y a beaucoup de soutien, de sympathie et d’amour porté à ce projet. Certains croient même que j’ai un associé invisible qui me porte sur ses épaules ! :)

Plus concrètement, j’ai de bonnes raison de rester optimiste :

La première SSII vient de reprendre contact avec moi et nous envisageons ensemble une nouvelle manière de fonctionner : si ils me donnent un très fort engagement de volume et de durée ne pourrais-je pas minorer mes marges de sécurité (me permettre d’embaucher avec moins de risque par exemple) et, du coup, proposer une offre encore plus attrayante pour les aider à franchir le pas ?

La responsable administrative et financière de la troisième SSII me l’a promis : son directeur général va me rappeler dans la semaine pour me dire si oui ou non ils sont partants.

Et puis, je gardais le meilleur pour la fin, il y a d’autres SSII en course :

  • suite à mon passage dans 01 Informatique et sur BFM Radio, le DG d’une SSII d’envergure mondiale me convoque avec son bras droit, demain après-midi, pour envisager un démarrage prochain,
  • plusieurs SSII de taille moyenne (quelques centaines de consultants) étudient encore mon offre et je dois les relancer,
  • surtout, une quatrième grosse SSII de plusieurs milliers de consultants, avec laquelle je suis en relation depuis un an, arrive au bout de son processus de décision : le comité exécutif a donné son feu vert, les représentants du personnel ont été consultés, le président a annoncé l’ouverture prochaine du wecena pour leurs intercontrats, nous peaufinons les conventions avec les associations bénéficiaires et préparons un joli PDF pour les managers de manière à leur rappeler tous les aspects du processus de gestion du volontariat automatisé via wecena.com ; la directrice communication prévoit une page spécial wecena dans son journal interne de mi-juillet 2009 en espérant pouvoir y mettre les témoignages des premiers volontaires !

Comme dirait ma moitié, tant qu’il n’y a pas un sous qui arrive en banque, on ne peut être sûr de rien. Mon papa, un peu plus optimiste (quoique aussi prudent) me demandait quand il pourrait sortir la bouteille de champagne. Je lui demande d’attendre l’arrivée effective du premier volontaire sur l’un des projets qui bénéficient du wecena. Alors, les paris sont ouverts, qui sera la première société à apparaître dans la catégorie « Mécènes » (à surveiller sur wecena.com!) et quand ? Un volontaire de la 4ème SSII dès mi-juin ? La 3ème SSII dès courant mai ? Une SSII mystère dès juillet-août ? Personne parce que la grippe de porcinet va tous nous tuer cet été ?

« SSII: 3 solutions pour réduire les intercontrats » (01 Informatique)

01 Informatique fait sa Une, cette semaine, avec le wecena dans un dossier : « Trois pistes pour réduire les intercontrats dans les SSII« . Les 2 autres pistes sont le chômage partiel et le prêt de salariés à un partenaire qui en aurait besoin au sein d’un même pôle de compétitivité (pour les SSII qui en font partie).

La piste wecena a pour avantage de créer de la valeur en termes de motivation, de fidélisation, de sens donné à son métier et d’image d’entreprise citoyenne au plus fort de la crise. Et, surtout, le wecena contribue à résoudre des problèmes majeurs de notre société : accessibilité et handicap, accès au savoir et éducation, santé, lutte contre la pauvreté, insertion et création d’emplois, … bref, le wecena rajoute une sacré dose d’humain dans les intercontrats.

Notez que je serai également interviewé sur BFM jeudi 23 avril 2009 à 23H (émission 01 Business, téléchargeable en podcasts).

Dans le même numéro 1990 du 16 avril de 01 Informatique, il y a également une enquête intéressante sur les logiciels libres avec un spectre assez large d’interviewés, d’Alexandre Zapolski (Linagora) à Frédéric Couchet (April / FSF France).

Tant que j’y suis, dans le numéro précédent, on pouvait lire un écho du post de Christian Fauré sur « la prolétarisation dans les sociétés informatiques ». Petite anecdote à ce sujet : étant donnée la durée forcément imprévisible et courte des intercontrats mis à disposition du monde associatif via le wecena, certaines de mes associations clientes commencent à parler des volontaires sous le terme d' »ouvriers Bac+5″. En effet, le plus simple pour elles est de commencer par leur confier des tâches pour lesquelles elles seront sûres que les volontaires pourront se rendre utiles dès les premières 48H de présence.

Exemples de travaux de ce type récemment évoqués avec les associations :

  • référencer sur informatique un stock de 100.000 livres destinés à l’envoi en masse à des bibliothèques locales de pays du tiers-monde (Afrique, Haïti…)
  • permettre à des enfants handicapés de rester dans des classes « normales » en rendant accessible sur informatique les centaines de pages des manuels scolaires utilisés par leur enseignant habituel (eh oui, qui dit handicap et « manuel pour handicapé » dit aussi « difficulté pour rester dans la classe où un manuel non spécialisé est utilisé »… pouvoir poursuivre une scolarité normale malgré un handicap tient parfois à peu de choses)
  • initier à l’informatique 1.000 bénévoles qui sont des employés à la retraite et ne sont pas à l’aise avec l’informatique

Bref, avec le wecena aussi les tâches proposées au volontaire sont parfois relativement « ouvrières ». Mais à la différence des tâches plutôt déshumanisantes dans un environnement de génie logiciel industrialisé, il s’agit avec le wecena de permettre à un consultant AS/400 en intercontrat de pouvoir, lui aussi, servir une grande cause alors que son expertise AS/400 ne rencontre pas (ou peu) de besoins réels dans le monde de l’innovation sociale. Il s’agit, pour les associations, de pouvoir profiter de la motivation et de la bonne volonté de tout volontaire en intercontrat quelque soit son expertise. Notez quand-même qu’on a aussi des besoins beaucoup plus « classiques » de conseil en architecture, de développement Web, de conception de base de données, d’administration système & réseau, etc. Les volontaires motivés et qui ont les compétences pointues dont les assos ont justement besoin sont les bienvenus !

Mais le rapprochement entre l’expression « ouvriers Bac+5 » que j’ai entendu de la bouche de responsables associatifs (sans mépris aucun, au contraire) et la tendance à la prolétarisation dans certains environnement de développement m’a amusé.

Que puis-je faire pour vous ?

[Vous pouvez télécharger mon CV 2009 au format PDF en cliquant ici. Pour une version plus complète, lisez la suite…]

Vous envisagez de vous fier à mes compétences, de faire affaire avec moi et j’ai bien envie de vous y encourager. Se vanter, c’est obscène mais se vendre, c’est nécessaire… Alors je vais me permettre de vous faire l’article, de faire ma pub éhontée devant vos yeux que j’espère indulgents et ébahis : mon parcours professionnel, mes domaines de compétences, mes principales réalisations.

L’exercice n’étant pas évident sur un blog (ni ailleurs, d’ailleurs), veuillez pardonner ma maladresse certaine, mon regretté pédantisme et les prétentions forcées qui s’ensuivent.

Mon parcours professionnel

De 1994 à 1998, l’Ecole Centrale de Lille, le Val Fourré, le CEA, la délégation interministérielle à la ville

De 1994 à 1998, j’obtiens le diplôme d’ingénieur à l’Ecole Centrale de Lille et j’y multiplie mes premières expériences : consultant nouvelles technologies auprès de PMEs européennes, chercheur en ingénierie de la connaissance pour EDF, administrateur réseau pour les élèves de l’école. Stagiaire au sein des quartiers sensibles du Val Fourré, j’invente et j’expérimente des technologies hypermédias pour la communication de proximité. Stagiaire puis consultant pour le Commissariat à l’Energie Atomique en France puis pour l’ONU et son Agence Internationale à l’Energie Atomique à Vienne, j’évalue les risques d’usage de l’Internet pour la prolifération nucléaire. En service civil à la délégation interministérielle à la ville et en tant que cofondateur d’une association nationale de soutien à l’insertion des jeunes des banlieues, je déploie de l’informatique et de l’Internet dans 10 quartiers en difficulté et en administration centrale.

1998 jusqu’à 2000 : ma première expérience d’entrepreneur

De 1998 à 2000, je me lance dans l’entreprenariat et je créé Reliance SARL avec un camarade de promotion de Centrale Lille : conseil en informatique et veille sur Internet pour de grands comptes du secteur public, de l’industrie et des télécoms. Mon associé et moi entrons malheureusement en conflit et nous devons nous séparer. Je liquide la société.

De 2000 à 2005 : je « webise » Saint-Gobain

En 2000, je rejoins la direction des systèmes d’information du groupe Saint-Gobain en tant que chef du groupe développements Web. Je transforme cette équipe de 5 développeurs Web en une « usine à projets » nouvelles technologies de 20 ingénieurs, consultants et chefs de projets. Je supervise la réalisation de 100 mini-projets intranet en 5 ans et je dirige le projet identités électroniques du groupe : 10 millions d’euros sur 8 ans pour authentifier, gérer et sécuriser l’identité électronique des 200.000 salariés auprès des 1000 systèmes informatiques du Groupe.

De 2005 à 2007 : vive la recherche dans les Motorola Labs

En 2005, je rejoins les laboratoires de recherche appliquée de Motorolaje dirige l’équipe française de recherche en systèmes de recommendations personnalisées pour applications mobiles et multimédia (Web 3.0 ?) : 7 chercheurs et ingénieurs de recherche spécialisés en apprentissage et raisonnement automatiques (machine learning), architectures distribuées (context-aware et agent-oriented), web sémantique et ingénierie de la connaissance (knowledge engineering).

Depuis 2007 : de l’innovation technologique pour l’innovation sociale, j’invente le wecena

En 2007, je quitte Motorola pour lancer une entreprise à vocation sociale: Wecena. Je conçois et j’implémente un modèle économique très innovant pour permettre au monde associatif d’appuyer leurs innovations sociales sur la créativité et les compétences technologiques des professionnels de l’informatique, sans que cela ne coûte un euro ni aux associations bénéficiaires ni aux SSII mécènes qui les soutiennent.

Mes domaines de compétences professionnelles

Mon parcours m’a permis d’exercer quatre domaines de compétences :

  • l’informatique,
  • le conseil,
  • le management
  • et l’innovation.

J’ai une bonne maîtrise des techniques informatiques depuis l’architecture applicative jusqu’au fonctionnel en intelligence économique et en knowledge management : ingénierie des connaissances pour les télécoms et l’industrie mais aussi intelligence économique et veille pour le tertiaire et le secteur public, travail collaboratif, portail et gestion de contenu Web pour les PME et les multinationales, intelligence artificielle et architectures de mobilité pour les téléphones et appareils multimédias. J’ai également une bonne expertise en gestion des identités électroniques (SSO, provisioning, méta-annuaires) pour sécuriser et faciliter les accès de 200 000 utilisateurs à 1000 systèmes informatiques (voir aussi ceci). Je sais analyser et concevoir des architectures informatiques complexes et durables pouvant nécessiter 20 serveurs répartis en plusieurs datacenters à travers le monde. Je maîtrise l’essentiel du génie logiciel et, en particulier, la conception et le développement Web orienté objet (Java, Python, Perl). Je suis un « champion » de l’open source.

En matière de conseil, je suis capable de mener des missions d’audit, d’analyse de données, d’évaluation de projets et de réorganisation de processus administratifs. Je sais mettre en ½uvre des méthode d’expression et d’analyse de besoins pour formaliser des cahiers des charges fonctionnels. Je sais former mes clients à ces méthodes et leur faire partager par une communication participative ma vision des meilleures options possibles. Ces missions de conseil peuvent m’amener à travailler avec jusqu’à 130 interlocuteurs par projet, représentant tous pays et toutes fonctions dans l’entreprise, depuis le directeur financier français jusqu’au technicien informatique tchèque en passant par le responsable de service RH anglais et les chercheurs américains ou indiens. Mes interlocuteurs peuvent également être des chefs d’entreprise d’insertion, des responsables associatifs ou des dirigeants de fondations d’utilité publique.

En matière de management, je peux diriger des projets informatiques et de conduite du changement complexes, pouvant requérir des investissements jusqu’à 10 millions d’euros et s’étaler sur 8 ans. Je suis capable de diriger des équipes techniques de 20 personnes en charge d’une multiplicité de petits projets, comme par exemple 20 projets menés de front, allant de 20 jours.hommes à 200 jours.hommes. Je mets en place les outils et procédures de contrôle de gestion qui me permettent de piloter ces activités de prestation de service. Je sais recruter et coacher des collaborateurs informaticiens de 20 à 40 ans aux profils variés : de l’ingénieur grande école à l’informaticien autodidacte en passant par le chercheur universitaire. Mais je sais aussi travailler en relation de soutien avec des personnes en situation difficile sur le plan psychologique ou social.

Mon coeur de métier, c’est l’innovation : savoir mener toutes les étapes du lancement d’une nouvelle activité depuis la veille jusqu’à la vente en passant si besoin par la création d’entreprise. Je sais conduire un processus de veille pour détecter l’émergence de techniques, d’usages ou de besoins dans les domaines du traitement de l’information et de la documentation, de la communication en ligne et de l’innovation sociale. Je sais inventer, expérimenter et évaluer des algorithmes, architectures et logiciels informatiques mais aussi des principes de management et des modèles économiques et fiscaux à la pointe de la recherche. Je peux produire des brevets et des publications scientifiques. Je suis capable de travailler mes inventions avec des publics très différents et multiculturels: depuis les grands comptes privés ou du secteur public jusqu’aux habitants de quartiers en difficulté. Je peux ensuite monter des business plan rigoureux et mobiliser des énergies pour trouver associés, financeurs, clients et partenaires. Je sais créer une entreprise ou une association. Enfin, je suis capable de manager et de vendre ces projets innovants ou les prestations associées à des grands comptes de l’industrie, des services ou du secteur public.

En résumé, je prétends être un entrepreneur capable de lancer des activités innovantes en lien avec les nouvelles technologies, de manager des équipes projet et d’accompagner des grandes organisations dans la conduite de changements, y compris lorsqu’il s’agit de relever des défis à forte ambition sociale.

Mes réalisations

Vous retrouverez le résumé de mes principales réalisations dans la rubrique « ma pub » de ce blog !

Logiciels de elearning

Parmi les associations qui bénéficient du wecena, il y en a plusieurs qui travaillent autour de problématiques de formation assistée par ordinateur (à distance ou non). Il est donc plus que temps que je fasse un petit tour des logiciels (libres) du domaine, dont j’entends régulièrement parler. Faisons-le point.

Il y a les plates-formes d’elearning (pour publier les contenus pédagogiques et gérer les parcours d’apprentissage), qu’on appelle également des Learning Management Systems (LMS) :

  • Moodle, anglo-saxon, une énorme communauté, toutes les fonctionnalités imaginables au prix d’une éventuelle complexité pour les nouveaux utilisateurs,
  • Claroline, une forte communauté francophone, un petit peu moins de fonctionnalités que Moodle, mais, prétend être, du coup, plus simple à utiliser,
  • Ganesha, bien moins populaire, ayant des soucis de site web et associé à un prestataire de service (c’est parfois un plus)
  • dans la communauté Plone, on trouve la plate-forme e-LECT et la plate-forme ZSchool (les deux supportent SCORM) mais ce n’est sans doute pas très répandu quoique probablement très pro (comme souvent dans les produits Plone) ; à titre anecdotique, j’aime bien la simplicité PloneQuiz

Ensuite, il y a les logiciels de création de contenus pédagogique (authoring tools) :

  • eXe (quelle idée d’avoir choisi un nom aussi mal référençable !) semble être le leader en terme de popularité
  • xerte, qui a l’avantage de produire des contenus exportables en Flash et offre beaucoup plus de types d’objets de base (images avec légendes, interfaçage avec flickr…) mais a pour énorme inconvénient de ne tourner que sous windows (dommage pour du libre…) !
  • pour les quiz, certains préfèrent utiliser directement le module de quiz de la plate-forme de formation
  • Didapage, le français, n’est pas libre (mais aurait vocation à rester gratuit ?)

Le standard le plus important pour garantir la portabilité des contenus pédagogiques d’un support LMS à l’autre, ça semble bien être SCORM.

Enfin, quand on fait de la formation informatique, on a souvent besoin de faire des videos de capture d’écran (screencast). Pour ce faire, sous linux ubuntu, il y a un logiciel libre super simple à utiliser (qui capture également les commentaires audio), c’est record-my-desktop. Dans une autre vie, j’avais utilisé pyvnc2swf sous Windows mais pyvnc2swf est franchement moins facile à utiliser que record-my-desktop (et je n’avais pas le son).

Conclusion, une bonne panoplie passe-partout, c’est Moodle + eXe + record-my-desktop. Les plus aventureux pourront tenter un e-LECT sur Plone à la place de Moodle. Les adeptes de la simplicité de paramétrage se sont satisferont d’un claroline à la place de Moodle.

Vous qui avez déjà de l’expérience en matière de e-learning, ai-je dit des bêtises ?

1 million de salles d’attentes… pour la recherche scientifique

Hier soir, je tchattais avec mon pote Yann. Comme à notre habitude, on échange nos idées farfelues du moment. Cette fois-ci, c’est mon tour. Qu’en pensez-vous ?

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

Qu’en pensez-vous ? Vous connaissez une salle d’attente accueillante pour un de mes vieux PC ?

Le code du wecena est libre

« Vive le wecena libre ! » comme qui dirait l’autre. Ce petit message pour signaler à ceux que cela intèresse que j’ai libéré le code qui me permet de faire tourner wecena.com. En d’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 de produits d’extension pour le système de gestion de contenu Web Plone. 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’un annuaire LDAP.

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 !

How to get visual performance profiles from plone doctests ?

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.

[update: added another visualization package, see at the end of the post]

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 !) :

1. Give your python a suitable profiler

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 « hotshot » module is both slow (when loading statistics) and badly bugged : 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 cProfile (which is shipped with python 2.5).

I am a terrible sysadmin and I don’t really understand (and care about) how python manages its pathes and accesses its libraries. So I did this :

  1. download and unzip the source tarball of python 2.5 so that you get cProfile source code
  2. locate relevant files referring to lsprof (the old name of cProfile), using a grep -R lsprof * on the source directory
  3. I personnally located the following files (I leave cProfile test files apart) : Lib/cProfile.py Modules/_lsprof.c and Modules/rotatingtree.* (.c and .h)
  4. download and unzip the source tarball of python 2.4
  5. 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
  6. update python 2.4 ‘s setup.py file so that the line below is added just after the hoshot one : exts.append( Extension(‘_lsprof’, [‘_lsprof.c’, ‘rotatingtree.c’]) )
  7. did I mention I am so bad at hacking things that I don’t even provide a patch for the operations above ?
  8. compile python 2.4 using a ./configure then make

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 import cProfile which should not fail.

I replaced my system python2.4 by then doing a sudo make altinstall 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) :

cd /usr/bin

sudo mv ./python2.4 ./python2.4.5

sudo ln -s /usr/local/bin/python2.4

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 ?

2. Recreate your buildout using this new python version

So that zope gets recompiled using your new python version :

rm -Rf parts bin develop-eggs

python2.4 bootstrap.py

bin/buildout

3. Patch zope testrunner so that it supports cProfile instead of only supporting hotshot

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 parts/zope2/lib/python/zope/testing/. The other one I have is in the zope.testing egg. I don’t know how and why I got such an egg. Anyway, this egg supports both hotshot and cProfile whereas zope 2.10 testrunner doesn’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  parts/zope2/lib/python/zope/testing/testrunner.py. Oops, left version is the modified one, right version is the original one.

38,69d37
< before_tests_hooks = []
< after_tests_hooks = []
< available_profilers = {}
<
< try:
<     import cProfile
<     import pstats
< except ImportError:
<     pass
< else:
<     class CProfiler(object):
<         «  » »cProfiler » » »
<         def __init__(self, filepath):
<             self.filepath = filepath
<             self.profiler = cProfile.Profile()
<             self.enable = self.profiler.enable
<             self.disable = self.profiler.disable
<
<         def finish(self):
<             self.profiler.dump_stats(self.filepath)
<
<         def loadStats(self, prof_glob):
<             stats = None
<             for file_name in glob.glob(prof_glob):
<                 if stats is None:
<                     stats = pstats.Stats(file_name)
<                 else:
<                     stats.add(file_name)
<             return stats
<
<     available_profilers[‘cProfile’] = CProfiler
<
75,98c43
<     pass
< else:
<     class HotshotProfiler(object):
<         «  » »hotshot interface » » »
<
<         def __init__(self, filepath):
<             self.profiler = hotshot.Profile(filepath)
<             self.enable = self.profiler.start
<             self.disable = self.profiler.stop
<
<         def finish(self):
<             self.profiler.finish()
<
<         def loadStats(self, prof_glob):
<             stats = None
<             for file_name in glob.glob(prof_glob):
<                 loaded = hotshot.stats.load(file_name)
<                 if stats is None:
<                     stats = loaded
<                 else:
<                     stats.add(loaded)
<             return stats
<
<     available_profilers[‘hotshot’] = HotshotProfiler

>     hotshot = None
288c233
<     if len(available_profilers) == 0 and options.profile:

>     if hotshot is None and options.profile:
320,324c265,266
<         if available_profilers.has_key(‘cProfile’): prof = available_profilers[‘cProfile’](file_path)
<         else: prof = available_profilers[‘hotshot’](file_path)
<         before_tests_hooks.append(prof.enable)
<         after_tests_hooks.append(prof.disable)
<

>         prof = hotshot.Profile(file_path)
>         prof.start()
335c277,278
<             prof.finish()

>             prof.stop()
>             prof.close()
342c285,292
<         stats=prof.loadStats(prof_glob)

>         stats = None
>         for file_name in glob.glob(prof_glob):
>             loaded = hotshot.stats.load(file_name)
>             if stats is None:
>                 stats = loaded
>             else:
>                 stats.add(loaded)
>
459d408
<                 [hook() for hook in before_tests_hooks]
461d409
<                 [hook() for hook in after_tests_hooks]
656,659c604
<     [hook() for hook in before_tests_hooks]
<     results = run_tests(options, tests, layer_name, failures, errors)
<     [hook() for hook in after_tests_hooks]
<     return results

>     return run_tests(options, tests, layer_name, failures, errors)

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. Thanks to Daniel Nouri for this.

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 : bin/instance debug The prompt you get should allow you to safely import cProfile

4. Profile your test

Say you have a Products called Products.DearProduct with some tests. Profile them :

bin/instance test -s Products.DearProduct –profile

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 manually load and analyze this data. Or have a limited GUI show you what it’s like. Or you can go for the nicer, more insightful version which follows.

5. Visualize and analyze the performance profile you generated

Thanks to Ingeniweb folks, I heard of gprof2dot and xdot. Download them (the scripts, not the folks). Use them to generate and display a very nice graph :

chmod 744 gprof2dot.py

chmod 744 xdot.py

./gprof2dot.py -f pstats -o profile.dot tests_profile.*.prof

./xdot.py profile.dot

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 :

rm -f tests_profile.*.prof && rm -f profile.pstats && rm -f profile.dot && bin/single-instance test -s Products.MyDearProduct –profile > /tmp/test.txt ; ./gprof2dot.py -f pstats -o profile.dot tests_profile.*.prof && less /tmp/test.txt ; ./xdot.py profile.dot

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.

[Here starts the update]

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 « hides » the optimization opportunities of my code. And I don’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 kcachegrind:

sudo apt-get install kcachegrind

sudo easy-install pyprof2calltree

pyprof2calltree -o output.calltree.stats -i tests_profile.*.prof -k

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… Happy I am, happy thou shalt be.

What do you think ?

SSII: scénario de crise vs. développement durable

NB: ce message a un caractère promotionnel, il n’y pas de doute.

La question n’est plus de savoir si les SSII souffriront aussi de la crise mais de savoir si ce sera pour 2009 ou pour 2010. Le scénario catastrophe qui se dessine donc lorsqu’on suit la presse spécialisée est le suivant.

Faisons-nous peur, le scénario catastrophe pour le secteur des services

Actuellement, les SSII recrutent avec prudence : uniquement lorsqu’elles ont déjà un contrat client signé et donc un besoin sûr de personnel. La crise touchant les secteurs financiers puis de l’automobile et, par contagion, toute l’économie ou presque, les affaires se font plus rares qu’à l’habitude. Par conséquent, les taux d’intercontrat augmentent. Et, pour maintenir ces taux au plus bas malgré tout, les prix sont à la baisse. Dès maintenant, et comme dans les autres secteurs, les SSII se sont mises sur la défensive. Ces mesures suffiront un temps.

Fin 2009 ou courant 2010, imaginons que les SSII seront « au taquet » : elles auront fait le maximum pour limiter la casse. Malheureusement pour le secteur, certaines entreprises du secteur ont terni l’image de la profession par des comportements souvent qualifiés de « vendeurs de viande » : on embauche de la compétence « au kilo » et non des femmes et des hommes puis on met une pression abusive sur les ingénieurs en intercontrat pour qu’ils démissionnent lorsque l’entreprise va mal. Et lorsque les SSII seront vraiment au plus mal, ces situations d’abus se multiplieront chez les « vendeurs de viande ». Même les sociétés les plus responsables risquent d’être tentées par la facilité. Et l’image du secteur, déjà pas vraiment folichonne chez les jeunes diplômés, en prendra encore un coup ! Si bien que lorsque les beaux jours reviendront (2011 ?), les SSII seront bien en mal de faire face au rebond de la demande. Les jeunes diplômés, encore moins qu’auparavant, ne voudront pas s’y faire embaucher.

Que faire ?

A mon avis, celles qui s’en sortiront seront les SSII responsables, celles qui auront su se distinguer au mieux du lot des vendeurs de viande, celles qui auront su mériter non seulement la confiance de leurs clients mais aussi la confiance de leurs salariés et de leurs futures recrues. Une gestion prudente (pas d’embauche inconsidérée) et une commercialisation aggressive ne suffiront pas : les vendeurs de viande aussi peuvent le faire. Seules les SSII au comportement responsable et engagé dans une solidarité de crise sauront bâtir une réputation de fournisseur et d’employeur de confiance. Cette dimension d’engagement, c’est ce qu’on appelle la Responsabilité Sociale de l’Entreprise (RSE), la déclinaison « entreprise » du développement durable.

Le problème avec la RSE, c’est ce que ça reste trop souvent de l’ordre du discours joli, des voeux pieux, de quelque chose d’un peu vague, aux contours mal cernés, ou bien encore d’effets de manches et d’image franchement déconnectés de la vie de l’entreprise. Au final, la RSE est vue comme quelque chose qui coûte cher losque l’on passe du discours aux actes, sans certitude du résultat sur la réputation de l’entreprise ni sur l’utilité sociale ou environnementale de ses engagements.

Dans les métiers du services informatique, la RSE devient encore plus compliquée et difficile à cerner : quels actes tangibles vont permettre d’exercer sa RSE et de mériter la confiance des marchés ? La tendance « Green IT » (informatique moins énergivore et moins polluante) concerne avant tout les grands centres de données, les éditeurs et les équipementiers. Que peut-on faire de réellement bien pour la planète lorsque l’on est dans l’économie de la matière grise plutôt que dans celle du silicone ? Inciter ses collaborateurs à moins imprimer ses mails ne mène pas très loin : au mieux quelques économies de consommation d’eau car l’industrie du papier consomme trop d’eau à ce qu’il paraît… Encourager ses salariés à faire du bénévolat, sur leur temps libre, c’est très bien mais, franchement, ça n’est pas très engageant pour l’entreprise ! Offrir à tous ses salariés une journée dans l’année à consacrer à une grande cause, sur leur temps de travail ? C’est très sympathique, mais l’utilité sociale (l’impact social disent certains) reste limité et, malgré tout, ça fait quand-même une journée de manque à gagner !

Depuis quelques années, le mécénat est pourtant bien la voie royale qui se dégage pour les entreprises en quête d’une meilleure RSE. (Vous voyez où je veux en venir depuis le début : je suis prestataire en mécénat informatique…). Et oui, le mécénat, c’est un engagement concret d’une entreprise auprès d’une grande cause. Une étude de Stanford auprès de 750 diplômés de MBAs conclut que ceux-ci sont prêts à sacrifier plus de 10% de leur salaire pour rejoindre une entreprise ayant une meilleure réputation en matière d’engagement citoyen, social et environnemental. Plus les jeunes diplômés sont qualifiés (écoles du groupe A par exemple), plus ils sont sensibles aux preuves concrètes que leur employeur peut leur présenter en matière de RSE. Et plus leur salaire est élevé plus ils sont, bien entendu, prêts à rogner un peu dessus, au profit d’un employeur plus généreux envers les autres, du moment que ce mécénat d’entreprise est réel, tangible, concret, loin des beaux rapports annuels et des effets de manche.

Oui mais… faire des dons à des associations humanitaires, ça coûte cher ! Et quand c’est la crise, on a plutôt envie de consacrer son argent à préserver un emploi plutôt qu’à envoyer des dons (et des emplois, aussi) à l’autre bout du monde. D’un autre côté, c’est aussi en période de crise que les associations de solidarité et de lutte contre la pauvreté, à l’étranger comme en France, ont le plus besoin de la solidarité des entreprises. Cruels dilemmes, non ?

Ma proposition : le wecena

C’est là que j’ai ma sauce à proposer : le wecena. En effet, je suis persuadé que les SSII dorment sur une mine d’or en matière de RSE : leurs intercontrats. Chaque jour, 10.000 à 20.000 consultants et ingénieurs sont en situation d’intercontrat en France. Mettons-les au service de l’intérêt général le temps de leur retrouver une mission !

En intercontrat, on doute, on stresse, on a envie de partir chez le concurrent pour voir si l’herbe est plus verte mais, crise oblige, on a peur de partir. Alors on reste, on se morfond et on a envie de râler contre cet employeur qui ne nous propose pas de mission à la hauteur de nos compétences. Alors on reste, on passe le temps en s’autoformant comme on peut, on cherche à se rendre utile dans la boîte ou bien à échapper à son commercial, c’est selon… C’est pas bon pour le moral en tout cas. Et pas bon non plus pour le portefeuille de l’actionnaire que d’avoir des salariés qui ne créent pas de la valeur.

Et si ces intercontrats pouvaient permettre à la SSII de mieux mériter confiance ? d’exercer sa RSE de manière exemplaire ? de rompre définitivement avec les « vendeurs de viande » qui sévissent encore sur le marché ?

Et si ces intercontrats pouvaient s’engager concrètement, grâce à leurs compétences professionnelles et à leur créativité technologique, au côté de ceux qui luttent contre la pauvreté, pour protéger l’enfance en difficulté, pour rendre l’éducation et le savoir accessible à tous, pour faire progresser les sciences… ? Et si il existait un moyen de faire en sorte que ces intercontrats mis au service des autres le soient « sans durée d’engagement », en restant disponibles à 100% pour une nouvelle mission commerciale et donc sans interférer avec le business et sans générer aucun manque à gagner ?

L’intérêt de mon offre de wecena, pour les SSII en crise, c’est d’exploiter au mieux leur capital humain en le mettant au service des Autres sans que cela ne lui coûte un seul euro et sans interférance avec les affaires. L’intérêt pour les SSII, c’est aussi d’exercer sa responsabilité et sa citoyenneté d’entreprise même lorsque l’économie est au plus mal, de  montrer que l’on reste présent aux côtés de ceux qui souffrent lorsque, soit-même, on n’est pas forcément au mieux de sa forme. C’est aussi une manière de goûter au mécénat à moindre coût et de se découvrir une âme (et une stratégie bien pensée) de philanthrope. C’est marier le coeur et la raison.

L’intérêt de ma proposition, pour l’ingénieur en intercontrat, c’est de se rendre utile auprès de clients d’un genre nouveau : les entrepreneurs sociaux et les acteurs de la solidarité. C’est de découvrir qu’à travers son métier, on peut donner un véritable coup de pouce, sur le terrain, à des causes qui le méritent. C’est goûter à l’engagement associatif et peut-être, un jour, devenir bénévole. C’est aussi de se rendre compte qu’avec ses collègues, on peut partager quelque chose de différent, de solidaire et d’utile, loin des considérations commerciales habituelles. Peut-être est-ce aussi apprendre à porter un regard nouveau sur son employeur ?

Conclusion, pour les SSII, c’est aussi la crise et c’est une bonne raison pour devenir mécènes, non ?

Je vous invite à modérer mon enthousiasme en réagissant via un commentaire ci-dessous, et à participer au wecena à votre niveau.

Wow, 10 millions de dollar pour rendre le monde meilleur

C’est Noël ? C’est la surenchère ? Nokia promet 150 000 dollars dans un concours d’idées d’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 la X-Prize foundation envisage des concours d’innovations avec des récompenses allant de 100 millions à 1 milliard de dollars ! Google est d’ailleurs un membre actif des concours de cette fondation.

Allez, avec un peu de chances, j’aurai peut-être le plaisir d’offrir un lot de consolation à quelques innovateurs solidaires français ? Quelques équivalents-temps plein d’ingénieurs et consultants informaticiens, gratuitement, pour votre projet d’intérêt général, ça vous tente ?

Au passage, je remercie Monsieur D., de Chambéry d’Albertville, qui a bien voulu me signaler cette initiative de Google que j’avais loupée. Monsieur D. est parfois timide alors il m’avait contacté par mail plutôt que via un commentaire sur ce blog. ;-)

150 000 dollars pour l’innovation technologique à vocation sociale ou environnementale

Nokia lance un concours pour développeurs d’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’oublions pas que les populations des pays du tiers-monde sont bien plus équipées en téléphones portables qu’en ordinateur, par exemple.

Alors, forcément, ça me donne envie d’en rajouter une couche. C’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’une forme innovante de mécénat, le wecena. Les conditions à remplir sont détaillées dans mon appel à projet. Dans le cas d’un concours comme celui de Nokia, cela veut avant tout dire qu’il faut déclarer en préfecture une association d’intérêt général en France pour porter le projet, ou s’associer à une association existante.

via WorldChanging

Un bug et, hop, United Airlines fait faillite ?

Cet article édifiant de Revealing Errors raconte comment United Airlines vient de frôler la faillite lorsque, suite à un bug, des automates informatiques (relayés par des traders peu attentifs) ont propagé sur toute la planète une rumeur selon laquelle… United Airlines était en train de faire faillite !

De quoi faire boule de neige, déclencher une petite panique boursière et faire évaporer une partie significative de la capitalisation de cette société… Le tout en quelques minutes seulement.

Morale de l’histoire ? Je ne sais pas… Et vous ?