summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2014-02-09 12:05:40 +0100
committerSébastien Dailly <sebastien@chimrod.com>2014-02-09 22:19:46 +0100
commite7b1d8b488c0a61c04a6bdae817020e1b3014356 (patch)
treed9cb786660f262a75e57359ead9b862e7cdefb76
parent0480f5ba560dbede71f1aa118da647f406e87f14 (diff)
3 ways to use gtk with ocaml
-rw-r--r--content/Informatique/gueule1.rst12
-rw-r--r--content/Informatique/navit.rst22
-rw-r--r--content/Informatique/ocaml_gtk.rst206
-rw-r--r--content/Informatique/rst.rst9
-rw-r--r--content/Informatique/rst_graphviz.rst6
-rw-r--r--content/Informatique/vala.rst75
-rw-r--r--content/Perso/platine.rst12
-rw-r--r--content/Perso/poker.rst54
-rw-r--r--content/images/glade.jpgbin0 -> 15176 bytes
-rw-r--r--content/images/ocaml/camel_2.jpgbin0 -> 11009 bytes
-rw-r--r--content/images/ocaml/camel_75.jpgbin0 -> 5049 bytes
-rwxr-xr-xtheme/static/css/main.css12
-rw-r--r--theme/static/images/arrow.pngbin0 -> 1092 bytes
13 files changed, 327 insertions, 81 deletions
diff --git a/content/Informatique/gueule1.rst b/content/Informatique/gueule1.rst
index 8832e66..b92a0d7 100644
--- a/content/Informatique/gueule1.rst
+++ b/content/Informatique/gueule1.rst
@@ -5,9 +5,11 @@ Essai raté d'un plugin gedit
############################
:date: 20/04/2013
-:tags: Programmation, Libre, Humeur
+:tags: Programmation, Libre, Humeur, gtk
:logo: static/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
@@ -37,14 +39,14 @@ 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à :
+ce que l'on cherche, et là :
* erreur 404 dans l'API (par exemple les liens de l'« Object Hierarchy » de
- GtkSourceView_)
+ 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_\ …)
+* 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
diff --git a/content/Informatique/navit.rst b/content/Informatique/navit.rst
index 786e66c..7175524 100644
--- a/content/Informatique/navit.rst
+++ b/content/Informatique/navit.rst
@@ -9,6 +9,8 @@ Un gps libre avec Navit
:summary: |summary1| |summary2|
:logo: static/images/navit.png
+.. default-role:: literal
+
Depuis un peu plus d'un an maintenant, j'ai choisi d'utiliser Navit comme
logiciel de navigation. Dans ce billet, je propose de faire un petit retour
d'expérience sur ce logiciel et la manière de l'utiliser pour calculer les
@@ -20,7 +22,7 @@ Présentation
|summary1|
.. |summary1| replace::
- Navit est un logiciel de navigation, ce que l'on appelle souvent un
+ Navit est un logiciel de navigation, ce que l'on appelle souvent un
« GPS ». Le logiciel fonctionne en mode déconnecté, c'est-à-dire qu'il a
besoin de lire les cartes en local, mais ne nécessite aucune connexion
réseau lors de la navigation. C'est un avantage qui lui permet de
@@ -93,18 +95,18 @@ La configuration de navit est disponible dans le répertoire /etc/navit/ .
Seulement, pour plus de commodité, nous allons la copier dans notre répertoire
utilisateur :
-.. code-block:: bash
+.. code-block:: console
- cp -r /etc/navit/ ~/.navit/
+ $ cp -r /etc/navit/ ~/.navit/
Nous allons maintenant éditer le fichier XML est ajouté la carte dans la liste
des cartes disponibles :
-.. code-block:: XML
+.. code-block:: xml
- <mapset enabled="yes">
- <map type="binfile" enabled="yes" data="${VOTRE/CHEMIN/VERS/carte.bin}"/>
- </mapset>
+ <mapset enabled="yes">
+ <map type="binfile" enabled="yes" data="${VOTRE/CHEMIN/VERS/carte.bin}"/>
+ </mapset>
Si l'on souhaite intégrer plusieurs cartes, il faut insérer plusieurs fois ce
nœud XML.
@@ -116,6 +118,7 @@ la carte.)
.. image:: |filename|../images/Capture-Navit-e1332787251467.png
:width: 400
+ :class: center
On peut déjà commencer à calculer les trajets et essayer différents habillages.
Sur le wiki vous pouvez télécharger des thèmes déjà préparés qu'il suffit
@@ -142,7 +145,7 @@ consommation mémoire.)
* Par rapport aux solutions commerciales, capables d'afficher l'état du
trafic, Navit est vraiment en retard. On peut résumer en disant qu'il
s'agit davantage d'une carte interactive qu'une solution de guidage, il
- reste nécessaire de prévoir son trajet avant de partir.
+ reste nécessaire de prévoir son trajet avant de partir.
* Un autre regret est de ne pas pouvoir sélectionner des « points de
passage », pour affiner le trajet. La seule solution est de choisir
@@ -155,6 +158,7 @@ consommation mémoire.)
.. image:: |filename|../images/Capture-Navit-1-e1332786990864.png
:width: 400
+ :class: center
OpenstreetMap
@@ -207,7 +211,7 @@ récepteur GPS. On peut en trouver par 30€ sur ebay, ce qui est investissement
suffisant pour se lancer (si l'on compare aux gps tactiles qui sont vendus en
supermarché).
-Pour ma part, j'utilise un récepteur ND100 de globalsat_.
+Pour ma part, j'utilise un récepteur `ND100` de globalsat_.
Au final on dispose donc d'une aide à la navigation qui s'avère très pratique,
et assez amusante ! On a l'avantage de disposer de cartes gratuites et mises à
diff --git a/content/Informatique/ocaml_gtk.rst b/content/Informatique/ocaml_gtk.rst
new file mode 100644
index 0000000..b124cb5
--- /dev/null
+++ b/content/Informatique/ocaml_gtk.rst
@@ -0,0 +1,206 @@
+.. -*- rst -*-
+.. -*- coding: utf-8 -*-
+
+=======================================
+Trois manière d'utiliser Gtk avec OCaml
+=======================================
+
+:date: 2014-02-09
+:tags: ocaml, gtk
+:summary: |summary|
+:logo: static/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/rst.rst b/content/Informatique/rst.rst
index 0bd15f1..faa0280 100644
--- a/content/Informatique/rst.rst
+++ b/content/Informatique/rst.rst
@@ -8,6 +8,7 @@ Blogguer en rst sous wordpress
:tags: Libre, reStructuredText
:summary: |summary|
+.. default-role:: literal
Le format reStructuredText_ est un langage de balise (un peu comme le HTML, ou
le laTex), issu du monde de la programmation. Son but est de répondre au
@@ -62,7 +63,7 @@ Plugin wordpress
Il existe un plugin wordpress qui permet d'utiliser ce format pour l'écriture
de documents dans le blog. À chaque fois que l'on va publier un article, le
plugin va tester si le fichier est au format rst, et dans ce cas, va en faire
-la conversion en html en passant par la commande rst2html.
+la conversion en html en passant par la commande `rst2html`.
**Attention**, pour le mettre en place, il est
nécessaire d'avoir un accès à la machine pour y installer quelques
@@ -71,7 +72,7 @@ applications.
Pré-requis
----------
-Python doit être disponible sur la machine, ainsi que le script rst2html (je
+Python doit être disponible sur la machine, ainsi que le script `rst2html` (je
ne pense pas que cela soit le cas pour les blogs hébergés et cela limite les
possibilités).
@@ -89,7 +90,7 @@ compatibilité.
.. _launchpad : http://bazaar.launchpad.net/~gldnspud/rest-wordpress/trunk/files
Le fichier README explique comment l'installer et le paramétrage à faire; les
-options (comme le chemin vers rst2pdf) se font directement dans le fichier php.
+options (comme le chemin vers `rst2pdf`) se font directement dans le fichier php.
.. code-block:: php startinline=True
@@ -130,7 +131,7 @@ programme python qui s'occupe de ça) :
# aptitude install python-pygments
Ensuite il va falloir modifier le script à lancer. En effet, par défaut, la
-commande rst2pdf n'intègre pas la coloration de code. Nous allons donc devoir
+commande `rst2pdf` n'intègre pas la coloration de code. Nous allons donc devoir
modifier la commande à exécuter pour le faire (j'ai mis à disposition le script
à télécharger_). Assurez-vous que le script peut être exécuté par l'utilisateur
lancé par le service web.
diff --git a/content/Informatique/rst_graphviz.rst b/content/Informatique/rst_graphviz.rst
index 2b6df48..b2dc477 100644
--- a/content/Informatique/rst_graphviz.rst
+++ b/content/Informatique/rst_graphviz.rst
@@ -9,6 +9,8 @@ Ajouter graphviz dans les documents restructuredText
:logo: static/images/graphe.png
:summary: |summary|
+.. default-role:: literal
+
.. image:: |filename|/images/graphe.png
:class: floatleft
:scale: 50
@@ -47,7 +49,7 @@ complète, et un article ne suffirait pas à tout couvrir !
La question qui se pose est donc de pouvoir inclure directement graphviz lors
de la génération du document. Pour ça, j'ai créé une nouvelle directive_,
-*graphviz* qui appele directement dot lors de la génération du document.
+`graphviz` qui appele directement dot lors de la génération du document.
.. _directive: http://docutils.sourceforge.net/docs/ref/rst/directives.html
@@ -58,7 +60,7 @@ de la génération du document. Pour ça, j'ai créé une nouvelle directive_,
.. graphviz::
digraph G {
-
+
a -> a
a -> b
d -> b
diff --git a/content/Informatique/vala.rst b/content/Informatique/vala.rst
index 55d83f3..05aeeb7 100644
--- a/content/Informatique/vala.rst
+++ b/content/Informatique/vala.rst
@@ -7,6 +7,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
@@ -34,7 +36,10 @@ 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 :
+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
@@ -46,10 +51,15 @@ 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
+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,
+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
@@ -60,7 +70,11 @@ Python : la GLib est avant tout destinée à des développeurs C, et beaucoup de
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
+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
@@ -68,7 +82,8 @@ 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) :
+définissant la méthode `execl` (issue du fichier
+`/usr/share/vala/vapi/posix.vapi`) :
::
@@ -83,30 +98,34 @@ et voici la signature de la méthode C correspondante :
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 :
-
-::
-
- valac --profile posix
+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
+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.
diff --git a/content/Perso/platine.rst b/content/Perso/platine.rst
index c281ac7..695a8e9 100644
--- a/content/Perso/platine.rst
+++ b/content/Perso/platine.rst
@@ -43,16 +43,16 @@ sécurité, et il va être nécessaire de modifier la configuration pour ça. En
effet, le comportement par défaut est de se lancer pour la durée nécessaire,
via dbus, puis se couper une fois que la demande est terminée. Il n'existe pas
à ma connaissance de modèle de platine capable de lancer demander à pulseaudio
-de se mettre en route, on va donc laisser pulseaudio tourner en continu.
+de se mettre en route, on va donc laisser pulseaudio tourner en continu.
-.. admonition:: Attention !
+.. admonition:: Attention !
Il n'est pas conseillé de lancer pulseaudio en tant que démon du système.
Comme le wiki l'indique, cela ne devrait être utilisé que dans des cas
particuliers (serveur de son accessible uniquement par le réseau).
De nombreuses failles de sécurité ont été trouvés utilisant pulseaudio pour
- obtenir un accès root à la machine.
+ obtenir un accès root à la machine.
Dans notre cas nous n'avons pas le choix, puisque la platine ne correspond
à aucun utilisateur du système, mais vous êtes prévenus !
@@ -113,7 +113,7 @@ inverse pour restaurer le son :
Pulseaudio ne sait pas égaliser le son nativement, mais il est possible de
passer le son dans des filtres qui vont faire le boulot pour nous. En effet, il
existe une norme, ladspa_, qui permet de créer des plugins sous linux pouvant être
-utilisés par n'importe quelle application. (Qui a dit que la gestion du son était
+utilisés par n'importe quelle application. (Qui a dit que la gestion du son était
bordelique_ sous linux ? |:-)|)
.. _ladspa: http://www.ladspa.org/
@@ -122,7 +122,7 @@ bordelique_ sous linux ? |:-)|)
.. |:-)| image:: |filename|/images/icons/face-smile.png
Le plugin que nous allons utiliser est celui de l'égaliseur multibande, son
-petit nom étant mbeq_1197. (Dans Debian, vous le trouverez dans le paquet
+petit nom étant `mbeq_1197`. (Dans Debian, vous le trouverez dans le paquet
`swh-plugin`).
D'après sa page de manuel, il prend des corrections à appliquer pour les
@@ -168,7 +168,7 @@ peut être trouvée grace à la commande suivante :
Description : Monitor of LADSPA Plugin Multiband EQ on Audio interne Stéréo analogique
Voilà, à travers ces deux lignes, nous venons de connecter notre platine vinyle
-sur les enceintes du PC et donner au son le dynamisme qui lui faut !
+sur les enceintes du PC et donner au son le dynamisme qui lui faut !
Pour ma part, je suis bluffé par le fait que des disques ayant presque quarante
ans d'âge puissent encore être écouté parfaitement sur un ordinateur conçu bien
diff --git a/content/Perso/poker.rst b/content/Perso/poker.rst
index db6a7d9..c5c0a7e 100644
--- a/content/Perso/poker.rst
+++ b/content/Perso/poker.rst
@@ -43,25 +43,25 @@ 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|
+|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 |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)
+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
@@ -94,20 +94,20 @@ 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.
+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}
+* 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**)
- * …
+* (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
@@ -119,9 +119,9 @@ 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.
+* 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 à
@@ -163,7 +163,7 @@ 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.
+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
@@ -217,5 +217,5 @@ toute nouvelle idée !
.. |Kh| image:: |filename|../images/poker/kh.jpeg
:width: 30
-.. |nbsp| unicode:: 0xA0
+.. |nbsp| unicode:: 0xA0
:trim:
diff --git a/content/images/glade.jpg b/content/images/glade.jpg
new file mode 100644
index 0000000..6884ded
--- /dev/null
+++ b/content/images/glade.jpg
Binary files differ
diff --git a/content/images/ocaml/camel_2.jpg b/content/images/ocaml/camel_2.jpg
new file mode 100644
index 0000000..8a5a7b4
--- /dev/null
+++ b/content/images/ocaml/camel_2.jpg
Binary files differ
diff --git a/content/images/ocaml/camel_75.jpg b/content/images/ocaml/camel_75.jpg
new file mode 100644
index 0000000..727b38d
--- /dev/null
+++ b/content/images/ocaml/camel_75.jpg
Binary files differ
diff --git a/theme/static/css/main.css b/theme/static/css/main.css
index 1bd60f6..b49ad90 100755
--- a/theme/static/css/main.css
+++ b/theme/static/css/main.css
@@ -33,9 +33,13 @@ h1, h2, h3, h4, h5, h6 {
h1 {
font-size: 1.5em;
}
+
h2 {
font-size: 1.3em;
+ font-weight: bold;
+ left:20px;
}
+
h2.page_title {
padding-left: 10px;
text-decoration: none;
@@ -46,6 +50,8 @@ h2.page_title {
h3 {
font-size: 1.15em;
margin-left: 5px;
+ padding-left: 20px;
+ background: url("../images/arrow.png") no-repeat left bottom;
}
h4 {
font-size: 1em;
@@ -311,4 +317,10 @@ div#page {
.floatleft { float: left; margin: 0px 5px 5px 0px; }
.floatright { float: right; margin: 0px 0px 5px 5px; }
+img.center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
.clear { clear:both; }
diff --git a/theme/static/images/arrow.png b/theme/static/images/arrow.png
new file mode 100644
index 0000000..e42bdda
--- /dev/null
+++ b/theme/static/images/arrow.png
Binary files differ