Skip to content


Fin

Ce blog n’existe plus (c’est à dire qu’il existera encore moins qu’auparavant, c’est dire). Il est remplacé par mon site personnel http://chadok.info/~oschwand et sa page blog http://chadok.info/~oschwand/blog.html. Un flux atom est disponible à l’adresse http://chadok.info/~oschwand/blog.xml.

Posted in Non classé.

Gestion d’articles

J’ai longtemps cherché une solution simple pour gérer les articles scientifiques que je lis. En effet, un répertoire rempli de fichiers PDF en vrac n’est pas l’idéal pour retrouver le papier lu il y a trois mois et écrit par untel.

Je voulais une application pas en java, sans interface graphique, qui ne dépende pas d’un serveur de base de donnée, qui utilise évidemment bibtex pour le stockage des données et qui permette d’accéder directement au PDF de l’article.

En fait, il existe une solution toute simple: bibtex2html. Il permet de convertir un fichier bibtex en une page web et peut ajouter des liens vers les PDFs si le champ correspondant a été rempli dans la base bibtex. À l’origine, c’est prévu pour présenter une liste de publication sur un site web mais pourquoi ne pas s’en servir juste comme interface avec son stock de publications ?

En bref, voici ce que j’utilise (tout dans un même répertoire) :

  • un fichier Bibtex
  • un Makefile
  • des pdfs nommés de la façon suivante : clé_bibtex.pdf

Le Bibtex ressemble à ça :

@article{bmdg2005,
  title={{Clustering with Bregman divergences}},
  author={Banerjee, A. and Merugu, S. and Dhillon, I.S. and Ghosh, J.},
  journal={The Journal of Machine Learning Research},
  volume={6},
  pages={1705--1749},
  year={2005},
  publisher={MIT Press Cambridge, MA, USA},
  pdf={bmdg2005.pdf}
}

Remarquez le champ “pdf” qui contient le chemin (relatif ici, mais vous mettez ce que vous voulez) vers l’article.

Le Makefile est assez trivial :

see: html
        firefox articles.html

html: articles.bib
        bibtex2html -dl $<

C’est suffisant pour obtenir un fichier html et utiliser les fonctions de recherche du navigateur: exemple ici.

Posted in Escabeau. Tagged with , , , , , .

Wiixjump ou xjump contrôlé à la wiimote

Xjump est l’un des jeux les plus stupides et les plus abrutissant qui soit : un petit bonhomme ridicule qui doit sauter de plate-forme en plate-forme en évitant de tomber. Si vous ne connaissez pas, jetez un œil à la description du paquet debian
http://packages.debian.org/fr/sid/xjump
.

C’est déjà rigolo avec un clavier, alors essayons avec une wiimote !

Voici un patch contre la version 2.7.5 avec les patch debian appliqués (voir le lien précedent pour télécharger le sources, ou alors, apt-get source xjump) :
wiimote.patch

Après avoir appliqué le patch, il faudra le paquet libcwiid1-dev pour compiler le xjump modifié. Il suffit ensuite d’agiter la télécommande pour contrôler le bonhomme.

Désolé, je ne fournis pas de vidéo montrant la chose en action :)

Posted in Eau chaude, Vrac. Tagged with , , .

Déclarations de type façon Haskell en Ocaml

Voici une petite extension de syntaxe pour Ocaml (donc écrite avec camlp4) permettant de déclarer explicitement les types des fonctions, mais avec une syntaxe inspirée de celle de Haskell.

En Ocaml, la façon classique de déclarer un type est la suivante :

let f (x: int) (y: int) : int = x + y

On déclare ainsi une fonction prenant deux arguments de type int et renvoyant un entier.

En Haskell vous feriez ça de la façon suivante:

f :: Int -> Int -> Int
f x y = x + y

Les deux approches ont leur avantages et leurs inconvénients, mais personnellement, je trouve la façon haskellienne plus lisible. Voici donc ce que permet l’extension de syntaxe pa_declare:

declare f : int -> int -> int
[...]
let f x y = x + y

L’intérêt majeur est de pouvoir séparer la déclaration de type de la définition. Évidemment, c’est à ça que servent les fichiers d’interface d’un module (.mli) mais on peut ici déclarer le type de fonctionz qui ne sont pas exportées. Je ne pense pas que ce soit très utile pour les rares cas où on a besoin de noter explicitement un type pour éviter des problèmes lors de l’inférence, non, ça me permet surtout intéressant à des fins de documentation: un lecteur n’a pas à refaire à la main l’inférence de type pour connaître le type d’une fonction. Et contrairement à des commentaires, le typage nous garantit que les <code>declare</code> seront toujours en phase avec le code.

Un dépôt darcs est disponible ici : http://chadok.info/darcs/pa_declare

Posted in OCaml. Tagged with , , , .

Lack

Quelques temps après cet article, Gestion de paquets, côté utilisateur normal, voici une première version publique de Lack, un gestionnaire de paquets qui implémente les idées présentées dans l’article.

Il reste du travail, mais il est déjà possible d’installer simplement des paquets, juste à l’aide de l’url d’un fichier xml qui décrit le logiciel et les commandes de compilation. Allez donc voir le site web.

Ce qui manque :

  • les mises à jour automatisées,
  • la gestion de dépendances,
  • des utilisateurs.

Posted in OCaml.

Gnome-keyring et les bonnes manières

Si le seul rapport que vous entretenez avec Gnome consiste en l’utilisation de son gestionnaire de connexion, gdm, vous avez peut-être à subir à chaque connexion ssh des fenêtres de ce genre :
gnome-keyring
Comme la plupart des non-utilisateurs de Gnome (et une bonne partie de ceux-ci aussi) , vous êtes assez grand pour vous occuper tout seul de vos clés privées et en avez assez de ces messages importuns ?

Le coupable est gnome-keyring (dont gnome dépend) et la lecture de /usr/share/doc/gnome-keyring/README.Debian nous apprend que ce daemon est lancé par gdm, lors de la connexion.

Ça n’est vraiment pas évident à comprendre en lisant ce fichier, mais on se rend compte qu’il existe un module PAM, pam_gnome_keyring.so, chargé de lancer ce truc : c’est à dire qu’il lancé lors de la phase d’authentification. Le fichier de configuration pour gdm est /etc/pam.d/gdm, il suffit de supprimer toutes les lignes qui parlent de pam_gnome_keyring.so pour échapper à cette abomination.

C’est tout simple, mais il m’a fallu 3 mois pour comprendre d’où sortait ce truc.

Posted in Escabeau.

Les petits lutins du nain ternette

Plein de biologistes courent après des bestiaces pour leur coller de joyeux émetteurs un peu partout. D’autres préfèrent rester chez eux et étudier la diffusion d’information sur cette terre pas si nette que ça. Dans un moment de faiblesse, je décidé de contribuer à cette œuvre tour-de-babelistique (ne pas confondre avec ballistique, ou pas).

Pour participer vous aussi, n’hésitez pas à cliquer sur le lien “Spread It” et à bien suivre les instructions.

Sondage : vous aussi, vous trouvez que c’est violet cette chose ? J’hésite entre taper sur des gens pour avoir une couleur qui va mieux avec ce site, ou taper sur mon site pour avoir une couleur qui va mieux avec cette chose.

Posted in Non classé.

Gestion de paquets, côté utilisateur normal

Les systèmes de gestion de paquets traditionnels — apt, rpm, emerge ou autres — ne peuvent être utilisés que par root. Pourtant, il est courant de ne pas être root sur une machine et d’avoir besoin d’installer des logiciels. Quels sont alors les solutions envisageables?

- avoir un root gentil qui accepte d’installer tous les paquets dont on a besoin, et ce, avec une latence suffisamment faible pour que ce soit confortable. Pas sûr non plus qu’il accepte d’installer xjump sur votre lieu de travail.

- pirater le compte root : en général, vous n’aurez plus aucune chance que root soit gentil après ça.

- donner le sudo qui va bien à tous les utilisateurs : seul des jusqu’ubuntistes fanatiques l’envisageront sérieusement.

- tout faire à coup de ./configure –prefix=/home/toto/local. C’est la solution la plus simple mais elle rend pratiquement impossible la désintallation propre ou des mises à jour automatisées.

- utiliser xstow qui installera chaque logiciel dans un sous répertoire de la forme prefix/stow/bla et gérera les liens symboliques comme il faut pour que ce soit utilisable. Pratique pour désinstaller, mais aucune chance d’avoir des mises à jours automatisées avec ça : il faudra encore surveiller les sites webs et télécharger puis installer à la main les nouvelles versions.

- utiliser le mode rootless de Gobolinux. Gobolinux est une distribution linux qui reviste FHS pour faire quelque chose qui ressemble plus à MacOSX. Elle propose en particulier un mode baptisé rootless qui peut s’installer sans être root, comme surcouche à une distribution existante. Tous les paquets sont installés dans un chemin du genre /home/toto/.gobolinux et sont gérés avec les outils de gestion de paquets normaux de gobolinux. Un script fourni se charge de mettre à jours les variables d’environnement qui finissent en PATH.

L’installation d’un paquet se fait avec un simple Compile bla, les mises à jours peuvent se faire d’une seule commande, comme dans un gobolinux normal. De plus, le format des paquets (en fait, de simple fichiers textes appelés recettes) est très simple à comprendre et il est aisé de faire ses propres ajouts. Par contre, le système de gestion des dépendances vous obligera souvent à recompiler tout (en commençant par gcc et la libc) avant d’installer un paquet. Une solution peu élégante consiste à éditer à la main les recettes pour supprimer les dépendances qui sont déjà présentes sur le système.

- utiliser Nix. Ce projet se décrit lui-même comme étant un gestionnaire de paquets purement fonctionnel au sens où toute modification du système est le résultat (de façon déterministe) de l’évaluation d’une expression. Il propose de garantir de façon forte que la description des dépendances est complète (si ça compile, c’est que les dépendances sont suffisantes). On peut l’installer dans son home et bénéfécier des outils fournis pour installer, désinstaller, mettre à jour. L’inconvénient majeur est que le système de traitement des dépendances oblige vraiment à tout recompiler, et là, pas question de bidouiller la liste des dépendances.

Gobolinux me semble pour le moment le système le plus adapté pour une gestion de paquets par un utilisateur simple. Cependant, si on a du temps libre devant soi (beaucoup) et de l’espace disque à profusion, on peut recompiler un système complet avec Nix.

Posted in Roue.

Site d’hébergement de fichiers en un clic

Wikipedia appelle ça des “Site d’hébergement de fichiers en un clic” et le projet Jyraphe veut permettre à n’importe qui de monter ce genre de site.

Que faire si vous n’aimez pas les souris ? Il faudrait des sites d’hébergement en une seule commade, tapée dans un terminal:

Voici un script bash qui se propose de rendre ce service : si vous disposez d’un serveur web, accessible par ssh, il copiera les fichiers passés en argument dans un répertoire doté d’un nom aléatoire et visible à partir du web.

#! /bin/sh</code>
 
SSH_HOST=
BASE_DIR=
BASE_URL=
HTTPD_GROUP=www-data
 
source ~/.poubellerc
 
if [ "$1" = "-f" ]; then
shift;
source $1;
shift;
fi
 
rand=$(dd if=/dev/urandom count=64 bs=1 2&gt;/dev/null | sha1sum | cut -c1-40)
dir=$BASE_DIR/$rand
 
echo $BASE_URL/$rand
 
ssh $SSH_HOST mkdir -p $dir &amp;&amp;
ssh $SSH_HOST touch $dir/../index.html &amp;&amp;
scp $* $SSH_HOST:$dir &amp;&amp;
ssh $SSH_HOST chgrp $HTTPD_GROUP -R $dir &amp;&amp;
ssh $SSH_HOST chmod g+rX -R $dir

La configuration sera placée dans le fichier .poubellerc ou dans un fichier dont le chemin sera donné grâce à l’option -f.

Par exemple, vous pouvez télécharger ce script à l’adresse suivante : http://chadok.info/~oschwand/poubelle/7fb4f3e0be5bcf623b641981c51f742d7b8bf21a/poubelle.sh

Vous pouvez envoyer plusieurs fichiers en même temps, qui seront tous placés dans le même répertoire.

L’url du répertoire sera affichée par le script : à vous de diffuser juste le chemin vers le répertoire, ou une url complète vers un fichier. Cette façon de faire permet d’avoir juste des pages statiques : pas besoin de mémoriser la correspondance hash/nom de fichier et ni d’un script qui fait la traduction au moment du téléchargement.

Comme la sécurité repose sur le secret du nom du répertoire, il faudrait désactiver l’affichage de la liste des fichiers dans le répertoire parent : ici, on se contente de faire un touch sur index.html pour que le serveur ne renvoie pas la liste, mais ce n’est pas vraiment sûr.

Posted in Escabeau.

Quel plaisir de coder en OCaml !


Posted in OCaml.