Archives de l’auteur : Jean Millerat

Web scraping with python (part 1 : crawling)

Example One : I am looking for my next job. So I subscribe to many job sites in order to receive notifications by email of new job ads (example = Monster…). But I’d rather check these in my RSS aggregator instead of my mailbox. Or in some sort of aggregating Web platform. Thus, I would be able to do many filtering/sorting/ranking/comparison operations in order to navigate through these numerous job ads.

Example Two : I want to buy a digital camcorder. So I want to compare the available models. Such a comparison implies that I rank the most common models according to their characteristics. Unfortunately, the many sites providing reviews or comparisons of camcorders are not often comprehensive and they don’t offer me the capability of comparing them with respect to my way of ranking and weighting the camcorder features (example = dvspot). So I would prefer pumping all the technical stuff from these sites and manipulate this data locally on my computer. Unfortunately, this data is merged within HTML. And it may be complex to extract it automatically from all the presentation code.

These are common situations : interesting data spread all over the web and merged in HTML presentation code. How to consolidate this data so that you can analyze and process it with your own tools ? In some near future, I expect this data will be published so that it is directly processable by computers (this is what the Semantic Web is intending to do). For now, I was used to do it with Excel (importing Web data, then cleaning it and the like) and I must admit that Excel is fairly good at it. But I’d like some more automation for this process. I’d like some more scripting for this operation so that I don’t end with inventing complex Excel macros or formulas just to automate Web site crawling, HTML extraction and data cleaning. With such an itch to scratch, I tried to address this problem with python.

This series of messages introduces my current hacks that automate web sites crawling and data extraction from HTML pages. The current output of these scripts is a bunch of CSV files that can be further processed … in Excel. I wish I would output RDF instead of CSV. So there remains much room for further improvement (see RDF Web Scraper for a similar but approach). Anyway… Here is part One : how to crawl complex web sites with Python ?. The next part will deal with data extraction from the retrieved web pages, involving much HTML cleansing and parsing.

My crawlers are fully based on the John L. Lee’s mechanize framework for python. There are other tools available in Python. And several other approaches are available when you want to deal with automating the crawling of web sites. Note that you can also try to scrape the screens of legacy terminal-based applications with the help of python (this is called « screen scraping »). Some approaches of web crawling automation rely on recording the behaviour of a user equipped with a web browser and then reproduce this same behaviour in an automated session. That is an attractive and futuristic approach. But this implies that you find a way to guess what the intended automatic crawling behaviour will be from a simple example. In other words, with this approach, you have either to ask the user to click on every web link (all the job postings…) and this gives no value to the automation of the task. Or your system « guesses » what automatic behaviour is expected just by recording a sample of what a human agent would do. Too complex… So I preferred a more down-to-earth solution implying that you write simple crawling scripts « by hand ». (You may still be interested in automatically record user sessions in order to be more productive when producing your crawling scripts.) As a summary : my approach is fully based on mechanize so you may consider the following code as example of uses of mechanize in « real-world » situations.

For purpose of clarity, let’s first focus on the code part that is specific to your crawling session (to the site you want to crawl) . Let’s take the example of the dvspot.com site which you may try to crawl in order to download detailed description of camcorders :

    # Go to home page
    #
    b.open("http://www.dvspot.com/reviews/cameraList.php?listall=1&start=0")
    #
    # Navigate through the paginated list of cameras
    #
    next_page = 0
    while next_page == 0:
     #
     # Display and save details of every listed item
     #
     url = b.response.url
     next_element = 0
     while next_element >= 0:
      try:
       b.follow_link(url_regex=re.compile(r"cameraDetail"), nr=next_element)
       next_element = next_element + 1
       print save_response(b,"dvspot_camera_"+str(next_element))
       # go back to home page
       b.open(url)
       # if you crawled too many items, stop crawling
       if next_element*next_page > MAX_NR_OF_ITEMS_PER_SESSION:
          next_element = -1
          next_page = -1
      except LinkNotFoundError:
       # You certainly reached the last item in this page
       next_element = -1
    #
     try:
      b.open(url)
      b.follow_link(text_regex=re.compile(r"Next Page"), nr=0)
      print "processing Next Page"
     except LinkNotFoundError:
      # You reached the last page of the listing of items
      next_page = -1

You noticed that the structure of this code (conditional loops) depends on the organization of the site you are crawling (paginated results, …). You also have to specify the rule that will trigger « clicks » from your crawler. In the above example, your script first follows every link containing « cameraDetail » in its URL (url_regex). Then it follows every link containing « Next Page » in the hyperlink text (text_regex).

This kind of script is usually easy to design and write but it can become complex when the web site is improperly designed. There are two sources of difficulties. The first one is bad HTML. Bad HTML may crash the mechanize framework. This is the reason why you often have to pre-process the HTML either with the help of a HTML tidying library or with simple but string substitutions when your tidy library breaks the HTML too much (this may be the case when the web designer improperly decided to used nested HTML forms). Designing the proper HTML pre-processor for the Web site you want to crawl can be tricky since you may have to dive into the faulty HTML and the mechanize error tracebacks in order to identify the HTML mistakes and workaround them. I hope that future versions of mechanize would implement more robust HTML parsing capabilities. The ideal solution would be to integrate the Mozilla HTML parsing component but I guess this will be some hard work to do. Let’s cross our fingers.

Here are useful examples of pre-processors (as introduced by some other mechanize users and developpers) :

class TidyProcessor(BaseProcessor):
      def http_response(self, request, response):
          options = dict(output_xhtml=1,
                   add_xml_decl=1,
                   indent=1,
                   output_encoding='utf8',
                   input_encoding='latin1',
                   force_output=1
                   )
          r = tidy.parseString(response.read(), **options)
          return FakeResponse(response, str(r))
      https_response = http_response
#
class MyProcessor(BaseProcessor):
      def http_response(self, request, response):
          r = response.read()
          r = r.replace('"image""','"image"')
          r = r.replace('"','"')
          return FakeResponse(response, r)
      https_response = http_response
#
# Open a browser and optionally choose a customized HTML pre-processor
b = Browser()
b.add_handler(MyProcessor())

The second source of difficulties comes from non-RESTful sites. As an example the APEC site (a French Monster-like job site) is based on a proprietary web framework that implies that you cannot rely on links URLs to automate your browsing session. It took me some time to understand that, once loggin in, every time you click on a link, you are presented with a new frameset referring to the URLs that contain the interesting data you are looking for. And these URLs seem to be dependent on your session. No permalink, if you prefer. This makes the crawling process even more tricky. In order to deal with this source of difficulty when you write your crawling script, you have to open both your favorite text editor (to write the script) and your favorite web browser (Firefox of course !). One key knowledge is to know mechanize « find_link » capabilities. These capabilities are documented in _mechanize.py source code, in the find_link method doc strings. They are the arguments you will provide to b.follow_link in order to automate your crawler « clicks ». For more convenience, let me reproduce them here :

  • text: link text between link tags: <a href= »blah »>this bit</a> (as
    returned by pullparser.get_compressed_text(), ie. without tags but
    with opening tags « textified » as per the pullparser docs) must compare
    equal to this argument, if supplied
  • text_regex: link text between tag (as defined above) must match the
    regular expression object passed as this argument, if supplied
    name, name_regex: as for text and text_regex, but matched against the
    name HTML attribute of the link tag
  • url, url_regex: as for text and text_regex, but matched against the
    URL of the link tag (note this matches against Link.url, which is a
    relative or absolute URL according to how it was written in the HTML)
  • tag: element name of opening tag, eg. « a »
    predicate: a function taking a Link object as its single argument,
    returning a boolean result, indicating whether the links
  • nr: matches the nth link that matches all other criteria (default 0)

Links include anchors (a), image maps (area), and frames (frame,iframe).

Enough with explanations. Now comes the full code in order to automatically download camcorders descriptions from dvspot.com. I distribute this code here under the GPL (legally speaking, I don’t own the copyleft of this entire code since it is based on several snippets I gathered from the web and wwwsearch mailing list). Anyway, please copy-paste-taste !

from mechanize import Browser,LinkNotFoundError
from ClientCookie import BaseProcessor
from StringIO import StringIO
# import tidy
#
import sys
import re
from time import gmtime, strftime
#
# The following two line is specific to the site you want to crawl
# it provides some capabilities to your crawler for it to be able
# to understand the meaning of the data it is crawling ;
# as an example for knowing the age of the crawled resource
#
from datetime import date
# from my_parser import parsed_resource
#
"""
 Let's declare some customized pre-processors.
 These are useful when the HTML you are crawling through is not clean enough for mechanize.
 When you crawl through bad HTML, mechanize often raises errors.
 So either you tidy it with a strict tidy module (see TidyProcessor)
 or you tidy some errors you identified "by hand" (see MyProcessor).
 Note that because the tidy module is quite strict on HTML, it may change the whole
 structure of the page you are dealing with. As an example, in bad HTML, you may encounter
 nested forms or forms nested in tables or tables nested in forms. Tidying them may produce
 unintended results such as closing the form too early or making it empty. This is the reason
 you may have to use MyProcessor instead of TidyProcessor.
"""
#
class FakeResponse:
      def __init__(self, resp, nudata):
          self._resp = resp
          self._sio = StringIO(nudata)
#
      def __getattr__(self, name):
          try:
              return getattr(self._sio, name)
          except AttributeError:
              return getattr(self._resp, name)
#
class TidyProcessor(BaseProcessor):
      def http_response(self, request, response):
          options = dict(output_xhtml=1,
                   add_xml_decl=1,
                   indent=1,
                   output_encoding='utf8',
                   input_encoding='latin1',
                   force_output=1
                   )
          r = tidy.parseString(response.read(), **options)
          return FakeResponse(response, str(r))
      https_response = http_response
#
class MyProcessor(BaseProcessor):
      def http_response(self, request, response):
          r = response.read()
          r = r.replace('"image""','"image"')
          r = r.replace('"','"')
          return FakeResponse(response, r)
      https_response = http_response
#
# Open a browser and optionally choose a customized HTML pre-processor
b = Browser()
b.add_handler(MyProcessor())
#
""""
 Let's declare some utility methods that will enhance mechanize browsing capabilities
"""
#
def find(b,searchst):
    b.response.seek(0)
    lr = b.response.read()
    return re.search(searchst, lr, re.I)
#
def save_response(b,kw='file'):
    """Saves last response to timestamped file"""
    name = strftime("%Y%m%d%H%M%S_",gmtime())
    name = name + kw + '.html'
    f = open('./'+name,'w')
    b.response.seek(0)
    f.write(b.response.read())
    f.close
    return "Response saved as %s" % name
#
"""
Hereafter is the only (and somewhat big) script that is specific to the site you want to crawl.
"""
#
def dvspot_crawl():
    """
     Here starts the browsing session.
     For every move, I could have put as a comment an equivalent PBP command line.
     PBP is a nice scripting layer on top of mechanize.
     But it does not allow looping or conditional browsing.
     So I preferred scripting directly with mechanize instead of using PBP
     and then adding an additional layer of scripting on top of it.
    """
#
    MAX_NR_OF_ITEMS_PER_SESSION = 500
    #
    # Go to home page
    #
    b.open("http://www.dvspot.com/reviews/cameraList.php?listall=1&start=0")
    #
    # Navigate through the paginated list of cameras
    #
    next_page = 0
    while next_page == 0:
     #
     # Display and save details of every listed item
     #
     url = b.response.url
     next_element = 0
     while next_element >= 0:
      try:
       b.follow_link(url_regex=re.compile(r"cameraDetail"), nr=next_element)
       next_element = next_element + 1
       print save_response(b,"dvspot_camera_"+str(next_element))
       b.open(url)
       # if you crawled too many items, stop crawling
       if next_element*next_page > MAX_NR_OF_ITEMS_PER_SESSION:
          next_element = -1
          next_page = -1
      except LinkNotFoundError:
       # You reached the last item in this page
       next_element = -1
    #
     try:
      b.open(url)
      b.follow_link(text_regex=re.compile(r"Next Page"), nr=0)
      print "processing Next Page"
     except LinkNotFoundError:
      # You reached the last page of the listing of items
      next_page = -1
    #
    return
#
#
#
if __name__ == '__main__':
#
    """ Note that you may need to specify your proxy first.
    On windows, you do :
    set HTTP_PROXY=http://proxyname.bigcorp.com:8080
    """
    #
    dvspot_crawl()

In order to run this code, you will have to install mechanize 0.0.8a, pullparser 0.0.5b, clientcookie 0.4.19, clientform 0.0.16 and utidylib. I used Python 2.3.3. Latest clientcookie’s version was to be integrated into Python 2.4 I think. In order to install mechanize, pullparser, clientcookie and clientform, you just have to do the usual way :

python setup.py build
python setup.py install
python setup.py test

Last but not least : you should be aware that you may be breaking some terms of service from the website you are trying to crawl. Thanks to dvspot for providing such valuable camcorders data to us !

Next part will deal with processing the downloaded HTML pages and extract useful data from them.

Identity Management et Customer Relationship Management

Un nouveau concept vient d’être introduit par le Gartner dans le domaine de la gestion de la relation client : le Customer Interaction Hub désigne l’intégration en une seule plate-forme de toutes les applications liées à la gestion de la relation client.
Selon Phil Windley, la mise en oeuvre de ces concentrateurs de la relation clients suppose des méthodes de travail identiques à celles qui permettent l’intégration des identités électroniques (synchronisation, fédération, provisioning, …).

The three laws of identity

Microsoft has definetely not been the leader in identity management systems. For sure, MS Active Directory is being widely deployed. But it is an authentication and administration infrastructure, not an identity management solution. Because of MS ADAM (lightweight LDAP directory) and MS IIS (directory synchronization aka metadirectory) lacking features (compared to their competitors), I often thought that Microsoft was lacking some visionary approach of identity management. I was definitely wrong. They’ve got a guy who seems to have perfectly identified the (long term) future of identity management.

Rapid manufacturing : the dream factory

Histoire de nous faire rêver un peu, Bruce Sterling décrit dans cet article de Wired comment, d’ici quelques années, les machines de prototypage rapide (imprimantes 3D, découpe laser, frittage laser…) deviendront des outils de fabrication express (rapid manufacturing) puis des outils de fabrication de bureau (desktop manufacturing) pour permettre à vous et moi de faire un « sélectionner Freebox / bouton droit / Imprimer… » pour voir une freebox toute neuve et opérationnelle sortir de votre imprimante de bureau. Rêvons un peu…

En attendant, des sociétés (Zcorp, Stratasys, et dans une moindre mesure le français Phenix systems…) vendent déjà des machines de fabrication express, de la taille d’un gros photocopieur, consommant des matériaux à coût raisonnable (moins de 100 dollar par objet) et fabriquant un objet en quelques heures seulement.

Et une école du Ghana s’équipe avec un « fab lab » du MIT.

Firefox gagne 5% des parts de marché de MS Internet Explorer

Le navigateur web Firefox, de la fondation Mozilla, a pris 5% des parts de marché des navigateurs web à son concurrent, Microsoft Internet Explorer. Et pourtant cela ne fait que quelques semaines que la version 1.0 de Firefox a été publiée. Mais la supériorité de Firefox sur IE est déjà largement vantée par la presse, ce qui accélère le mouvement de migration…
Ces données de part de marché sont publiées par OneStat, le « leader mondial des statistiques du web en temps réel », bref une source a priori fiable. Plus de commentaires, sur Slashdot.

Chers spammeurs adorés

Chers spammeurs adorés,

Je connais bien vos adresses, vous m’envoyez régulièrement des mails publicitaires non sollicités. Vous m’écrivez tellement régulièrement que j’ai deviné combien vous aimez la messagerie. Malheureusement, je n’ai pas le temps de vous répondre. Ni de vous lire non plus, d’ailleurs. C’est pourquoi je vous ai ajouté à ma « liste des expéditeurs bloqués » dans mon logiciel de messagerie.

Mais, à défaut de pouvoir vous lire ou faire lire vos mails par mes collègues (qui ne s’y intéressent pas non plus), je pense pouvoir faire quelque chose pour vous. Puisque vous aimez la messagerie, je pense que vous serez heureux de recevoir, à votre tour, dans votre boîte aux lettres de nombreux courriers.

Je publie donc ici la liste de vos adresses de messagerie, dans l’espoir que des âmes charitables entretiendront avec vous une correspondance nourrie.

Cordialement,

— Sig

actu@b.linternaute.com
ads@263.com
advertising@theitjobboard.com
annonce@amazon.fr
announcements@documentum-info.com
audit@stratrg.co.uk
ccombes@arccos.fr
claire.herrenschmidt@unilog.fr
cmorel@access-commerce.com
commercial@e-coursier.com
comptoirdeslangues@effibases.com
contact.documation@reedexpo.fr
debora20@hotmail.com
editor@theitjobboard.com
emea-info@plumtree.com
evenement.fr@softwareag.com
facteur@infopromotions.fr
info.france@opentext.com
info.sap@effibases.com
info@imecom.net
info@it-mailing.com
info@linescort.com
infodi@hitechpros.com
iprigent@aston.fr
ise@hotmail.com
jruel@efront.fr
l.vachon@castsoftware.com
list2@direct.cnet.com
m.attal@igs-fd.com
m.libessart@progressive-fr.com
mailcom@welcomeoffice.com
marketing.fr@asg.com
marketing-ext@coheris.com
midia@cartuchosdetinta.com.br
mlanthonioz@micropole-univers.com
newsletters@companeo.com
oblix@en25.com
pierre.bernassau@documentum.com
plumtreesoftware@plumtree.com
pushdi@hitechpros.com
r.pratt@computerfutures.fr
reed@effibases.com
remi.jacquet@castsoftware.com
reply@optima-online.fr
research@ctp.com
shusson@bea.com
t.moutalica@computerfutures.com
tracy.ryan@plumtree.com
vdxs@hotmail.com
ventureselect@techbreak.prserv.net
vlelong@aston.fr

PS : Bien entendu, je reste à votre disposition pour retirer votre adresse de cette liste si vous le souhaitez.

Alexandre Gueniot va trouver un job

C’est sûr ! Alexandre Gueniot va trouver un job, pas de doute vu que son CV, en plus, d’être original, amusant et bien fait, est en train de faire le tour de la planète par messagerie interposée. Vous avez bien un collègue/ami plus ou moins informaticien qui vous envoie de temps en temps des blagues ou autres fichiers .pps par mail ? Et bien il va bientôt vous envoyer un lien vers le CV d’Alexandre. Ne manquez pas d’aller consulter ce CV pas comme les autres !

Vacances en Marquenterre et baie de Somme

En vue de vos (nos) prochaines vacances en baie de Somme, voici quelques pointeurs :

Vous connaissez bien le Marquenterre ou la baie de Somme ? Vous avez récemment séjourné pour des vacances là-bas ? Alors merci de laisser un commentaire ici pour partager vos impressions et votre expérience !

Portails / CMS en J2EE

Pour créer un portail d’entreprise en J2EE, il y a le choix entre acheter un coûteux portail propriétaire (IBM ou BEA pour ne citer que les leaders des serveurs d’application J2EE) ou recourir à un portail J2EE open source. Mais autant l’offre open source en matière de serveurs d’application J2EE (JBoss, Jonas) atteint une certaine maturité qui la rend crédible pour des projets de grande envergure, autant l’offre open source en matière de portails J2EE semble largement immature. Ceci semble fermer à l’open source le marché des portails et de la gestion de contenu des grandes entreprises pour encore de nombreuses années.

Aux yeux de la communauté J2EE, des cabinets de conseil du secteur et des gros éditeurs, le meilleur produit du marché sera nécessairement celui qui supportera au moins les deux standards du moment : JSR 168 pour garantir la portabilité des portlets d’un produit à l’autre, et WSRP pour garantir l’interopérabilité des portlets distantes entre leur serveur d’application et le portail qui les agrège et les publie. Il y a donc dans cette gamme de produit une course à celui qui sera le plus dans la mode de la « SOA » (Service-Oriented Architecture). Comme portails J2EE open source, on cite fréquemment Liferay et Exo. Cette offre open source n’est pas étrangère à la fanfaronnade SOA (il faut bien marketer les produits, eh oui…). Du coup, l’effort de développement des portails J2EE open source semble davantage porter sur l’escalade de la pile SOA que sur l’implémentation de fonctionnalités utiles. C’est sûrement ce qui amène la communauté J2EE à constater que les portails J2EE open source manquent encore beaucoup de maturité et de richesse fonctionnelle surtout lorsqu’on les compare à Plone, leader du portail / CMS open source. En effet, Plone s’appuie sur un serveur d’application Python (Zope) et non Java (a fortiori non J2EE) ; il se situe donc hors de la course à JSR168 et semble royalement ignorer le bluff WSRP.

Nombreuses sont les entreprises qui s’évertuent à faire de J2EE une doctrine interne en matière d’architecture applicative. Confrontées au choix d’un portail, elles éliminent donc rapidement l’offre open source J2EE (pas assez mûre). Et, plutôt que de choisir un portail non J2EE reconnu comme plus mûr, plus riches en fonctionnalités et moins coûteux, elles préfèrent se cantonner à leur idéologie J2EE sous prétexte qu’il n’y a point de salut hors J2EE/.Net. Pas assez buzzword compliant, mon fils… Pfff, ne suivez pas mon regard… :-(

Innover : qui ? comment ?

L’innovation, tout le monde en parle. Ca tombe bien, ça m’intéresse. L’une des personnes qui en parle le mieux sur le web, c’est selon moi Dave Pollard. Lui-même dit que c’est Clay Christensen. Ce dernier fait le distinguo habituel entre deux types d’innovation :

  • les innovations incrémentales qui consistent à améliorer peu à peu une offre auprès d’un marché donné et bien connu, ce qui avantage les grandes entreprises (car, par définition, bien implantées sur leur marché)
  • les innovations radicales qui consistent à créer des offres radicalement nouvelles et donc à étendre un marché au-delà de ses limites habituelles, pour atteindre de nouveaux clients (et rendre peu à peu obsolète les offres anciennes en grignotant également l’ancien marché).

Les entreprises privées de taille moyenne ont les meilleurs atouts pour innover

Clay Christensen affirme que les entreprises côtées en bourse sont largement handicapées pour innover car leur objectif est d’accroître leurs profitabilité (et donc potentiellement les dividendes aux actionnaires et donc la valeur en bourse) plutôt que d’accroître leur chiffre d’affaires. Elles ont donc tendance à privilégier l’exploitation maximale d’un marché donné plutôt qu’à prendre des risques pour s’aventurer dans des marchés à défricher et donc peu profitables avant un certain temps.

Pour répondre aux innovations de leurs concurrents, leur seul espoir consisterait à copier les innovations radicales de ceux-ci en créant de nouvelles business units. Il leur faudrait ensuite à cloisonner ces dernières de manière à ne pas souffrir de l’inertie propre à la grande entreprise. Selon lui, privilégier un financement essentiellement privé offrirait donc de plus grandes chances de succès à l’entreprise qui souhaite devenir durablement innovante.

A l’opposé sur le spectre de la taille des entreprises, les très petites entreprises ont moins de chances de succès lorsqu’il s’agit d’innover car leurs capacités d’investissement sont habituellement limitées. Elles risquent donc de s’essouffler à vouloir conquérir de nouveaux marchés avec de nouvelles offres qui, si elles se révèlent effectivement intéressantes, pourront être copiées par des entreprises ayant de plus grosses capacités d’investissement et étant donc susceptibles de les doubler pour remporter la mise (« premier arrivé, premier servi ! »). Les très petites entreprises auraient donc intérêt à ne pas avoir les yeux plus gros que le ventre en matière d’innovation.

Pour innover davantage, il faut interroger ses prospects ou certains de ses clients

Dave Pollard défend l’idée que c’est en dialoguant avec certains de ses clients que l’on arrive à identifier leurs besoins non satisfaits et donc à inventer de nouvelles solutions et de nouvelles offres pour les satisfaire. La clef de l’innovation ne résiderait pas dans les technologies et les centres de R&D mais dans le dialogue avec le client. L’innovation serait guidée par le besoin non satisfait (à ne pas confondre avec la demande) et non par l’offre. Pollard précise joliment :

La nécessité est mère de l’invention.

Exit les bricoleurs de génie sauf lorsqu’ils inventent un bricolage qui répond à leur propre besoin (« an itch to scratch », ça vous rappelle quelque chose ?). Selon Pollard,

les innovations qui viennent de la R&D ont tendance à être des solutions en quête de problèmes et celles qui viennent du marketing ont tendance à être des solutions pour lesquelles on essaie de créer artificiellement un besoin grâce à la publicité.

Christensen affirme qu’à force d’écouter ses clients habituels, on en vient à privilégier les solutions existantes et non innovantes car, par définition, si ce sont vos clients habituels, c’est qu’ils sont déjà satisfaits par ce que vous leur offrez : pas de motivation à innover. Christensen affirme donc que c’est avec ceux qui n’achètent pas chez vous qu’il faut dialoguer pour imaginer ce que vous pourriez inventer pour qu’ils deviennent vos clients. Ce à quoi Pollard répond qu’il est préférable d’identifier parmi ses clients habituels, ceux qui sont prêts à faire un effort d’imagination, pour établir un dialogue avec eux (plus facile à faire qu’avec ses simples prospects) et imaginer comment leur vendre davantage.

Savoir raconter la bonne idée

Admettons que j’ai mon client imaginatif ou mon prospect consentant à faire preuve d’imagination. Je l’ai interrogé pour débusquer ses besoins non satisfaits. J’ai réussi à mettre en correspondance l’un de ces besoins avec quelque chose que je sais faire (une technologie, …) et que je pourrais transposer au contexte de mon client. Cette mise en relation besoin non satisfait – technique connue, c’est mon idée innovante. OK. Maintenant, qu’est-ce que je fais avec cette bonne idée ? Toujours selon Pollard, il convient de s’assurer que l’on sait bien raconter cette bonne idée. (Ce n’est que l’une des étapes clefs d’un modèle général des processus d’innovation, commenté par Pollard).

En effet, pour pouvoir mettre son idée en oeuvre et la vendre, il va falloir que je la transplante dans le cerveau de mes collaborateurs, partenaires, fournisseurs et clients. La meilleure manière de s’y prendre consisterait à la raconter sous la forme d’une histoire. C’est le fait de raconter une histoire qui permet le mieux de mettre cette idée dans un contexte pratique et concret, qui permet par exemple au client d’imaginer ma nouvelle offre dans sa vie, son travail au quotidien. Le récit serait le moyen le plus efficace de propager cette idée pour « éduquer » le client (je trouve cette expression méprisante pour le client d’ailleurs). Et

distiller les récits pour en faire des leçons détruit l’essence-même de leur valeur en détruisant la capacité de l’apprenant à internaliser, à digérer et à apprendre l’expérience contextualisée de l’enseignant.

Dave Pollard a publié d’autres articles sur l’innovation. Dès que les ai lu, je vous les commenterai dans ce carnet. A suivre…

Blogs, klogs, plogs… en entreprise

On les appelle couramment des weblogs, ou blogs pour faire plus court, ou carnets web pour faire plus francophone. Certains carnets web s’étant spécialisés, on a poussé les néologismes : klogs désigne les carnets web dédiés au partage de connaissance (knowledgelogs) ; plogs désigne les carnets de bord d’équipes projets (project logs) ; moblogs désigne les carnets web dont la mise à jour s’effectue depuis un PDA ou un téléphone portable (mobile logs). Sans compter les photologs et autres vlogs (video logs). Et puisque les carnets Web font leur entrée dans le monde de l’entreprise, on en revient à dire que blog = business-log.

Un journaliste du magazine CIO (dédié aux directeurs informatiques) confirme que parmi les plus grosses entreprises au monde (Fortune 500), un nombre significatif utilisent des blogs au sein de leurs départements informatiques notamment en tant que project logs pour coordonner et commenter l’avancement de projets informatiques.

Il cite dans son article les motivations de ces entreprises, et ses lecteurs en ajoutent quelques unes :

  • [leur] mélange de commentaires critiques est vu davantage comme constructif que l’inverse

  • si j’étais un gestionnaire des ventes d’un géant pharmaceutique, j’apprécierais de pouvoir de temps en temps parcourir le carnet de mon interlocteur informatique qui installe un système d’automatisation des forces de vente

  • [on peut] difficilement imaginer un meilleur moyen d’ancrer les nouveaux membres d’un service informatique dans un même contexte

  • un plog donne l’occasion à un leader d’observer dans son ensemble le « storyboard continu » [de son projet] pour évaluer si les actions ou les réflexions en cours vont permette de produire les livrables attendus pour le projet

    Il peut ainsi réagir comme le ferait un réalisateur ou un metteur en scène

  • contrairement aux approches top-down habituelles du knowledge management,
    les plogs et leurs cousins permettent au savoir de rester proche du créateur de ce savoir

    Les carnets web sont des outils individuels et qui valorisent la contribution de l’individu plutôt que de le noyer dans la masse

  • les blogs prennent le relais électronique de la machine à café

L’auteur de cet article, et ceux qui l’ont commenté, citent également divers risques qu’il s’agit de gérer intelligemment dans l’adoption des carnets web en entreprise :

  • rester constructif : la motivation des lecteurs d’un carnet de projet doit davantage être la curiosité (savoir où en est le projet par exemple) que la volonté d’interférer
  • prévenir les ingérances indues : à la lecture d’un plog, grande peut être la tentation de devenir un micromanager qui interfère indûment dans les affaires en cours
  • prévenir les crises de blogorrhée :
    la ligne entre la libre expression et l’auto-indulgence est effroyablement fine

    et les carnetiers peuvent avoir tendance à verser dans l’auto-promotion ou le noyage de leurs lecteurs potentiels dans une prose égocentrique qui n’intéresse qu’eux-mêmes

  • éviter de communiquer plutôt que de travailler : il arrive qu’à force de prendre du plaisir à communiquer avec ses collègues, on en perde le sens des priorités !
  • ne pas se laisser abuser par une belle communication : un plog peut devenir un outil de politique de couloirs, une caisse de résonance pour ceux qui savent que leur manager n’est pas capable de distinguer les vantards des collaborateurs efficaces
  • être efficace : pour que les carnets web ne soient pas « encore une autre tentive de gérer les connaissances », il s’agit que leur adoption soit guidée par le pragmatisme et les usages qu’en font les utilisateurs pilotes et non par les concepts ou les outils

Dave Pollard avait quant à lui, sur son carnet Web, réuni un certain nombre de (bons) conseils pour mettre en oeuvre un politique de carnettage dans une entreprise :

  • Les blogs sont individuels (non aux carnets d’équipes)
  • La taxonomie d’un blog doit rester propre à son auteur (et ne pas se perdre dans une politique bureaucratique ou technocratique de classements/catégorisation de concepts !). Elle reprendra typiquement la manière dont l’auteur organise le répertoire « Mes documents » de son poste de travail ou bien sa boîte aux lettres ou plus simplement son armoire.
  • Les meilleurs candidats au carnettage en entreprise sont ceux qui ont déjà l’habitude de publier abondamment en entreprise : éditeurs de newsletters, experts, communiquants. Ce sont ceux que l’on citera spontanément en répondant à la question : « lequel de vos collaborateurs a des fichiers dont le contenu vous serait le plus utile dans votre travail ? »
  • Pour chaque possesseur d’un carnet web, demandez à vos informaticiens de convertir en HTML et de mettre en ligne dans son carnet Web l’ensemble de ses fichiers bureautique, pour constituer une archive qui apportera une valeur immédiate à ses lecteurs.
  • Avec l’aide de vos équipes marketing, créer chez vos clients l’envie d’accéder à certains carnets web de vos collaborateurs, comme si il s’agissait d’un canal privilégié de relation avec l’entreprise.

Le journaliste de CIO.com estime que

les organisations IT qui utilisent efficacement les blogs comme outils de management (ou comme ressources pour la communication) sont probablement des environnements de développement [humain] qui prennent au sérieux les personnes et les idées.

Il estime enfin que

lorsqu’un développeur ou un manager ou un chargé de support clientèle réussit à produire un plog qui suscite l’attention, qui sensibilise et qui suscite le changement, alors c’est une compétence qui mérite reconnaissance et récompense.

Linux vu par le Gartner

Le Gartner Group a récemment réalisé une enquête auprès de reponsables de centres de données. Voici quelques extraits des résultats de cette enquête : 42% des interrogés sont encore en train d’expérimenter Linux pour en évaluer l’intérêt pour eux, 34% ont adopté Linux dans leur centre après avoir reconnu ses avantages et sa maturité, 9% en sont déjà à une phase où ils en tirent des bénéfices tangibles. Chose plus étonnante, 30% d’entre eux prévoient de déployer Linux pour supporter des applications départementales ou sectorielles (et non pas seulement en tant qu’OS pour les serveurs d’infrastructure). L’adoption de Linux se fait principalement aux dépends d’Unix propriétaires mais également en partie aux dépends de serveurs Windows. Les trois fournisseurs préférés de service pour l’accompagnement de déploiements Linux en datacenters sont IBM, Red Hat et HP. Les principaux freins à l’adoption de Linux dans les datacenters sont surtout le manque de compétences des personnels mais aussi le manque d’applications et le manque d’outils d’administration et de supervision (la gestion de datacenters implique de forts besoin en la matière).

Où partir en vacances avec des nourissons ?

Vous avez un (des) enfant(s) en bas âge ? Vous avez besoin de souffler un peu et de partir en vacances ? Vous ne pouvez pas emporter votre nounou dans vos valises, alors, comment vous organiser ?

Confronté à ce problème, j’ai essayé de trouver des formules commerciales de vacances familiales avec une offre « garderie » dedans. Voici ce que j’ai trouvé jusque là :

Pour plus de détails, jetez un coup d’oeil à ce dossier vacances familiales du Figaro et à cette discussion sur aufeminin.com

Mozilla Firefox plutôt que Microsoft Internet Explorer ?

Dans les grandes entreprises comme ailleurs, la sécurité est un objectif prioritaire (si ce n’est L’OBJECTIF prioritaire) des directions informatiques. A l’heure où certaines se demandent si il est opportun d’inscrire le navigateur Internet Explorer comme standard interne obligatoire pour le Web, la concurrence entre navigateurs semble enfin se réveiller.

Le marché est actuellement dominé par Internet Explorer, l’offre de Microsoft (environ 95% des parts de marché ?). Mais les innombrables failles de sécurité qui ont été identifiées cette année dans IE ont sapé la confiance de nombre d’informaticiens envers ce produit. A tel point que le CERT, observatoire de la sécurité informatique dépendant du ministère de l’intérieur américain recommande aux utilisateurs d’envisager l’abandon d’IE au profit de navigateurs alternatifs, tels que Firefox, de la fondation Mozilla. Depuis lors, les recommandations d’experts au sujet de Firefox se sont multipliées dans la presse spécialisée (voir les articles de 01Net et du Journal du Net) mais aussi dans la presse professionnelle généraliste aux USA (voir ci-après). Et les observateurs ont constaté que, pour la première fois depuis longtemps, le monopole d’IE sur le marché des navigateurs semble vaciller.

On a ainsi pu lire dans Business Week :

Bien que la part de marché du navigateur Web de Mozilla soit encore petite, sa croissance tire partie de ceux qui sont soucieux des failles de sécurité du produit dominant de chez Microsoft […] Pour la première fois depuis plus de sept ans, Microsoft perd des parts dans le marché des navigateurs Web. Et il ne s’agit pas seulement d’un effet de bord. […] Firefox est-il supérieur à IE ? Les analystes qui ont comparé les deux disent que Firefox s’affiche plus rapidement et ouvre les pages Web plus rapidement. Il a quelques fonctionnalités qu’IE n’a pas […].

On a également pu lire dans le Wall Street Journal :

[Comment] naviguer en sécurité : je suggère d’abandonner le navigateur Web Internet Explorer de Microsoft qui a accumulé les failles de sécurité. Je recommande de le remplacer par Mozilla Firefox, qui est gratuit et librement disponible sur www.mozilla.org. Il s’agit d’un produit non seulement plus sûr mais également plus moderne et plus avancé avec la navigation par onglets qui permet à de multiples pages de s’afficher sur un même écran et un bloqueur de publicité « pop-up » meilleur que celui que Microsoft a tardivement ajouté à IE.

Parmi les autres innovations apportées par Firefox, on peut également retenir Live Bookmarks, une solution de suivi d’actualités en ligne (Yahoo, BBC, presse française, carnets Web, …) et de partage de bookmarks en ligne.

Le site news.com rapporte que les parts de marché de Firefox ont progressé au détriment de Microsoft. Sur ce site d’actualité informatique grand public, les utilisateurs Firefox seraient passés de 8% en janvier 2004 à 18% en septembre 2004. D’après une entreprise de mesure d’audience, 1,8% des utilisateurs des sites de e-commerce auraient abandonné IE au profit de Firefox entre juin et septembre 2004, soit une part de marché de 5,2% pour Firefox en septembre 2004.

Le responsable de la sécurité informatique chez Microsoft a même admis (malencontreusement) dans la presse (magazine Wired) qu’il avait dû abandonner IE au profit de Firefox afin de protéger son ordinateur contre une menace de piratage.

Pour la récente publication de la version 1.0 PREVIEW de firefox, début septembre 2004, le site de Mozilla a enregistré plus d’un million de téléchargements en moins de 100 heures.

La vision de chez Mac Donald Bradley au sujet du web sémantique

J’ai été très impressionné par la qualité de la vision du directeur scientifique de chez Mc Donald Bradley au sujet du web sémantique. Il présente non seulement de très justes illustrations de la vision de Tim Berner’s Lee mais il la remet également de manière très pertinente dans le contexte général de l’évolution de l’informatique sur les dernières décennies, à travers notamment la perspective d’applications concrètes pour l’entreprise. Sa déclaration d’indépendance des données laisse présager un avenir excellent pour la nouvelle discipline informatique qu’est l’architecture de l’information. McDonald Bradley est une entreprise que je trouve d’autant plus intéressante qu’elle se positionne sur des marchés verticaux clairement délimités, au sein du secteur public (et donc précurseurs en matière d’open source) : les services de renseignement, la défense, la sécurité, les finances publiques et les collectivités locales. A rapprocher des interrogations de Kendall Grant Clark au sujet de l’appropriation du web sémantique par les communautés du libre ? Malheureusement, je crains qu’il n’existe pas d’entreprise équivalente en France…