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

<channel>
	<title>AkaSig &#187; Développement</title>
	<atom:link href="http://www.akasig.org/category/informatique/developpement/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.akasig.org</link>
	<description>Innover, servir, entreprendre.</description>
	<pubDate>Fri, 26 Sep 2008 12:26:44 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>fr</language>
			<item>
		<title>Wow, 10 millions de dollar pour rendre le monde meilleur</title>
		<link>http://www.akasig.org/2008/09/25/wow-10-millions-de-dollar-pour-rendre-le-monde-meilleur/</link>
		<comments>http://www.akasig.org/2008/09/25/wow-10-millions-de-dollar-pour-rendre-le-monde-meilleur/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 16:28:19 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Affaires non classees]]></category>

		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Ecrit en français]]></category>

		<category><![CDATA[Entreprises responsables]]></category>

		<category><![CDATA[Humains en réseaux]]></category>

		<category><![CDATA[Informatique]]></category>

		<category><![CDATA[Innovation]]></category>

		<category><![CDATA[Mécénat]]></category>

		<category><![CDATA[Web sémantique]]></category>

		<category><![CDATA[le wecena]]></category>

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

		<category><![CDATA[Ecrit en français]]></category>

		<category><![CDATA[Entreprises responsables]]></category>

		<category><![CDATA[Informatique]]></category>

		<category><![CDATA[Innovation]]></category>

		<category><![CDATA[le wecena]]></category>

		<category><![CDATA[challenge]]></category>

		<category><![CDATA[contest]]></category>

		<category><![CDATA[nokia]]></category>

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

		<category><![CDATA[Informatique]]></category>

		<category><![CDATA[My wishlist]]></category>

		<category><![CDATA[written in English]]></category>

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

		<category><![CDATA[Ecrit en français]]></category>

		<category><![CDATA[My wishlist]]></category>

		<category><![CDATA[Open source]]></category>

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

		<category><![CDATA[Content management]]></category>

		<category><![CDATA[Ecrit en français]]></category>

		<category><![CDATA[Entreprises responsables]]></category>

		<category><![CDATA[Humains en réseaux]]></category>

		<category><![CDATA[Informatique]]></category>

		<category><![CDATA[Innovation]]></category>

		<category><![CDATA[My hacks]]></category>

		<category><![CDATA[My wishlist]]></category>

		<category><![CDATA[Mécénat]]></category>

		<category><![CDATA[Open source]]></category>

		<category><![CDATA[Web sémantique]]></category>

		<category><![CDATA[le wecena]]></category>

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

		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Ecrit en français]]></category>

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

		<category><![CDATA[Entreprises responsables]]></category>

		<category><![CDATA[Humains en réseaux]]></category>

		<category><![CDATA[Informatique]]></category>

		<category><![CDATA[Innovation]]></category>

		<category><![CDATA[My hacks]]></category>

		<category><![CDATA[My wishlist]]></category>

		<category><![CDATA[le wecena]]></category>

		<guid isPermaLink="false">http://www.akasig.org/2007/02/23/missions-solidaires-pour-prestas-en-intercontrat/</guid>
		<description><![CDATA[Christian, Bader, Jef et Jjay m&#8217;ont donné quelques pistes pour améliorer mon idée: comment convaincre des sociétés informatiques de s&#8217;investir dans des projets technologiques à vocation solidaire? Merci à tous les 4!
Un gros risque, c&#8217;est que ce genre de choses &#8220;terminent à la comm&#8217;&#8221; comme l&#8217;indique Christian. Les SSII n&#8217;ont probablement &#8220;aucune velléité de changer [...]]]></description>
			<content:encoded><![CDATA[<p>Christian, Bader, Jef et Jjay m&#8217;ont donné quelques pistes pour améliorer <a href="http://www.akasig.org/2007/02/07/recherche-informatique-a-vocation-sociale/">mon idée: comment convaincre des sociétés informatiques de s&#8217;investir dans des projets technologiques à vocation solidaire</a>? Merci à tous les 4!<br />
Un gros risque, c&#8217;est que ce genre de choses &#8220;terminent à la comm&#8217;&#8221; comme l&#8217;indique Christian. Les SSII n&#8217;ont probablement &#8220;aucune velléité de changer le monde&#8221;, en tout cas, ce n&#8217;est pas leur vocation. Leur préoccupation évidente semble être &#8220;le profit court terme&#8221;. Mais pourquoi les SSII n&#8217;emploient-elles pas leurs prestataires en inter-contrat <a href="http://www.01net.com/article/256861.html">à des projets profitables</a> pour elles à plus long terme (projets internes, contribution open source, &#8230;) plutôt que de les laisser <a href="http://www.peutetreunereponse.net/article-3640644.html">moisir dans un coin</a> le temps qu&#8217;un commercial arrive à les recaser chez un client? D&#8217;une boîte à l&#8217;autre et d&#8217;une personne à l&#8217;autre, l&#8217;<a href="http://www.developpez.net/forums/archive/index.php/t-140181.html">inter-contrat est vécu plus ou moins bien</a>, avec des situations parfois <a href="http://jesuischef.free.fr/index.php/tag/Intercontrat">cocasses</a>. En tout cas, l&#8217;intercontrat est une source de<a href="http://www.01net.com/article/227167.html"> problèmes</a> pour les SSII <a href="http://solutions.journaldunet.com/emploi/dossier/0503intercontrat/050310_analyse.shtml">et pour</a> <a href="http://solutions.journaldunet.com/emploi/dossier/0503intercontrat/sommaire.shtml">leurs employés</a>.</p>
<p>D&#8217;un autre côté, il y a peut-être des leviers accessibles pour faire changer cette situation et, du même coup, répondre aux besoins technologiques des innovateurs sociaux.</p>
<blockquote><p>La notion d&#8217;entrepreuriat social, ou d&#8217;ethique est très à la mode chez toutes les entreprises qui ont une médiocre image de ce côté là (ça inclue banques et SSII amha).</p></blockquote>
<p>Que faire? Voici vos suggestions:</p>
<blockquote><p>faire que les CLIENTS des SSII soient attentifs à ces démarches (dans leur processus de décision ), et comme par hasard tout se débloque</p></blockquote>
<blockquote><p>[Peut-être créer des] jeux-projets-concours [:] sélection des meilleurs projets et financement + aide logistique, ça peut marcher.</p>
<p>[De toute façon,] les idées ne peuvent pas venir de l&#8217;intérieur [et il faut que la solution permette d'] identifier une retombée financière à quelques mois</p>
<p>Ce n&#8217;est pas les SSII qu&#8217;il faut convaincre mais d&#8217;abord ceux qui travaille dans ces entreprises (de préférence d&#8217;une taille respectable à mon avis). S&#8217;ils sont motivés ils peuvent faire bouger leur management et toi tu peux les aider à trouver les arguments pour cela.</p></blockquote>
<p>J&#8217;ai envie d&#8217;extraire de ces suggestions quelques éléments pour un cahier des charges : la solution doit&#8230;</p>
<ul>
<li>apporter une carotte économique pour la SSII, du profit à court terme, peut-être en impliquant certains clients</li>
<li>s&#8217;appuyer à fond sur la motivation des employés, exploiter celle-ci par des formes d&#8217;animation adéquates</li>
<li>être économique viable (entreprise sociale, donc entreprise également)</li>
</ul>
<p>Et si on achetait les prestataires en inter-contrats à leur SSII à un pourcentage symbolique de leur tarif journalier habituel? Cela fournirait l&#8217;incitation économique à leur SSII: <em>&#8220;Du moment que je sais que je peux disposer de cet intercontrat dès que je le veux pour le mettre chez en client, pourquoi ne pas le vendre à 1% de son prix habituel à un client &#8216;entreprise sociale&#8217;. Si, en plus, ça redore un peu l&#8217;image de marque de la boîte et que ça motive certains employés, c&#8217;est ça de gagné en plus!&#8221;</em>?</p>
<p>Et si ce montant symbolique était réuni par les employés motivés pour participer à l&#8217;opération et changer le monde à leur échelle? Pour 10 à 20 employés en mission (selon les périodes et les sociétés), il y en a, disons, 1 en intercontrat. Avec un abonnement/cotisation de quelques dizaines ou centaines d&#8217;euros par an et par personne, on réunit le montant nécessaire pour financer une mission solidaire. <em>&#8220;Aujourd&#8217;hui, je suis chez un client. Mais demain, ça pourrait être moi en intercontrat. Alors, comme j&#8217;aimerais bien que certains de mes collègues et moi puissions avoir un véritable impact sur l&#8217;environnement/les plus pauvres/la démocratie/le développement des pays du Sud/la priorité de mon choix grâce à ce que l&#8217;on sait faire le mieux (la techno), j&#8217;achète avec eux le droit de participer à une telle mission lors de mon prochain intercontrat&#8221;</em>.</p>
<p>Cette solution consisterait donc à créer un fournisseur de missions solidaires pour prestataires en intercontrat. Les clients sont des prestas qui veulent profiter d&#8217;un futur intercontrat pour essayer de changer le monde à leur échelle (plutôt que de se faire chier à éviter les patates et à traîner dans l&#8217;agence ou au siège). Les produits sont des missions à forte qualité sociale/environnementale pilotées par des pros du secteur, des gens de terrain qui peuvent vite faire sentir au presta les problèmes sociaux/environnementaux ou autres à traiter. Les autres fournisseurs, ce sont des SSII qui voient d&#8217;un bon oeil l&#8217;idée d&#8217;arrondir leurs fins de mois en vendant certains intercontrats sur un second marché, ultra-discount.</p>
<p>Comment répondre aux questions que ce genre de proposition pourrait soulever? Qu&#8217;est-ce qui donnerait suffisamment envie et confiance à un presta pour qu&#8217;il achète à l&#8217;avance, avec des collègues, son droit de participer à une mission technologique solidaire sur le terrain de son choix? Cette idée a sans doute un côté complètement délirant, mais qu&#8217;est-ce qu&#8217;on pourrait en faire de bien et d&#8217;un peu plus près de la réalité? Qu&#8217;est-ce que cela vous inspire? A votre tour!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2007/02/23/missions-solidaires-pour-prestas-en-intercontrat/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comparator</title>
		<link>http://www.akasig.org/2005/07/24/comparator/</link>
		<comments>http://www.akasig.org/2005/07/24/comparator/#comments</comments>
		<pubDate>Sun, 24 Jul 2005 19:45:43 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Content management]]></category>

		<category><![CDATA[Développement]]></category>

		<category><![CDATA[My hacks]]></category>

		<category><![CDATA[Open source]]></category>

		<category><![CDATA[Web sémantique]]></category>

		<category><![CDATA[Zope &amp; Plone]]></category>

		<category><![CDATA[written in English]]></category>

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

		<category><![CDATA[Content management]]></category>

		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Informatique]]></category>

		<category><![CDATA[My hacks]]></category>

		<category><![CDATA[Open source]]></category>

		<category><![CDATA[Web sémantique]]></category>

		<category><![CDATA[Zope &amp; Plone]]></category>

		<category><![CDATA[written in English]]></category>

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

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

		<category><![CDATA[Ecrit en français]]></category>

		<category><![CDATA[My wishlist]]></category>

		<category><![CDATA[Open source]]></category>

		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=599</guid>
		<description><![CDATA[The first part of this article dealt with retrieving HTML pages from the web with the help of a mechanize-propelled web crawler. Now your HTML pieces are safely saved locally on your hard drive and you want to extract structured data from them. This is part 2, HTML parsing with Python. For this task, I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sig.levillage.org/?p=588">The first part of this article</a> dealt with retrieving HTML pages from the web with the help of a <a href="http://wwwsearch.sourceforge.net/mechanize/">mechanize</a>-propelled web crawler. Now your HTML pieces are safely saved locally on your hard drive and you want to extract structured data from them. This is part 2, HTML parsing with Python. For this task, I adopted a slightly more imaginative approach than for my crawling hacks. I designed a data extraction technology based on HTML templates. Maybe this could be called &#8220;reverse-templating&#8221; (or something like template-based reverse-web-engineering).</p>
<p>You may be used with HTML templates for producing HTML pages. An HTML template plus structured data can be transformed into a set of HTML pages with the help of a proper templating engine. One famous technology for HTML templating is called <a href="http://zpt.sourceforge.net/">Zope Page Templates</a> (because this kind of templates is used within the <a href="http://www.zope.org/">Zope application server</a>). ZPTs use a special set of additional HTML tags and attributes referred to by the &#8220;tal:&#8221; namespace. One advantage of ZPT (over competing technologies) is that ZPT are nicely rendered in WYSIWYG HTML editors. Thus web designers produce HTML mockups of the screens to be generated by the application. Web developpers insert tal: attributes into these HTML mockups so that the templating engine will know which parts of the HTML template have to be replaced by which pieces of data (usually pumped from a database). As an example, web designers will say <em>&lt;title&gt;Camcorder XYZ&lt;/title&gt;</em> then web developpers will modify this into <em>&lt;title tal:content=&#8221;camcorder_name&#8221;&gt;Camcorder XYZ&lt;/title&gt;</em> and the templating engine will further produce a <em>&lt;title&gt;Camcorder Canon MV6iMC&lt;/title&gt;</em> when it processes the &#8220;MV6iMC&#8221; record in your database (it replaces the <em>content</em> of the <em>title</em> element with the value of the <em>camcorder_name</em> variable as it is retrieved from the current database record). This technology is used to merge structured data with HTML templates in order to produce Web pages.</p>
<p>I took inspiration from this technology to design parsing templates. The idea here is to reverse the use of HTML templates. In the parsing context, HTML templates are still produced by web developpers but the templating engine is replaced by a parsing engine (known as <em>web_parser.py</em>, see <a href="#web_parser_zip_file">below</a> for the code of this engine). This engine takes HTML pages (the ones you <a href="http://sig.levillage.org/?p=588">previously crawled and retrieved</a>) plus ZPT-like HTML templates as input. It then outputs structured data. First your crawler saved <em>&lt;title&gt;Camcorder Canon MV6iMC&lt;/title&gt;</em>. Then you wrote <em>&lt;title tal:content=&#8221;camcorder_name&#8221;&gt;Camcorder XYZ&lt;/title&gt;</em> into a template file. Eventually the engine will output <em>camcorder_name = &#8220;Camcorder Canon MV6iMC&#8221;</em>.</p>
<p>In order to trigger the engine, you just have to write a small launch script that defines several setup variables such as :
<ul>
<li> the URL of your template file,</li>
<li> the list of URLs of the HTML files to be parsed,</li>
<li> whether you would like or not to pre-process these files with an HTML tidying library (this is useful when the engine complains about badly formed HTML),</li>
<li> an arbitrary keyword defining the domain of your parsing operation (may be the name of the web site your HTML files come from),</li>
<li> the charset these HTML files are made with (no automatic detection at the moment, sorry&#8230;)</li>
<li> the output format (csv-like file or semantic web document)</li>
<li> an optional separator character or string if ever you chose the csv-like output format</li>
</ul>
<p>The easiest way to go is to copy and modify my example launch script (<em>parser_dvspot.py</em>) included in the <a href="#web_parser_zip_file">ZIP distribution of this web_parser</a>.</p>
<p>Let&#8217;s summarize the main steps to go through :
<ol>
<li> install <a href="http://utidylib.berlios.de/">utidylib</a> into your python installation</li>
<li> copy and save <a href="#web_parser_zip_file">my modified version of BeautifulSoup</a> into your python libraries directory (usually <em>&#8230;/Lib/site-packages</em>)</li>
<li> copy and save my engine (<a href="#web_parser_zip_file"><em>web_parser.py</em></a>) into your local directory or into you python libraries directory</li>
<li> choose a set of HTML files on your hard drive or directly on a web site,</li>
<li> save one of these files as your template,</li>
<li> edit this template file and insert the required pseudotal attributes (see below for pseudotal instructions, and see <a href="#web_parser_zip_file">the example dvspot template <em>template_dvspot.zpt</em></a>),</li>
<li> copy and edit my example launch script so that you define the proper setup variables in it (<a href="#web_parser_zip_file">the example <em>parser_dvspot.py</em></a> contains more detailed instructions than above), save it as <em>my_script.py</em></li>
<li> launch your script with a <em>python my_script.py &gt; output_file.cowl</em> (or <em>python my_script.py &gt; output_file.cowl</em>)</li>
<li> enjoy yourself and your fresh <em>output_file.owl</em> or <em>output_file.csv</em> (import it within Excel)</li>
<li> give me some feedback about your reverse-templating experience (preferably as a comment on <a href="http://sig.levillage.org/?p=599">this blog</a>)</li>
</ol>
<p>This is just my first attempt at building such an engine and I don&#8217;t want to make confusion between real (and mature) tal attributes and my pseudo-tal instructions. So I adopted <em>pseudotal</em> as my main namespace. In some future, when the specification of these reverse-templating instructions are somewhat more stabilized (and if ever the &#8220;tal&#8221; guys agree), I might adopt tal as the namespace. Please also note that the engine is somewhat badly written : the code and internal is rather clumsy. There is much room for future improvement and refactoring.</p>
<p>The current version of this reverse-templating engine now supports the following template attributes/instructions (see source code for further updates and documentation) :
<ul>
<li> <strong>pseudotal:content</strong>  gives the name of the variable that will contain the content of the current HTML element</li>
<li> <strong>pseudotal:replace</strong>  gives the name of the variable that will contain the entire current HTML element</li>
<li> (NOT SUPPORTED YET) <strong>pseudotal:attrs</strong>  gives the name of the variable that will contain the (specified?) attribute(s ?) of the current HTML element</li>
<li> <strong>pseudotal:condition</strong>  is a list of arguments ; gives the condition(s) that has(ve) to be verified so that the parser is sure that current HTML element is the one looked after. This condition is constructed as a list after BeautifulSoup fetch arguments : a python dictionary giving detailed conditions on the HTML attributes of the current HTML element, some content to be found in the current HTML element, the scope of research for the current HTML element (recursive search or not)</li>
<li> <strong>pseudotal:from_anchor</strong>  gives the name of the <em>pseudotal:anchor</em> that is used in order to build the relative path that leads to the current HTML element ; when no from_anchor is specified, the path used to position the current HTML element is calculted from the root of the HTML file</li>
<li> <strong>pseudotal:anchor</strong>  specifies a name for the current HTML element ; this element can be used by a <em>pseudotal:from_anchor</em> tag as the starting point for building the path to the element specified by <em>pseudotal:from_anchor</em> ; usually used in conjunction with a <em>pseudotal:condition</em> ; the default anchor is the root of the HTML file.</li>
<li> <strong>pseudotal:option</strong>  describes some optional behavior of the HTML parser ; is a list of constants ; contains NOTMANDATORY if the parser should not raise an error when the current element is not found (it does as default) ; contains FULL_CONTENT when data looked after is the whole content of the current HTML element (default is the last part of the content of the current HTML element, i.e. either the last HTML tags or the last string included in the current element)</li>
<li> <strong>pseudotal:is_id_part</strong>  a special &#8216;id&#8217; variable is automatically built for every parsed resource ; this id variable is made of several parts that are concatenated ; this <em>pseudotal:is_id_part</em> gives the index the current variable will be used at for building the id of the current resource ; usually used in conjunction with <em>pseudotal:content</em>, <em>pseudotal:replace</em> or <em>pseudotal:attrs</em></li>
<li> (NOT SUPPORTED YET) <strong>pseudotal:repeat</strong>  specifies the scope of the HTML tree that describes ONE resource (useful when several resources are described in one given HTML file such as in a list of items) ; the value of this tag gives the name of a class that will instantiate the parsed resource scope plus the name of a list containing all the parsed resource</li>
</ul>
<p>The current version of the engine can output structured data either as a CSV-like output (tab-delimited for example) or as an RDF/OWL document (of Semantic-Web fame). Both formats can easily be imported and further processed with Excel. The RDF/OWL format gives you the ability to process it with all the powerful tools that are emerging along the Semantic Web effort. If you feel adventurous, you may thus import your RDF/OWL file into <a href="http://protege.stanford.edu/">Stanford&#8217;s Protege semantic modeling tool</a> (or into <a href="http://www.eclipse.org/">Eclipse</a> with its <a href="http://owl-eclipse.projects.semwebcentral.org/">SWEDE plugin</a>) and further process your data with the help of a SWRL rules-based inference engine. The future <a href="http://www.daml.org/rules/proposal/">Semantic Web Rules Language</a> will help at further processing this output so that you can powerfully compare RDF data coming from distinct sources (web sites). In order to be more productive in terms of fancy buzz-words, let&#8217;s say that this reverse-templating technology is some sort of a web semantizer. It produces semantically-rich data out of flat web pages.</p>
<p>The current version of the engine makes an extensive use of <a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a>. Maybe it should have been based on a more XMLish approach instead (using XML pathes ?). But it would have implied that the HTML templates and HTML files to be processed should then have been turned into XHTML. The problem is that I would then have relied on utidylib but this library breaks too much some mal-formed HTML pages so that they are not valuable anymore.</p>
<p><strong>Current known limitation</strong> : there is currently no way to properly handle some situations where you need to make the difference between two similar anchors. In some cases, two HTML elements that you want to use as distinct anchors have in fact exactly the same attributes and content. This is not a problem as long as these two anchors are always positioned at the same place in all the HTML page that you will parse. But, as soon as one of the anchors is not mandatory or it is located after a non mandatory element, the engine can get lost and either confuse the two anchors or complain that one is missing. At the moment, I don&#8217;t know how to handle this kind of situation. Example : long lists of specifications with similar names where some specifications are optional (see canon camcorders as an example : difference between lcd number of pixels and viewfinder number of pixels). The worst case scenario would be when there is a flat list of HTML paragraphs. The engine will try to identify these risks and should output some warnings in this kind of situations.</p>
<hr />
<p><a name="web_parser_zip_file" />Here are the contents of the <a href="http://sig.levillage.org/b2-img/web_parser.zip">ZIP distribution</a> of this project (<a href="http://www.gnu.org/copyleft/gpl.html">distributed under the General Public License</a>) :</p>
<ul>
<li> <em>web_parser.py</em> : this is the web parser engine.</li>
<li> <em>parser_dvspot.py</em> : this is an example launch script to be used if you want to parser HTML files coming from the dvspot.com web site.</li>
<li> <em>template_dvspot.zpt</em> : this is the example template file corresponding to the excellent dvspot.com site</li>
<li> <em>BeautifulSoup.py</em> : this is MY version of BeautifulSoup. Indeed, I had to modify <a href="http://www.crummy.com/software/BeautifulSoup/">Leonard Richardson&#8217;s official one</a> and I couldn&#8217;t obtain any answer from him at the moment regarding my suggested modifications. I hope he will soon answer me and maybe include my modifications in the official version or help me overcoming my temptation to fork. My modifications are based on the official 1.2 release of beautifulsoup : I added &#8220;center&#8221; as a nestable tag and added the ability to match the content of an element with the help of wildcards. You should save this BeautifulSoup.py file into the &#8220;Lib\site-packages&#8221; folder of your python installation.</li>
<li> <em>README.html</em> is the file you are currently reading, also <a href="http://sig.levillage.org/?p=599">published on my blog</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2005/03/11/web-scraping-with-python-part-ii/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mesurer la qualité du Web tout en surfant</title>
		<link>http://www.akasig.org/2005/03/03/mesurer-la-qualite-du-web-tout-en-surfant/</link>
		<comments>http://www.akasig.org/2005/03/03/mesurer-la-qualite-du-web-tout-en-surfant/#comments</comments>
		<pubDate>Thu, 03 Mar 2005 13:03:16 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Ecrit en français]]></category>

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

		<category><![CDATA[Ecrit en français]]></category>

		<category><![CDATA[My wishlist]]></category>

		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=588</guid>
		<description><![CDATA[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&#8230;). But I&#8217;d rather check these in my RSS aggregator instead of my mailbox. Or in some sort of aggregating Web platform. Thus, I would [...]]]></description>
			<content:encoded><![CDATA[<p><em>Example One</em> : 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 = <a href="http://www.monster.com/">Monster</a>&#8230;). But I&#8217;d rather check these in <a href="http://sig.levillage.org/index.php?p=508">my RSS aggregator</a> instead of my mailbox. Or in some sort of <a href="http://sig.levillage.org/index.php?p=248">aggregating</a> <a href="http://sig.levillage.org/index.php?p=554">Web platform</a>. Thus, I would be able to do many filtering/sorting/ranking/comparison operations in order to navigate through these numerous job ads.</p>
<p><em>Example Two</em> : 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&#8217;t offer me the capability of comparing them with respect to my way of ranking and weighting the camcorder features (example = <a href="http://www.dvspot.com/">dvspot</a>). 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.</p>
<p>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 <a href="http://sig.levillage.org/index.php?cat=4">Semantic Web</a> 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&#8217;d like some more automation for this process. I&#8217;d like some more scripting for this operation so that I don&#8217;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.</p>
<p>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 &#8230; in Excel. I wish I would <a href="http://www.mindswap.org/~mhgrove/ConvertToRDF/">output RDF instead of CSV</a>. So there remains much room for further improvement (see <a href="http://www.mindswap.org/~aditkal/rdfssdemo.shtml">RDF Web Scraper for a similar but approach</a>). Anyway&#8230; Here is <strong>part One : how to crawl complex web sites with Python ?</strong>. <a href="http://sig.levillage.org/?p=599">The next part</a> will deal with data extraction from the retrieved web pages, involving much HTML cleansing and parsing.</p>
<p>My crawlers are fully based on the <a href="http://wwwsearch.sourceforge.net/mechanize/">John L. Lee&#8217;s mechanize framework for python</a>. There are <a href="http://sig.levillage.org/index.php?p=563">other tools available in Python</a>. And several other approaches are available when you want to deal with automating the crawling of web sites. Note that you can also <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=66985">try to scrape the screens of legacy terminal-based applications with the help of python</a> (this is called &#8220;screen scraping&#8221;). Some approaches of web crawling automation rely on <a href="http://hacks.oreilly.com/pub/h/955">recording the behaviour of a user equipped with a web browser and then reproduce this same behaviour in an automated session</a>. 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&#8230;) and this gives no value to the automation of the task. Or your system &#8220;guesses&#8221; what automatic behaviour is expected just by recording a sample of what a human agent would do. Too complex&#8230; So I preferred a more down-to-earth solution implying that you write simple crawling scripts &#8220;by hand&#8221;. (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 &#8220;real-world&#8221; situations.</p>
<p>For purpose of clarity, let&#8217;s first focus on the code part that is specific to your crawling session (to the site you want to crawl) . Let&#8217;s take the example of the dvspot.com site which you may try to crawl in order to download detailed description of camcorders :</p>
<pre>
    # Go to home page
    #
    b.open("http://www.dvspot.com/reviews/cameraList.php?listall=1&#038;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
</pre>
<p>You noticed that the structure of this code (conditional loops) depends on the organization of the site you are crawling (paginated results, &#8230;). You also have to specify the rule that will trigger &#8220;clicks&#8221; from your crawler. In the above example, your script first follows every link containing &#8220;cameraDetail&#8221; in its URL (<em>url_regex</em>). Then it follows every link containing &#8220;Next Page&#8221; in the hyperlink text (<em>text_regex</em>).</p>
<p>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&#8217;s cross our fingers.</p>
<p>Here are useful examples of pre-processors (as introduced by some other mechanize users and developpers) :</p>
<pre>
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())
</pre>
<p>The second source of difficulties comes from non-<a href="http://sig.levillage.org/index.php?p=560">REST</a>ful sites. As an example the <a href="http://www.apec.fr/">APEC site</a> (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 &#8220;find_link&#8221; 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 &#8220;clicks&#8221;. For more convenience, let me reproduce them here :</p>
<ul>
<li><strong>text</strong>: link text between link tags: &lt;a href=&#8221;blah&#8221;&gt;this bit&lt;/a&gt; (as<br />
         returned by pullparser.get_compressed_text(), ie. without tags but<br />
         with opening tags &#8220;textified&#8221; as per the pullparser docs) must compare<br />
         equal to this argument, if supplied</li>
<li><strong>text_regex</strong>: link text between tag (as defined above) must match the<br />
         regular expression object passed as this argument, if supplied<br />
        name, name_regex: as for text and text_regex, but matched against the<br />
         name HTML attribute of the link tag</li>
<li><strong>url, url_regex</strong>: as for text and text_regex, but matched against the<br />
         URL of the link tag (note this matches against Link.url, which is a<br />
         relative or absolute URL according to how it was written in the HTML)</li>
<li><strong>tag</strong>: element name of opening tag, eg. &#8220;a&#8221;<br />
        predicate: a function taking a Link object as its single argument,<br />
         returning a boolean result, indicating whether the links</li>
<li><strong>nr</strong>: matches the nth link that matches all other criteria (default 0)</li>
</ul>
<p>Links include anchors (a), image maps (area), and frames (frame,iframe).
</p>
<p>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&#8217;t own the copyleft of this entire code since it is based on several snippets I gathered from the web and <a href="http://sourceforge.net/mailarchive/forum.php?forum_id=38923">wwwsearch mailing list</a>). Anyway, please copy-paste-taste !</p>
<p><pre>
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&#038;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()
</pre>
</p>
<p>In order to run this code, you will have to install <a href="http://wwwsearch.sourceforge.net/mechanize/">mechanize 0.0.8a</a>, <a href="http://wwwsearch.sourceforge.net/pullparser/">pullparser 0.0.5b</a>, <a href="http://wwwsearch.sourceforge.net/ClientCookie/">clientcookie <strong>0.4.19</strong></a>, <a href="http://wwwsearch.sourceforge.net/ClientForm/">clientform 0.0.16</a> and <a href="http://utidylib.berlios.de/">utidylib</a>. I used Python 2.3.3. Latest clientcookie&#8217;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 :
<pre>
python setup.py build
python setup.py install
python setup.py test
</pre>
<p>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 !</p>
<p>Next part will deal with processing the downloaded HTML pages and extract useful data from them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/12/29/web-scraping-with-python-part-1-crawling/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web scraping with Python</title>
		<link>http://www.akasig.org/2004/09/03/web-scraping-with-python/</link>
		<comments>http://www.akasig.org/2004/09/03/web-scraping-with-python/#comments</comments>
		<pubDate>Fri, 03 Sep 2004 20:16:39 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Ecrit en français]]></category>

		<category><![CDATA[My wishlist]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=563</guid>
		<description><![CDATA[Here is a set of resources for scraping the web with the help of Python. The best solution seems to be Mechanize plus Beautiful Soup.

Beautiful Soup
Mechanize
Mechanize-like

See also :

ClientTable (see also this  comment)
DOMForm
Pull parser
wwwsearch &#8217;s FAQ
Simon Willison&#8217;s weblog on this topic
Dive Into Python&#8217;s tutorial on HTML processing

Off-topic : proxomitron looks like a nice (python-friendly ?) [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a set of resources for scraping the web with the help of Python. The best solution seems to be <em>Mechanize</em> plus <em>Beautiful Soup</em>.</p>
<ul>
<li><a href="http://www.crummy.com/software/BeautifulSoup/">Beautiful Soup</a></li>
<li><a href="http://wwwsearch.sourceforge.net/mechanize/">Mechanize</a></li>
<li><a href="http://mechanicalcat.net/cgi-bin/log/2003/02/03#python_www_mechanise">Mechanize-like</a></li>
</ul>
<p>See also :</p>
<ul>
<li><a href="http://wwwsearch.sourceforge.net/ClientTable/">ClientTable</a> (see also <a href="http://sourceforge.net/mailarchive/forum.php?thread_id=5429058&#038;forum_id=38923">this  comment</a>)</li>
<li><a href="http://wwwsearch.sourceforge.net/DOMForm/">DOMForm</a></li>
<li><a href="http://wwwsearch.sourceforge.net/pullparser/">Pull parser</a></li>
<li><a href="http://wwwsearch.sourceforge.net/bits/GeneralFAQ.html">wwwsearch &#8217;s FAQ</a></li>
<li><a href="http://simon.incutio.com/archive/2003/09/05/pythonClientLibraries">Simon Willison&#8217;s weblog on this topic</a></li>
<li><a href="http://diveintopython.org/html_processing/index.html">Dive Into Python&#8217;s tutorial on HTML processing</a></li>
</ul>
<p>Off-topic : <a href="http://www.proxomitron.info/resources/index.html">proxomitron</a> looks like a nice (python-friendly ?) filtering proxy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/09/03/web-scraping-with-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP pour des sites Web de grande échelle</title>
		<link>http://www.akasig.org/2004/04/10/php-pour-des-sites-web-de-grande-chelle/</link>
		<comments>http://www.akasig.org/2004/04/10/php-pour-des-sites-web-de-grande-chelle/#comments</comments>
		<pubDate>Sat, 10 Apr 2004 20:00:40 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Humains en réseaux]]></category>

		<category><![CDATA[Open source]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=519</guid>
		<description><![CDATA[Phil Windley a provoqué une discussion au sujet de la capacité de montée en charge de PHP. Une discussion intéressante car elle réunit en peu de messages l&#8217;essentiel des arguments en jeu.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://forums.windley.com/YaBB.cgi?board=askphil;action=display;num=1081439212;start=0#0">Phil Windley a provoqué une discussion au sujet de la capacité de montée en charge de PHP.</a> Une discussion intéressante car elle réunit en peu de messages l&#8217;essentiel des arguments en jeu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/04/10/php-pour-des-sites-web-de-grande-chelle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Popularité des technologies et état de l&#8217;art des architectures applicatives</title>
		<link>http://www.akasig.org/2004/03/22/popularit-des-technologies-et-tat-de-lart-des-architectures-applicatives/</link>
		<comments>http://www.akasig.org/2004/03/22/popularit-des-technologies-et-tat-de-lart-des-architectures-applicatives/#comments</comments>
		<pubDate>Mon, 22 Mar 2004 16:04:54 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Humains en réseaux]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=500</guid>
		<description><![CDATA[Encore des indicateurs sur la popularité de telle ou telle technologie Web à travers le comptage des modules Apache les plus couramment rencontrés sur le Net. Et puis, tant que j&#8217;y suis, un état de l&#8217;art des architectures applicatives en 2002.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://sig.levillage.org/index.php?p=243">Encore</a> des indicateurs sur la popularité de telle ou telle technologie Web à travers le comptage <a href="http://www.securityspace.com/s_survey/data/man.200402/apachemods.html">des modules Apache les plus couramment rencontrés sur le Net</a>. Et puis, tant que j&#8217;y suis, <a href="http://www.adae.pm.gouv.fr/upload/CR_Arch_Appl_28_11_02.pdf">un état de l&#8217;art des architectures applicatives en 2002</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/03/22/popularit-des-technologies-et-tat-de-lart-des-architectures-applicatives/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Python compared to Smalltalk</title>
		<link>http://www.akasig.org/2004/03/17/python-compared-to-smalltalk/</link>
		<comments>http://www.akasig.org/2004/03/17/python-compared-to-smalltalk/#comments</comments>
		<pubDate>Wed, 17 Mar 2004 16:07:16 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Ecrit en français]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=497</guid>
		<description><![CDATA[Python has many similarities with Smalltalk. Maybe one can say that Python is the Smalltalk of the Web. Here are some resources that compare Python with Smalltalk :

http://www.linux-center.org/articles/9812/python.html
http://c2.com/cgi/wiki?SmalltalkInsteadOfPython

http://www.javablogs.com/ViewEntry.jspa?id=119090

http://www.prescod.net/python/why.html

http://www.approximity.com/ruby/Comparison_rb_st_m_java.html

http://www.codespeak.net/pipermail/pypy-dev/2003q1/000356.html

http://blog.colorstudy.com/ianb/weblog/2004/03/10.html#P68

]]></description>
			<content:encoded><![CDATA[<p>Python has many similarities with Smalltalk. Maybe one can say that Python is the Smalltalk of the Web. Here are some resources that compare Python with Smalltalk :</p>
<ul>
<li><a href="http://www.linux-center.org/articles/9812/python.html">http://www.linux-center.org/articles/9812/python.html</a></li>
<li><a href="http://c2.com/cgi/wiki?SmalltalkInsteadOfPython">http://c2.com/cgi/wiki?SmalltalkInsteadOfPython</a></li>
<li>
<a href="http://www.javablogs.com/ViewEntry.jspa?id=119090">http://www.javablogs.com/ViewEntry.jspa?id=119090</a></li>
<li>
<a href="http://www.prescod.net/python/why.html">http://www.prescod.net/python/why.html</a></li>
<li>
<a href="http://www.approximity.com/ruby/Comparison_rb_st_m_java.html">http://www.approximity.com/ruby/Comparison_rb_st_m_java.html</a></li>
<li>
<a href="http://www.codespeak.net/pipermail/pypy-dev/2003q1/000356.html">http://www.codespeak.net/pipermail/pypy-dev/2003q1/000356.html</a></li>
<li>
<a href="http://blog.colorstudy.com/ianb/weblog/2004/03/10.html#P68">http://blog.colorstudy.com/ianb/weblog/2004/03/10.html#P68</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/03/17/python-compared-to-smalltalk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>La folie des démarches qualité</title>
		<link>http://www.akasig.org/2004/03/11/la-folie-des-dmarches-qualit/</link>
		<comments>http://www.akasig.org/2004/03/11/la-folie-des-dmarches-qualit/#comments</comments>
		<pubDate>Thu, 11 Mar 2004 12:04:04 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Informatique]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=491</guid>
		<description><![CDATA[CMMI, Six Sigma, CobiT, ITIL, ISO 9000, c&#8217;est la folie des modèles pour la gestion de la qualité en informatique. Prenez des repères avec cet article.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.computerworld.com/developmenttopics/development/story/0,10801,90797,00.html?f=x604">CMMI, Six Sigma, CobiT, ITIL, ISO 9000, c&#8217;est la folie des modèles pour la gestion de la qualité en informatique.</a> Prenez des repères avec cet article.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/03/11/la-folie-des-dmarches-qualit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Exploiter .Net avec le langage Python</title>
		<link>http://www.akasig.org/2004/03/11/exploiter-net-avec-le-langage-python/</link>
		<comments>http://www.akasig.org/2004/03/11/exploiter-net-avec-le-langage-python/#comments</comments>
		<pubDate>Thu, 11 Mar 2004 11:59:55 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=490</guid>
		<description><![CDATA[Jon Udell fait le point sur les possibilités d&#8217;utiliser le langage Python pour tirer profit des classes .Net ou Java. Pour exploiter les classes Java depuis Python, l&#8217;environnement d&#8217;exécution Jython a déjà fait ses preuves et conquis un public important. Pour .Net, les choses sont plus difficiles mais les tentatives évoquées par Jon Udell semblent [...]]]></description>
			<content:encoded><![CDATA[<p>Jon Udell <a href="http://www.computerworld.com.au/index.php?id=1823774547&#038;fp=16&#038;fpid=0">fait le point sur les possibilités d&#8217;utiliser le langage Python pour tirer profit des classes .Net ou Java.</a> Pour exploiter les classes Java depuis Python, l&#8217;environnement d&#8217;exécution Jython a déjà fait ses preuves et conquis un public important. Pour .Net, les choses sont plus difficiles mais les tentatives évoquées par Jon Udell semblent prometteuses.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/03/11/exploiter-net-avec-le-langage-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>L&#8217;évaluation de l&#8217;accessibilité</title>
		<link>http://www.akasig.org/2004/03/08/lvaluation-de-laccessibilit/</link>
		<comments>http://www.akasig.org/2004/03/08/lvaluation-de-laccessibilit/#comments</comments>
		<pubDate>Mon, 08 Mar 2004 20:06:32 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=486</guid>
		<description><![CDATA[L&#8217;évaluation de l&#8217;accessibilité est quelque chose de facile à faire et qui peut permettre à n&#8217;importe quel développeur Web de corriger son site Web pour que même les personnes souffrant d&#8217;un handicap puissent l&#8217;utiliser sans difficulté.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.camo.qc.ca/formation/accesweb/evaluation.htm#pasapas">L&#8217;évaluation de l&#8217;accessibilité</a> est quelque chose de facile à faire et qui peut permettre à n&#8217;importe quel développeur Web de corriger son site Web pour que même les personnes souffrant d&#8217;un handicap puissent l&#8217;utiliser sans difficulté.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/03/08/lvaluation-de-laccessibilit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>LAMP pour les projets critiques</title>
		<link>http://www.akasig.org/2004/02/17/lamp-pour-les-projets-critiques/</link>
		<comments>http://www.akasig.org/2004/02/17/lamp-pour-les-projets-critiques/#comments</comments>
		<pubDate>Tue, 17 Feb 2004 11:22:41 +0000</pubDate>
		<dc:creator>Sig</dc:creator>
		
		<category><![CDATA[Content management]]></category>

		<category><![CDATA[Développement]]></category>

		<guid isPermaLink="false">http://sig.levillage.org/?p=463</guid>
		<description><![CDATA[Le modèle L.A.M.P. (Linux + Apache + MySQL + PHP/Python/Perl) a maintenant acquis de solides références auprès de grands comptes et ce, sur des projets critiques. C&#8217;est ce que commence à rapporter la presse informatique, malgré l&#8217;intérêt que les gros du conseil ont à promouvoir des technologies concurrentes. LAMP serait positionné non pas comme un [...]]]></description>
			<content:encoded><![CDATA[<p>Le modèle L.A.M.P. (Linux + Apache + MySQL + PHP/Python/Perl) a maintenant acquis de solides références auprès de grands comptes et ce, sur des projets critiques. C&#8217;est <a href="http://www.01net.com/article/224256.html">ce que commence à rapporter la presse informatique</a>, malgré <a href="http://sig.levillage.org/index.php?p=462">l&#8217;intérêt que les gros du conseil ont à promouvoir des technologies concurrentes</a>. LAMP serait positionné non pas comme un concurrent de J2EE et .Net mais comme une solution idéale pour &#8220;la couche de présentation de projets critiques d&#8217;envergure tout en couvrant tous les besoins des projets départementaux&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasig.org/2004/02/17/lamp-pour-les-projets-critiques/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
