Changeset 3334

Montrer
Ignorer:
Date:
05.10.2008 16:42:25 (2 mois auparavant)
Auteur:
venus
Message:

Mise à jour de la planète XMLfr.

Fichiers:

Légende:

Non modifié
Ajouté
Supprimé
Modifié
Copié
Déplacé
  • xmlfr/remote/pages/actualites/planete/nonXmlfr/en/atom.xml

    r3332 r3334  
    22<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/> 
    33  <title>PlanÚte XMLfr</title> 
    4   <updated>2008-10-04T13:41:26Z</updated> 
     4  <updated>2008-10-05T14:42:15Z</updated> 
    55  <generator uri="http://intertwingly.net/code/venus/">Venus</generator> 
    66  <author> 
  • xmlfr/remote/pages/actualites/planete/nonXmlfr/fr/atom.xml

    r3332 r3334  
    22<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/> 
    33  <title>PlanÚte XMLfr</title> 
    4   <updated>2008-10-04T13:41:26Z</updated> 
     4  <updated>2008-10-05T14:42:15Z</updated> 
    55  <generator uri="http://intertwingly.net/code/venus/">Venus</generator> 
    66  <author> 
     
    3838      <subtitle xml:lang="fr">Un peu de tout: XML et technologies associées, presse, édition, photos, métadonnées, documentation, taxonomies/folksonomies, systÚmes éditoriaux, philosophie, épistémologie, mathématiques, histoire</subtitle> 
    3939      <title xml:lang="fr">Du bruit au signal (et inversement)</title> 
    40       <updated>2008-10-04T11:00:19Z</updated> 
     40      <updated>2008-10-04T17:39:36Z</updated> 
    4141    </source> 
    4242  </entry> 
     
    7070      <subtitle xml:lang="fr">Un peu de tout: XML et technologies associées, presse, édition, photos, métadonnées, documentation, taxonomies/folksonomies, systÚmes éditoriaux, philosophie, épistémologie, mathématiques, histoire</subtitle> 
    7171      <title xml:lang="fr">Du bruit au signal (et inversement)</title> 
    72       <updated>2008-10-04T11:00:19Z</updated> 
     72      <updated>2008-10-04T17:39:36Z</updated> 
    7373    </source> 
    7474  </entry> 
     
    118118      <link href="http://www.figoblog.org/rss.xml" rel="self" type="application/rss+xml"/> 
    119119      <title>Figoblog - Un blog sur Internet, la bibliothéconomie et la confiture de figues</title> 
    120       <updated>2008-10-04T13:39:47Z</updated> 
     120      <updated>2008-10-05T14:39:53Z</updated> 
    121121    </source> 
    122122  </entry> 
     
    158158      <subtitle xml:lang="fr">DerniÚres mises à jour du site de David Larlet : biologeek.com relatives aux billets et pensées du site</subtitle> 
    159159      <title xml:lang="fr">Flux RSS des billets et des pensées du site biologeek.com</title> 
    160       <updated>2008-10-04T13:40:08Z</updated> 
     160      <updated>2008-10-05T14:40:19Z</updated> 
    161161    </source> 
    162162  </entry> 
     
    802802      <link href="http://www.figoblog.org/rss.xml" rel="self" type="application/rss+xml"/> 
    803803      <title>Figoblog - Un blog sur Internet, la bibliothéconomie et la confiture de figues</title> 
    804       <updated>2008-10-04T13:39:54Z</updated> 
     804      <updated>2008-10-05T14:40:00Z</updated> 
    805805    </source> 
    806806  </entry> 
     
    10881088 
    10891089  <entry xml:lang="fr"> 
     1090    <id>tag:formats-ouverts.org,2008-09-28:/1727</id> 
     1091    <link href="http://formats-ouverts.org/blog/2008/09/28/1727-un-format-d-ecriture" rel="alternate" type="text/html"/> 
     1092    <title xml:lang="fr">Un format d'écriture</title> 
     1093    <summary xml:lang="fr">Un roman d'une phrase épique 
     1094 
     1095 
     1096La rentrée littéraire 2008 est riche. Signalons un titre, Zone, un roman de Mathias ENARD, paru aux éditions Actes Sud [1]. 
     1097 
     1098 
     1099S'agit-il de Mathias ENARD ou ÉNARD ? La couverture met l'accent, la quatriÚme de couverture ne le met pas (mais il y est sur le mot...</summary> 
     1100    <content type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml"><h5>Un roman d'une phrase épique</h5> 
     1101 
     1102 
     1103<p>La <a href="http://formats-ouverts.org/blog/2008/09/07/1706-livres-de-la-rentree">rentrée</a> littéraire 2008 est riche. Signalons un titre, <em>Zone</em>, un roman de Mathias ENARD, paru aux éditions Actes Sud [1].</p> 
     1104 
     1105 
     1106<p>S'agit-il de Mathias ENARD ou ÉNARD ? La couverture met l'accent, la quatriÚme de couverture ne le met pas (mais il y est sur le mot <em>Éditeur</em> de cette même quatriÚme de couverture). Ah <a href="http://formats-ouverts.org/blog/2007/06/29/1248-la-recolte-des-accents-dans-la-revolte-des-accents">ces accents</a>.</p> 
     1107 
     1108 
     1109<p>On peut aussi signaler que tout le texte est <em>« une immense phrase itérative »</em> : une seule phrase, sans majuscule (sauf aux noms propres), sans point (sauf d'exclamation ou d'interrogation). Un roman salué par la critique, récit incroyable où on se rend compte que les conventions d'écritures permettentdelireplusaisémentlesmots. Code typographique, rÚgles orthographiques et style ont des <a href="http://formats-ouverts.org/blog/2004/07/01/12-un-article-de-loi-definit-ce-que-sont-les-formats-ouverts">formats ouverts</a>.</p> 
     1110 
     1111 
     1112<h5>Autre article similaire sur <em>Formats-Ouverts.org</em> :</h5> 
     1113<ul> 
     1114<li><em><a href="http://formats-ouverts.org/blog/2006/11/07/998-un-livre-au-format-particulier">Mémoire de porc-épic d'Alain Mabanckou, prix Renaudot 2006</a></em></li> 
     1115</ul> 
     1116 
     1117<h5>Sources et liens :</h5> 
     1118 
     1119<ul> 
     1120<li>[1] Fiche du livre <em>Zone</em>, éditions Actes Sud, <a href="http://www.actes-sud.fr/ficheisbn.php?isbn=9782742777051">http://www.actes-sud.fr/ficheisbn.php?isbn=9782742777051</a></li> 
     1121</ul> 
     1122 
     1123<h5>Et sur <em>Formats-Ouverts.org</em> à la même date :</h5> 
     1124<ul> 
     1125<li>Articles de <a href="http://formats-ouverts.org/blog/2007/09/28">2007</a>, de <a href="http://formats-ouverts.org/blog/2006/09/28">2006</a>, de <a href="http://formats-ouverts.org/blog/2005/09/28">2005</a> et de <a href="http://formats-ouverts.org/blog/2004/09/28">2004</a>.</li> 
     1126</ul></div> 
     1127    </content> 
     1128    <updated>2008-09-28T21:50:02Z</updated> 
     1129    <category label="Non-&#xE9;lectronique" term="Nonelectronique"/> 
     1130    <author> 
     1131      <name>Thierry Stoehr</name> 
     1132    </author> 
     1133    <source> 
     1134      <id>tag:formats-ouverts.org,2008:/blog/</id> 
     1135      <link href="http://formats-ouverts.org/blog/" rel="alternate" type="text/html"/> 
     1136      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
     1137      <title xml:lang="fr">Pour les formats ouverts !</title> 
     1138      <updated>2008-09-28T21:50:02Z</updated> 
     1139    </source> 
     1140  </entry> 
     1141 
     1142  <entry xml:lang="fr"> 
    10901143    <id>urn:md5:4bcef968a434cdc425b56c92bcf83571</id> 
    10911144    <link href="http://blog.tuquoque.com/post/2008/09/28/First-Specification-for-Interoperability-and-Preservation-of-Metadata-in-Digital-Photography-annonce-a-la-Photokina" rel="alternate" type="text/html"/> 
     
    11201173      <subtitle xml:lang="fr">Un peu de tout: XML et technologies associées, presse, édition, photos, métadonnées, documentation, taxonomies/folksonomies, systÚmes éditoriaux, philosophie, épistémologie, mathématiques, histoire</subtitle> 
    11211174      <title xml:lang="fr">Du bruit au signal (et inversement)</title> 
    1122       <updated>2008-10-04T11:00:19Z</updated> 
     1175      <updated>2008-10-04T17:39:36Z</updated> 
    11231176    </source> 
    11241177  </entry> 
     
    11621215      <subtitle xml:lang="fr">DerniÚres mises à jour du site de David Larlet : biologeek.com relatives aux billets et pensées du site</subtitle> 
    11631216      <title xml:lang="fr">Flux RSS des billets et des pensées du site biologeek.com</title> 
    1164       <updated>2008-10-04T13:40:02Z</updated> 
     1217      <updated>2008-10-05T14:40:09Z</updated> 
    11651218    </source> 
    11661219  </entry> 
     
    12431296 
    12441297  <entry xml:lang="fr"> 
     1298    <id>tag:formats-ouverts.org,2008-09-27:/1726</id> 
     1299    <link href="http://formats-ouverts.org/blog/2008/09/27/1726-une-precision-sur-skype-en-particulier-et-sur-d-autres-en-general" rel="alternate" type="text/html"/> 
     1300    <title xml:lang="fr">Une précision sur Skype en particulier et sur d'autres en général</title> 
     1301    <summary xml:lang="fr">L'article sur Skype et ses formats peut sembler un peu trop neutre : certaines sociétés utilisent des formats ouverts, d'autres pas. Un peu court ? Alors précisons les choses : 
     1302 
     1303à propos de Skype en particulier : il ne s'agit pas de protocoles ouverts, mais fermés et qui...</summary> 
     1304    <content type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml"><p>L'article sur <a href="http://formats-ouverts.org/blog/2008/09/26/1725-skype-5-ans">Skype et ses formats</a> peut sembler un peu trop neutre : certaines sociétés utilisent des <a href="http://formats-ouverts.org/blog/2004/07/01/12-un-article-de-loi-definit-ce-que-sont-les-formats-ouverts">formats ouverts</a>, d'autres pas. Un peu court ? Alors précisons les choses :</p> 
     1305<ul> 
     1306<li>à propos de Skype <em>en particulier</em> : il ne s'agit <strong>pas</strong> de protocoles ouverts, mais fermés et qui changent réguliÚrement ; signaler l'anniversaire des 5 ans de formats fermés n'est pas avaliser, mais profiter de l'occasion pour souligner la situation ;</li> 
     1307</ul> 
     1308<ul> 
     1309<li>à propos des autres sociétés ou structures du Web (ou des TIC) <em>en général</em> : l'approche basée sur des formats (ou protocoles) fermés est une possibilité, certes ; <strong>mais</strong> elle pose des problÚmes d'<a href="http://formats-ouverts.org/blog/Interoperabilite">interopérabilité</a>, de sécurité, de concurrence, de pérennité, d'<a href="http://formats-ouverts.org/blog/Archivage">archivage</a>, de coût et d'indépendance.</li> 
     1310</ul> 
     1311 
     1312<p>Depuis son ouverture en juillet 2004, le titre du site <em>Formats-Ouverts.org</em> est <em>« Pour les formats ouverts ! »</em> car les formats sont capitaux dans <a href="http://formats-ouverts.org/blog/2006/08/12/906-il-voit-des-formats-partout">le monde numérique</a> : s'ils n'étaient que les seuls utilisés ce site n'aurait pas à souligner les dangers des formats fermés. Il faut donc remercier chaleureusement toutes les structures qui proposent ou imposent des formats fermés, <em>« afin de mieux répondre à notre responsabilité citoyenne »</em> (dixit) sans oublier <em>« pour mettre à disposition les derniÚres technologies et les proposer à nos clients »</em> (sic).</p> 
     1313 
     1314 
     1315<p>Cela permet d'occuper bénévolement le temps dont on dispose... Cela constitue presque un <em>Remerciement</em> <a href="http://formats-ouverts.org/blog/2008/03/26/1544-1500-articles-et-un-nouveau-format-en-vue">de livre...</a></p> 
     1316 
     1317 
     1318<h5>Et sur <em>Formats-Ouverts.org</em> à la même date :</h5> 
     1319<ul> 
     1320<li>Articles de <a href="http://formats-ouverts.org/blog/2007/09/27">2007</a>, de <a href="http://formats-ouverts.org/blog/2006/09/27">2006</a>, de <a href="http://formats-ouverts.org/blog/2005/09/27">2005</a> et de <a href="http://formats-ouverts.org/blog/2004/09/27">2004</a>.</li> 
     1321</ul></div> 
     1322    </content> 
     1323    <updated>2008-09-27T21:50:06Z</updated> 
     1324    <category label="G&#xE9;n&#xE9;ral" term="General"/> 
     1325    <author> 
     1326      <name>Thierry Stoehr</name> 
     1327    </author> 
     1328    <source> 
     1329      <id>tag:formats-ouverts.org,2008:/blog/</id> 
     1330      <link href="http://formats-ouverts.org/blog/" rel="alternate" type="text/html"/> 
     1331      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
     1332      <title xml:lang="fr">Pour les formats ouverts !</title> 
     1333      <updated>2008-09-28T21:50:02Z</updated> 
     1334    </source> 
     1335  </entry> 
     1336 
     1337  <entry xml:lang="fr"> 
    12451338    <id>http://www.biologeek.com/2008/09/qui-propose-du-django-en-france/</id> 
    12461339    <link href="http://www.biologeek.com/2008/09/qui-propose-du-django-en-france/" rel="alternate" type="text/html"/> 
     
    12851378      <subtitle xml:lang="fr">DerniÚres mises à jour du site de David Larlet : biologeek.com relatives aux billets et pensées du site</subtitle> 
    12861379      <title xml:lang="fr">Flux RSS des billets et des pensées du site biologeek.com</title> 
    1287       <updated>2008-10-04T13:40:21Z</updated> 
     1380      <updated>2008-10-05T14:40:31Z</updated> 
    12881381    </source> 
    12891382  </entry> 
     
    14751568      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    14761569      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1477       <updated>2008-09-26T21:50:16Z</updated> 
     1570      <updated>2008-09-28T21:50:02Z</updated> 
    14781571    </source> 
    14791572  </entry> 
     
    18191912      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    18201913      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1821       <updated>2008-09-26T21:50:16Z</updated> 
     1914      <updated>2008-09-28T21:50:02Z</updated> 
    18221915    </source> 
    18231916  </entry> 
     
    18851978      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    18861979      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1887       <updated>2008-09-26T21:50:16Z</updated> 
     1980      <updated>2008-09-28T21:50:02Z</updated> 
    18881981    </source> 
    18891982  </entry> 
     
    19422035      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    19432036      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1944       <updated>2008-09-26T21:50:16Z</updated> 
     2037      <updated>2008-09-28T21:50:02Z</updated> 
    19452038    </source> 
    19462039  </entry> 
     
    19992092      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    20002093      <title xml:lang="fr">Pour les formats ouverts !</title> 
    2001       <updated>2008-09-26T21:50:16Z</updated> 
     2094      <updated>2008-09-28T21:50:02Z</updated> 
    20022095    </source> 
    20032096  </entry> 
     
    21122205      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    21132206      <title xml:lang="fr">Pour les formats ouverts !</title> 
    2114       <updated>2008-09-26T21:50:16Z</updated> 
     2207      <updated>2008-09-28T21:50:02Z</updated> 
    21152208    </source> 
    21162209  </entry> 
     
    22062299      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    22072300      <title xml:lang="fr">Pour les formats ouverts !</title> 
    2208       <updated>2008-09-26T21:50:16Z</updated> 
     2301      <updated>2008-09-28T21:50:02Z</updated> 
    22092302    </source> 
    22102303  </entry> 
     
    23552448    </source> 
    23562449  </entry> 
    2357  
    2358   <entry xml:lang="fr"> 
    2359     <id>tag:bortzmeyer.org,2006-02:Blog/psycopg2-adaptation</id> 
    2360     <link href="http://www.bortzmeyer.org/psycopg2-adaptation.html" rel="alternate" type="text/html"/> 
    2361     <title xml:lang="fr">Adaptation des types Python à PostgreSQL pour psycopg</title> 
    2362     <summary xml:lang="fr">psycopg (http://initd.org/pub/software/psycopg/) est l'interface avec 
    2363 PostgreSQL la plus répandue chez les 
    2364 programmeurs Python. Parmi toutes ses qualités, psycopg adapte 
    2365 automatiquement les types Python aux types PostgreSQL. Mais cette 
    2366 adaptation ne fonctionne pas toujours toute seule et a parfois besoin 
    2367 d'un coup de main.</summary> 
    2368     <content type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://initd.org/pub/software/psycopg/">psycopg</a> est l'interface avec 
    2369 PostgreSQL la plus répandue chez les 
    2370 programmeurs Python. Parmi toutes ses qualités, psycopg adapte 
    2371 automatiquement les types Python aux types PostgreSQL. Mais cette 
    2372 <em>adaptation</em> ne fonctionne pas toujours toute seule et a parfois besoin 
    2373 d'un coup de main.</p><p>Avec <a href="http://initd.org/pub/software/psycopg/">psycopg</a>, si j'ai créé une table en SQL avec : 
    2374 <pre>  
    2375 CREATE TABLE Foobar (t TEXT, i INTEGER); 
    2376 </pre> 
    2377 je peux écrire dans mon programme Python : 
    2378 <pre> 
    2379 cursor.execute("INSERT INTO Foobar (t, i) VALUES (%s, %s)",  
    2380                ["I like Python", 42]) 
    2381 </pre> 
    2382 et psycopg trouve tout seul que "I like Python" est une chaîne de 
    2383 caractÚres alors que 42 est un entier. Il quote 
    2384 (met entre apostrophes) 
    2385 donc le premier et pas le second. PostgreSQL recevra (instruction 
    2386 SQL affichée grâce à <code>log_statement = 
    2387 'all'</code>) : 
    2388 <pre> 
    2389 2008-09-16 13:40:19 CEST STATEMENT:  INSERT INTO Foobar (t, i) VALUES ('I like Python', 42) 
    2390 </pre> 
    2391 Cela marche bien dans ce cas car Python connait les types utilisés et 
    2392 peut donc le dire à psycopg2 : 
    2393 <pre> 
    2394  
    2395 &gt;&gt;&gt; type(42) 
    2396 &lt;type 'int'&gt; 
    2397 &gt;&gt;&gt; type("I like Python") 
    2398 &lt;type 'str'&gt; 
    2399  
    2400 </pre> 
    2401 </p><p>Mais si on a affaire à des types qui existent dans PostgreSQL et pas 
    2402 dans Python ? Le cas est fréquent car PostgreSQL dispose de <a href="http://www.postgresql.org/docs/8.3/interactive/datatype.html">nombreux 
    2403 types</a> comme par exemple les <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-geometric.html#AEN5480">points</a>, les <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-net-types.html#DATATYPE-INET">adresses IP</a> ou encore les <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html">UUID</a> 
    2404 (RFC 4122). Essayons avec les adresses IP. Créons la table  : 
    2405 <pre> 
    2406 CREATE TABLE Foobar (addr INET); 
    2407 </pre> 
    2408 puis remplissons-la : 
    2409 <pre> 
    2410 cursor.execute("INSERT INTO Foobar (addr) VALUES (%s)",  
    2411                             ["2001:DB8::CAFE:1"]) 
    2412 </pre> 
    2413 Ã‡a marche, l'adresse IP <code>2001:db8::cafe:1</code> a bien 
    2414 Ã©té enregistrée. Python ne connait pas ce type, donc l'a traité comme 
    2415 une chaîne de caractÚres, que PostgreSQL a su analyser.</p><p>Mais si on veut mettre un <a href="http://www.postgresql.org/docs/8.3/interactive/arrays.html">tableau</a> de telles 
    2416 adresses (petit détour par le DNS : il est 
    2417 tout à fait légal, et même fréquent, qu'à un nom de machine donnée 
    2418 correspondent plusieurs adresses 
    2419 IP) ? Là, Python, psycopg et PostgreSQL ne sont pas assez 
    2420 intelligents. On crée la table : 
    2421 <pre> 
    2422 CREATE TABLE Foobar (addr INET[]); 
    2423 </pre> 
    2424 et on tente de la peupler : 
    2425 <pre> 
    2426  
    2427 &gt;&gt;&gt; cursor.execute("INSERT INTO Foobar (addr) VALUES (%s)", [["2001:DB8::CAFE:1", "192.168.25.34"]]) 
    2428 Traceback (most recent call last): 
    2429   File "&lt;stdin&gt;", line 1, in &lt;module&gt; 
    2430 psycopg2.ProgrammingError: column "addr" is of type inet[] but expression is of type text[] 
    2431 LINE 1: INSERT INTO Foobar (addr) VALUES (ARRAY['2001:DB8::CAFE:1', ... 
    2432                             ^ 
    2433 HINT:  You will need to rewrite or cast the expression. 
    2434  
    2435 </pre> 
    2436 En effet, PostgreSQL aura reçu : 
    2437 <pre> 
    2438 2008-09-16 13:53:01 CEST LOG:  statement: INSERT INTO Foobar (addr) VALUES (ARRAY['2001:DB8::CAFE:1', '192.168.25.34']) 
    2439 </pre> 
    2440 alors qu'il aurait fallu envoyer <code>INSERT INTO Foobar (addr) VALUES ('{2001:DB8::CAFE:1, 192.168.25.34}')</code>. 
    2441 (Le problÚme serait le même pour le type UUID.)</p><p>Quelle est la bonne solution ? psycopg pourrait être plus malin et 
    2442 mieux connaître les types de PostgreSQL mais c'est plus compliqué que 
    2443 Ã§a en a l'air. Heureusement, il existe une solution assez 
    2444 simple. Depuis sa version 2, psycopg permet de définir des 
    2445 <em>adaptateurs</em> soi-même, c'est-à-dire le code qui va 
    2446 faire la conversion d'un objet Python, au moment de l'appel à 
    2447 PostgreSQL. Cette technique est documentée (sommairement) dans le 
    2448 fichier <code>doc/extensions.rst</code> qui est distribué avec 
    2449 psycopg. (On le trouve aussi sur le Web en <a href="http://www.initd.org/svn/psycopg/psycopg2/trunk/doc/extensions.rst"><code>http://www.initd.org/svn/psycopg/psycopg2/trunk/doc/extensions.rst</code></a> mais, 
    2450 servi avec une mauvaise indication de son type, il est difficile à 
    2451 lire.) Voici l'exemple que donne la documentation. Il utilise le type 
    2452 <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-geometric.html#AEN5480">POINT</a> de PostgreSQL, qui représente un point 
    2453 dans un espace cartésien à deux dimensions. On 
    2454 crée la table avec : 
    2455 <pre> 
    2456 CREATE TABLE Atable (apoint POINT); 
    2457 </pre> 
    2458 et on peut la peupler en SQL ainsi : 
    2459 <pre> 
    2460 INSERT INTO Atable (apoint) VALUES ('(1, 3.14159)'); 
    2461 </pre> 
    2462 Pour que cela soit fait automatiquement depuis le programme Python 
    2463 utilisant psycopg2, le code est : 
    2464 <pre> 
    2465     from psycopg2.extensions import adapt, register_adapter, AsIs 
    2466      
    2467     class Point(object): 
    2468         def __init__(self, x=0.0, y=0.0): 
    2469             self.x = x 
    2470             self.y = y 
    2471      
    2472     def adapt_point(point): 
    2473         return AsIs("'(%s,%s)'" % (adapt(point.x), adapt(point.y))) 
    2474          
    2475     register_adapter(Point, adapt_point) 
    2476      
    2477     curs.execute("INSERT INTO atable (apoint) VALUES (%s)",  
    2478                  (Point(1.23, 4.56),)) 
    2479 </pre> 
    2480 </p><p>Et voici enfin le (tout petit) adaptateur que j'ai écrit pour le 
    2481 type PostgreSQL <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-net-types.html#DATATYPE-INET">INET</a>, qui permet de 
    2482 représenter des adresses IP : 
    2483 <pre> 
    2484 from psycopg2.extensions import adapt, register_adapter, AsIs 
    2485  
    2486 class Inet(object): 
    2487     """ Classe pour stocker les adresses IP. Pour que psycopg puisse 
    2488     faire correctement la traduction en SQL, il faut que les objets 
    2489     soient typés. Les chaînes de caractÚres ne conviennent donc pas. """ 
    2490    
    2491     def __init__(self, addr): 
    2492         """ Never call it with unchecked data, there is no protection 
    2493         against injection """ 
    2494         self.addr = addr 
    2495  
    2496 def adapt_inet(address): 
    2497     """ Adaptateur du type Python Inet vers le type PostgreSQL du même 
    2498     nom. On utilise un "cast" PostgreSQL, représenté par '::inet' """ 
    2499     return AsIs("'%s'::inet" % address.addr) 
    2500  
    2501 register_adapter(Inet, adapt_inet) 
    2502 </pre> 
    2503 Et on l'utilise ainsi (notez qu'il faut appeler le 
    2504 constructeur <code>Inet()</code> pour 
    2505 Â«Â typer » les valeurs) : 
    2506 <pre> 
    2507 cursor.execute("INSERT INTO Foobar (addr) VALUES (%s)",  
    2508                  [[Inet("2001:DB8::CAFE:1"), Inet("192.168.25.34")]]) 
    2509 </pre> 
    2510 Désormais, cela fonctionne. PostgreSQL reçoit : 
    2511 <pre> 
    2512 2008-09-16 17:43:48 CEST LOG:  statement: INSERT INTO Foobar (addr) VALUES (ARRAY['2001:DB8::CAFE:1'::inet, '192.168.25.34'::inet]) 
    2513 </pre>et exécute bien la requête.</p><p>Merci à Chris Cogdon et Federico Di Gregorio (l'auteur de psycopg) 
    2514 pour leur aide sur ce sujet.</p></div> 
    2515     </content> 
    2516     <updated>2008-09-16T00:00:00Z</updated> 
    2517     <published>2008-09-16T00:00:00Z</published> 
    2518     <source> 
    2519       <id>tag:bortzmeyer.org,2006-02:Blog/</id> 
    2520       <icon>http://www.bortzmeyer.org/favicon.ico</icon> 
    2521       <author> 
    2522         <name>Stéphane Bortzmeyer</name> 
    2523         <email>stephane+blog@bortzmeyer.org</email> 
    2524       </author> 
    2525       <link href="http://www.bortzmeyer.org/" rel="alternate" type="text/html"/> 
    2526       <link href="http://www.bortzmeyer.org/feed.atom" rel="self" type="application/atom+xml"/> 
    2527       <link href="http://www.gnu.org/copyleft/fdl.html" rel="license" type="text/html"/> 
    2528       <link href="http://www.gnu.org/licenses/fdl.xml" rel="license" type="application/docbook+xml"/> 
    2529       <link href="http://www.gnu.org/licenses/fdl.txt" rel="license" type="text/plain"/> 
    2530       <rights type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">© Stéphane Bortzmeyer, 2005. <a href="http://www.gnu.org/copyleft/fdl.html">GNU Free Documentation License</a> (GFDL).</div> 
    2531       </rights> 
    2532       <title xml:lang="fr">Blog de Stéphane Bortzmeyer</title> 
    2533       <updated>2008-10-02T10:22:00Z</updated> 
    2534     </source> 
    2535   </entry> 
    25362450</feed> 
  • xmlfr/remote/pages/actualites/planete/nonXmlfr/tout/atom.xml

    r3332 r3334  
    22<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/> 
    33  <title>PlanÚte XMLfr</title> 
    4   <updated>2008-10-04T13:41:26Z</updated> 
     4  <updated>2008-10-05T14:42:15Z</updated> 
    55  <generator uri="http://intertwingly.net/code/venus/">Venus</generator> 
    66  <author> 
     
    3838      <subtitle xml:lang="fr">Un peu de tout: XML et technologies associées, presse, édition, photos, métadonnées, documentation, taxonomies/folksonomies, systÚmes éditoriaux, philosophie, épistémologie, mathématiques, histoire</subtitle> 
    3939      <title xml:lang="fr">Du bruit au signal (et inversement)</title> 
    40       <updated>2008-10-04T11:00:19Z</updated> 
     40      <updated>2008-10-04T17:39:36Z</updated> 
    4141    </source> 
    4242  </entry> 
     
    7070      <subtitle xml:lang="fr">Un peu de tout: XML et technologies associées, presse, édition, photos, métadonnées, documentation, taxonomies/folksonomies, systÚmes éditoriaux, philosophie, épistémologie, mathématiques, histoire</subtitle> 
    7171      <title xml:lang="fr">Du bruit au signal (et inversement)</title> 
    72       <updated>2008-10-04T11:00:19Z</updated> 
     72      <updated>2008-10-04T17:39:36Z</updated> 
    7373    </source> 
    7474  </entry> 
     
    118118      <link href="http://www.figoblog.org/rss.xml" rel="self" type="application/rss+xml"/> 
    119119      <title>Figoblog - Un blog sur Internet, la bibliothéconomie et la confiture de figues</title> 
    120       <updated>2008-10-04T13:39:47Z</updated> 
     120      <updated>2008-10-05T14:39:53Z</updated> 
    121121    </source> 
    122122  </entry> 
     
    158158      <subtitle xml:lang="fr">DerniÚres mises à jour du site de David Larlet : biologeek.com relatives aux billets et pensées du site</subtitle> 
    159159      <title xml:lang="fr">Flux RSS des billets et des pensées du site biologeek.com</title> 
    160       <updated>2008-10-04T13:40:08Z</updated> 
     160      <updated>2008-10-05T14:40:19Z</updated> 
    161161    </source> 
    162162  </entry> 
     
    802802      <link href="http://www.figoblog.org/rss.xml" rel="self" type="application/rss+xml"/> 
    803803      <title>Figoblog - Un blog sur Internet, la bibliothéconomie et la confiture de figues</title> 
    804       <updated>2008-10-04T13:39:54Z</updated> 
     804      <updated>2008-10-05T14:40:00Z</updated> 
    805805    </source> 
    806806  </entry> 
     
    10881088 
    10891089  <entry xml:lang="fr"> 
     1090    <id>tag:formats-ouverts.org,2008-09-28:/1727</id> 
     1091    <link href="http://formats-ouverts.org/blog/2008/09/28/1727-un-format-d-ecriture" rel="alternate" type="text/html"/> 
     1092    <title xml:lang="fr">Un format d'écriture</title> 
     1093    <summary xml:lang="fr">Un roman d'une phrase épique 
     1094 
     1095 
     1096La rentrée littéraire 2008 est riche. Signalons un titre, Zone, un roman de Mathias ENARD, paru aux éditions Actes Sud [1]. 
     1097 
     1098 
     1099S'agit-il de Mathias ENARD ou ÉNARD ? La couverture met l'accent, la quatriÚme de couverture ne le met pas (mais il y est sur le mot...</summary> 
     1100    <content type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml"><h5>Un roman d'une phrase épique</h5> 
     1101 
     1102 
     1103<p>La <a href="http://formats-ouverts.org/blog/2008/09/07/1706-livres-de-la-rentree">rentrée</a> littéraire 2008 est riche. Signalons un titre, <em>Zone</em>, un roman de Mathias ENARD, paru aux éditions Actes Sud [1].</p> 
     1104 
     1105 
     1106<p>S'agit-il de Mathias ENARD ou ÉNARD ? La couverture met l'accent, la quatriÚme de couverture ne le met pas (mais il y est sur le mot <em>Éditeur</em> de cette même quatriÚme de couverture). Ah <a href="http://formats-ouverts.org/blog/2007/06/29/1248-la-recolte-des-accents-dans-la-revolte-des-accents">ces accents</a>.</p> 
     1107 
     1108 
     1109<p>On peut aussi signaler que tout le texte est <em>« une immense phrase itérative »</em> : une seule phrase, sans majuscule (sauf aux noms propres), sans point (sauf d'exclamation ou d'interrogation). Un roman salué par la critique, récit incroyable où on se rend compte que les conventions d'écritures permettentdelireplusaisémentlesmots. Code typographique, rÚgles orthographiques et style ont des <a href="http://formats-ouverts.org/blog/2004/07/01/12-un-article-de-loi-definit-ce-que-sont-les-formats-ouverts">formats ouverts</a>.</p> 
     1110 
     1111 
     1112<h5>Autre article similaire sur <em>Formats-Ouverts.org</em> :</h5> 
     1113<ul> 
     1114<li><em><a href="http://formats-ouverts.org/blog/2006/11/07/998-un-livre-au-format-particulier">Mémoire de porc-épic d'Alain Mabanckou, prix Renaudot 2006</a></em></li> 
     1115</ul> 
     1116 
     1117<h5>Sources et liens :</h5> 
     1118 
     1119<ul> 
     1120<li>[1] Fiche du livre <em>Zone</em>, éditions Actes Sud, <a href="http://www.actes-sud.fr/ficheisbn.php?isbn=9782742777051">http://www.actes-sud.fr/ficheisbn.php?isbn=9782742777051</a></li> 
     1121</ul> 
     1122 
     1123<h5>Et sur <em>Formats-Ouverts.org</em> à la même date :</h5> 
     1124<ul> 
     1125<li>Articles de <a href="http://formats-ouverts.org/blog/2007/09/28">2007</a>, de <a href="http://formats-ouverts.org/blog/2006/09/28">2006</a>, de <a href="http://formats-ouverts.org/blog/2005/09/28">2005</a> et de <a href="http://formats-ouverts.org/blog/2004/09/28">2004</a>.</li> 
     1126</ul></div> 
     1127    </content> 
     1128    <updated>2008-09-28T21:50:02Z</updated> 
     1129    <category label="Non-&#xE9;lectronique" term="Nonelectronique"/> 
     1130    <author> 
     1131      <name>Thierry Stoehr</name> 
     1132    </author> 
     1133    <source> 
     1134      <id>tag:formats-ouverts.org,2008:/blog/</id> 
     1135      <link href="http://formats-ouverts.org/blog/" rel="alternate" type="text/html"/> 
     1136      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
     1137      <title xml:lang="fr">Pour les formats ouverts !</title> 
     1138      <updated>2008-09-28T21:50:02Z</updated> 
     1139    </source> 
     1140  </entry> 
     1141 
     1142  <entry xml:lang="fr"> 
    10901143    <id>urn:md5:4bcef968a434cdc425b56c92bcf83571</id> 
    10911144    <link href="http://blog.tuquoque.com/post/2008/09/28/First-Specification-for-Interoperability-and-Preservation-of-Metadata-in-Digital-Photography-annonce-a-la-Photokina" rel="alternate" type="text/html"/> 
     
    11201173      <subtitle xml:lang="fr">Un peu de tout: XML et technologies associées, presse, édition, photos, métadonnées, documentation, taxonomies/folksonomies, systÚmes éditoriaux, philosophie, épistémologie, mathématiques, histoire</subtitle> 
    11211174      <title xml:lang="fr">Du bruit au signal (et inversement)</title> 
    1122       <updated>2008-10-04T11:00:19Z</updated> 
     1175      <updated>2008-10-04T17:39:36Z</updated> 
    11231176    </source> 
    11241177  </entry> 
     
    11621215      <subtitle xml:lang="fr">DerniÚres mises à jour du site de David Larlet : biologeek.com relatives aux billets et pensées du site</subtitle> 
    11631216      <title xml:lang="fr">Flux RSS des billets et des pensées du site biologeek.com</title> 
    1164       <updated>2008-10-04T13:40:02Z</updated> 
     1217      <updated>2008-10-05T14:40:09Z</updated> 
    11651218    </source> 
    11661219  </entry> 
     
    12431296 
    12441297  <entry xml:lang="fr"> 
     1298    <id>tag:formats-ouverts.org,2008-09-27:/1726</id> 
     1299    <link href="http://formats-ouverts.org/blog/2008/09/27/1726-une-precision-sur-skype-en-particulier-et-sur-d-autres-en-general" rel="alternate" type="text/html"/> 
     1300    <title xml:lang="fr">Une précision sur Skype en particulier et sur d'autres en général</title> 
     1301    <summary xml:lang="fr">L'article sur Skype et ses formats peut sembler un peu trop neutre : certaines sociétés utilisent des formats ouverts, d'autres pas. Un peu court ? Alors précisons les choses : 
     1302 
     1303à propos de Skype en particulier : il ne s'agit pas de protocoles ouverts, mais fermés et qui...</summary> 
     1304    <content type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml"><p>L'article sur <a href="http://formats-ouverts.org/blog/2008/09/26/1725-skype-5-ans">Skype et ses formats</a> peut sembler un peu trop neutre : certaines sociétés utilisent des <a href="http://formats-ouverts.org/blog/2004/07/01/12-un-article-de-loi-definit-ce-que-sont-les-formats-ouverts">formats ouverts</a>, d'autres pas. Un peu court ? Alors précisons les choses :</p> 
     1305<ul> 
     1306<li>à propos de Skype <em>en particulier</em> : il ne s'agit <strong>pas</strong> de protocoles ouverts, mais fermés et qui changent réguliÚrement ; signaler l'anniversaire des 5 ans de formats fermés n'est pas avaliser, mais profiter de l'occasion pour souligner la situation ;</li> 
     1307</ul> 
     1308<ul> 
     1309<li>à propos des autres sociétés ou structures du Web (ou des TIC) <em>en général</em> : l'approche basée sur des formats (ou protocoles) fermés est une possibilité, certes ; <strong>mais</strong> elle pose des problÚmes d'<a href="http://formats-ouverts.org/blog/Interoperabilite">interopérabilité</a>, de sécurité, de concurrence, de pérennité, d'<a href="http://formats-ouverts.org/blog/Archivage">archivage</a>, de coût et d'indépendance.</li> 
     1310</ul> 
     1311 
     1312<p>Depuis son ouverture en juillet 2004, le titre du site <em>Formats-Ouverts.org</em> est <em>« Pour les formats ouverts ! »</em> car les formats sont capitaux dans <a href="http://formats-ouverts.org/blog/2006/08/12/906-il-voit-des-formats-partout">le monde numérique</a> : s'ils n'étaient que les seuls utilisés ce site n'aurait pas à souligner les dangers des formats fermés. Il faut donc remercier chaleureusement toutes les structures qui proposent ou imposent des formats fermés, <em>« afin de mieux répondre à notre responsabilité citoyenne »</em> (dixit) sans oublier <em>« pour mettre à disposition les derniÚres technologies et les proposer à nos clients »</em> (sic).</p> 
     1313 
     1314 
     1315<p>Cela permet d'occuper bénévolement le temps dont on dispose... Cela constitue presque un <em>Remerciement</em> <a href="http://formats-ouverts.org/blog/2008/03/26/1544-1500-articles-et-un-nouveau-format-en-vue">de livre...</a></p> 
     1316 
     1317 
     1318<h5>Et sur <em>Formats-Ouverts.org</em> à la même date :</h5> 
     1319<ul> 
     1320<li>Articles de <a href="http://formats-ouverts.org/blog/2007/09/27">2007</a>, de <a href="http://formats-ouverts.org/blog/2006/09/27">2006</a>, de <a href="http://formats-ouverts.org/blog/2005/09/27">2005</a> et de <a href="http://formats-ouverts.org/blog/2004/09/27">2004</a>.</li> 
     1321</ul></div> 
     1322    </content> 
     1323    <updated>2008-09-27T21:50:06Z</updated> 
     1324    <category label="G&#xE9;n&#xE9;ral" term="General"/> 
     1325    <author> 
     1326      <name>Thierry Stoehr</name> 
     1327    </author> 
     1328    <source> 
     1329      <id>tag:formats-ouverts.org,2008:/blog/</id> 
     1330      <link href="http://formats-ouverts.org/blog/" rel="alternate" type="text/html"/> 
     1331      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
     1332      <title xml:lang="fr">Pour les formats ouverts !</title> 
     1333      <updated>2008-09-28T21:50:02Z</updated> 
     1334    </source> 
     1335  </entry> 
     1336 
     1337  <entry xml:lang="fr"> 
    12451338    <id>http://www.biologeek.com/2008/09/qui-propose-du-django-en-france/</id> 
    12461339    <link href="http://www.biologeek.com/2008/09/qui-propose-du-django-en-france/" rel="alternate" type="text/html"/> 
     
    12851378      <subtitle xml:lang="fr">DerniÚres mises à jour du site de David Larlet : biologeek.com relatives aux billets et pensées du site</subtitle> 
    12861379      <title xml:lang="fr">Flux RSS des billets et des pensées du site biologeek.com</title> 
    1287       <updated>2008-10-04T13:40:21Z</updated> 
     1380      <updated>2008-10-05T14:40:31Z</updated> 
    12881381    </source> 
    12891382  </entry> 
     
    14751568      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    14761569      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1477       <updated>2008-09-26T21:50:16Z</updated> 
     1570      <updated>2008-09-28T21:50:02Z</updated> 
    14781571    </source> 
    14791572  </entry> 
     
    18191912      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    18201913      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1821       <updated>2008-09-26T21:50:16Z</updated> 
     1914      <updated>2008-09-28T21:50:02Z</updated> 
    18221915    </source> 
    18231916  </entry> 
     
    18851978      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    18861979      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1887       <updated>2008-09-26T21:50:16Z</updated> 
     1980      <updated>2008-09-28T21:50:02Z</updated> 
    18881981    </source> 
    18891982  </entry> 
     
    19422035      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    19432036      <title xml:lang="fr">Pour les formats ouverts !</title> 
    1944       <updated>2008-09-26T21:50:16Z</updated> 
     2037      <updated>2008-09-28T21:50:02Z</updated> 
    19452038    </source> 
    19462039  </entry> 
     
    19992092      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    20002093      <title xml:lang="fr">Pour les formats ouverts !</title> 
    2001       <updated>2008-09-26T21:50:16Z</updated> 
     2094      <updated>2008-09-28T21:50:02Z</updated> 
    20022095    </source> 
    20032096  </entry> 
     
    21122205      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    21132206      <title xml:lang="fr">Pour les formats ouverts !</title> 
    2114       <updated>2008-09-26T21:50:16Z</updated> 
     2207      <updated>2008-09-28T21:50:02Z</updated> 
    21152208    </source> 
    21162209  </entry> 
     
    22062299      <link href="http://formats-ouverts.org/atom.php" rel="self" type="application/atom+xml"/> 
    22072300      <title xml:lang="fr">Pour les formats ouverts !</title> 
    2208       <updated>2008-09-26T21:50:16Z</updated> 
     2301      <updated>2008-09-28T21:50:02Z</updated> 
    22092302    </source> 
    22102303  </entry> 
     
    23552448    </source> 
    23562449  </entry> 
    2357  
    2358   <entry xml:lang="fr"> 
    2359     <id>tag:bortzmeyer.org,2006-02:Blog/psycopg2-adaptation</id> 
    2360     <link href="http://www.bortzmeyer.org/psycopg2-adaptation.html" rel="alternate" type="text/html"/> 
    2361     <title xml:lang="fr">Adaptation des types Python à PostgreSQL pour psycopg</title> 
    2362     <summary xml:lang="fr">psycopg (http://initd.org/pub/software/psycopg/) est l'interface avec 
    2363 PostgreSQL la plus répandue chez les 
    2364 programmeurs Python. Parmi toutes ses qualités, psycopg adapte 
    2365 automatiquement les types Python aux types PostgreSQL. Mais cette 
    2366 adaptation ne fonctionne pas toujours toute seule et a parfois besoin 
    2367 d'un coup de main.</summary> 
    2368     <content type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://initd.org/pub/software/psycopg/">psycopg</a> est l'interface avec 
    2369 PostgreSQL la plus répandue chez les 
    2370 programmeurs Python. Parmi toutes ses qualités, psycopg adapte 
    2371 automatiquement les types Python aux types PostgreSQL. Mais cette 
    2372 <em>adaptation</em> ne fonctionne pas toujours toute seule et a parfois besoin 
    2373 d'un coup de main.</p><p>Avec <a href="http://initd.org/pub/software/psycopg/">psycopg</a>, si j'ai créé une table en SQL avec : 
    2374 <pre>  
    2375 CREATE TABLE Foobar (t TEXT, i INTEGER); 
    2376 </pre> 
    2377 je peux écrire dans mon programme Python : 
    2378 <pre> 
    2379 cursor.execute("INSERT INTO Foobar (t, i) VALUES (%s, %s)",  
    2380                ["I like Python", 42]) 
    2381 </pre> 
    2382 et psycopg trouve tout seul que "I like Python" est une chaîne de 
    2383 caractÚres alors que 42 est un entier. Il quote 
    2384 (met entre apostrophes) 
    2385 donc le premier et pas le second. PostgreSQL recevra (instruction 
    2386 SQL affichée grâce à <code>log_statement = 
    2387 'all'</code>) : 
    2388 <pre> 
    2389 2008-09-16 13:40:19 CEST STATEMENT:  INSERT INTO Foobar (t, i) VALUES ('I like Python', 42) 
    2390 </pre> 
    2391 Cela marche bien dans ce cas car Python connait les types utilisés et 
    2392 peut donc le dire à psycopg2 : 
    2393 <pre> 
    2394  
    2395 &gt;&gt;&gt; type(42) 
    2396 &lt;type 'int'&gt; 
    2397 &gt;&gt;&gt; type("I like Python") 
    2398 &lt;type 'str'&gt; 
    2399  
    2400 </pre> 
    2401 </p><p>Mais si on a affaire à des types qui existent dans PostgreSQL et pas 
    2402 dans Python ? Le cas est fréquent car PostgreSQL dispose de <a href="http://www.postgresql.org/docs/8.3/interactive/datatype.html">nombreux 
    2403 types</a> comme par exemple les <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-geometric.html#AEN5480">points</a>, les <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-net-types.html#DATATYPE-INET">adresses IP</a> ou encore les <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html">UUID</a> 
    2404 (RFC 4122). Essayons avec les adresses IP. Créons la table  : 
    2405 <pre> 
    2406 CREATE TABLE Foobar (addr INET); 
    2407 </pre> 
    2408 puis remplissons-la : 
    2409 <pre> 
    2410 cursor.execute("INSERT INTO Foobar (addr) VALUES (%s)",  
    2411                             ["2001:DB8::CAFE:1"]) 
    2412 </pre> 
    2413 Ã‡a marche, l'adresse IP <code>2001:db8::cafe:1</code> a bien 
    2414 Ã©té enregistrée. Python ne connait pas ce type, donc l'a traité comme 
    2415 une chaîne de caractÚres, que PostgreSQL a su analyser.</p><p>Mais si on veut mettre un <a href="http://www.postgresql.org/docs/8.3/interactive/arrays.html">tableau</a> de telles 
    2416 adresses (petit détour par le DNS : il est 
    2417 tout à fait légal, et même fréquent, qu'à un nom de machine donnée 
    2418 correspondent plusieurs adresses 
    2419 IP) ? Là, Python, psycopg et PostgreSQL ne sont pas assez 
    2420 intelligents. On crée la table : 
    2421 <pre> 
    2422 CREATE TABLE Foobar (addr INET[]); 
    2423 </pre> 
    2424 et on tente de la peupler : 
    2425 <pre> 
    2426  
    2427 &gt;&gt;&gt; cursor.execute("INSERT INTO Foobar (addr) VALUES (%s)", [["2001:DB8::CAFE:1", "192.168.25.34"]]) 
    2428 Traceback (most recent call last): 
    2429   File "&lt;stdin&gt;", line 1, in &lt;module&gt; 
    2430 psycopg2.ProgrammingError: column "addr" is of type inet[] but expression is of type text[] 
    2431 LINE 1: INSERT INTO Foobar (addr) VALUES (ARRAY['2001:DB8::CAFE:1', ... 
    2432                             ^ 
    2433 HINT:  You will need to rewrite or cast the expression. 
    2434  
    2435 </pre> 
    2436 En effet, PostgreSQL aura reçu : 
    2437 <pre> 
    2438 2008-09-16 13:53:01 CEST LOG:  statement: INSERT INTO Foobar (addr) VALUES (ARRAY['2001:DB8::CAFE:1', '192.168.25.34']) 
    2439 </pre> 
    2440 alors qu'il aurait fallu envoyer <code>INSERT INTO Foobar (addr) VALUES ('{2001:DB8::CAFE:1, 192.168.25.34}')</code>. 
    2441 (Le problÚme serait le même pour le type UUID.)</p><p>Quelle est la bonne solution ? psycopg pourrait être plus malin et 
    2442 mieux connaître les types de PostgreSQL mais c'est plus compliqué que 
    2443 Ã§a en a l'air. Heureusement, il existe une solution assez 
    2444 simple. Depuis sa version 2, psycopg permet de définir des 
    2445 <em>adaptateurs</em> soi-même, c'est-à-dire le code qui va 
    2446 faire la conversion d'un objet Python, au moment de l'appel à 
    2447 PostgreSQL. Cette technique est documentée (sommairement) dans le 
    2448 fichier <code>doc/extensions.rst</code> qui est distribué avec 
    2449 psycopg. (On le trouve aussi sur le Web en <a href="http://www.initd.org/svn/psycopg/psycopg2/trunk/doc/extensions.rst"><code>http://www.initd.org/svn/psycopg/psycopg2/trunk/doc/extensions.rst</code></a> mais, 
    2450 servi avec une mauvaise indication de son type, il est difficile à 
    2451 lire.) Voici l'exemple que donne la documentation. Il utilise le type 
    2452 <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-geometric.html#AEN5480">POINT</a> de PostgreSQL, qui représente un point 
    2453 dans un espace cartésien à deux dimensions. On 
    2454 crée la table avec : 
    2455 <pre> 
    2456 CREATE TABLE Atable (apoint POINT); 
    2457 </pre> 
    2458 et on peut la peupler en SQL ainsi : 
    2459 <pre> 
    2460 INSERT INTO Atable (apoint) VALUES ('(1, 3.14159)'); 
    2461 </pre> 
    2462 Pour que cela soit fait automatiquement depuis le programme Python 
    2463 utilisant psycopg2, le code est : 
    2464 <pre> 
    2465     from psycopg2.extensions import adapt, register_adapter, AsIs 
    2466      
    2467     class Point(object): 
    2468         def __init__(self, x=0.0, y=0.0): 
    2469             self.x = x 
    2470             self.y = y 
    2471      
    2472     def adapt_point(point): 
    2473         return AsIs("'(%s,%s)'" % (adapt(point.x), adapt(point.y))) 
    2474          
    2475     register_adapter(Point, adapt_point) 
    2476      
    2477     curs.execute("INSERT INTO atable (apoint) VALUES (%s)",  
    2478                  (Point(1.23, 4.56),)) 
    2479 </pre> 
    2480 </p><p>Et voici enfin le (tout petit) adaptateur que j'ai écrit pour le 
    2481 type PostgreSQL <a href="http://www.postgresql.org/docs/8.3/interactive/datatype-net-types.html#DATATYPE-INET">INET</a>, qui permet de 
    2482 représenter des adresses IP : 
    2483 <pre> 
    2484 from psycopg2.extensions import adapt, register_adapter, AsIs 
    2485  
    2486 class Inet(object): 
    2487     """ Classe pour stocker les adresses IP. Pour que psycopg puisse 
    2488     faire correctement la traduction en SQL, il faut que les objets 
    2489     soient typés. Les chaînes de caractÚres ne conviennent donc pas. """ 
    2490    
    2491     def __init__(self, addr): 
    2492         """ Never call it with unchecked data, there is no protection 
    2493         against injection """ 
    2494         self.addr = addr 
    2495  
    2496 def adapt_inet(address): 
    2497     """ Adaptateur du type Python Inet vers le type PostgreSQL du même 
    2498     nom. On utilise un "cast" PostgreSQL, représenté par '::inet' """ 
    2499     return AsIs("'%s'::inet" % address.addr) 
    2500  
    2501 register_adapter(Inet, adapt_inet) 
    2502 </pre> 
    2503 Et on l'utilise ainsi (notez qu'il faut appeler le 
    2504 constructeur <code>Inet()</code> pour 
    2505 Â«Â typer » les valeurs) : 
    2506 <pre> 
    2507 cursor.execute("INSERT INTO Foobar (addr) VALUES (%s)",  
    2508                  [[Inet("2001:DB8::CAFE:1"), Inet("192.168.25.34")]]) 
    2509 </pre> 
    2510 Désormais, cela fonctionne. PostgreSQL reçoit : 
    2511 <pre> 
    2512 2008-09-16 17:43:48 CEST LOG:  statement: INSERT INTO Foobar (addr) VALUES (ARRAY['2001:DB8::CAFE:1'::inet, '192.168.25.34'::inet]) 
    2513 </pre>et exécute bien la requête.</p><p>Merci à Chris Cogdon et Federico Di Gregorio (l'auteur de psycopg) 
    2514 pour leur aide sur ce sujet.</p></div> 
    2515     </content> 
    2516     <updated>2008-09-16T00:00:00Z</updated> 
    2517     <published>2008-09-16T00:00:00Z</published> 
    2518     <source> 
    2519       <id>tag:bortzmeyer.org,2006-02:Blog/</id> 
    2520       <icon>http://www.bortzmeyer.org/favicon.ico</icon> 
    2521       <author> 
    2522         <name>Stéphane Bortzmeyer</name> 
    2523         <email>stephane+blog@bortzmeyer.org</email> 
    2524       </author> 
    2525       <link href="http://www.bortzmeyer.org/" rel="alternate" type="text/html"/> 
    2526       <link href="http://www.bortzmeyer.org/feed.atom" rel="self" type="application/atom+xml"/> 
    2527       <link href="http://www.gnu.org/copyleft/fdl.html" rel="license" type="text/html"/> 
    2528       <link href="http://www.gnu.org/licenses/fdl.xml" rel="license" type="application/docbook+xml"/> 
    2529       <link href="http://www.gnu.org/licenses/fdl.txt" rel="license" type="text/plain"/> 
    2530       <rights type="xhtml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">© Stéphane Bortzmeyer, 2005. <a href="http://www.gnu.org/copyleft/fdl.html">GNU Free Documentation License</a> (GFDL).</div> 
    2531       </rights> 
    2532       <title xml:lang="fr">Blog de Stéphane Bortzmeyer</title> 
    2533       <updated>2008-10-02T10:22:00Z</updated> 
    2534     </source> 
    2535   </entry> 
    25362450</feed> 
  • xmlfr/remote/pages/actualites/planete/planete.xml

    r3332 r3334  
    11<?xml version="1.0"?> 
    2 <feed xmlns="http://