aboutsummaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2020-11-30 22:56:26 +0100
committerSébastien Dailly <sebastien@chimrod.com>2020-12-03 21:35:35 +0100
commit9b77ec15e5beeff3f57f845be883416d2a68b84d (patch)
tree796f2aecfcdf5012ce611fac22b85fa481bf63de /content
parent1c02ae819eee2d28040804d58872ceb4c003ee1f (diff)
New article on rst & Latex. Changed theme
Diffstat (limited to 'content')
-rw-r--r--content/Informatique/2009-03-11-wiimote.en.rst_ (renamed from content/Informatique/2009-03-11-wiimote.rst)1
-rw-r--r--content/Informatique/2009-03-11-wiimote.fr.rst (renamed from content/Informatique/2009-03-11-wiimote_fr.rst)0
-rw-r--r--content/Informatique/2009-10-18-backup.rst82
-rw-r--r--content/Informatique/2010-06-11-vala.rst165
-rw-r--r--content/Informatique/2013-04-20-gueule1.rst65
-rw-r--r--content/Informatique/2013-05-08-fcron2cron_en.rst64
-rw-r--r--content/Informatique/2013-05-09-fcron2cron.rst124
-rw-r--r--content/Informatique/2013-05-23-ocamlfind_en.rst_ (renamed from content/Informatique/2013-05-23-ocamlfind_en.rst)126
-rw-r--r--content/Informatique/2013-06-02-roi_con.rst128
-rw-r--r--content/Informatique/2013-07-24-projet_libre.rst83
-rw-r--r--content/Informatique/2014-02-09-ocaml_gtk.rst206
-rw-r--r--content/Informatique/2015-10-03-moderncv.rst9
-rwxr-xr-xcontent/Informatique/2020-12-03-encore_des_cv.rst183
-rw-r--r--content/Perso/poker.rst221
-rwxr-xr-xcontent/images/cv/model5.pngbin0 -> 222166 bytes
-rw-r--r--content/images/poker/ac.jpegbin2970 -> 0 bytes
-rw-r--r--content/images/poker/ad.jpegbin2541 -> 0 bytes
-rw-r--r--content/images/poker/ah.jpegbin2611 -> 0 bytes
-rw-r--r--content/images/poker/as.jpegbin2544 -> 0 bytes
-rw-r--r--content/images/poker/kc.jpegbin5160 -> 0 bytes
-rw-r--r--content/images/poker/kd.jpegbin5208 -> 0 bytes
-rw-r--r--content/images/poker/kh.jpegbin5125 -> 0 bytes
-rw-r--r--content/images/poker/ks.jpegbin5190 -> 0 bytes
-rwxr-xr-xcontent/images/profile.pngbin0 -> 155795 bytes
-rw-r--r--content/images/roi/roi_150.jpegbin8547 -> 0 bytes
-rw-r--r--content/images/roi/roi_75.jpegbin5540 -> 0 bytes
26 files changed, 256 insertions, 1201 deletions
diff --git a/content/Informatique/2009-03-11-wiimote.rst b/content/Informatique/2009-03-11-wiimote.en.rst_
index 325d4b7..3604257 100644
--- a/content/Informatique/2009-03-11-wiimote.rst
+++ b/content/Informatique/2009-03-11-wiimote.en.rst_
@@ -9,6 +9,7 @@ Controling the wiimote (I)
:tags: Programmation, Wiimote, Python
:slug: controling-the-wiimote-i
:lang: en
+:translation: true
Creating the plugin for wminput
diff --git a/content/Informatique/2009-03-11-wiimote_fr.rst b/content/Informatique/2009-03-11-wiimote.fr.rst
index 2c80584..2c80584 100644
--- a/content/Informatique/2009-03-11-wiimote_fr.rst
+++ b/content/Informatique/2009-03-11-wiimote.fr.rst
diff --git a/content/Informatique/2009-10-18-backup.rst b/content/Informatique/2009-10-18-backup.rst
deleted file mode 100644
index 291f187..0000000
--- a/content/Informatique/2009-10-18-backup.rst
+++ /dev/null
@@ -1,82 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-Un système de backup automatique
-################################
-
-:date: 2009-10-18
-:tags: Libre, Administration
-:summary: |summary|
-
-.. |summary| replace::
- On le sait tous, il faut faire des sauvegardes de manière régulière. On le
- sait également, pour que celles-ci se fassent sur le long terme, il faut
- que celles-ci se fassent de manière automatique, et sur un autre support
- que le PC que l'on souhaite sauvegarder. Le problème qui se pose est le
- suivant : comment concilier ces deux conditions sur un PC de bureau (ne
- disposant donc pas d'une série de serveur allumés en permanences et prêt à
- recevoir nos sauvegardes en continu…) ?
-
-|summary|
-
-Pour répondre à tout cela, nous allons mettre en place un système de backup sur
-disque dur externe, qui se lancera à chaque fois que notre disque sera monté. À
-chaque fois que le disque dur sera allumé, la sauvegarde s'enclenchera. Cela ne
-garantit pas, bien sûr que les sauvegardes se feront à un intervalle régulier,
-mais cela garantit au moins que nous n'aurons pas à nous en soucier. Pour cela
-nous allons utiliser les outils qui sont disponibles sous un environnement
-Linux : rsync et hal. Cet article nous présente une base pour faire notre
-sauvegarde `Une sauvegarde améliorée avec rsync
-<http://informatique-et-liberte.tuxfamily.org/2009/05/10/une-sauvegarde-amelioree-avec-rsync/>`_.
-Nous allons juste devoir le modifier un petit peu pour répondre à un problème
-qui arrive souvent avec les périphériques USB : selon que d'autres
-périphériques sont déjà montés ou non, nous ne savons pas dans quel répertoire
-nous allons nous trouve. Il va donc falloir mettre en place une ligne pour
-récupérer le répertoire dans lequel nous sommes. Il ne nous reste plus qu'à
-trouver le moyen de l'éxécuter automatiquement pour cela nous allons utiliser
-halevt. Le script est disponible ici_.
-
-.. _ici: {filename}/resources/backup.sh
-
-Comme son nom l'indique, halevt est un gestionnaire d'évènements pour hal. Hal
-est un gestionnaire d'évènement matériel sous Linux; il envoie des informations
-à chaque fois que des informations sont envoyées depuis les composants. Cela
-permet de détecter le branchement d'un périphérique USB et de le monter sur le
-bureau (et qui nous simplifie grandement la vie aujourd'hui !!!). Halevt est
-un démon à l'écoute des informations qui nous sont envoyées par hal, et
-d'activer des actions en conséquence : par exemple pour lancer l'antivirus sur
-la clef usb, reconfigurer le mappage du clavier en fonction de la marque que
-l'on branche etc. Pour notre part, nous allons nous contenter de lancer un
-script (celui du backup mentionné plus haut).
-
-Pour commencer nous allons devoir identifier le lecteur à mettre sous
-surveillance : inutile de se baser sur les noms de montage habituels (/dev/sda
-par exemple) en effet en fonction des périphériques déjà branchés nous
-n'allons pas obtenir la même configuration. Nous allons utiliser les point de
-montage défini dans /dev/disk/by-uuid qui permet d'obtenir l'identifiant
-de notre disque (et qui sera repris par la suite dans la configuration de hal
-). Une fois que nous avons relevé quel est le disque concerné, il faut mettre
-en place une entrée pour notre évènement dans la configuration de halevt :
-
-::
-
- <halevt:Device match="hal.block.device &amp; hal.block.is_volume = true &amp; hal.volume.uuid = fd20536f-7b80-4a80-8c3d-b5bebe8fb484">
- <halevt:Property name="hal.volume.is_mounted">
- <halevt:Action value="true" exec="bash $hal.volume.mount_point$/chemin/script/backup-ssh.sh"/>
- </halevt:Property>
- </halevt:Device>
-
-Cela si halevt est exécuté avec les droits de l'utilisateur lançant le
-backup. Si on le fait tourner en démon, il faut trouver une autre
-solution (sur mon poste j'ai utilisé sudo, mais on peut très bien se
-baser sur le sticky bit pour donner les droits au script). De même,
-dans la configuration mise en place, le script se trouve sur le disque
-de stockage (de manière à pouvoir le lancer à la main si le démon n'est
-pas disponible), cela peut être adapté en fonction de chacun…
-
-Dans le cas d'une configuration multi-utilisateur, je pense qu'il est
-nécessaire de passer par un script qui lance les différentes sauvegardes sous
-le bon groupe de l'utilisateur à chaque fois. (Ce qui en plus permet d'éviter
-le problème du sudo) mais je n'ai pas eu besoin d'aller jusque-là pour
-l'instant ! À vous d'adapter ce que je vous propose en fonction de votre
-configuration !
diff --git a/content/Informatique/2010-06-11-vala.rst b/content/Informatique/2010-06-11-vala.rst
deleted file mode 100644
index 05aeeb7..0000000
--- a/content/Informatique/2010-06-11-vala.rst
+++ /dev/null
@@ -1,165 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-Présentation de Vala
-####################
-
-:date: 2010-06-11
-:tags: Libre, Programmation
-
-.. default-role:: literal
-
-J'ai découvert une présentation du langage dans GLMF n°127 qui
-l'utilisait pour se brancher sur le pare-feu. Cela ayant aiguisé ma
-curiosité, j'ai cherché à en savoir davantage sur le langage. Le langage
-C m'a toujours paru difficile à aborder. Non pas au niveau de sa
-syntaxe, mais au sujet de l'accès à sa documentation et aux librairies
-disponibles. Pour moi qui suis habitué à Java ou à Python, j'ai regardé
-Vala comme un moyen de mettre un pied dans le C. Je vais essayer de
-présenter ma manière de le voir, après avoir fait une petite plongée
-dedans…
-
-Présentation
-~~~~~~~~~~~~
-
-Le langage Vala a été créé par les développeurs de Gnome pour qu'ils
-puissent disposer d'un langage de haut niveau. Gnome ayant eu pendant
-quelque temps un pied (dansant) dans mono, Vala en est très inspiré.
-(Je ne connais pas mono et ne peux donc pas lancer de comparatif, je
-vous renvoie donc à celui présenté par Gnome `par rapport à
-C# <http://live.gnome.org/Vala/QuickIntroForCSharpProgrammers>`_, et
-pour `Java <http://live.gnome.org/Vala/ValaForJavaProgrammers>`_). Le
-langage est ensuite compilé en C, et GCC est utilisé pour la compilation
-d'un exécutable. On est donc dans un langage intermédiaire, qui reste
-très proche du C comme nous allons le voir par la suite.
-
-Analyse
-~~~~~~~
-
-Langage objet haut niveau
---------------------------
-
-Vala est tout d'abord un langage haut niveau :
-on y retrouve des *interface* (pour pouvoir moduler le code facilement), des
-*delegate* (qui permettent de définir un type de fonction pour un callback),
-une gestion *événementielle* (gérer le déclenchement de plusieurs méthodes dans
-le code par un appel unique) … On dispose donc d'un langage objet assez riche
-pour éviter d'avoir à passer du temps sur des détails et se concentrer sur le
-programme et son déroulement. Il est pensé objet et l'on retrouve vite ses
-marques, tout comme l'on sent qu'il est assez facile d'« abstraire » le code
-pour faire une application qui n'en reste pas un simple script… Je n'ai pas
-envie de détailler la syntaxe du langage et tout ce qu'il intègre car vous
-pourrez trouver tout cela en ligne. Je vous renvoie au `tutoriel
-<http://live.gnome.org/Vala/Tutorial>`_ qui explique la structure du langage en
-détail, qui présentent des exemples détaillés.
-
-La GLib
--------
-
-Le langage est basé sur
-la GLib, la librairie standard utilisé dans les applications GTK. La plupart
-des types primitifs (`int` …) sont donc en réalités des types issus de cette
-librairie (`gint` …). On accède ainsi à l'ensemble des méthodes de la GLib,
-diffusées sous formes de classes objets et bien documentées (la `valadoc
-<http://valadoc.org/index.html>`_). Cela rejoint l'histoire de Vala puisque La
-GLib est tout utilisée par les développeurs Gnome (on constate d'ailleurs que
-la plupart des composants Gnome ont une entrée dans cette Valadoc). Il ne faut
-cependant pas croire que l'on dispose avec cette bibliothèque standard d'un
-ensemble de routines aussi riche que dans le package standard d'un Java ou d'un
-Python : la GLib est avant tout destinée à des développeurs C, et beaucoup des
-méthodes standard du C ne sont pas disponibles. Pour parer cela, Vala propose
-une classe POSIX[LIEN] proposant les méthodes standard du C, mais celle-ci
-n'est pas exhaustive et il nous arrive souvent de tomber sur une fonction qui
-ne nous est pas accessible via le langage haut niveau qu'est Vala.
-
-Les Bindings
-------------
-
-Pour répondre à cela, propose la possibilité de mettre en place un binding vers
-une libraire C de manière native. (Normal me direz-vous, le code en sortie de
-Vala est du C !) On peut donc très facilement utiliser n'importe quelle
-libraire existante. Vala étant un langage objet, il devient donc possible
-d'utiliser les librairies standard au sein d'un code objet de haut niveau. Cela
-ne demande que quelques lignes, demandant au minimum le fichier dans lequel se
-trouve la définition de la méthode, et sa signature. Exemple du binding
-définissant la méthode `execl` (issue du fichier
-`/usr/share/vala/vapi/posix.vapi`) :
-
-::
-
- [CCode (cheader_filename = "unistd.h")]
- public int execl (string path, params string[] arg);
-
-et voici la signature de la méthode C correspondante :
-
-::
-
- extern int execl (__const char *__path, __const char *__arg, ...) __THROW __nonnull ((1));
-
-Les types primitifs de la GLib étant basés sur les types primitifs C
-correspondants, il n'y a pas de problème de cast dans la plupart de cas.
-Toutefois, Vala utilise des `char\*` pour définir ses string : il est parfois
-nécessaire de mettre en place faire un cast quand une méthode nous un `char[]` :
-même dans le code haut niveau, le C n'est jamais loin… C'est souvent
-frustrant de devoir mettre en place un binding pour une fonction disponible en
-standard dans la libc. Je pense qu'il manque la possibilité d'inclure
-directement du code C dans le code vala, tout comme il est possible directement
-de l'assembleur dans du C. Cela permettrait un confort dans l'utilisation qui
-n'est pas disponible actuellement. À noter qu'un outil permet de mettre en
-place ces bindings pour les composants basés sur `GObjet` (Gnome toujours…). De
-plus de nombreux bindings sont disponibles pour les composants Gnome.
-Attention, cela n'empêchera pas d'avoir à installer les headers C
-correspondants !
-
-Les profils
-------------
-
-Il est possible d'utiliser des profils de compilation. Cette option encore
-expérimentale a été mise en place pour répondre à des réclamations de la part
-des utilisateurs qui voulaient programmer en Vala sans avoir de dépendances
-envers la GLib. Ainsi, il est possible d'appeler le compilateur avec la syntaxe
-suivante :
-
-.. code-block:: console
-
- $ valac --profile posix
-
-ce qui a pour conséquence de réduire le jeu de bibliothèque par défaut à
-celles disponibles dans la classe `POSIX`. Cela permet de limiter les
-dépendances du programmes, mais beaucoup de types standard de Vala
-deviennent de ce fait indisponible; on sent bien que le langage n'a pas
-été pensé pour ça.
-
-Conclusion
-~~~~~~~~~~
-
-Pour résumer, je dirais que Vala correspond à ce qu'il annonce : un
-langage haut niveau pour faciliter la création d'applications Gnome. Dès
-que l'on cherche à sortir de ce cadre, on se retrouve confronté à des
-limitations (qui ne sont bien sûr pas insurmontable) :
-
-- Pour ceux qui ne cherche pas à travailler sur du code Gnome,
- embarquement de bibliothèques qui ne nous intéressent pas forcément.
- (Bien que sur ce point, la GLib est plutôt standard sur les PCs
- ayant X d'installés)
-- Pour ceux qui cherchent un langage de haut niveau, le C est encore
- trop présent entre les lignes pour pouvoir l'oublier complètement.
- D'un autre côté, l'intégration du code C n'est pas toujours évidente
- puisqu'elle oblige à déclarer des bindings pour des fonctions
- standards.
-- Mais surtout, le fait que l'ensemble des fonctions de la libc ne
- soient pas encore disponibles oblige à mettre le doigt dans les
- bindings régulièrement.
-
-Le langage est bien sûr encore amené à évoluer, et les points que je cite ici
-ne sont pas pour autant rédhibitoires. D'un point de vue totalement subjectif
-Je trouve le langage simple mais sans trop de saveur. Ça reste un langage objet
-qui n'est bien sûr pas révolutionnaire; on sent qu'il ne fait que reprendre les
-concepts des langages qui l'ont inspiré, mais le produit est cohérent, et
-d'après les benchs génère un code plutôt optimisé (en rapport avec le temps que
-l'on pourrait passer à produire le même code en C). Après, je ne prends pas le
-même plaisir à programmer en Vala qu'en python (j'avais bien dit que j'étais
-subjectif ^^). Cela dit, pour moi, qui ne suis pas un développeur Gnome, je
-suis plus intéressé par la possibilité d'avoir un langage haut niveau qui reste
-très proche du C, avec les performances qui vont avec; si le prix pour cela est
-une dépendance vers la GLib, ça reste un coût sommes toutes assez faible.
diff --git a/content/Informatique/2013-04-20-gueule1.rst b/content/Informatique/2013-04-20-gueule1.rst
deleted file mode 100644
index 6fa3f04..0000000
--- a/content/Informatique/2013-04-20-gueule1.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-Essai raté d'un plugin gedit
-############################
-
-:date: 20/04/2013
-:tags: Programmation, Libre, Humeur, gtk
-:logo: /images/gedit.png
-
-.. default-role:: literal
-
-En relisant mes articles, j'ai décidé d'utiliser languageTool_ pour vérifier la
-grammaire avant de les publier. Puis en regardant l'outil, j'ai voulu voir s'il
-existait un plugin gedit permettant de l'intégrer dans l'édition d'un texte
-(j'utilise vim, je sais que ma compagne utilise gedit pour écrire ses textes).
-
-Titivullus_ est disponible sur sourceforge, et est facile à installer (même si
-l'auteur n'a pas compris comment fonctionnait SVN), par contre l'utilisation
-n'est pas des plus pratiques : il faut charger la console d'erreur de gedit
-(qui ne peut pas être réduite), et le plugin n'est pas configurable.
-
-.. _languageTool: http://www.languagetool.org/
-.. _Titivullus: http://sourceforge.net/projects/titivullus/
-
-Heureusement, c'est du python !
-===============================
-
-Le code n'est pas compliqué à comprendre (il n'est pas parfait, mais à au moins
-le mérite d'être là), et j'ai commencé à le modifier : première étape, appeler
-languagetool en ligne de commande plutôt que de lancer le serveur web.
-Deuxième étape, surligner dans gedit la ligne en erreur pour éviter d'avoir à
-passer par la console pour savoir ce qui ne va pas ; on se plonge dans
-l'édition de `plugin sous gedit`_, et là, c'est le drame !
-
-.. _`plugin sous gedit`: https://live.gnome.org/Gedit/PythonPluginHowTo
-
-Devant du code C
-================
-
-Le binding python est assez limité, il faut remonter dans l'API C pour trouver
-ce que l'on cherche, et là :
-
-* erreur 404 dans l'API (par exemple les liens de l'« Object Hierarchy » de
- GtkSourceView_)
-* Des messages d'erreurs abscons dûs à l'introspection (par exemple en cas de
- mauvais objet passé en paramètre)
-* Des dépendances de plus en plus importantes à chaque nouvelle étape (`gedit`,
- `gtk`, puis pango_\ …)
-
-Plus j'avance, et plus j'ai l'impression que le chemin qui reste à parcourir
-est grand ! Qu'il est loin le temps où je m'étais penché sur Vala_ pour
-découvrir ! J'ai finalement laissé tomber, en ayant l'impression d'avoir perdu
-mon temps : mettre en place un plugin sous gedit est définitivement trop
-compliqué pour pouvoir être réalisé facilement, sans se plonger dans le code
-GTK et le connaître sur le bout des doigts.
-
-Dommage, pour une fois que j'avais envie de me plonger dans le code et
-d'avancer… Je comprends que le greffon Titivullus soit resté à l'état de proff
-of concept et que personne ne l'ai repris : cette petite aventure m'a fait
-passer l'envie de me plonger dans du dev gnome !
-
-.. _GtkSourceView: https://developer.gnome.org/gtksourceview/stable/GtkSourceView.html
-.. _pango: https://developer.gnome.org/pango/stable/pango-Text-Attributes.html
-.. _Vala: {filename}../Informatique/2010-06-11-vala.rst
diff --git a/content/Informatique/2013-05-08-fcron2cron_en.rst b/content/Informatique/2013-05-08-fcron2cron_en.rst
deleted file mode 100644
index 0e51388..0000000
--- a/content/Informatique/2013-05-08-fcron2cron_en.rst
+++ /dev/null
@@ -1,64 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-==================
-From fcron to cron
-==================
-
-:date: 2013-05-08
-:tags: Libre, Administration
-:summary: |summary|
-:logo: /images/time/time_75.jpg
-:lang: en
-:slug: fcron-to-cron
-:translation: true
-:status: draft
-
-.. default-role:: literal
-
-
-.. figure:: {filename}/images/time/time.jpg
- :figwidth: 150
- :figclass: floatleft
- :alt: Pavement
-
- Image : `Toni Verdú Carbó`_ (creativecommons_)
-
-.. _Toni Verdú Carbó: http://www.flickr.com/photos/tonivc/2283676770/in/photostream/
-.. _creativecommons: http://creativecommons.org/licenses/by-nc-nd/2.0/deed.fr
-
-|summary|
-
-.. |summary| replace::
- Debian Wheezy is now out, and this new realease removed some packages,
- including fcron_.
- Il s'agit du
- gestionnaire de tâche planifiées que j'utilisais jusqu'alors. Ce petit
- guide a pour vocation de vous expliquer comment migrer la configuration.
-
-.. _fcron: http://fcron.free.fr/
-
-Fcron avait l'avantage de pouvoir gérer l'arrêt de la machine, et lancer les
-tâches en attente lors du redémarrage. Quand on s'auto-héberge, cela permet de
-prendre en charge les coupures inopinées, et se passer du couple cron/anacron.
-Debian a fait le choix de préférer ce dernier couple plutôt que fcron, voici
-donc un petit guide pour passer de l'un a l'autre.
-
-Migration ?
-===========
-
-Pour commencer, pas de panique, le paquet est supprimé des dépôts, mais reste
-parfaitement fonctionnel sur votre machine. Vous n'avez donc pas besoin de vous
-précipiter, tout va continuer de tourner tout seul comme auparavant. Vous
-pouvez même choisir de ne pas migrer et continuer à l'utiliser. Toutefois,
-si des failles de sécurités sont trouvées sur le programme, aucune mise à jour
-ne sera effectuée : c'est à vous de vous tenir informé du développement de
-l'application et de faire l'installation.
-
-Voici un programme python qui se charge de faire la migration d'un fcrontab
-vers un crontab. Il ne fait que générer les fichiers de configuration, et
-n'enregistre rien sur le système. Le script va lire les fcrontab enregistrées
-dans le répertoire `/var/spool/fcron/` et génère en sortie les crontab
-correspondantes pour chacun de ces utilisateurs.
-
-Les instructions spécifiques sont converties, dans la mesure du possible.
diff --git a/content/Informatique/2013-05-09-fcron2cron.rst b/content/Informatique/2013-05-09-fcron2cron.rst
deleted file mode 100644
index f7652dc..0000000
--- a/content/Informatique/2013-05-09-fcron2cron.rst
+++ /dev/null
@@ -1,124 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-===============
-De fcron à cron
-===============
-
-:date: 2013-05-09
-:tags: Libre, Python, Administration
-:summary: |summary|
-:logo: /images/time/time_75.jpg
-:lang: fr
-:slug: fcron-to-cron
-
-.. default-role:: literal
-
-
-.. figure:: {filename}/images/time/time.jpg
- :figwidth: 150
- :figclass: floatleft
- :alt: Pavement
-
- Image : `Toni Verdú Carbó`_ (creativecommons_)
-
-.. _Toni Verdú Carbó: http://www.flickr.com/photos/tonivc/2283676770/in/photostream/
-.. _creativecommons: http://creativecommons.org/licenses/by-nc-nd/2.0/deed.fr
-
-|summary|
-
-.. |summary| replace::
- Debian Wheezy est sortie, et cette nouvelle version a fait un peu de ménage
- dans les paquets disponibles. Parmi ceux-ci, fcron_ a disparu. Il s'agit du
- gestionnaire de tâche planifiées que j'utilisais jusqu'alors. Ce petit
- guide a pour vocation de vous expliquer comment migrer la configuration.
-
-.. _fcron: http://fcron.free.fr/
-
-Fcron avait l'avantage de pouvoir gérer l'arrêt de la machine, et lancer les
-tâches en attente lors du redémarrage. Quand on s'auto-héberge, cela permet de
-prendre en charge les coupures inopinées, et se passer du couple cron/anacron.
-Debian a fait le choix de préférer ce dernier couple plutôt que fcron, voici
-donc un petit guide pour passer de l'un a l'autre.
-
-Migration ?
-===========
-
-Pour commencer, pas de panique, le paquet est supprimé des dépôts, mais reste
-parfaitement fonctionnel sur votre machine. Vous n'avez donc pas besoin de vous
-précipiter, tout va continuer de tourner tout seul comme auparavant. Vous
-pouvez même choisir de ne pas migrer et continuer à l'utiliser. Toutefois,
-si des failles de sécurités sont trouvées sur le programme, aucune mise à jour
-ne sera effectuée : c'est à vous de vous tenir informé du développement de
-l'application et de faire l'installation.
-
-La transformation
-=================
-
-Voici un `script python`_ qui se charge de faire la migration d'un fcrontab
-vers un crontab. Il ne fait que générer les fichiers de configuration, et
-n'enregistre rien sur le système. Le script va lire les fcrontab enregistrées
-dans le répertoire `/var/spool/fcron/` et génère en sortie les crontab
-correspondantes pour chacun de ces utilisateurs.
-
-.. _script python: {filename}/resources/fcron2cron.py
-
-Usage
-~~~~~
-
-Le programme doit être lancé en root pour pouvoir lire les fichiers présents
-dans le répertoire `/var/spool/fcron/` ainsi que les fcrontabs des différents
-utilisateurs du système:
-
-.. code-block:: console
-
- $ mkdir crontabs
- $ cd crontabs
- $ sudo python ~/fcron2cron.py
-
-Il y a beaucoup moins de paramètres chez cron que fcron, il est toutefois
-possible de convertir quelques instructions :
-
-Les options
-~~~~~~~~~~~
-
-Les seules options possibles dans cron sont celles qui concernent le mail :
-
-`mail(bool)` devient `MAILTO=""` si bool est à false `mailto(string)` devient
-`MAILTO="string"`
-
-Les autres options sont ignorées\ [#]_.
-
-
-Les directives
-~~~~~~~~~~~~~~
-
-Les directives `hourly`, `daily`\ [#]_, `weekly`, `monthly` sont transformées
-en leur équivalent dans cron, ainsi que leur équivalent `mid-*ly`. Les
-directives `mins`, `hours`, `days`, `mons`, `dow` ne sont pas prises en compte
-et sont ignorées dans la ligne générée.
-
-L'édition
-=========
-
-Le programme ne fait pas l'insertion de la crontab dans le système, ainsi, dans
-le cas ou une telle crontab existe déjà, elle ne sera pas écrasée. C'est à
-l'adminstrateur de mettre le paramétrage à jour. Une fois le script lancé, des
-fichiers `UTILISATEUR.crontab` vont être générés.
-
-Si l'utilisateur n'a pas de crontab correspondante, il est possible de le
-charger directement avec la commande suivante :
-
-.. code-block:: console
-
- # crontab -u ${USER} ${USER}.crontab
-
-Si l'utilisateur possède déjà une crontab, il va falloir éditer le fichier pour
-le faire correspondre. Maintenant qu'il ne reste plus que ça à faire, il est
-temps de se remonter les manches et y aller à la main ! Une fois que les
-modifications sont faites, vous pouvez désinstaller fcron de votre système.
-
-.. admonition:: notes :
-
- .. [#] Y compris les options en début de commande (ligne débutant par `&`)
- .. [#] `nightly` est traité de la même manière
diff --git a/content/Informatique/2013-05-23-ocamlfind_en.rst b/content/Informatique/2013-05-23-ocamlfind_en.rst_
index a725a39..6b812f7 100644
--- a/content/Informatique/2013-05-23-ocamlfind_en.rst
+++ b/content/Informatique/2013-05-23-ocamlfind_en.rst_
@@ -1,63 +1,63 @@
-.. -*- rst -*-
-.. -*- coding: utf-8 -*-
-
-============================
-A local repository for ocaml
-============================
-
-:date: 2013-05-23
-:tags: ocaml
-:summary: |summary|
-:logo: /images/ocaml/camel.jpg
-:slug: un-depot-local-pour-ocaml
-:lang: en
-
-.. figure:: {filename}/images/ocaml/camel_medium.jpg
- :figwidth: 150
- :figclass: floatleft
- :alt: Pavement
-
- Image : `@Doug88888`_ (creativecommons_)
-
-.. _@Doug88888: http://www.flickr.com/photos/doug88888/3458057235/
-.. _creativecommons: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.fr
-
-|summary|
-
-
-.. |summary| replace::
- Today, ocaml is obsolete in the debian packages : the most of the
- librairies are still linked with Ocaml3 althought Ocaml4 is out since
- almost a year. When we need to develop with Ocaml4, we have to recompile
- all the dependencies, but this implies to install them for the whole
- system. But we can use a local repository with some findlib configuration.
-
-Findlib is now a required tool for an Ocaml project compilation. Each
-application uses now findlib for searching the dependencies, and the linking
-phase.
-
-We first need to create a local configuration in wich we write where to find
-the packages :
-
-
-.. code-block:: bash
-
- destdir="/home/chimrod/ocaml/packages/"
- path="/home/chimrod/ocaml/packages/:/usr/local/lib/ocaml/4.00.1:/usr/lib/ocaml:/usr/lib/ocaml/METAS"
-
-:destdir: is the path where we want to install the newly compiled packages.
-:path: is the path list where to find the packages.
-
-Of course, you need to replace `/home/chimrod/` by your own installation path.
-It must be an absolute path.
-
-The path to this file can be saved with the shell environnement ; we just need
-to reference it in the `.bashrc` file :
-
-.. code-block:: bash
-
- export OCAMLFIND_CONF=/home/chimrod/ocaml/ocamlfind.conf
-
-That's now : each new package will now be installed in your packages directory,
-and the compilation will also look for this path for the required
-dependencies : you do not have to install the packages as root anymore.
+.. -*- rst -*-
+.. -*- coding: utf-8 -*-
+
+============================
+A local repository for ocaml
+============================
+
+:date: 2013-05-23
+:tags: ocaml
+:summary: |summary|
+:logo: /images/ocaml/camel.jpg
+:slug: un-depot-local-pour-ocaml
+:lang: en
+
+.. figure:: {filename}/images/ocaml/camel_medium.jpg
+ :figwidth: 150
+ :figclass: floatleft
+ :alt: Pavement
+
+ Image : `@Doug88888`_ (creativecommons_)
+
+.. _@Doug88888: http://www.flickr.com/photos/doug88888/3458057235/
+.. _creativecommons: http://creativecommons.org/licenses/by-nc-sa/2.0/deed.fr
+
+|summary|
+
+
+.. |summary| replace::
+ Today, ocaml is obsolete in the debian packages : the most of the
+ librairies are still linked with Ocaml3 althought Ocaml4 is out since
+ almost a year. When we need to develop with Ocaml4, we have to recompile
+ all the dependencies, but this implies to install them for the whole
+ system. But we can use a local repository with some findlib configuration.
+
+Findlib is now a required tool for an Ocaml project compilation. Each
+application uses now findlib for searching the dependencies, and the linking
+phase.
+
+We first need to create a local configuration in wich we write where to find
+the packages :
+
+
+.. code-block:: bash
+
+ destdir="/home/chimrod/ocaml/packages/"
+ path="/home/chimrod/ocaml/packages/:/usr/local/lib/ocaml/4.00.1:/usr/lib/ocaml:/usr/lib/ocaml/METAS"
+
+:destdir: is the path where we want to install the newly compiled packages.
+:path: is the path list where to find the packages.
+
+Of course, you need to replace `/home/chimrod/` by your own installation path.
+It must be an absolute path.
+
+The path to this file can be saved with the shell environnement ; we just need
+to reference it in the `.bashrc` file :
+
+.. code-block:: bash
+
+ export OCAMLFIND_CONF=/home/chimrod/ocaml/ocamlfind.conf
+
+That's now : each new package will now be installed in your packages directory,
+and the compilation will also look for this path for the required
+dependencies : you do not have to install the packages as root anymore.
diff --git a/content/Informatique/2013-06-02-roi_con.rst b/content/Informatique/2013-06-02-roi_con.rst
deleted file mode 100644
index 3d2c3e5..0000000
--- a/content/Informatique/2013-06-02-roi_con.rst
+++ /dev/null
@@ -1,128 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-=====================================
-Internet, la guerre des médiacultures
-=====================================
-
-:date: 2013-06-02
-:tags: Libre, Infowar
-:summary: Les entreprises pourront toujours tenter de brider internet, la
- créativité des internautes sera toujours plus forte, plus réactive.
-:logo: /images/roi/roi_75.jpeg
-:lang: fr
-
-.. figure:: {filename}/images/roi/roi_150.jpeg
- :class: floatright
- :alt: Un roi playmobil
-
-Une petite histoire
-===================
-
-Il était une fois, dans un royaume lointain, un roi qui n'était pas aimé de son
-peuple. Ce dernier chantait une chanson dans tout le royaume dont le refrain
-était le suivant :
-
- Longue vie au roi bouffon, le roi très con qu'est très très con !
-
-Le roi lassé d'entendre cette chanson, convoqua ses ministres pour agir. Il
-fut décidé que le plus sage était d'interdire tout simplement à ces sujets de
-chanter cette chanson, et le texte fut mis à l'index. Toute personne surprise
-en train de chanter cette chanson serait immédiatement envoyée aux galères.
-
-Les troubadours et chansonniers furent obligés de s'y plier. Mais dans les
-tavernes, les champs et les chaumières, la population continuait de fredonner.
-
-Cela rendit le roi furieux, qui demanda aux gardes de patrouiller à la
-recherches des chanteurs et de les mettre aux fers immédiatement, mais cela ne
-changea rien, les gens continuaient, non plus à la chanter, mais à siffler la
-chanson, sous le nez des gardes qui ne pouvaient rien faire puisque le texte
-n'était pas prononcé ! Mais personne n'était dupe, et le roi continuait de
-tourner en bourrique.
-
-Le roi, qui se faisait vieux, dépensa son énergie dans ce combat, les finances
-de son royaume, et sa santé commença à se dégrader.
-
-Le business Internet
-====================
-
-Peut-on censurer ce qui circule sur internet ? Oui bien sûr, tout contenu qui y
-est publié est sous la responsabilité d'une personne, morale ou physique. Après
-longtemps s'être demandé qui devait être cette personne responsable
-(l'hébergeur, le fournisseur d'accès), la LCEN a mis un peu d'ordre dans tout
-ça.
-
-Aujourd'hui, il n'est pas possible de diffamer, calomnier, porter préjudice
-parce que l'on utilise le web pour clamer son fiel, et les avocats se font un
-plaisir d'envoyer des courriers de mise en demeure aux contrevenants — et c'est
-très bien comme ça.
-
-Par contre, les entreprises savent que le droit à l'oubli n'existe pas sur le
-web, et ont bien compris qu'une critique bien acerbe en première page de google
-porte préjudice à l'image de marque. Des budgets sont dépensés pour que la
-marque soit correctement représentée sur le net ; voyons par exemple `comment
-nespresso transforme wikipédia en une brochure publicitaire`_
-
-Que ce passe-t-il quand le business rencontre la loi ? Généralement rien de
-très bon… Et c'est pareil ici : les lettres de mise en demeure servent de
-menaces, et l'actualité nous en a fourni `un exemple très récemment`_.
-
-Stratégie et tactiques
-======================
-
-Heureusement, les internautes ne sont pas dupes, et face aux stratégies des
-entreprises pour asseoir leur image, disposent via le web d'un incroyable outil
-pour réponse. Non, internet ne sert pas qu'à regarder des chats qui jouent du
-piano ! Michel de Certeau, dans `L'invention du quotidien`_, fait la différence
-entre `stratégie` et `tactiques`. Là où la stratégie est planifiée, la tactique
-*fait du coup par coup. Elle profite des « occasions » et en dépend. […] Il lui
-faut utiliser, vigilante, les failles que les conjonctures particulières
-ouvrent dans la surveillance du pouvoir propriétaire. Elle y braconne. Elle y
-crée des surprises. Il lui est possible d'êre là où l'on ne l'attend pas. Elle
-est ruse.*
-
-Les combats qui se jouent aujourd'hui sur internet donnent un sens très
-actuels à ces mots. Les internautes ne pourront jamais faire face à l'armada
-d'avocats prêts à dégainer au moindre signe d'ironie sur les forums. Mais ces
-avocats sont démunis face à un `effet streisand`_, qu'ils ne peuvent pas
-contrôler. Le jeu de pouvoir entre les internautes et les régulateurs du web
-n'est pas fini, et les internautes savent mobiliser leurs ressources dès
-qu'ils sentent que l'on porte atteinte à leur réseau. Cela m'impressionne à
-chaque fois.
-
-La loi est respectée, par contre le combat est perdu pour celui qui cherchait à
-faire plier un site, à donner à Internet la forme qu'il souhaitait : la réalité
-ne se laisse pas contrôler si simplement… L'information restera libre !
-
-.. _comment nespresso transforme wikipédia en une brochure publicitaire: http://thierry-klein.speechi.net/2009/12/01/comment-nespresso-transforme-wikipedia-en-brochure-publicitaire/
-
-.. _un exemple très récemment: https://linuxfr.org/news/premiere-mise-en-demeure-pour-l-association-linuxfr
-.. _L'invention du quotidien: https://fr.wikipedia.org/wiki/Michel_de_Certeau#L.27analyse_du_.C2.AB_braconnage_culturel_.C2.BB
-.. _effet streisand: https://fr.wikipedia.org/wiki/Effet_Streisand
-
-La fin de l'histoire
-====================
-
-Après la mort du roi, le prince prit la couronne. Lors de la cérémonie, la
-foule cria :
-
- Le roi est mort, vive le roi !
-
-Et quelqu'un ajouta :
-
- Vive le roi bouffon, le roi très con qu'est très très con !
-
-Refrain qui fut repris sur toute la place par la population. C'est alors que le
-roi paru au balcon du palais, et il se mit à chanter :
-
- Longue vie au roi bouffon, le roi très con qu'est très très con !
-
-La foule chanta avec le roi, mais rapidement le malaise s'installa, et bientôt
-plus personne ne chantait. En chantant cette chanson, le roi venait de lui
-retirer son aspect contestataire : comment peut-on chanter cette chanson contre
-le roi, si le roi lui-même se met à la chanter ? Par cette action, il venait de
-résoudre la crise qui se tramait dans le royaume. Les gens rentrèrent chez eux
-et l'on n'entendit plus jamais ce refrain.
-
-Mais à part dans les contes de fées, existe-t-il des rois capable d'aller au
-balcon pour chanter haut et fort les critiques de la foules ?
diff --git a/content/Informatique/2013-07-24-projet_libre.rst b/content/Informatique/2013-07-24-projet_libre.rst
deleted file mode 100644
index 50d8f2a..0000000
--- a/content/Informatique/2013-07-24-projet_libre.rst
+++ /dev/null
@@ -1,83 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-==========================
-Les conflits dans le libre
-==========================
-
-:date: 2013-07-24
-:tags: ocaml, Libre
-:summary: |summary|
-
-|summary|
-
-.. |summary| replace::
- Mener un projet libre n'est pas simple ; cela demande du temps, beaucoup
- d'investissement, et le retour est rarement suffisament encourageant pour
- tenir sur cette motivation. Il y a en ce moment des tensions au sein des
- développeurs Ocaml par rapport à deux projets concurents.
-
-Le langage Ocaml essaie de gagner un nouveau dynamisme depuis quelques années.
-Parmi les moteurs de ce dynamisme, un nouveau gestionnaire de paquets, opam_,
-est censé apporter une simplification dans la gestion des dépendances, et
-l'installation des librairies nécessaires à un projet. Sauf qu'il existe déjà
-un gestionnaire de paquets dans Ocaml : godi_, qui existe depuis quelques
-années, et qui a réussi à créer une grande bibliothèque de librairies
-installable.
-
-.. _opam: http://opam.ocamlpro.com/
-.. _godi: http://godi.camlcity.org/godi/index.html
-
-Le créateur Gerd Stolpmann a laissé un message sur la mailing-list récemment,
-indiquant qu'il `arreterait de maintenir godi`_, en partie à cause de la
-concurrence d'opam, et principalement à cause de la campagne de dénigrement de
-godi de la part des mainteneurs d'opam. Cela est en train de déchaîner les
-réponses et d'agiter les principaux acteurs d'Ocaml qui essaient de trouver une
-solution pour sortir du conflit.
-
-.. _arreterait de maintenir godi: https://sympa.inria.fr/sympa/arc/caml-list/2013-07/msg00199.html
-
-Les reproches
-=============
-
-Gerd Stolpmann reproche à ocamlpro (l'équipe de développement d'opam) de ne pas
-l'avoir contacté avant de se lancer dans le développement d'une solution
-concurrente, et d'`avoir été évincé`_ après avoir construit et maintenu un
-écosystème viable. D'un autre côté, ocamlpro annonce que opam `répondait à une
-demande`_ d'un nouveau produit par un client, et qu'il était plus simple de
-repartir sur une nouvelle base.
-
-Par ailleurs, la communauté reprend Gerd Stolpmann en lui annonçant qu'il n'y a
-pas eu de dénigrement. Il y a bien eu toute une campagne d'enthousiasme liée à
-l'arrivée d'un nouveau produit, mais qui ne s'est pas accompagnée pour autant
-d'un dénigrement de godi et de la solution existante.
-
-.. _avoir été évincé: https://sympa.inria.fr/sympa/arc/caml-list/2013-07/msg00245.html
-.. _répondait à une demande: https://sympa.inria.fr/sympa/arc/caml-list/2013-07/msg00240.html
-
-Rien de nouveau sous le soleil
-==============================
-
-Ce genre de débat n'est pas nouveau, les conflits le noyau linux sont souvent
-remonté et dérivent parfois vers des mails cinglants s'échangeant sur les
-mailing-list. Le conflit est même plutôt positif, voire nécessaire (la seule
-manière de gérer un projet sans conflit est d'imposer un dictateur). D'une
-manière plus générale, `Georg Simmel`_ nous explique que le conflit est
-positif, car il correspond à une prise de conscience de l'existence de l'autre.
-
-.. _Georg Simmel: https://fr.wikipedia.org/wiki/Georg_Simmel
-
-Pour ma part, je trouve dommage que l'esprit de création puisse être gâché à
-cause de querelles de ce genre. Bien sûr, tout le monde est libre de commencer
-un nouveau projet sans se référer à ceux existants, bien sûr tout le monde peut
-forker ou même repartir à zéro un nouveau projet sans demander la permission,
-mais quand on a affaire à une communauté compétente (et les développeurs Ocaml
-le sont), je trouve dommage de diviser les compétences d'une communauté et
-pousser quelqu'un à l'aigreur pour des raisons aussi futile que ce qui se passe
-en ce moment.
-
-C'est pourtant le revers de la médaille du `bazar, les construction de
-cathédrales`_ n'ont pas autant de péripéties… D'aucuns diront que ça fait
-partie de la vie des projets libre.
-
-.. _bazar, les construction de cathédrales: https://fr.wikipedia.org/wiki/La_cath%C3%A9drale_et_le_bazar
diff --git a/content/Informatique/2014-02-09-ocaml_gtk.rst b/content/Informatique/2014-02-09-ocaml_gtk.rst
deleted file mode 100644
index 09f1aee..0000000
--- a/content/Informatique/2014-02-09-ocaml_gtk.rst
+++ /dev/null
@@ -1,206 +0,0 @@
-.. -*- rst -*-
-.. -*- coding: utf-8 -*-
-
-=======================================
-Trois manière d'utiliser Gtk avec OCaml
-=======================================
-
-:date: 2014-02-09
-:tags: ocaml, gtk
-:summary: |summary|
-:logo: /images/ocaml/camel_75.jpg
-
-.. default-role:: literal
-
-.. figure:: {filename}/images/ocaml/camel_2.jpg
- :figwidth: 150
- :figclass: floatleft
- :alt: Pavement
-
- Image : `Kevin Botto`_ (creativecommons_)
-
-.. _Kevin Botto: http://www.flickr.com/photos/kevinbotto/3251157974/
-.. _creativecommons: http://creativecommons.org/licenses/by-nd/2.0/deed.fr
-
-|summary|
-
-
-.. |summary| replace::
- Créer des interfaces Gtk pour OCaml peut se réveler compliquer. On trouve
- beaucoup d'explications un peu confuses sur le net, et n'est pas facile de
- trouver comment faire.
- Je vous propose ici trois manières différentes en utilisants les différents
- outils disponibles.
-
-Il est possible d'utiliser la bibliothèque Gtk à l'aide de la librairie
-lablgtk_, qui fourni un binding pour l'ensemble de la bibliothèque. L'avantage
-est de pouvoir fonctionner sur toutes les plateformes où gtk est disponible, et
-de bénéficier d'une interface évoluée et agréable pour écrire son application.
-
-L'inconvénient réside dans la bibliothèque gtk : api très compliquée,
-documentation confuse, bref on se retrouve rapidement face à des problèmes là
-où l'on pensait pouvoir avancer sans difficulté. De plus, on est aujourd'hui
-passé à gtk3 alors que `lablgtk` utilise toujours l'api de gtk2. Cela ne pose pas
-de problème dans la compilation (la compatibilité est assurée), mais peut poser
-problème lors de l'utilisation d'outils tels que `glade` (voir plus loin).
-
-.. _lablgtk: http://lablgtk.forge.ocamlcore.org/
-
-Tout construire à la main
-=========================
-
-C'est la première solution, qui demande de connaître Gtk : tous les objets sont
-construits à la main, et le code décrit la manière de faire. L'avantage est que
-le code ne dépend d'aucune ressource externes contrairement aux deux suivantes.
-De plus on contrôle complètement la création de l'interface, on peut donc
-choisir de paramétrer l'interface au lieu d'avoir une interface unique. Un
-tutoriel complet est disponible sur le site d'`OCaml.org`_, je ne vais pas
-le reprendre ici et vous encourage à le suivre.
-
-.. _ocaml.org: http://ocaml.org/learn/tutorials/introduction_to_gtk.html
-
-L'exemple est donné dans la console interactive. Si l'on souhaite le compiler
-dans un module, il faut initialiser Gtk avant de lancer l'affichage :
-
-.. code-block:: ocaml
-
- GtkMain.Main.init ();
-
-Pour compiler un module, il est nécessaire de faire référence au package
-`lablgtk2`. Voici un exemple pour compiler un fichier `hello.ml` :
-
-.. code-block:: console
-
- $ ocamlfind ocamlc -package lablgtk2 -I . -c hello.ml
-
-Maintenant il ne reste plus qu'à se plonger dans la documentation de gtk pour
-construire son interface !
-
-Utiliser Glade
-==============
-
-Glade est une interface graphique permettant de construire son application en
-plaçant les contrôles de manière visuelle. Elle génère un fichier XML qui
-décrit l'interface et sera chargé par l'application pour construire
-l'interface. Cela permet de gagner du temps et d'éviter d'écrire le code
-nécessaire pour construire son interface, on se concentre sur les actions
-à exécuter lorsque l'utilisateur interagit.
-
-.. image:: {filename}/images/glade.jpg
- :class: center
- :alt: Utilisation de glade.
-
-
-Les XMLs générés par glade sont destinés à être utilisés avec gtk3. Or,
-`lablgtk` utilise encore gtk2, il est donc nécessaire d'utiliser une conversion
-pour pouvoir les charger par la suite. Voici une petite règle `make` qui se
-charge de faire le travail :
-
-.. code-block:: make
-
- %.glade2: %.glade
- cat $< | sed 's/interface/glade-interface/' | sed 's/object/widget/' | sed 's/GtkBox/GtkVBox/' > $@
-
-Maintenant qu'on dispose d'un fichier au format glade2, on peut le charger dans
-OCaml.
-
-Attention, lors de la compilation, il est nécessaire d'utiliser `libglade` pour
-construire l'application, celle-ci est disponible dans la librairie
-`lablgtk2.glade`. Voici donc un exemple de commande pour compiler un fichier
-`hello.ml` :
-
-.. code-block:: console
-
- $ ocamlfind ocamlc -package lablgtk2.glade -I . -c hello.ml
-
-.. _gtkbuilder: https://developer.gnome.org/gtk3/3.4/GtkBuilder.html
-
-Charger le fichier xml
-----------------------
-
-Il s'agit de la solution la plus dynamique : on référence le fichier xml dans
-le code, et l'interface se construit toute seule. Cette solution est présentée
-sur le site de `developpez.com`_. L'exemple donné est toujours valide, il ne
-faut pas oublier d'initialiser Gtk avec la commande suivante avant de lancer la
-construction de l'interface :
-
-.. code-block:: ocaml
-
- GtkMain.Main.init ();
-
-L'inconvénient de cette méthode (du moins pour un développeur OCaml) est que
-l'on est obligé de convertir de manière dynamique tous les objets présents dans
-le XML. Il n'est pas possible de savoir au moment de la compilation si le code
-que l'on va exécuter est bien valide.
-
-En effet, les objets chargés depuis le XML nous sont retournés sous la forme
-widget gtk, qu'il faut convertir en Bouton, Menu via les méthodes appropriées
-(`GtkWindow.Window.cast` par exemple). On n'est donc pas à l'abri d'avoir une
-erreur lors du fonctionnement du programme, alors que celui-ci a pu compiler
-sans problème. Je pense que lorsqu'on cherche à développer en OCaml, ce genre
-de problème peut être rédhibitoire.
-
-.. _developpez.com: http://blog.developpez.com/damien-guichard/p7748/programmation-fonctionnelle/hello_developpez_avec_libglade_xml_1
-
-De plus, rien ne garantie que le fichier XML ne va pas évoluer de manière
-incompatible du code ; les deux étant distincts.
-
-
-Utiliser lablgladecc2
----------------------
-
-Heureusement, la librairie `lablgtk2` nous fourni un petit utilitaire nommé
-`lablgladecc2` qui va convertir un fichier xml glade2 en un fichier OCaml. On
-dispose donc d'un chargement dynamique du fichier xml, mais en gardant un code
-cohérent, qui détectera les erreurs dès la compilation. Il s'agit en quelque
-sorte d'un moyen de combiner les deux solutions précédentes.
-
-On va ajouter une règle au makefile pour générer notre fichier OCaml :
-
-.. code-block:: make
-
- %.ml: %.glade2
- lablgladecc2 -embed $< > $@
-
-Le fichier généré se compose d'une classe reprenant les différents composants
-de notre interface, il ne nous reste plus qu'à réaliser les connexions, ainsi,
-à partir d'un fichier glade nommé *gui* composé d'une fenêtre `window1`, d'un
-bouton `button` et d'une entrée de menu, on peut créer le code suivant :
-
-.. code-block:: ocaml
-
- let gladecc () =
- let window = new Gui.window1 () in
-
- window#button#connect#clicked (fun () -> prerr_endline "Ouch!");
- window#window1#connect#destroy GMain.quit;
- window#imagemenuitem5#connect#activate GMain.quit;
-
- window#toplevel#show ()
-
- let () =
- GtkMain.Main.init ();
- gladecc ();
- GMain.Main.main ()
-
-
-l'objet `toplevel` est créé par `lablgladecc2` et correspond à la fenêtre
-principale de notre objet.
-
-Dans cette chaîne de compilation, le fichier xml est écrit dans le programme
-OCaml (il s'agit de la signification de l'option `-embed`), ainsi, le fichier
-XML n'a pas besoin de figurer parmi les ressources de l'application.
-
-Conclusion
-==========
-
-Trois manière de faire qui répondent à trois besoin différents, entre le tout
-codé et le tout dynamique, il est possible de créer des interfaces graphiques
-en utilisant les capacités du langage caml sur l'inférence de type et le
-contrôle de l'ensemble de l'application.
-
-Pour ma part, je préfère la dernière solution, qui permet de conserver la
-simplicité de `glade` combiné avec la force du langage OCaml. J'ai écrit cet
-article suite à pas mal d'errance sur le net pour trouver les informations
-nécessaires, j'espère que la documentation va évoluer par la suite et permettre
-de faire ce genre de choses plus facilement…
diff --git a/content/Informatique/2015-10-03-moderncv.rst b/content/Informatique/2015-10-03-moderncv.rst
index 939d100..0e534d9 100644
--- a/content/Informatique/2015-10-03-moderncv.rst
+++ b/content/Informatique/2015-10-03-moderncv.rst
@@ -9,6 +9,14 @@ Se faire un CV en rst
:tags: reStructuredText, Libre
:summary: |summary|
+.. admonition:: Article obsolète
+ :class: warning
+
+ Je propose désormais une solution complète pour se faire son modèle de CV en
+ rst : `encore des cvs`_ !
+
+.. _encore des cvs: {filename}2020-12-03-encore_des_cv.rst
+
|summary|
.. |summary| replace::
@@ -17,6 +25,7 @@ Se faire un CV en rst
fois-ci je vous propose d'écrire votre CV en rst, et donner le rendu à
latex via moderncv pour obtenir un rendu qui sort du lot.
+
Moderncv
========
diff --git a/content/Informatique/2020-12-03-encore_des_cv.rst b/content/Informatique/2020-12-03-encore_des_cv.rst
new file mode 100755
index 0000000..e950fee
--- /dev/null
+++ b/content/Informatique/2020-12-03-encore_des_cv.rst
@@ -0,0 +1,183 @@
+.. -*- mode: rst -*-
+.. -*- coding: utf-8 -*-
+
+=====================
+Encore des cvs en rst
+=====================
+
+:date: 2020-12-03
+:tags: latex, restructuredText
+:summary: |summary|
+
+
+.. default-role:: literal
+
+|summary|
+
+.. |summary| replace::
+
+ J'avais déjà présenté comment modifier_ le format rst pour produire un cv avec
+ la classe moderncv de latex. Cette fois je propose de se créer soi-même son
+ modèle tout en gardant le format RST.
+
+.. _modifier: {filename}2015-10-03-moderncv.rst
+
+
+L'idée est de conserver le standard du format rst et de modifier les fichiers
+latex pour les adapter en fonction du besoin. Cela signifie que le même fichier
+source peut être utilisé avec les différents exemples sans changements (ou
+presque).
+
+Le résultat
+===========
+
+Commençons directement par le final, voilà le résultat :
+
+.. image:: {static}../images/cv/model5.png
+ :width: 50%
+ :class: floatleft
+
+le code est disponible sur mon `dépôt git`_ si vous souhaitez le cloner et
+récupérer les sources.
+
+.. _dépôt git: http://git.chimrod.com/latex_template.git/
+
+Les directives RST
+==================
+
+La sidebar
+----------
+
+.. code-block:: rst
+
+ .. sidebar:: Titre
+
+ Texte à renseigner dans le bandeau
+
+Permet de créer du texte dans la barre latérale. Le texte peut être une liste,
+une image ou tout autre élément standard. Il faut juste faire attention à la
+largeur qui oblige à rester concis…
+
+
+.. admonition:: Sans titre ?
+ :class: hint
+
+ rst oblige à déclarer un titre dans la directive, ce qui n'est pas forcément
+ ce que l'on souhaite. Par contre le titre peut être vide ! Il suffit
+ d'échapper une espace :
+
+
+ .. code-block:: rst
+
+ .. sidebar:: \
+
+ .. image:: mon profil.jpg
+ :width: 100%
+
+Les listes
+----------
+
+Avec la directive `class`, il est possible d'appliquer un style qui sera
+présent jusqu'à la fin du paragraphe. Ce style est associé à une commande Latex
+qui permet l'appliquer le style en question. Ainsi, avec la classe `checklist`,
+toutes les puces des listes sont remplacées par une coche :
+
+.. code-block:: rst
+
+ .. class:: checklist
+
+ * 1er élément
+ * Second élément
+
+La commande latex suivante est utilisée :
+
+.. code-block:: latex
+
+ \newenvironment{DUCLASSchecklist}{\renewcommand{\labelitemi}{\faCheck}}{}
+
+Il est facile de modifier la commande pour charger d'autres types de marques,
+voir le fichier `10_lists.tex`_ pour la liste complète.
+
+.. _10_lists.tex: http://git.chimrod.com/latex_template.git/tree/common/10_lists.tex
+
+Il est possible de modifier le style de liste en cours de route, mais il faut
+faire attention à appeler la commande **avant** la ligne que l'on souhaite
+modifier. C'est pourquoi l'on retrouve l'exemple suivant dans lequel on annonce
+les icônes avant la ligne suivante :
+
+.. code-block:: rst
+
+ .. sidebar:: Informations
+
+ * 75001 Paris |phoneicon|
+ * 01 23 45 67 89 |mailicon|
+ * email@example |noicon|
+
+`|phoneicon|` est en fait une substitution de texte qui insère une commande
+latex à la place (et donc ne substitue rien du tout :))
+
+Les barres de niveau
+====================
+
+Autre point assez amusant, il est possible de faire des graphiques à partir de
+données dans le fichier. Les niveaux représentés sous forme d'étoiles ou de
+barres sont construits dans latex à partir des lignes suivantes :
+
+.. code-block:: rst
+
+ .. role:: level
+ .. role:: levelbox
+ .. role:: star
+
+ :star:`4.5`
+ :levelbox:`5`
+ :level:`3`
+
+Il s'agit de rôles personnalisés, qui sont interprétés comme des commandes
+latex prenant un paramètre : la valeur du niveau. Celui-ci est ensuite
+représenté sous forme d'étoile colorées, ou barre de niveau. On peut imaginer
+toutes les fantaisies possibles…
+
+Autres éléments
+===============
+
+Il n'y en a pas d'autres. Tout le reste est ensuite standard et suit les
+directives rst. (La directive `admonition`_ permet également des
+personnalisations assez avancées, mais je ne l'ai pas appliqué ici).
+
+.. _admonition: https://docutils.sourceforge.io/docs/ref/rst/directives.html#admonitions
+
+L'organisation
+==============
+
+Chaque répertoire contient un modèle différent, et tous les modèles suivent le
+même schéma :
+
+::
+
+ |
+ |\ Makefile
+ |\ fichier.rst (le fichier source à traiter)
+ \ resources (le répertoire contenant les modèles latex)
+ |
+ |\ 00_colors.tex (la définition des couleurs)
+ |\ 00_length.tex (les longueurs pour les marges ou autres paramètres)
+ |\ 00_preamble.tex (le fichier contenant les paramètres principaux)
+ |\ 10_fonts.tex (les polices utilisées dans le document)
+ |\ 10_title_style.tex (la personnalisation des titres)
+ \ autres directives latex
+
+Tous les fichiers qui sont présents dans le répertoire `resources` sont
+automatiquement chargés, et les modules présents dans le fichier `modules` sont
+également chargés.
+
+Pour la simplification du dépôt, des fichiers communs à tous mes styles sont
+présents dans le répertoire `common`
+
+Et voilà
+========
+
+J'espère que ces petits exemples vous donneront des idées, et qu'ils vous
+permettront de construire vos propres modèles. L'idée est vraiment de laisser
+toute la mécanique latex en arrière-plan, et se simplifier au maximum
+l'écriture !
diff --git a/content/Perso/poker.rst b/content/Perso/poker.rst
deleted file mode 100644
index 44a011b..0000000
--- a/content/Perso/poker.rst
+++ /dev/null
@@ -1,221 +0,0 @@
-.. -*- rst -*-
-.. -*- coding: utf-8 -*-
-
-Évaluation des mains au poker
-#############################
-
-:date: 2013-04-19
-:tags: ocaml, Programmation, Jeux
-
-J'ai entrepris il y a quelques temps de mettre en place un moteur d'évaluation
-des mains de poker. Je n'ai pas trouvé beaucoup de codes ou librairies
-permettant ça, à l'exception de pokersource_ qui est assez utilée dans des
-projets libres.
-
-Cette librairie permet d'évaluer le pourcentage de chance pour chaque joueur de
-gagner le pot, en fonction du type de jeu, du board, ou des cartes brulées.
-Elle est fiable et assez rapide si l'on en croit les critiques_.
-
-Par contre, dès qu'il s'agit d'évaluer des groupes de mains, aucune
-optimisation n'est réalisée, et c'est à la charge du développeur de s'en
-occuper. J'ai donc commencé une petite librairie en Ocaml qui se charge de
-faire les calculs, en réalisant les optimisations nécessaires pour accélerer le
-calcul.
-
-Je ne vais pas présenter ici le code, mais plutôt comment sont réalisées les
-différentes optimisations mises en places par la librairie.
-
-.. _pokersource: http://svn.gna.org/svn/pokersource/
-.. _critiques: http://www.codingthewheel.com/archives/a-pokersource-poker-eval-primer
-
-Couleurs de libertés
-=====================
-
-Présentation
-------------
-
-Il s'agit de la première optimisation et s'inspire des degrés de libertés l'on
-peut retrouver dans les équations. On part du principe que évaluer les
-probabilité entre |Ah|\ |As| contre |Ks|\ |Kc| est équivalent a
-|Ac|\ |Ad| contre |Kd|\ |Kh| c'est à dire que les couleurs
-peuvent être substituées les unes aux autres sans changer les probabilités.
-
-Tant qu'une couleur n'a pas été « posée », elle peut être substituée par
-n'importe quelle autre. Cela simplifier les calculs répétitifs, par exemple :
-
-|Ah|\ |As| contre |Ks|\ |Kc|
-
-|Ah|\ |As| contre |Ks|\ |Kh|
-
-|Ah|\ |As| contre |Ks|\ |Kd|
-
-|Ah|\ |As| contre |Kc|\ |Kh|
-
-|Ah|\ |As| contre |Kc|\ |Kd|
-
-|Ah|\ |As| contre |Kh|\ |Kd|
-
-va pouvoir être simplifié en
-
-1 * |Ah|\ |As| contre |Ks|\ |Kh| (les deux mains partagent les couleurs)
-
-4 * |Ah|\ |As| contre |Ks|\ |Kc| (les deux mains partagent une couleur)
-
-1 * |Ah|\ |As| contre |Kc|\ |Kd| (les deux mains ne partagent pas de couleur)
-
-Selon le nombre de joueurs disutant la confrontation, le nombre de calculs à
-faire peut déjà être diminué par 2 ou plus : il est possible d'appliquer
-récursivement cette opération pour chacun des joueurs, en fonction des couleurs
-qui ont été utilisées précédemment.
-
-Implémentation
---------------
-
-Il « suffit » de tenir une table de correspondance entre les couleurs réelles,
-et les couleurs utilisées dans le calcul. Puis, de regrouper les mains du
-joueur :
-
-1) Au début, la table est vide : aucune couleur n'est fixée, donc deux mains
- ayant des valeurs identiques (par exemple |Ah|\ |As| et |Ac|\ |Ad|\ ) vont se
- retrouver regroupée sous la même main, qui sera comptabilisée deux fois.
-
-2) Ensuite, pour chaque main ainsi générée, on va regrouper les mains du joueur
- suivant. Sauf que cette fois-ci la table de correspondance n'est plus vide :
- elle a déjà été rempli lors de la phase 1; certaines mains ne pourront donc
- pas être regroupées entre elles.
-
-3) On répète la phase 2 pour chaque joueur, à chaque fois le nombre de couleurs
- libre est réduit. Quand on arrive au dernier joueur, on lance le calcul,
- auquel on applique le facteur de multiplication, calculé en fonction du
- nombre de mains qui ont étés regroupées pour l'ensemble des joueurs.
-
-Calcul combinatoires
-====================
-
-Cette première opération permet déjà de réduire les calculs, mais ça n'est pas
-suffisant. Quand on essaie de calculer les probabilité, il arrive souvent que
-les adversaires aient des mains en communs, parmi leur possibité de jeu.
-
-Imaginons les possibité suivantes :
-
-* joueur 1 : {AA, KK, AK}
-* joueur 2 : {AA, KK}
-* joueur 3 : {KK, AK}
-
-évaluer les probabilité de chaque joueur va conduire a des répétitions lors
-évaluations :
-
-* (AA, **KK**, **AK**) et (AA, **AK**, **KK**)
-* (**AK**, AA, **KK**) et (**KK**, AA, **AK**)
-* …
-
-Quand on a calculé le premier arrangement, on peut déduire les résulats du
-second sans faire les calculs, il suffit d'éffectuer une permutation pour
-obtenir, mutatis mutandis, le résulat attendu.
-
-Partitions
-----------
-
-La première étape est de réaliser une partition des mains possibles du joueur.
-Pour chaque joueur, il faut commencer par créer des groupes de mains tel que :
-
-* chaque groupe pris pair à pair ne contient aucune carte en commun
-* il est possible de reconstituer l'ensemble des mains des joueurs par une
- combinaison de ces groupes.
-
-On va se servir des `opérations de base`_ pour découper un ensemble_ pair à
-pair, en prenant à chaque fois l'élément unique que l'on applique ensuite à
-l'ensemble suivant.
-
-.. code-block:: ocaml
-
- let explode =
-
- let rec partition clean current = function
- | [] -> current, clean
- | hd::tl ->
- if S.disjoint current hd || S.equal current hd then
- partition (hd::clean) current tl
- else
- let s1::s2 = split current hd
- in List.unique ~eq:S.equal (partition s2 s1 ((tl @ clean)))
-
- and process_list checked = function
- | [] -> checked
- | hd :: tl -> (
- match partition [] hd tl with
- | cleaned, [] -> cleaned::checked
- | cleaned, tl' -> process_list (cleaned::checked) tl'
- )
-
- in process_list []
- %> List.unique ~eq:S.equal
-
-.. _ensemble: https://fr.wikipedia.org/wiki/Ensemble
-.. _`opérations de base`: https://fr.wikipedia.org/wiki/Alg%C3%A8bre_des_parties_d%27un_ensemble
-
-Énumérer
---------
-
-Ensuite, nous allons énumérer l'ensemble des combinaisons possible de ces
-groupes. Il existe quelques algorithmes_ permettant de générer la liste des
-combinaisons données pour un rang donné.
-
-Toutefois, nous travaillons ici sur des `combinaisons avec répétitions`_ (une
-même partition peut êre présente plusieurs fois), ce qui change le nombre de
-combinaisons disponibles.
-
-Pour chacune de ces combinaison, il faut maintenant tester toutes les
-permutations possibles, et, pour chacune d'elle, vérifier si cette permutation
-peut être présente ou non dans la confrontation. Si l'une d'entre elle est
-possible, alors on peut lancer le calcul, et garder le résultat au cas où une
-autre permutation de la même combinaison pourrait correspondre.
-
-.. _algorithmes: http://jean-paul.davalan.pagesperso-orange.fr/mots/comb/comb/combalgo.html
-.. _combinaisons avec répétitions: http://fr.wikipedia.org/wiki/Combinaison_avec_r%C3%A9p%C3%A9tition
-
-Assembler
----------
-
-Pour terminer, il faut pouvoir assembler les résulats. Il suffit de garder le
-nombre de mains évaluées, et le nombre de mains gagnées pour chaque joueur,
-cela peut se faire au fil de l'eau, en additionnant chaque nouveau résulat au
-résultat final. La probabilité de gagner se fait en calculant le rapport.
-
-Le code
-=======
-
-Il est disponible sur mon dépôt git_\ . Je ne vois pas d'autres optimisations
-possibles pour l'instant (sauf à partir sur de la parallélisation de code, ce
-qui est faisable, mais l'on n'est plus dans l'algorithme), mais suit preneur de
-toute nouvelle idée !
-
-.. _git: http://git.chimrod.com/?p=poker-evaluation.git;a=summary
-
-
-.. |As| image:: {filename}../images/poker/as.jpeg
- :width: 30
-
-.. |Ad| image:: {filename}../images/poker/ad.jpeg
- :width: 30
-
-.. |Ac| image:: {filename}../images/poker/ac.jpeg
- :width: 30
-
-.. |Ah| image:: {filename}../images/poker/ah.jpeg
- :width: 30
-
-.. |Ks| image:: {filename}../images/poker/ks.jpeg
- :width: 30
-
-.. |Kc| image:: {filename}../images/poker/kc.jpeg
- :width: 30
-
-.. |Kd| image:: {filename}../images/poker/kd.jpeg
- :width: 30
-
-.. |Kh| image:: {filename}../images/poker/kh.jpeg
- :width: 30
-
-.. |nbsp| unicode:: 0xA0
- :trim:
diff --git a/content/images/cv/model5.png b/content/images/cv/model5.png
new file mode 100755
index 0000000..c80eb6f
--- /dev/null
+++ b/content/images/cv/model5.png
Binary files differ
diff --git a/content/images/poker/ac.jpeg b/content/images/poker/ac.jpeg
deleted file mode 100644
index 0b26895..0000000
--- a/content/images/poker/ac.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/poker/ad.jpeg b/content/images/poker/ad.jpeg
deleted file mode 100644
index 62efda2..0000000
--- a/content/images/poker/ad.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/poker/ah.jpeg b/content/images/poker/ah.jpeg
deleted file mode 100644
index d158981..0000000
--- a/content/images/poker/ah.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/poker/as.jpeg b/content/images/poker/as.jpeg
deleted file mode 100644
index 9a6765e..0000000
--- a/content/images/poker/as.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/poker/kc.jpeg b/content/images/poker/kc.jpeg
deleted file mode 100644
index 6cc19a3..0000000
--- a/content/images/poker/kc.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/poker/kd.jpeg b/content/images/poker/kd.jpeg
deleted file mode 100644
index b86fc41..0000000
--- a/content/images/poker/kd.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/poker/kh.jpeg b/content/images/poker/kh.jpeg
deleted file mode 100644
index 58b95a4..0000000
--- a/content/images/poker/kh.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/poker/ks.jpeg b/content/images/poker/ks.jpeg
deleted file mode 100644
index ca6e804..0000000
--- a/content/images/poker/ks.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/profile.png b/content/images/profile.png
new file mode 100755
index 0000000..0353275
--- /dev/null
+++ b/content/images/profile.png
Binary files differ
diff --git a/content/images/roi/roi_150.jpeg b/content/images/roi/roi_150.jpeg
deleted file mode 100644
index 33b129a..0000000
--- a/content/images/roi/roi_150.jpeg
+++ /dev/null
Binary files differ
diff --git a/content/images/roi/roi_75.jpeg b/content/images/roi/roi_75.jpeg
deleted file mode 100644
index cd38cec..0000000
--- a/content/images/roi/roi_75.jpeg
+++ /dev/null
Binary files differ