Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : Astuces

La programmation parallèle avec python

Pierre-Yves Chibon

source.png

Un petit exemple basique de programmation parrallèle avec python

French version (English version)

L'autre jour je me suis penché sur la programmation asynchrone avec java et je suis tombé sur cet article : Asynchronous processing in Java applications – leveraging those multi-cores

Article vraiment clair et intéressant sur la programmation asynchrones avec Java.

Mais bon, mon langage de prédilection étant python, j'ai bien sûr cherché s'il était possible d'en faire autant avec.

Après quelques recherches sur internet je suis arrivé sur parallelpython, une petite bibliothèque python qui permet de faire de la programmation asynchrones facilement.

Revenons au début, quel est le but de la programmation asynchrones ? L'idée est de pouvoir faire plusieurs choses en même temps, de lancer plusieurs tâches en parallèles.

Commençons avec un script basique qui appelle deux fois une fonction qui attends 5 secondes avant de nous dire qu'elle a fini.

#!/usr/bin/python
 
"""
Exemple de programme python non-asynchrone.
"""
 
import time
 
def background_stuff(num):
  time.sleep(5) # wait 5 seconds
  return "%s J'ai fini" % num
 
if __name__ == "__main__":
    print "Commence a :" , time.asctime(time.localtime())
 
    print "Je commence"
    print background_stuff(1)
    print "Je fais quelque chose..."
    print " ... et autre chose..."
    print background_stuff(2)
 
    print "Fini a :", time.asctime(time.localtime())

L'idée est donc d'avoir une sortie comme ceci :

Commencé à : <date and time>
Je commence
Je fais quelque chose
 ... et autre chose...
1 J'ai fini
2 J'ai fini
Fini à: <date and time>

Mais c'est cette sortie que l'on obtient :

Commencé à : Fri Aug 19 13:35:15 2011
Je commence
1 J'ai fini
Je fais quelque chose
 ... et autre chose...
2 J'ai fini
Fini à: Fri Aug 19 13:35:25 2011

Donc python attend que la première fonction finisse avant de continuer. C'est le comportement par défaut, séquentiel et comme vous pouvez voir il faut 10 secondes pour éxécuter ce programme.

Mais bon on peux faire mieux que ça et on va re-écrire le programme pour faire appel aux fonctions en parallèle.

D'abord on installe la bibliothèque python voulue:

yum install python-pp

Et voici notre nouveau script

#!/usr/bin/python
 
"""
Exemple de programme python asynchrone.
"""
 
import pp
import time
 
def background_stuff(num):
  time.sleep(5)
  return "%s J'ai fini" % num
 
if __name__ == "__main__":
    print "Commence a :" , time.asctime(time.localtime())
    job_server = pp.Server()
 
    print "Je commence"
 
    f1 = job_server.submit(background_stuff, (1,) , modules=('time',))
    f2= job_server.submit(background_stuff, (2,), modules=('time',))
    print "Je fais quelque chose..."
    print " ... et autre chose..."
 
    print f1()
    print f2()
 
 
    print "Fini a :", time.asctime(time.localtime())

Les lignes importantes sont

import pp

On charge la bibliothèque parallel-python

job_server = pp.Server()

On crée un serveur de tâches.

f1 = job_server.submit(background_stuff, (1,) , modules=('time',))

On soumet une tâche au serveur.

Le premier argument est le nom de la fonction appelé, le second est un tuple des arguments à passer à la fonction et le troisième (dans cette exemple) est un tuple des bibliothèques python que la fonction doit avoir chargé. À noter que si la fonction background_stuff avait la ligne "import time" alors le troisième argument ne serait pas nécessaire.

Et maintenant la sortie est :

Commence a : Fri Aug 19 14:20:05 2011
Je commence
Je fais quelque chose...
 ... et autre chose...
1 J'ai fini
2 J'ai fini
Fini a : Fri Aug 19 14:20:10 2011

Comme vous pouvez voir, nous avons appelé deux fois la fonction background_stuff, fait quelque chose pendant qu'elle tournait, récupéré la sortie de la fonction et le tout en 5 secondes !

New repoquery

Pierre-Yves Chibon

rpm.png

The new version of repoquery can do nice things.

English version (French version)

You might remember that sometime ago I played a bit with dependency tree, I have made it up to propose a patch to yum-utils to change repoquery directly.

This patch has been accepted and is now part of the latest version (v1.1.31) of yum-utils (currently in updates-testing).

There has therefore been quite some changes in repoquery. The old function --tree-* while still present and still working are no longer displayed in the --help.

In order to generate a similar output the command has changed to:

 for --tree-requires -> --requires --output=ascii-tree
 for --tree-conflicts -> --conflicts --output=ascii-tree
 for --tree-obsoletes -> --obsoletes --output=ascii-tree
 for --tree-whatrequires -> --whatrequires --output=ascii-tree

But you remember the last time you run --tree-requires R or something similar ? The output is really really big.

With this new version of repoquery comes the --level argument which enables you to specify how many levels you want to see (1,2,3..., all). So you can do

$ repoquery --requires R --output=ascii-tree --level=1
  R-2.13.1-1.fc15.x86_64 [cmd line]
   \_  R-devel-2.13.1-1.fc15.i686 [1: R-devel = 2.13.1-1.fc15]
   \_  R-devel-2.13.1-1.fc15.x86_64 [1: R-devel = 2.13.1-1.fc15]
   \_  libRmath-devel-2.13.1-1.fc15.i686 [1: libRmath-devel = 2.13.1-1.fc15]
   \_  libRmath-devel-2.13.1-1.fc15.x86_64 [1: libRmath-devel = 2.13.1-1.fc15]

or

$ repoquery --requires R --output=ascii-tree --level=2 
  R-2.13.1-1.fc15.x86_64 [cmd line]
   \_  R-devel-2.13.1-1.fc15.i686 [1: R-devel = 2.13.1-1.fc15]
   |   \_  R-core-2.13.1-1.fc15.i686 [1: R-core = 2.13.1-1.fc15]
   |   \_  R-core-2.13.1-1.fc15.x86_64 [1: R-core = 2.13.1-1.fc15]
   |   \_  bzip2-devel-1.0.6-3.fc15.i686 [1: bzip2-devel]
   |   \_  bzip2-devel-1.0.6-3.fc15.x86_64 [1: bzip2-devel]
   |   \_  gcc-c++-4.6.0-10.fc15.x86_64 [1: gcc-c++]
   |   \_  gcc-gfortran-4.6.0-10.fc15.i686 [1: gcc-gfortran]
   |   \_  gcc-gfortran-4.6.0-10.fc15.x86_64 [1: gcc-gfortran]
   |   \_  libX11-devel-1.4.3-1.fc15.i686 [1: libX11-devel]
   |   \_  libX11-devel-1.4.3-1.fc15.x86_64 [1: libX11-devel]
[...]
   \_  R-devel-2.13.1-1.fc15.x86_64 [1: R-devel = 2.13.1-1.fc15]
   |   \_  R-core-2.13.1-1.fc15.i686 [1: R-core = 2.13.1-1.fc15]
   |   \_  R-core-2.13.1-1.fc15.x86_64 [1: R-core = 2.13.1-1.fc15]
   |   \_  bzip2-devel-1.0.6-3.fc15.i686 [1: bzip2-devel]
[...]

But I promised repoquery could make us some pictures so check this:

$ repoquery --requires fedora-packager --output=dot-tree --level=2 > fedora-packager.dot
$ twopi -Tpng fedora-packager.dot -o fedora-packager-twopi.png

This gives you this nice pictures: fedora-packager-twopi.png

Another example:

$ repoquery --requires --output=dot-tree --level=1 R-Biobase R-tkWidgets R-DynDoc R-widgetTools > Rtree.dot
$ dot -Tpng Rtree.dot -o Rtree-dot.png

Which gives you this nice graph showing nicely the order in which this packages can be built: Rtree-dot.png

Une nouvelle version de repoquery

Pierre-Yves Chibon

rpm.png

La nouvelle version de repoquery permet de faire des choses amusantes.

French version (English version)

La nouvelle version de repoquery (v1.1.31, dans updates-testing) inclut un patch que j'ai soumis suite à mes essais sur les graph de dépendances.

Avec cette version les commandes changent un petit peu puisque même si toutes les commandes --tree* sont encore disponible et fonctionnelles, elles ne sont plus affiché dans le --help.

À la place, vous devez maintenant spécifier le format de sorti:

 for --tree-requires -> --requires --output=ascii-tree
 for --tree-conflicts -> --conflicts --output=ascii-tree
 for --tree-obsoletes -> --obsoletes --output=ascii-tree
 for --tree-whatrequires -> --whatrequires --output=ascii-tree

De même, vous pouvez en limiter la taille:

$ repoquery --requires R --output=ascii-tree --level=1
  R-2.13.1-1.fc15.x86_64 [cmd line]
   \_  R-devel-2.13.1-1.fc15.i686 [1: R-devel = 2.13.1-1.fc15]
   \_  R-devel-2.13.1-1.fc15.x86_64 [1: R-devel = 2.13.1-1.fc15]
   \_  libRmath-devel-2.13.1-1.fc15.i686 [1: libRmath-devel = 2.13.1-1.fc15]
   \_  libRmath-devel-2.13.1-1.fc15.x86_64 [1: libRmath-devel = 2.13.1-1.fc15]

Enfin vous pouvez en faire des image:

$ repoquery --requires fedora-packager --output=dot-tree --level=2 > fedora-packager.dot
$ twopi -Tpng fedora-packager.dot -o fedora-packager-twopi.png

Ce qui vous donne: fedora-packager-twopi.png

Un autre exemple:

$ repoquery --requires --output=dot-tree --level=1 R-Biobase R-tkWidgets R-DynDoc R-widgetTools > Rtree.dot
$ dot -Tpng Rtree.dot -o Rtree-dot.png

Ce qui retourne cette image, montrant les dépendances entre les paquets: Rtree-dot.png

A simple pygtk R console

Pierre-Yves Chibon

source.png

A simple pygtk R console with callback

Une petite interface en pygtk pour R avec affichage des sorties de R dans la fenêtre

English version

Yesterday with the help of Haikel I have made a small interface for R using pygtk. The Window was design with glade, it is a really simple interface: RGUI

User can enter their command in the input field, press the button and the given command will be run in R.

The interface between R and python is made using the rpy2 library.

The tricky part was to actually output the results from R directly in the gtk window as their are generated, in other word, showing the output of the function before the end of the function as some R commande can take a little while.

For this Haikel pointed me to the rpy2 documentation which allows callback from the R terminal. This way one can redirect the output from R into the gtk window. So here is the magic:

def callbackFunction(self, x):
    """ Function which redirect the output from R to the gtk window """
    if self.gtkbuffer is None:
        print x
    else:
        self.gtkbuffer.insert(self.gtkbuffer.get_end_iter(), x)
        while gtk.events_pending():
            gtk.main_iteration()

 def runR(self, cmd):
     """ 
     Function runs in R the given command and set the redirection 
     of the output 
     """
     if len(cmd) > 0:
         self.addToText("> %s" %cmd)
         rinterface.set_writeconsole(self.callbackFunction)
         robjects.r("%s" %cmd )
         # restore default function
         rinterface.set_writeconsole(rinterface.consolePrint)

The glade file and the full python code are available there:

Results ? See: Rcmd.png

Remplacer ses logiciels GTK par des équivalents QT dans KDE (Fedora).

Corentin Perard Alors voilà. J’ai eu une grosse période KDE. C’est fini, rassurez-vous, je vais mieux . Au début j’ai eu un peu de mal à me séparer de ces fidèles amis qu’étaient Firefox, Thunderbird, Emesene, Filezilla, Gparted. Compliqué de trouver LE … Continuer la lecture

Trackpoint and mouse wheel on Fedora 13

Pierre-Yves Chibon

How to configure your trackpoint to emulate mouse wheel on Fedora 13

Comment configurer le troisième bouton de votre trackpoint pour émuler la roulette de la souris sous Fedora 13

English version

Some time ago I posted how to configure the trackpoint to emulate the mouse wheel on Fedora 11.

However, with the new release of Fedora, this configuration does not work anymore, as explained in the documentation.

So there is the new protocol to emulate the mouse wheel with the trackpoint:

  • Create a file /etc/X11/xorg.conf.d/mouse.conf
  • Put this into it:
Section "InputClass"
  Identifier     "Wheel Emulation"
  MatchIsPointer "on"
  MatchProduct   "TrackPoint"
  Option         "EmulateWheelButton" "2"
  Option "EmulateWheel" "on"
EndSection
  • Restart X

And there you go ! The middle click + the trackpoint emulate a mouse wheel.




French version

Il y a quelques temps j'avais posté comment émuler la roulette de la souris sur un trackpoint via hal.

Cependant avec le dernier hopus de Fedora, cette configuration ne fonctionne plus, comme décrit dans la documentation.

Donc maintenant pour émuler la roulette de la souris sur un trackpoint il faut faire:

  • Créer le fichier /etc/X11/xorg.conf.d/mouse.conf
  • Y mettre:
Section "InputClass"
  Identifier     "Wheel Emulation"
  MatchIsPointer "on"
  MatchProduct   "TrackPoint"
  Option         "EmulateWheelButton" "2"
  Option "EmulateWheel" "on"
EndSection
  • Redémarrer X

Et voila ! Le bouton du milieu + le trackpoint vous permettent d'émuler la roulette de la souris.

Gnome-shell

Carlos Vassalo Parmis les nouveautés de Gnome 3.0, il y en aura une de taille : gnome-shell. Pour les impatients ou ceux qui sont tout simplement curieux, sachez qu’on peut dors et déjà le tester avec Gnome 2.28. Ne l’ayant pas testé sous F11, je ne parlerais ici que de mes tests exécutés sous Rawhide. On installe [...]

NetworkManager – Sortie d'une mise en veille et/ou hibernation.

Carlos Vassalo Ceux qui ont un PC compatible avec la mise en veille et/ou l’hibernation fonctionnelle(s), se plaignent souvent de problèmes de connexion au réseau après la sortie de celle(s)-ci. Il existe pourtant un moyen fort simple de contourner ce problème. Je ne garanti pas que ça fonctionnera pour tous les utilisateurs, mais ça résoudra le problème [...]

Plymouth

Carlos Vassalo A deux jours de la sortie de la preview de F10 (sauf retard de dernière minute) et vu l’engouement actuel pour Plymouth, le remplaçant de RHGB, nous allons voir comment changer le thème par défaut… Les thèmes disponibles sont, une fois installés avec notre gestionnaire de packages habituel, stockés dans /usr/lib/plymouth/. Par défaut, c’est le [...]

fedora 9 – NetworkManager

Carlos Vassalo Lors de monde mon précédent billet sur NetworkManager, je vous parlais d’une nouveauté fort plaisante pour F10. Elle est maintenant disponible également sous F9.

Gnome – Fenêtre de déverrouillage d’écran

Carlos Vassalo Sous gnome, vous aurez sans doute remarqué que la fenêtre pour déverrouiller l’écran est un peu simpliste : On aimerait bien avoir une fenêtre plus évoluée et design mais on ne sait pas trop comment s’y prendre, ni si c’est possible… En fait, non seulement c’est possible comme on peu en plus changer très facilement son apparence. [...]

fedora 10 – NetworkManager

Carlos Vassalo Pour la F10, NetworkManager nous fourni, entre autres, une nouveauté que j’apprécie particulièrement : La possibilité de choisir un réseau sans fil déjà existant. Jusqu’à présent, quand on cliquait sur se connecter à d’autres réseaux sans fil…, on avait la fenêtre suivante : Ce qui impliquait que pour se connecter à un réseau existant, il fallait re-saisir [...]

Touchpad sous fedora 9

Carlos Vassalo Il y a beaucoup de touchpads qui ont le tapper=cliquer qui ne fonctionne pas “out of box” dans fedora 9. Si c’est votre cas, vous devez éditez votre fichier /etc/X11/xorg.conf : 1 - dans la section ServerLayout ajoutez le InputDevice pour le touchpad. 2 - Créer la section InputDevice correspondante au touchpad. Voila à quoi votre fichier doit [...]

Touchpad sous fedora 9

Carlos Vassalo Il y a beaucoup de touchpads qui ont le tapper=cliquer qui ne fonctionne pas « out of box » dans fedora 9. Si c’est votre cas, vous devez éditez votre fichier /etc/X11/xorg.conf : 1 – dans la section ServerLayout ajoutez le InputDevice pour le touchpad. 2 – Créer la section InputDevice correspondante au touchpad. Voila à quoi votre fichier doit [...]

Installer skype via yum sous Fedora

Inal Djafar Une méthode qui va vous permettre d’installer skype via yum, je là trouve plus intéressante et plus facile et ça vous permettra de rester à jour avec les dernières versions stables. Cette méthode consiste à ajouter un repo Skype et l’installer tout simplement via yum. La manœuvre : 1- Passez en mode root : $su [...]