déc 26 2008

Écrire des formules mathématiques avec Pidgin

pidgintex en actionLa messagerie instantanée, c’est bien, mais c’est assez limité, notamment lorsqu’il s’agit de parler de maths ou de physique et que l’ont doit s’échanger des formules plus ou moins complexes. Avant, c’était fastidieux, il fallait essayer d’écrire ça en texte, c’était rapidement le bordel. Heureusement, lionel m’a montré pidgintex. Ce plugin, destiné comme son nom l’indique à Pidgin, permet d’envoyer des formules en LaTeX à son correspondant, qui seront automatiquement transformées en images (pour peu qu’il ait lui aussi activé ledit plugin), grâce à mimeTeX ou mathTeX. En plus de ça, il est largement personnalisable et s’installe très facilement, comme je vas le détailler ensuite.

Installation

Rien de bien sorcier, rassurez vous. La première chose à faire est d’installer mimeTeX et libpurple-dev (les joies d’apt : vous n’avez qu’à cliquer :) ). Il faut ensuite télécharger et décompresser les sources du plugin disponibles ici, avec par exemple la commande suivante ;

wget http://pidgintex.googlecode.com/files/pidginTeX-1.0.6.tar.gz && tar -zxvf pidginTeX-1.0.6.tar.gz

Finalement, il suffit de descendre dans le répertoire ainsi décompressé et d’installer le plugin, à l’aide de la commande :

cd pidginTeX-1.0.6 && make install

La plugin est désormais installé, il suffit de l’activer dans Pidgin (il suffit pour cela d’aller dans Outils → Plugins et de cocher la case à gauche de « pidginTeX »). Vous pouvez, dans cette même fenêtre « Plugins », configurer l’extension en cliquant sur « Configurer le plugin ». N’oubliez pas, cependant, que votre correspondant ne verra vos formules que s’il a lui aussi installé pidginTeX (dans le cas contraire, il ne verra que le code LaTeX).


oct 27 2008

Un petit solveur de sudokus…

Les sudokus, ces petites grilles carrées qui envahissent nos journaux et magazines depuis quelques années maintenant, ont donné naissance à de nombreux logiciels dont l’unique but est leur résolution. Appelés de façon barbare « solveurs », ces programmes sont désormais légion, qu’ils soient en C, en C++, en Python, en Java, et j’en passe. Aujourd’hui, je suis tombé (sans me faire mal) sur une de ces bêtes, mais particulièrement étonnante pour le coup ; un solveur de sudokus en Python… qui tient en quatre lignes !
Voici sans plus tarder l’exploit, dont je ne connais l’auteur :

#! /usr/bin/env python
# -*- coding: utf-8 -*-

def r(a):
    i = a.find(‘0’)
    if i<0: print a
    [m in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3) or a[j] for j in range(81)]
    or r(a[:i]+m+a[i+1:]) for m in `14**7*9`]

En envoyant une chaîne de 81 chiffres à la fonction r, qui correspondent à la grille de sudoku avec 0 à la place des inconnues, cette dernière affiche une chaîne de 81 chiffres où, miracle, les 0 sont remplacés par les bonnes valeurs.

Certes, la méthode est tout ce qu’il y a de plus bourrin, du brute force au sens strict du terme, mais ça a la don de marcher et de ne tenir qu’en quatre lignes.

Comment ça marche ?

Si j’aère un peu le code, et que je l’explique un peu, ça sera sans doute plus clair :

#! /usr/bin/env python
# -*- coding: utf-8 -*-

# On va donc définir une fonction r qui, appelée récursivement, va résoudre
# nos sudokus.

def r(a):
    i = a.find(‘0’) # On cherche le premier 0 de la chaîne, donc le premier
                    # "trou" du sudoku duquel on va chercher la valeur.
    if i<0: print a  # Si il n’y en a pas, c’est que le sudoku est résolu
                     # (donc find renvoie -1) ; on l’affiche.

    # C’est là que ça devient génial. Savant mélange de compréhension
    # et de or, on se retrouve avec quelque chose de très compact mais
    # de diablement efficace que je détaille en dessous.
    [m in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3) or a[j] for j in range(81)]
    or r(a[:i]+m+a[i+1:]) for m in `14**7*9`]

En fait, on va dans un premier temps parcourir la grille de sudoku pour faire une liste de valeurs impossibles pour la case en cours. Cela se fait par le code suivant :

valeurs_impossibles = [(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3) or a[j] for j in range(81)]
 

Pour chaque naturel j de 0 à 80, on ajoute à la liste valeurs_impossibles (i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3) ou, si cette expression est fausse, a[j]. La liste contient donc les valeurs des cases de la ligne, de la colonne et du carré où se situe i, en plus de valeurs farfelues largement supérieures à 9 qui ne nous intéresse donc pas (le résultat de (i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3) dans le cas où il est non nul, en fait). On obtient donc une liste de valeurs impossibles pour i.

[m in valeurs_impossibles or r(a[:i]+m+a[i+1:]) for m in "123456789"]
 

On regarde pour chaque chiffre m si il est dans la liste valeurs_impossibles. Si ce n’est pas le cas (or), on appelle la fonction r en lui envoyant la nouvelle grille où on a placé m dans la case i.
Enfin, dernier détail, dans le code original on a `14**7*9` et non « 123456789 ». En fait, ça revient au même, puisque 14**7*9 = 948721536, on a donc dans les deux cas une chaîne de tous les chiffres sauf zéro (l’ordre n’a pas d’importance). Seulement, `14**7*9` comporte deux caractère de moins par rapport à « 123456789 », utile quand on veut faire le plus petit solveur ;) .
Grâce à la récursivité, on teste ainsi toutes les combinaisons possibles, au détriment de l’optimisation, mais on est sûr de trouver, si elle existe, la solution à notre sudoku (reste à savoir en combien de temps !). Factorisé au maximum, le code tient en quatre lignes, une prouesse permise par la puissance du langage de programmation Python.


août 13 2008

LHC : rendez-vous le 10 septembre

Ça y est presque. Dans un communiqué de pesse diffusé la 7 août dernier, le CERN annonce officiellement que le LHC accélérera son premier faisceau le mercredi 10 septembre. En construction depuis 1994, cet accélérateur de particules va donc enfin rentrer en service, avec près de huit années de retards, détrônant le Tevatron américain de son statut de plus puissant accélérateur du monde. Le grand collisionneur de hadrons (Large Hadron Collider), long de 27 km, va en effet accélérer des protons jusqu’à une énergie de 7 TeV (soit une vitesse qui correspond à 99,9999991 % de la célérité de la lumière dans le vide). Avec une énergie d’injection de 450 GeV, le premier faisceau devrait être accéléré jusqu’à une énergie de 5 TeV. L’accélération de faisceau jusqu’à l’énergie maximale de 7 TeV est, elle, prévue pour 2010.

État de refroidissement du LHC

Le sprint final a commencé il y a quelques mois, avec le début du refroidissement de la machine. Il faut en effet amener les 8 secteurs à une température de 1,9 K, notamment grâce à l’hélium superfluide, afin de pouvoir exploiter pleinement les électro-aimants chargés de maintenir les protons sur leur trajectoire. Il a ensuite fallu synchroniser le LHC avec le SPS (Supersynchrotron à Protons). Le SPS est l’accélérateur qui va amener les faisceaux jusqu’à l’énergie de 450 GeV, avant de les injecter dans le LHC. Ces deux machines doivent être parfaitement coordonnées (la marge d’erreur est de l’ordre d’une fraction de nanoseconde, selon le communiqué). Les tests du système de transfert de rayon du SPS vers le LHC dans le sens des aiguilles d’une montre se sont déroulés avec succès le week-end dernier ; ceux destinés à tester le système d’injection dans le sens inverse des aiguilles d’une montre sont prévus le week-end du 22 août.

Faisceau de particules dans le LHC.

Les physiciens attendent beaucoup du LHC, qui sera exploité au travers de 4 détecteurs : ATLAS, CMS, LHCb et ALICE. Ils espèrent notamment découvrir le boson de Higgs, pièce qui manque au puzzle du modèle standard et qui expliquerait pourquoi certaines particules ont une masse, et d’autres, comme le photon, n’en ont pas. Ce qui est sûr c’est qu’en collisionnant deux faisceaux de 5 TeV, le LHC offrira aux yeux des physiciens un monde nouveau, encore inexploré et qui pourrait réserver bien des surprises (mais absolument sans danger, contrairement à ce que pourraient laisser entendre quelques troubles-fêtes à l’inculture latente).

C’était il y a 688 jours !


juin 4 2007

Le calcul distribué avec BOINC.

Aujourd’hui je vais m’atteler à la lourde tâche qu’est la description de la plus célèbre plate-forme de calcul distribué : BOINC. Présentation, installation, utilité : tout y passera ! Ou presque :P

BOINC ? Calcul distribué ?

BOINC n’est ni plus ni moins qu’un programme informatique développé par une université américaine (Berkley). Ce logiciel, le « client », est chargé de gérer différentes « applications » qui ne sont rien d’autre que de simples (tout est relatif :D ) programmes de calcul. Le but est en fait d’utiliser la puissance de votre ordinateur couplée à celle des tous les autres PCs participant au projet pour faire des calculs complexes afin de faire avancer la science. C’est vous qui choisissez les projets que vous souhaitez aider, et là : le choix est vaste ! Plusieurs projets dans de nombreux domaines ont besoin de vous ; analyser des données collectées par des télescopes, trouver de grands nombre premiers, étudier les effets du réchauffement climatique, … Tout ça pour faire avancer la physique, les maths, l’astronomie, et j’en passe !
Et dans la pratique, comment ça se passe ? En fait, c’est très simple. Vous installez le client (BOINC, donc), vous entrez les projets auxquels vous souhaitez participer et vous faites ce que vous voulez de votre ordinateur ! En effet, ce dernier va, grâce au net, télécharger comme un grand les calculs qu’il doit faire et, toujours grâce à internet, il va envoyer les résultats. Vous pensez que les performances de votre PC vont en pâtir ? Rassurez-vous : BOINC n’utilise que ce que vous n’utilisez pas déjà ! Et ne pensez pas que BOINC est un logiciel de vieux geek altéré, il est utilisé par plus d’un million de machines dans le monde ; pourquoi ne pas l’essayer ?

Installer le client : BOINC.

Comme annoncé dans la partie précédente, pour pouvoir gérer les calculs il vous faut le programme « client » : BOINC. Il se trouve dans les dépôts Ubuntu ; il vous suffit donc de taper dans une console :
sudo apt-get install boinc-client boinc-manager
et le tour est joué. BOINC est accessible via le menu Applications ⇒ Accessoires ⇒ BOINC Manager. En fait, vous avez installé le client (qui se charge tout seul au démarrage), et l’interface graphique. Vous n’êtes donc pas obligé de garder la fenêtre ouverte pour que votre ordinateur calcul ; ce n’est qu’une interface graphique.
Bon et puis comme je suis sympa, amis windowsiens & maceux, le logiciel est aussi disponible ici.

Pour qui calculer ?

Maintenant que le client est installé, il va falloir trouver des calculs ;) . Vous allez donc choisir à quels projets vous souhaitez participer. Chaque projet dispose d’un site internet qui servira à l’attacher à votre client. Prenons par exemple le célèbre Seti@home ; ce projet à besoin de vous pour analyser les données d’un télescope en vue de détecter une quelconque vie extraterrestre. Son site est http://setiathome.berkeley.edu/. Pour l’attacher à votre client, ouvrez BOINC. Allez dans Outils ⇒ Rejoindre un projet. Lisez la petite introduction et cliquez sur « Suivant ». Là, un champ texte attends que vous donniez l’adresse du site de votre projet. Rien de plus simple, tapez http://setiathome.berkeley.edu/ puis cliquez sur « Suivant ». Le client vérifie de quel projet il s’agit. Il affiche ensuite un formulaire. Vérifiez que le bouton « Non, nouvel utilisateur » est bien coché. Si ce n’est pas le cas, faites le. Entrez ensuite votre email et un mot de passe et… cliquez sur « Suivant » ! Le client va à nouveau communiquer avec le projet et, si tout se passe bien, votre navigateur s’ouvre sur le site du projet qui vous demande quelques informations supplémentaires. Vous pourrez accéder ensuite à votre compte pour ce projet dans l’onglet « Projets » du BOINC Manager (cliquez sur le nom et dans le menu de gauche sur « Votre compte » ou sur le nom pour accéder au site). Vous voilà attaché au projet, BOINC calcul certainement déjà. Chaque unité de travail (WU, pour Work Unit) est téléchargée, calculée puis renvoyée. Vous pouvez voir les unités de travailles qui vous ont été envoyée dans l’onglet « Tâches ». Vous y retrouvez le nom du projet, le temps restant, la date limite d’envoi (date avant laquelle il faut avoir fini les calculs, sinon ils ne seront pas comptabilisés) et l’état. Vous pouvez répéter l’opération pour vous attacher à plusieurs projet. Sachez aussi que BOINC ne calculs pas toutes les WUs en même temps : il en calcul une pendant un temps donné, puis une autre pendant un temps donné (qui n’est pas forcement le même), etc. Il faut aussi savoir que plus vous avez de projet, plus le temps pour calculer une WU sera long (logique, puisque plus de travail).
Concernant les WUs, il se peut que certains projet n’est momentanément plus besoin de vous (cela peut durer de quelques minutes à quelques années :P ). Ils ne vous envoient donc plus de travail. En tout cas, pour être sûr de calculer dès que possible, cochez la case « Toujours calculer » du menu « Activité ».

Je gagne quoi ?

Rien ! Vous aiderez la science, c’est déjà pas mal :D . Mais bon, pour mettre un peu de piment dans l’affaire, à chaque calcul achevé avec succès vous sera envoyé un peu de crédit (qui ne sert à rien à part à faire des classements :P ). Vous pourrez donc comparer les pays entre eux, savoir qui calcul plus ou moins que vous, et même intégrer une équipe dont le seul et unique but (gnarf gnarf !) est de s’emparer de la première place… En parlant d’équipe, vous n’en avez pas… encore ! La plus importante équipe francophone est l’Alliance Francophone (ça ne s’invente pas ;) ), je vous propose donc d’y entrer. Pour cela, sur les sites des projets où vous êtes sans équipes, rendez vous dans votre compte (« Your Account »). Quelque part sur la page il y a le mot « Team » avec à sa droite « None » (en clair, vous n’avez pas d’équipe :P ). Encore à droite, cliquez sur « Find a team ». Cherchez « L’Alliance » pour trouver « L’Alliance Francophone » (cliquez dessus). Vers le bas de la page, cliquez sur « Join », puis sur « Join team » et ça y est : vous êtes membre de l’Alliance Francophone (au troisième rang mondial, tout de même !). La manœuvre est à réitérer pour chaque projet auquel vous participez.
De plus, chaque membre de l’alliance francophone peut faire partie de « minis-équipes ». Il en existe de nombreuse (team est, équipe de la science, team Linux, …). Encore une fois, le seul but est de faire des classements avec les minis-équipes. Pour devenir membre d’une mini-team, il suffit de modifier son pseudo en quelque chose qui ressemble à ça : [AF>France>Est>Lorraine>Linux] Nicoz.
En clair, mon pseudo (oui, oui, c’est mon mien :P ) est Nicoz, et ce qui est entre crochet indique mes mini-teams. AF pour Alliance Francophone, France (il y a des minis-teams canadiennes, suisses, belges : on ne parle pas le français qu’en France !), Est pour la team Est, Lorraine… Bon, besoin de détails en plus ? Je vous conseille de rajouter au moins : [AF>France>Linux] avant votre pseudo (France si, bien sûr, vous êtes français ;) ).
Pour les statistiques, rendez vous sur http://fr.boincstats.com/.

Voilà, j’espère avoir été clair, la liste de différents projet fera peut-être l’objet d’un prochain billet. Entre temps, calculez bien ;) .

Quelques liens…