aboutsummaryrefslogtreecommitdiff
path: root/content/Informatique
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2021-01-04 13:40:21 +0100
committerSébastien Dailly <sebastien@chimrod.com>2021-01-05 11:06:20 +0100
commit1cad4c9044d47c6653d804d7fb58581d92f96cc8 (patch)
tree9696b75a4288976a00dbfc694090768ac93cdd14 /content/Informatique
parent0c09a00a0b298cbd3bbd0082cc1026e22db9b1c5 (diff)
Change organisation
Diffstat (limited to 'content/Informatique')
-rw-r--r--content/Informatique/2012-02-18-elinks.rst47
-rw-r--r--content/Informatique/2012-11-09-fonctionnel.rst190
-rw-r--r--content/Informatique/2013-05-23-ocamlfind_en.rst_63
-rw-r--r--content/Informatique/2013-05-23-ocamlfind_fr.rst79
-rw-r--r--content/Informatique/2013-09-13-ocaml_ppx.rst97
5 files changed, 0 insertions, 476 deletions
diff --git a/content/Informatique/2012-02-18-elinks.rst b/content/Informatique/2012-02-18-elinks.rst
deleted file mode 100644
index bac91ba..0000000
--- a/content/Informatique/2012-02-18-elinks.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-.. -*- rst -*-
-.. -*- coding: utf-8 -*-
-
-Scripter elinks
-###############
-
-:date: 2012-02-18
-:tags: Libre
-
-elinks_ est un navigateur web, destiné à être utilisé en console. Il s'agit
-pour moi d'un très bon navigateur secondaire, en complément de firefox, qui à
-l'avantage de permettre une navigation légère, sans effets de javascript,
-publicités, idéale pour lire l'actualité, un peu moins pour faire une recherche
-sur un sujet.
-
-La semaine dernière, j'ai envoyé un message_ sur la mailing list du projet pour
-indiquer que je souhaitai entreprendre quelques modifications dans le code dans
-le but de le rendre davantage modulaire. Il est nativement scriptable dans
-différents langages (lua, python, perl...) mais les possbilités de scripts
-restent très limitées et ne permettent pas de changer grand chose au
-comportement du navigateur. Quand on a pri l'habitude de pouvoir configurer
-ses applications comme on le souhaite, cela devient difficile de ne pas pouvoir
-le faire.
-
-J'ai donc choisi de me pencher davantage sur le langage lua pour mettre en
-place les modifications voulues. J'ai déjà une expérience du lua comme scripts
-côté client, pour l'instant jamais du côté de l'API C. Après avoir lutté un
-petit peu, j'ai fini par comprendre et suis aujourd'hui en train de mettre les
-objets qui m'intéressent.
-
-Le but est de permettre de scripter complètement la navigation : aujourd'hui,
-les seules interractions possibles permettent de modifier l'URL au moment où
-celle-ci est entrée, mais aucun accès au document n'est donné : impossible de
-récupérer les URLs, impossible de sélectionner un lien dans la page, ou de
-naviguer dans celle-ci. C'est tout cela que je souhaite mettre en place, en
-proposant une API orientée objet qui sera modulable et réutilisable par la
-suite.
-
-Pour l'instant, les modifications ne sont pas encore visibles, je fais le
-commit sur mon propre serveur git, mais je rendrai public mon projet dès que
-j'aurai obtenu un résultat intéressant : je n'attendrai pas d'avoir fini pour
-tout publier; soyez patient !
-
-.. _elinks: http://elinks.or.cz/index.html
-.. _message: http://linuxfromscratch.org/pipermail/elinks-dev/2012-February/002049.html
-
-
diff --git a/content/Informatique/2012-11-09-fonctionnel.rst b/content/Informatique/2012-11-09-fonctionnel.rst
deleted file mode 100644
index 06d75d0..0000000
--- a/content/Informatique/2012-11-09-fonctionnel.rst
+++ /dev/null
@@ -1,190 +0,0 @@
-
-Programmation fonctionnelle
-###########################
-
-:date: 2012-11-09
-:tags: Programmation
-
-Dans cet article, je vais essayer de présenter différents cas de programmation
-fonctionnelle en essayant de partir d'un cas pratique pour présenter les
-difficultés et solutions disponibles.
-
-Je vais présenter ici des exemples dans le langage python, par ce qu'il s'agit
-d'un langage simple, pouvant être utilisé de manière fonctionnelle (dans une
-certaine limite). Je me contente d'un python `basique` et ne vais pas chercher
-entrer dans des syntaxes spécifiques, le but étant ici de servir de support, et
-non pas de présenter le langage.
-
-Un besoin
-=========
-
-Imaginons la situation suivante : une application reçoit des données d'un
-client et doit les traiter. Ces données arrivent dans des fichiers textes,
-chaque ligne du fichier correspond à une donnée à traiter.
-
-Un programme
-============
-
-Commençons le programme, pour lire le fichier commençons par le localiser :
-
-.. code-block:: python
-
- def get_file(nom):
- chemin = os.path.join("repertoire", nom)
- return open(chemin)
-
-Cette fonction est simple : elle prend en argument un nom de fichier, et
-retourne le fichier correspondant. On peut également dire qu'elle effectue la
-transformation suivante :
-
-.. code-block:: ocaml
-
- get_file: String -> File
-
-Cette notation indique que le type de la fonction est le suivant : elle prend
-un string en entrée, et retourne un file en sortie. Nous l'utiliserons
-régulièrement dans cet article.
-
-Dans notre cas, nous n'avons pas un fichier a traiter, mais une série de
-fichiers. Nous allons donc devoir appeler la fonction sur tous nos nom de
-fichiers. La première solution est la solution itérative, à travers une boucle
-:
-
-.. code-block:: python
-
- def transforme(noms):
- fichiers = []
- for nom in noms
- fichiers.append(get_file(nom))
- return fichiers
-
-À la fin de l'exécution de la boucle, la liste `fichiers` contient la liste des
-fichiers construits à partir de la liste `noms`.
-
-C'est une opération très fréquente et bien qu'elle soit très courte. Essayons
-de réfléchir un peu à ce que nous venons de faire en terme de type : notre but
-est de transformer une liste de String en liste de File de la manière suivante
-:
-
-.. code-block:: ocaml
-
- transforme: List[String] -> List[File]
-
-Si l'on généralise, on peut essayer de créer une fonction qui aurait le schéma
-suivant :
-
-.. code-block:: ocaml
-
- transforme: List[A] -> List[B]
-
-Cette fonction a par contre besoin d'une transformation à appliquer pour
-transformer A en B, dans notre cas, cette transformation a déjà été créée plus
-haut !
-
-Notre schéma devient donc le suivant :
-
-.. code-block:: ocaml
-
- transforme: (A -> B) -> List[A] -> List[B]
-
-Récrivons donc notre fonction transforme de cette manière:
-
-.. code-block:: python
-
- def transforme(func, source):
- results = []
- for nom in source
- results.append(func(nom))
- return results
-
- fichiers = transforme(get_file, noms)
-
-Et voilà ! Nous avons maintenant notre fonction générique, destinée à changer
-le contenu de notre liste. Qu'est ce que cela apporte par rapport à la version
-impérative que nous avons écrit tout à l'heure ? En fait pas grand chose. Sauf
-que la fonction `transforme` est présente nativement dans python. Elle
-s'appelle en fait `map`, et effectue le même travail.
-
-Nous aurions donc tout aussi bien pu écrire :
-
-.. code-block:: python
-
- fichiers = map(get_file, noms)
-
-Une réflexion
-=============
-
-Pourquoi avoir écrit tout ça ? Par ce que semblant de rien, nous avons changé
-notre manière de concevoir le programme : au lieu d'écrire une suite
-d'instructions qui s'exécutent séquentiellement, nous venons d'appliquer des
-transformations dans un contexte : la liste des noms de fichiers est notre
-contexte de base, sur lequel nous appliquons des transformations pour créer un
-autre contexte.
-
-Ces transformations ne modifient pas notre contexte initial, et par la suite
-les transformations que nous continueront d'appliquer ne modifieront rien non
-plus de notre environnement. Dans cet esprit, l'ensemble du programme peut être
-perçu comme un grande transformation qui s'applique sur un point d'entrée
-initial.
-
-Une théorie
-===========
-
-La fonction `map` que nous venons de présenter ici, s'inscrit en fait dans un
-cadre de fonctions plus vaste : les foncteurs_. Il s'agit d'une notion
-mathématique que l'on retrouve appliquée en informatique.
-
-.. _foncteurs: http://fr.wikipedia.org/wiki/Foncteur
-
-Comme vu précédemment, un objet foncteur F est un objet ayant la signature
-suivante :
-
-.. code-block:: ocaml
-
- map: (A -> B) -> F[A] -> F[B]
-
-Le foncteur a deux contraintes, qui sont plutôt intuitives:
-
-identité
---------
-
-Soit la fonction `id` défini comme suit:
-
-.. code-block:: python
-
- def id(x):
- return x
-
-alors on a l'égalité suivante :
-
-.. code-block:: python
-
- map(id, fichiers) == fichiers
-
-Autrement dit, le foncteur ne doit pas modifier la structure de la donnée. On
-peut essayer de repenser la fonction `transforme` écrite plus haut pour briser
-cette règle, je laisse au lecteur le soin de réfléchir à cette question.
-
-composition
------------
-
-La deuxième contrainte est celle de la composition :
-
-.. code-block:: python
-
- map(f(g), source) = map(f, map(g, source))
-
-C'est à dire qu'il est possible de composer les fonctions les entre elles :
-c'est encore heureux, car cela permet de chaîner les traitements entre eux…
-
-Une conclusion
-==============
-
-Notre contexte est ici une liste, mais nous allons voir par la suite qu'il en
-existe beaucoup d'autres, ce qui va nous faciliter la vie… Cela va venir dans
-les articles qui suivent.
-
-Une fois les deux contraintes validées, nous allons pouvoir construire de
-nouveaux types basés sur ce foncteur. Et derrière la solution informatique mise
-en place, je vais essayer de présenter les concepts mathématiques qui sont
-derrière.
diff --git a/content/Informatique/2013-05-23-ocamlfind_en.rst_ b/content/Informatique/2013-05-23-ocamlfind_en.rst_
deleted file mode 100644
index bebab10..0000000
--- a/content/Informatique/2013-05-23-ocamlfind_en.rst_
+++ /dev/null
@@ -1,63 +0,0 @@
-.. -*- 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:: {static}/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-05-23-ocamlfind_fr.rst b/content/Informatique/2013-05-23-ocamlfind_fr.rst
deleted file mode 100644
index 254d7fe..0000000
--- a/content/Informatique/2013-05-23-ocamlfind_fr.rst
+++ /dev/null
@@ -1,79 +0,0 @@
-.. -*- rst -*-
-.. -*- coding: utf-8 -*-
-
-=========================
-Un dépôt local pour ocaml
-=========================
-
-:date: 2013-05-23
-:tags: ocaml
-:summary: |summary|
-:logo: /images/ocaml/camel.jpg
-:slug: un-depot-local-pour-ocaml
-:lang: fr
-
-.. default-role:: literal
-
-.. figure:: {static}/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::
- Ocaml n'est pas à jour dans debian : l'ensemble des librairies sont encore
- restées sur la version 3, alors qu'Ocaml4 est sorti depuis près d'un an. Il
- peut être nécessaire de développer en utilisant ocaml4, mais on est alors
- obligé de compiler soit même les dépendances, et les installer pour
- l'ensemble du système, ce qui n'est pas souhaité, ni toujours possible
- (problème de droits). Cette petite recette permet de se créer un dépôt
- local en utilisant findlib.
-
-Findlib est devenu de facto une brique essentielle pour la gestion des
-librairies et les dépendances d'un projet. Aujourd'hui toute compilation
-utilise findlib pour rechercher les dépendances et faciliter la chaîne de
-compilation. La documentation_ du projet est assez dense, mais heureusement, il
-est très configurable.
-
-.. _documentation: http://projects.camlcity.org/projects/dl/findlib-1.3.3/doc/guide-html/index.html
-
-Nous allons commencer par nous créer un fichier de configuration local qui va
-indiquer où stocker nos librairies :
-
-.. 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: correspond à l'emplacement d'installation des nouvelles librairies.
-:path: est l'ensemble des répertoires où chercher les dépendances. Ici
- nous déclarons tout d'abord notre dépôt local avant de référencer
- les répertoires système.
-
-Il faut bien sûr remplacer `/home/chimrod/` par le chemin sur votre
-installation : celui-ci doit être écrit en absolu pour le bon fonctionnement de
-findlib.
-
-Le répertoire de configuration peut être exporté via une variable shell, ce qui
-va nous faciliter la vie ; il ne nous reste plus qu'à référencer ce fichier de
-configuration dans notre environnement :
-
-.. code-block:: bash
-
- export OCAMLFIND_CONF=/home/chimrod/ocaml/ocamlfind.conf
-
-Là encore, remplacer le chemin par celui qui est le votre sur votre système.
-
-On peut mettre cette chaîne dans le fichier `.bashrc` pour que le paramétrage
-soit pris en compte dans chaque session ouverte dans le terminal.
-
-Et le tour est joué : toutes nos nouvelles dépendances vont s'installer
-directement dans notre répertoire personnel, et nous n'avons plus besoin
-d'aller poluer le système avec nos compilation.
diff --git a/content/Informatique/2013-09-13-ocaml_ppx.rst b/content/Informatique/2013-09-13-ocaml_ppx.rst
deleted file mode 100644
index ef0b9c2..0000000
--- a/content/Informatique/2013-09-13-ocaml_ppx.rst
+++ /dev/null
@@ -1,97 +0,0 @@
-.. -*- mode: rst -*-
-.. -*- coding: utf-8 -*-
-
-===========
-ocamlc -ppx
-===========
-
-:date: 2013-09-13
-:tags: ocaml, Programmation
-:summary: |summary|
-:logo: /images/ocaml/recursion_75.jpg
-
-.. figure:: {static}/images/ocaml/recursion.jpg
- :figwidth: 180
- :figclass: floatright
- :alt: Recursivité
-
- Image : `Gadl`_ (creativecommons_)
-
-.. _Gadl: http://www.flickr.com/photos/gadl/279433682/
-.. _creativecommons: http://creativecommons.org/licenses/by-sa/2.0/deed.fr
-
-|summary|
-
-.. |summary| replace::
- Les langages homoïconiques ont quelque chose de fascinant : pouvoir
- représenter le programme sous la forme d'une donnée capable d'être traitée
- par le programme nous entraîne dans un jeu de mirroirs qui se réfléchissent
- eux-même, et me donne un peu le vertige… La nouvelle version d'OCaml
- présente une option de préprocessing qui s'en rapproche.
-
-Selon `wikipédia`_ un langage homoïconique à la particularité de pouvoir être
-représenté comme une donnée du programme. Cela permet de transformer le langage
-(lui donner de nouvelles fonctionalités) en utilisant un autre programme fait
-dans le même langage. Un programme lisp peut ainsi se modifier durant son
-exécution, de la même manière, un fichier xsl peut s'appliquer sur un autre
-fichier xsl (puisque xslt_ est décrit sous la forme de fichiers xml)…
-
-.. _wikipédia: https://fr.wikipedia.org/wiki/Homoiconicit%C3%A9
-.. _xslt: https://fr.wikipedia.org/wiki/Extended_stylesheet_language_transformations
-
-OCaml 4.01 est sorti !
-======================
-
-OCaml vient de sortir en version 4.01, et présente dans ses nouveautés, une
-nouvelle option qui s'active à la compilation :
-
-
- :-ppx command: After parsing, pipe the abstract syntax tree through the
- preprocessor command. The format of the input and ouput
- of the preprocessor are not yet documented.
-
-Qu'est-ce que cela signifie ? Qu'après avoir interprété le programme source et
-construit l'arbre syntaxique du langage, le compilateur appelle un autre
-programme en lui transmettant cette représentation en paramètre. À cette étape,
-le compilateur a juste vérifié que la syntaxe était `valide`, mais il n'a pas
-encore vérifié le programme.
-
-Le programme appellé peut alors modifier la représentation du code source, et
-**doit** donner en retour un programme OCaml valide (si l'on veut que le code
-compile…). Cela permet d'étendre la syntaxe du langage en se basant sur des
-éléments de syntaxe valides pour mettre en place un `langage dédié`_ (par
-exemple). Est-ce que cela fait d'OCaml un langage homoïconique ? Non, car cela
-n'est prévu pour être le cœur d'OCaml, mais cela lui donne un aspect
-homoïconique et de nouvelles perspectives dans l'évolution du langage.
-
-Le principal avantage vient du fait que le langage OCaml est TRÈS fortement
-typé, et refusera de compiler si une erreur s'est glissée dans la cohérence du
-programme. On peut donc modifier le programme sans crainte de provoquer une
-erreur dans la structure de celui-ci.
-
-.. _langage dédié: https://fr.wikipedia.org/wiki/Domain-specific_programming_language
-
-Des exemples
-============
-
-OMonad_ est une extension qui donne ainsi à OCaml la possibilité de traiter les
-monades selon la syntaxe issue d'Haskell.
-
-.. _OMonad: http://danmey.org/omonad.html
-
-`ppx tools`_ est une librairie qui permet de construire sa propre extension,
-écrite par Alain Frish, l'auteur à qui l'on doit cette nouvelle option. Il
-décrit son besoin et son usage sur son blog_.
-
-.. _ppx tools: https://github.com/alainfrisch/ppx_tools
-.. _blog: http://www.lexifi.com/blog/syntax-extensions-without-camlp4-lets-do-it
-
-Certe, il était déjà possible de faire des choses `très amusantes`_ avant ça,
-mais cela restait encore expérimental. Maintenant, cela devient beaucoup plus
-accessible. Je ne connais pas beaucoup de langages qui poussent aussi loin la
-possibilité de modifier le compilateur pour l'adapter à ses besoins, et rien
-que pour ça, je trouve ça fun ! |:-)|
-
-.. _très amusantes: https://bitbucket.org/camlspotter/compiler-libs-hack
-
-.. |:-)| image:: {static}/images/icons/face-smile.png