Updated.

Pascal J. Bourguignon [2013-12-20 22:54]
Updated.
Filename
com.informatimago.www/articles/raspberrypi/ccl-raspberry-pi-qemu.png
com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html
com.informatimago.www/articles/raspberrypi/index.html
com.informatimago.www/index.html
com.informatimago.www/lambda.png
com.informatimago.www/toc.html
org.ogamita.pjb/cv/cv-pjb-adm-en-full.html
org.ogamita.pjb/cv/cv-pjb-adm-en-short.html
org.ogamita.pjb/cv/cv-pjb-adm-es-full.html
org.ogamita.pjb/cv/cv-pjb-adm-es-short.html
org.ogamita.pjb/cv/cv-pjb-adm-fr-full.html
org.ogamita.pjb/cv/cv-pjb-adm-fr-short.html
org.ogamita.pjb/cv/cv-pjb-cl-en-full.html
org.ogamita.pjb/cv/cv-pjb-cl-en-short.html
org.ogamita.pjb/cv/cv-pjb-cl-es-full.html
org.ogamita.pjb/cv/cv-pjb-cl-es-short.html
org.ogamita.pjb/cv/cv-pjb-cl-fr-full.html
org.ogamita.pjb/cv/cv-pjb-cl-fr-short.html
org.ogamita.pjb/cv/cv-pjb-cpp-fr-full.html
org.ogamita.pjb/cv/cv-pjb-cpp-fr-short.html
org.ogamita.pjb/cv/cv-pjb-dev-en-full.html
org.ogamita.pjb/cv/cv-pjb-dev-en-short.html
org.ogamita.pjb/cv/cv-pjb-dev-es-full.html
org.ogamita.pjb/cv/cv-pjb-dev-es-short.html
org.ogamita.pjb/cv/cv-pjb-dev-fr-full.html
org.ogamita.pjb/cv/cv-pjb-dev-fr-short.html
org.ogamita.pjb/cv/cv.lisp
org.ogamita.pjb/cv/pjb.cv
diff --git a/com.informatimago.www/articles/raspberrypi/ccl-raspberry-pi-qemu.png b/com.informatimago.www/articles/raspberrypi/ccl-raspberry-pi-qemu.png
new file mode 100644
index 0000000..bf4f9c3
Binary files /dev/null and b/com.informatimago.www/articles/raspberrypi/ccl-raspberry-pi-qemu.png differ
diff --git a/com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html b/com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html
new file mode 100644
index 0000000..812d913
--- /dev/null
+++ b/com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!-- -*- coding:utf-8; fill-column:100 -*- -->
+
+<HTML>
+<HEAD>
+  <link rel="icon"          href="/favicon.ico" type="image/x-icon">
+  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+  <link rel="stylesheet"    href="../../default.css"  type="text/css">
+  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+  <META NAME="author"             CONTENT="Pascal J. Bourguignon">
+  <META HTTP-EQUIV="Description"
+        NAME="description"        CONTENT="Common Lisp sur Raspberry Pi">
+  <TITLE>Clozure CL sur Raspbian sur qemu-linaro</TITLE>
+</HEAD>
+
+<BODY>
+
+<!--TOP-BEGIN-->
+<!-- This section is automatically generated by html-update, -->
+<!-- from data in 'node.el'.    Please, do not edit it here. -->
+<DIV CLASS="TOP">
+
+</DIV>
+<!--TOP-END-->
+<!--MENU-BEGIN-->
+<!-- This section is automatically generated by html-update, -->
+<!-- from data in 'node.el'.    Please, do not edit it here. -->
+<DIV CLASS="MENU"><HR><P>|
+ <A HREF="../../toc.html">Contents</a> |
+ <A HREF="../../index.html">Home</a> |
+ <A HREF="index.html">Previous</a> |
+ <A HREF="index.html">Up</a> |
+ <A HREF="../../attic.html">Next</a> |
+</P><HR></DIV>
+<!--MENU-END-->
+
+<h1>Raspberry Pi</h1>
+
+<p>Je devrais recevoir un Raspberry Pi cette semaine.  Prenant un peu
+d'avance, j'ai essayé <a href="http://ccl.clozure.com/"><tt>Clozure CL</tt></a>
+sur <a href="http://www.raspbian.org/"><tt>raspbian</tt></a>  sur l'émulateur
+<a href="https://launchpad.net/qemu-linaro"><tt>qemu linaro</tt></a>.</p>
+
+<h2>Instructions</h2>
+
+<p>Suivons les instructions de
+<a href="http://linux-news.org/index.php/2012/06/02/raspberry-pi-emulation/">
+Linux-News Raspberry PI Emulation</a>.
+
+<pre>
+RPI="$HOME/raspberrypi"
+mkdir "$RPI"
+cd "$RPI"
+wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu
+wget http://downloads.raspberrypi.org/images/raspbian/2012-07-15-wheezy-raspbian/2012-07-15-wheezy-raspbian.zip
+unzip -x 2012-07-15-wheezy-raspbian.zip
+git clone git://git.linaro.org/qemu/qemu-linaro.git
+cd qemu-linaro
+./configure --prefix="$RPI"/opt --target-list=arm-softmmu
+make
+make install
+cd "$RPI"
+./opt/bin/qemu-system-arm \
+    -kernel kernel-qemu \
+    -cpu arm1136-r2 \
+    -M versatilepb \
+    -no-reboot \
+    -append "root=/dev/sda2 panic=1" \
+    -hda 2012-07-15-wheezy-raspbian.img
+</pre>
+
+
+
+
+
+<p>Ça démarre bien, mais on n'a pas accès au réseau.  Avec un interface tun configuré sur la machine
+hôte, et un serveur DHCP sur le réseau local, on peut configurer un interface réseau tap avec la
+commande suivante:
+
+
+<pre>
+cd "$RPI"
+./opt/bin/qemu-system-arm \
+    -net nic,macaddr=52:54:0:0:0:77 -net tap \
+    -kernel kernel-qemu \
+    -cpu arm1136-r2 \
+    -M versatilepb \
+    -no-reboot \
+    -append "root=/dev/sda2 panic=1" \
+    -hda 2012-07-15-wheezy-raspbian.img
+</pre>
+
+<p>On peut alors se connecter au compte <tt>pi</tt> (mot de passe par défaut: <tt>raspberry</tt>),
+et utiliser la connection réseau pour installer <a href="http://ccl.clozure.com/"><tt>Clozure CL</tt></a>:</p>
+
+<pre>
+svn co http://svn.clozure.com/publicsvn/openmcl/trunk/linuxarm/ccl
+ccl/armcl
+</pre>
+
+<p>Et voilà le résultat:
+<img src="ccl-raspberry-pi-qemu.png"  alt="Booting Clozure CL on raspbian on qemu">
+</p>
+
+<!--BOTTOM-BEGIN-->
+<!-- This section is automatically generated by html-update, -->
+<!-- from data in 'node.el'.    Please, do not edit it here. -->
+<DIV CLASS="BOTTOM">
+<hr><code><small>
+ | <a href="http://www.informatimago.com//articles/raspberrypi/ccl-sur-qemu.html">Mirror on informatimago.com</a>
+ | <a href="http://informatimago.free.fr/i//articles/raspberrypi/ccl-sur-qemu.html">Mirror on free.fr</a>
+ | </small></code>
+
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+     by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
+    </SMALL>
+<BR><SMALL>
+      <a href="http://validator.w3.org/check?uri=referer"><img
+          src="http://www.w3.org/Icons/valid-html401"
+          alt="Valid HTML 4.01!" height="31" width="88"></a>
+   </SMALL>
+</DIV>
+<!--BOTTOM-END-->
+</BODY>
+</HTML>
diff --git a/com.informatimago.www/articles/raspberrypi/index.html b/com.informatimago.www/articles/raspberrypi/index.html
new file mode 100644
index 0000000..29c0a44
--- /dev/null
+++ b/com.informatimago.www/articles/raspberrypi/index.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!-- -*- coding:utf-8 -*- -->
+
+<HTML>
+<HEAD>
+  <link rel="icon"          href="/favicon.ico" type="image/x-icon">
+  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+  <link rel="stylesheet"    href="../../default.css"  type="text/css">
+  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+  <META NAME="author"             CONTENT="Pascal J. Bourguignon">
+  <META HTTP-EQUIV="Description"
+        NAME="description"        CONTENT="Common Lisp sur Raspberry Pi">
+  <TITLE>Common Lisp sur Raspberry Pi</TITLE>
+</HEAD>
+
+<BODY>
+
+<!--TOP-BEGIN-->
+<!-- This section is automatically generated by html-update, -->
+<!-- from data in 'node.el'.    Please, do not edit it here. -->
+<DIV CLASS="TOP">
+
+</DIV>
+<!--TOP-END-->
+<!--MENU-BEGIN-->
+<!-- This section is automatically generated by html-update, -->
+<!-- from data in 'node.el'.    Please, do not edit it here. -->
+<DIV CLASS="MENU"><HR><P>|
+ <A HREF="../../toc.html">Contents</a> |
+ <A HREF="../../index.html">Home</a> |
+ <A HREF="../flpl/index.html">Previous</a> |
+ <A HREF="../index.html">Up</a> |
+ <A HREF="ccl-sur-qemu.html">Down</a> |
+ <A HREF="ccl-sur-qemu.html">Next</a> |
+</P><HR></DIV>
+<!--MENU-END-->
+
+<h1>Common Lisp sur Raspberry Pi</h1>
+
+<p>Mes aventures avec Common Lisp sur Raspberry Pi.</p>
+
+<ol>
+
+<li><a href="ccl-sur-qemu.html">Clozure CL sur Raspbian sur qemu-linaro</a>.
+
+</ol>
+
+
+
+
+<!--BOTTOM-BEGIN-->
+<!-- This section is automatically generated by html-update, -->
+<!-- from data in 'node.el'.    Please, do not edit it here. -->
+<DIV CLASS="BOTTOM">
+<hr><code><small>
+ | <a href="http://www.informatimago.com//articles/raspberrypi/index.html">Mirror on informatimago.com</a>
+ | <a href="http://informatimago.free.fr/i//articles/raspberrypi/index.html">Mirror on free.fr</a>
+ | </small></code>
+
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+     by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
+    </SMALL>
+<BR><SMALL>
+      <a href="http://validator.w3.org/check?uri=referer"><img
+          src="http://www.w3.org/Icons/valid-html401"
+          alt="Valid HTML 4.01!" height="31" width="88"></a>
+   </SMALL>
+</DIV>
+<!--BOTTOM-END-->
+</BODY>
+</HTML>
diff --git a/com.informatimago.www/index.html b/com.informatimago.www/index.html
index 5553fde..a46c827 100644
--- a/com.informatimago.www/index.html
+++ b/com.informatimago.www/index.html
@@ -117,7 +117,7 @@
  | <a href="http://informatimago.free.fr/i//index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:34
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2013-12-20 23:39:42
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/lambda.png b/com.informatimago.www/lambda.png
new file mode 100644
index 0000000..52844e0
Binary files /dev/null and b/com.informatimago.www/lambda.png differ
diff --git a/com.informatimago.www/toc.html b/com.informatimago.www/toc.html
index 2c82c77..343ecaf 100644
--- a/com.informatimago.www/toc.html
+++ b/com.informatimago.www/toc.html
@@ -27,7 +27,7 @@
 <li><a href="develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html">Sexp Edit</a></li>
 <li><a href="develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html">An implementation of the Playtomo Stonedge game, with its solver</a></li>
 <li><a href="develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html">Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html">Brainfuck in Lisp -- Lisp in Brainfuck</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html">Sudoku Solver</a></li>
 <li><a href="develop/lisp/com/informatimago/small-cl-pgms/basic/index.html">A Quick, Dirty and Ugly BASIC implemented in Common Lisp</a></li>
 <li><a href="develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html">Brainfuck in Lisp -- Lisp in Brainfuck</a></li>
 </ol></li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-adm-en-full.html b/org.ogamita.pjb/cv/cv-pjb-adm-en-full.html
index f98e7e4..afca5b0 100644
--- a/org.ogamita.pjb/cv/cv-pjb-adm-en-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-adm-en-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Pascal BOURGUIGNON's Resume</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:20 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:05 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-adm-en-short.html b/org.ogamita.pjb/cv/cv-pjb-adm-en-short.html
index a3826d5..7518ade 100644
--- a/org.ogamita.pjb/cv/cv-pjb-adm-en-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-adm-en-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Pascal BOURGUIGNON's Resume</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:20 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:05 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-adm-es-full.html b/org.ogamita.pjb/cv/cv-pjb-adm-es-full.html
index 0426945..02e32c8 100644
--- a/org.ogamita.pjb/cv/cv-pjb-adm-es-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-adm-es-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:21 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:06 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-adm-es-short.html b/org.ogamita.pjb/cv/cv-pjb-adm-es-short.html
index 7e7b6ad..3e87fbc 100644
--- a/org.ogamita.pjb/cv/cv-pjb-adm-es-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-adm-es-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:20 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:05 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-adm-fr-full.html b/org.ogamita.pjb/cv/cv-pjb-adm-fr-full.html
index 65e6be3..a89be63 100644
--- a/org.ogamita.pjb/cv/cv-pjb-adm-fr-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-adm-fr-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:21 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:06 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-adm-fr-short.html b/org.ogamita.pjb/cv/cv-pjb-adm-fr-short.html
index 1efe39d..7daffff 100644
--- a/org.ogamita.pjb/cv/cv-pjb-adm-fr-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-adm-fr-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:20 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:05 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cl-en-full.html b/org.ogamita.pjb/cv/cv-pjb-cl-en-full.html
index 5333274..b6705b1 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cl-en-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cl-en-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Pascal BOURGUIGNON's Resume</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:17 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:02 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cl-en-short.html b/org.ogamita.pjb/cv/cv-pjb-cl-en-short.html
index 2ca4310..347f622 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cl-en-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cl-en-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Pascal BOURGUIGNON's Resume</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:16 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:01 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cl-es-full.html b/org.ogamita.pjb/cv/cv-pjb-cl-es-full.html
index de8c421..467dbe1 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cl-es-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cl-es-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:18 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:03 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cl-es-short.html b/org.ogamita.pjb/cv/cv-pjb-cl-es-short.html
index 8086b25..31526d4 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cl-es-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cl-es-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:17 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:02 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cl-fr-full.html b/org.ogamita.pjb/cv/cv-pjb-cl-fr-full.html
index 47fb774..69eec4b 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cl-fr-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cl-fr-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:17 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:02 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cl-fr-short.html b/org.ogamita.pjb/cv/cv-pjb-cl-fr-short.html
index b85cb9a..db9ae82 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cl-fr-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cl-fr-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:17 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:02 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cpp-fr-full.html b/org.ogamita.pjb/cv/cv-pjb-cpp-fr-full.html
index 9838ae7..085435c 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cpp-fr-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cpp-fr-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:19 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:04 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-cpp-fr-short.html b/org.ogamita.pjb/cv/cv-pjb-cpp-fr-short.html
index b2481f5..178c707 100644
--- a/org.ogamita.pjb/cv/cv-pjb-cpp-fr-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-cpp-fr-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:18 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:03 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-dev-en-full.html b/org.ogamita.pjb/cv/cv-pjb-dev-en-full.html
index bdb7b29..4cde43a 100644
--- a/org.ogamita.pjb/cv/cv-pjb-dev-en-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-dev-en-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Pascal BOURGUIGNON's Resume</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:16 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:00 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-dev-en-short.html b/org.ogamita.pjb/cv/cv-pjb-dev-en-short.html
index c3a4363..2a33445 100644
--- a/org.ogamita.pjb/cv/cv-pjb-dev-en-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-dev-en-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Pascal BOURGUIGNON's Resume</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:15 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:00 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-dev-es-full.html b/org.ogamita.pjb/cv/cv-pjb-dev-es-full.html
index 58ea29d..3b828bb 100644
--- a/org.ogamita.pjb/cv/cv-pjb-dev-es-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-dev-es-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:16 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:01 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-dev-es-short.html b/org.ogamita.pjb/cv/cv-pjb-dev-es-short.html
index 005403a..4de3b92 100644
--- a/org.ogamita.pjb/cv/cv-pjb-dev-es-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-dev-es-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:15 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:00 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
diff --git a/org.ogamita.pjb/cv/cv-pjb-dev-fr-full.html b/org.ogamita.pjb/cv/cv-pjb-dev-fr-full.html
index 6449e91..133eda4 100644
--- a/org.ogamita.pjb/cv/cv-pjb-dev-fr-full.html
+++ b/org.ogamita.pjb/cv/cv-pjb-dev-fr-full.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:16 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:01 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv-pjb-dev-fr-short.html b/org.ogamita.pjb/cv/cv-pjb-dev-fr-short.html
index 5b44b46..e56e530 100644
--- a/org.ogamita.pjb/cv/cv-pjb-dev-fr-short.html
+++ b/org.ogamita.pjb/cv/cv-pjb-dev-fr-short.html
@@ -3,7 +3,7 @@
 <html>
 <head>
 <title>Curriculum Vitae de Pascal BOURGUIGNON</title>
-<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 00:47:15 GMT">
+<meta HTTP-EQUIV="Expires" content="Wed, 27 Nov 2013 01:05:00 GMT">
 <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
 <link href="/default.css" rel="stylesheet" type="text/css">
 <link href="style.css" rel="stylesheet" type="text/css"></head>
@@ -104,7 +104,7 @@ compteurs, histogrammes par distance, et par dur&#233;e de visite. </li>
 <li>D&#233;veloppement d'un SDK iOS et d'une application d&#233;monstration
 utilisant une biblioth&#232;que de tatouage num&#233;rique ultrason, pour
 d&#233;tecter des codes num&#233;riques dans les ultrasons capt&#233;s sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification &#224; l'utilisateur du t&#233;l&#233;phone, ouverture d'une page web
 sur l'annonce commerciale). </li>
 <li>D&#233;veloppement d'une application iOS de d&#233;monstration des fonctionalit&#233;s de g&#233;ofencing du SDK Ubudu. </li>
diff --git a/org.ogamita.pjb/cv/cv.lisp b/org.ogamita.pjb/cv/cv.lisp
index 995ab99..e4b8498 100644
--- a/org.ogamita.pjb/cv/cv.lisp
+++ b/org.ogamita.pjb/cv/cv.lisp
@@ -35,16 +35,63 @@
 ;;;;    Boston, MA 02111-1307 USA
 ;;;;**************************************************************************

-(unless (find-package :html)
-  (asdf:operate 'asdf:load-op :com.informatimago.common-lisp))
+(ql:quickload :com.informatimago.common-lisp)
+(ql:quickload :cl-pdf)
+(ql:quickload :cl-typesetting)
+(ql:quickload :cl-pdf-doc)
+
 (defpackage "CV"
-  (:use "CL" "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.UTILITY"))
+  (:use "COMMON-LISP"
+        "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.UTILITY"
+        "CL-PDF-DOC"
+        "TT"))
 (in-package "CV")


-;;----------------------------------------------------------------------
-;; GENERATOR
-;;----------------------------------------------------------------------
+;;;----------------------------------------------------------------------
+;;; UTILITIES
+;;;----------------------------------------------------------------------
+;;;
+;;;
+
+(defun rfc-822-date ()
+  (multiple-value-bind (se mi ho da mo ye day-of-week)
+      (decode-universal-time (get-universal-time) 0)
+    (format nil "~[Mon~;Tue~;Wed~;Thi~;Fri~;Sat~;Sun~], ~2@A ~
+        ~[~;Jan~;Feb~;Mar~;Apr~;May~;Jun~;Jul~;Aug~;Sep~;Oct~;Nov~;Dec~] ~
+        ~4,'0D ~2,'0D:~2,'0D:~2,'0D GMT "
+            day-of-week da mo ye ho mi se)))
+
+
+(defun item-kind (item)
+  (cond
+    ((consp item)
+     (if (member (first item) '(:text :list :link :mode :skills :break))
+         (first item)
+         :sequence))
+    ((stringp item) :text)
+    (t (error "Invalid item ~S" item))))
+
+
+(defun collect-skills (items)
+  (cond
+    ((atom items) nil)
+    ((atom (first items))
+     (if (eq :skills (first items))
+         (rest items)
+         (reduce (function union)
+                 (mapcar (function collect-skills) (rest items)))))
+    (t (reduce (function union)
+               (mapcar (function collect-skills) items)))))
+
+
+;;;----------------------------------------------------------------------
+;;; GENERATOR
+;;;----------------------------------------------------------------------
+;;;
+;;; The abstract generator class along with declarations of its generic
+;;; functions and macros.
+;;;

 (defclass generator ()
   ())
@@ -57,7 +104,8 @@
 (defgeneric gen-list-item  (generator genbody &key name))
 (defgeneric gen-definition (generator term genbody &key name))
 (defgeneric gen-link       (generator genbody &key url))
-
+(defgeneric gen-field      (generator title value &key strong link))
+(defgeneric flow-items     (genertor language items))

 (defvar *language* :en)
 (defvar *generator* nil "The current generator")
@@ -100,31 +148,40 @@

 (defun bullet-list-items (items)
   (bullet-list
-   (mapc (lambda (item) (list-item (generate-items (list item)))) items)))
+   (mapc (lambda (item) (list-item (generate-items *generator* (list item)))) items)))

 (defmacro link (url text)
   `(gen-link *generator*
              (lambda () (gen-text *generator* (language *language* ,text)))
              :url ,url))

+(defmacro group (&body body)
+  `(gen-group *generator* (lambda () ,@body)))

-;;----------------------------------------------------------------------
-;; HTML-GENERATOR
-;;----------------------------------------------------------------------
-;; This class genrates HTML documents.
-;;
+(defmacro field (title value &key strong link)
+  `(gen-field *generator*  ,title ,value :strong strong :link link))

-(defclass html-generator (generator)
+
+;;;----------------------------------------------------------------------
+;;; PDF-GENERATOR
+;;;----------------------------------------------------------------------
+;;; This class genrates PDF documents.
+;;;
+
+
+(defclass pdf-generator (generator)
   ())


-(defun rfc-822-date ()
-  (multiple-value-bind (se mi ho da mo ye day-of-week)
-      (decode-universal-time (get-universal-time) 0)
-    (format nil "~[Mon~;Tue~;Wed~;Thi~;Fri~;Sat~;Sun~], ~2@A ~
-        ~[~;Jan~;Feb~;Mar~;Apr~;May~;Jun~;Jul~;Aug~;Sep~;Oct~;Nov~;Dec~] ~
-        ~4,'0D ~2,'0D:~2,'0D:~2,'0D GMT "
-            day-of-week da mo ye ho mi se)))
+;;;----------------------------------------------------------------------
+;;; HTML-GENERATOR
+;;;----------------------------------------------------------------------
+;;; This class genrates HTML documents.
+;;;
+
+(defclass html-generator (generator)
+  ())
+

 (defmethod gen-style-header ((generator html-generator))
   (html:META (:http-equiv "Expires" :content (rfc-822-date)))
@@ -133,7 +190,7 @@
   (html:link (:href "style.css"    :rel "stylesheet" :type "text/css")))


-(defmethod gen-document ((generator html-generator) genbody
+(defmethod gen-document ((*generator* html-generator) genbody
                          &key (file-path #P"document") (title nil))
   (let ((path  (make-pathname :type "html" :defaults file-path)))
     (with-open-file (html path
@@ -146,25 +203,24 @@
             (html:head ()
               (when title
                 (html:title ()
-                  (gen-text generator title)))
-              (gen-style-header generator))
+                  (gen-text *generator* title)))
+              (gen-style-header *generator*))
             (html:body ()
               (funcall genbody))))))
     path))


-
-
-(defmethod gen-text ((generator html-generator) text)
+(defmethod gen-text ((*generator* html-generator) text)
   (unless text (invoke-debugger (make-instance 'error)))
   (html:pcdata "~A" text))

-(defmethod gen-section ((generator html-generator) genbody
+
+(defmethod gen-section ((*generator* html-generator) genbody
                         &key (name nil) (title "Section"))
   (let ((*section* (1+ *section*)))
     (flet ((title () (if name
-                         (html:a (:name name) (gen-text generator title))
-                         (gen-text generator title))))
+                         (html:a (:name name) (gen-text *generator* title))
+                         (gen-text *generator* title))))
       (case *section*
         ((1)       (html:h1 () (title)))
         ((2)       (html:h2 () (title)))
@@ -175,43 +231,43 @@
     (funcall genbody)))


-(defmethod gen-list ((generator html-generator) genbody &key (type :bullet))
+(defmethod gen-list ((*generator* html-generator) genbody &key (type :bullet))
   (case type
     ((:ordered)    (html:ol () (funcall genbody)))
     ((:definition) (html:dl () (funcall genbody)))
     (otherwise     (html:ul () (funcall genbody)))))

-(defmethod gen-list-item ((generator html-generator) genbody &key (name nil))
+(defmethod gen-list-item ((*generator* html-generator) genbody &key (name nil))
   (if name
       (html:li (:class name :id name) (funcall genbody))
       (html:li ()                     (funcall genbody))))

-(defmethod gen-definition ((generator html-generator) term genbody &key name)
+(defmethod gen-definition ((*generator* html-generator) term genbody &key name)
   (if name
       (progn (html:br)
-             (html:dt (:class name :id name) (gen-text generator term))
+             (html:dt (:class name :id name) (gen-text *generator* term))
              (html:dd (:class name :id name) (funcall genbody)))
       (progn (html:br)
-             (html:dt ()                     (gen-text generator term))
+             (html:dt ()                     (gen-text *generator* term))
              (html:dd ()                     (funcall genbody)))))


-(defmethod gen-link ((generator html-generator) genbody &key url)
+(defmethod gen-link ((*generator* html-generator) genbody &key url)
   (html:a (:href url) (funcall genbody)))


-;;----------------------------------------------------------------------
+(defmethod gen-group ((*generator* html-generator) thunk)
+  (html:dl () (funcall thunk)))

-(defmacro group (&body body) `(html:dl () ,@body))

-(defun flow-items (language items)
+(defmethod flow-items ((*generator* html-generator) *language* items)
   (loop
-     :initially (html:pcdata (language language (first items)))
+     :initially (html:pcdata (language *language* (first items)))
      :for line :in (rest items)
      :do (progn (html:pcdata ", ")
-                (html:pcdata (language language line)))))
+                (html:pcdata (language *language* line)))))

-(defun field (title value &key strong link)
+(defmethod gen-field ((*generator* html-generator) title value &key strong link)
   (definition title
       (labels ((insert-value (value)
                  (assert value)
@@ -229,22 +285,12 @@
             (link value value)
             (opt-strong value)))))

-(defun link-field (title value) (field title value :link t))
-

+(defmethod link-field ((*generator* html-generator) title value)
+  (gen-field *generator* title value :link t))


-(defun item-kind (item)
-  (cond
-    ((consp item)
-     (if (member (first item) '(:text :list :link :mode :skills :break))
-         (first item)
-         :sequence))
-    ((stringp item) :text)
-    (t (error "Invalid item ~S" item))))
-
-
-(defun generate-items (items)
+(defmethod generate-items ((generator html-generator) items)
   (let ((groups
          (loop
             :named :groups
@@ -289,13 +335,13 @@
                    (link (second item)
                          (format nil "[~A]" (second item)))))))
          (:sequence
-          (dolist (item group) (generate-items item)))
+          (dolist (item group) (generate-items generator item)))
          (:mode
-          (html:i () (dolist (item group) (generate-items (rest item)))))
+          (html:i () (dolist (item group) (generate-items generator (rest item)))))
          (:skills
           (dolist (item group)
             (html:div (:class "skills")
-              (flow-items *language* (rest item)))))
+              (flow-items generator *language* (rest item)))))
          (:tags))
        (when (and next-group
                   (not (eq :list (item-kind (first group))))
@@ -303,21 +349,16 @@
          (html:br)))))


-(defun collect-skills (items)
-  (cond
-    ((atom items) nil)
-    ((atom (first items))
-     (if (eq :skills (first items))
-         (rest items)
-         (reduce (function union)
-                 (mapcar (function collect-skills) (rest items)))))
-    (t (reduce (function union)
-               (mapcar (function collect-skills) items)))))

+;;;----------------------------------------------------------------------
+;;; GENERATE-CV
+;;;----------------------------------------------------------------------
+;;;
+;;;
+;;;

-;;----------------------------------------------------------------------
-;; GENERATE-CV
-;;----------------------------------------------------------------------
+
+;;; ----

 (defun pget (l k)  (cdr (assoc k (cdr l))))
 (declaim (inline pget))
@@ -540,7 +581,7 @@ RETURN:     SEQUENCE, sorted.
                                (client employment)
                                (language *language* (title employment)))
                        (second dates))
-                   (generate-items desc)))))
+                   (generate-items generator desc)))))
       (document (:file-path (cv-file-path language full)
                  :title (let ((name (first (pget person :name))))
                           (format nil (ecase language
@@ -550,16 +591,16 @@ RETURN:     SEQUENCE, sorted.
                                   (vowelp (aref name 0)) name)))
         (section (:name (toc-name :document) :title (toc-title :document))
           ;; Name & Address:
-          (group
-           (field      nil (first (pget person :name)) :strong t)
-           (field      nil (language language
-                                     (first (pget person :nationality))))
-           (field      nil (pget person :address))
-           (link-field nil (format nil "mailto:~A" (first (pget person :mail))))
-           (link-field nil (format nil "http://~A" (first (pget person :web))))
-           (dolist (phone (remove-if-not (lambda (key) (eq :phone key)) (cdr person)
-                                         :key (function car)))
-             (field    nil (cdr phone))))
+                 (group generator
+                        (field      generator nil (first (pget person :name)) :strong t)
+                        (field      generator nil (language language
+                                                            (first (pget person :nationality))))
+                        (field      generator nil (pget person :address))
+                        (link-field generator nil (format nil "mailto:~A" (first (pget person :mail))))
+                        (link-field generator nil (format nil "http://~A" (first (pget person :web))))
+                        (dolist (phone (remove-if-not (lambda (key) (eq :phone key)) (cdr person)
+                                                      :key (function car)))
+                          (field    nil (cdr phone))))
           ;; Summary:
           (bullet-list-items (rest summary))
           (when toc
@@ -579,7 +620,7 @@ RETURN:     SEQUENCE, sorted.
                  (definition (second cat)
                      (dolist (dot-point (cddr cat))
                        (ecase (first dot-point)
-                         (:flow (flow-items language (rest dot-point)))
+                         (:flow (flow-items generator language (rest dot-point)))
                          (:list (bullet-list-items (rest dot-point)))
                          (:tags))
                        (html:br)))))))
diff --git a/org.ogamita.pjb/cv/pjb.cv b/org.ogamita.pjb/cv/pjb.cv
index 345483f..035758d 100644
--- a/org.ogamita.pjb/cv/pjb.cv
+++ b/org.ogamita.pjb/cv/pjb.cv
@@ -642,7 +642,7 @@ commercial offer).")
      (:fr "Développement d'un SDK iOS et d'une application démonstration
 utilisant une bibliothèque de tatouage numérique ultrason, pour
 détecter des codes numériques dans les ultrasons captés sur le
-microphone, et lancer une action commerciale (envoit d'une
+microphone, et lancer une action commerciale (envoi d'une
 notification à l'utilisateur du téléphone, ouverture d'une page web
 sur l'annonce commerciale).")
      (:es "Desarrollo de un SDK iOS y una aplicación de demostración
ViewGit