fedora fr planet
Remi Collet : php-5.4.14
Les RPM de PHP 5.4.14 sont disponibles pour Fedora et pour Enterprise Linux dans le dépôt remi.
Lire l'annonce de version : PHP 5.4.14 and PHP 5.3.24 released! Utilisez YUM pour les installer : yum --enablerepo=remi update php-\* Cette version sera aussi prochainement dans les mises à jour officielles pour : Fedora 18 Fedora 17 Pour Fedora 19, ce sera PHP 5.5 Pour toute question ou demande d'aide, merci d'utiliser les Forums.... Lire php-5.4.14
Remi Collet : Firefox 20
Les RPM de la nouvelle version du navigateur de la Mozilla Foundation sont disponibles dans le dépôt remi pour Fedora 15, 16 et Enterprise Linux 6 (RHEL, CentOS, ...).
A lire : Mozilla Firefox Release Notes (notes de version, en anglais) Installation : yum --enablerepo=remi update firefoxCe paquet utilise désormais xulrunner-last, qui s'installe à côté de celui par défaut. Remarque : ce RPM est très proche de celui de firefox 20 présent dans fedora 17/18/19. Les RPM sont disponibles pour Fedora 14 (x86_64),... Lire Firefox 20
Thomas Bouffon : Awk : pense-bête
- FS,OFS Séparateurs de champs
- NR Numéro de la ligne
- NF numéro de la colonne
Plus d'infos sur http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/
Remi Collet : php-pecl-apcu-4.0.0
APCu, la reprise du code d'APC, nettoyé du cache d'opcode, fournissant une API stable et connu pour le cache des données utilisateur est publiée en version 4.0.0. Les RPM sont disponibles dans le dépôt remi pour Fedora et Enterprise Linux.
Voir le billet : PHP : caches d'opcode et de données Donc je recommande à tous les utilisateurs d'APC de tester cette nouvelle extension qui doit la remplacer de manière transparent pour les applications. Pour les utilisateurs de PHP 5.4 yum remove php-pecl-apcyum --enablerepo=remi install php-pecl-zendopcache php-pecl-apcuPour les utilisateurs... Lire php-pecl-apcu-4.0.0
Paquet Fedora du jour : Mardi Artistique : PosteRazor - Créer ses propres posters !
Ce logiciel est un équivalent à Rasterbator.
Si vous avez un mur à tapisser de posters, PosteRazor peut vous être utile. Ce logiciel vous permet de créer très facilement un poster à partir d'une photo, si possible de grande taille, dont vous n'aurez plus qu'à recoller les morceaux. Linterface de PosteRazor vous guide à travers plusieurs étapes, notamment pour vous aider à régler les marges ou la surface commune à deux parties du poster, ce qui vous permet d'obtenir une surface nécessaire au collage de deux parties.
La taille du poster peut être définie en centimètres, en pourcentage ou en nombre de pages et un aperçu en temps réel du résultat est disponible, les bandes rouges représentant les parties de chaque feuille qui se superposent. Une fois les réglages acceptés, le logiciel crée un fichier PDF contenant toutes les pages du poster que vous n'avez plus qu'à imprimer.
Installation en ligne de commande : yum install posterazor
Installation avec l'interface graphique : Autres > Make your own poster
Localisation dans le menu : Applications > Graphisme
Lancement en ligne de commande : /usr/bin/posterazor
Site web : http://posterazor.sourceforge.net/
Remi Collet : php-pecl-zendopcache-7.0.1
La société Zend (The PHP Company) vient de libérer son cache d'opcode, Zend OPcache est donc dès maintenant disponible dans le dépôt remi pour Fedora et Enterprise Linux (RHEL, CentOS, ...)
On peut dire qu'il s'agit d'une excellente nouvelle. Ce cache est intégré dans PHP 5.5.0beta1. Pour l'installer yum remove php-pecl-apc php-xcache php-eacceleratoryum --enablerepo=remi install php-pecl-zendopcacheservice httpd restartPour les utilisateurs de PHP 5.5.0 (remi-test). yum install php-opcacheN'hésitez pas à le tester. Il manque un... Lire php-pecl-zendopcache-7.0.1
Remi Collet : PHP : cache d'opcode et de données
Une description des solutions existantes et de l'avenir des caches pour l'opcode des scripts PHP et pour les caches des données utilisateur.
1. Cache d'opcode. Il est particulièrement utile, voir indispensable, de disposer d'un cache d'opcode sur un site à fort trafic, ce mécanisme permet de gagner l'étape d'analyse du code lors du chargement d'un script en utilisant le résultat stocké en cache. On gagne généralement jusqu'à 80% du temps d'exécution. 1.1. eAccelerator Site :... Lire PHP : cache d'opcode et de données
Remi Collet : PHP 5.5.0 en préparation
La version 5.5.0beta1 étant publiée, je commence à travailler sur les RPM.
Actuellement les RPM sont disponible pour fedora ≥ 17 et Enterprise Linux ≥ 5 (RHEL, CentOS, ...), dans le dépot remi-test. Ce sera aussi une nouveauté de Fedora 19. Version actuelle : 201303201430 (beta1) Extensions disponibles (28) : php-magickwand-1.0.9 php-pecl-amqp-1.0.9 php-pecl-apc-3.1.15dev (uniquement pour le cache des données... Lire PHP 5.5.0 en préparation
Paquet Fedora du jour : Lundi productif : sysbench : Tester une base de données (MySQL)
L'idée de cet suite de tests de performances et d'avoir très rapidement un retour concernant l'état d'un système de base de données sans devoir configurer un ensemble de données ou de répertorier des requêtes multiples et complexes.
Voici les principales fonctionnalités permettant de remonter les informations suivantes :
* performance des E/S des fichiers
* performance de lordonnanceur
* allocation mémoire et vitesse de transfert
* performance POSIX threads
* performance de bases de données (OLTP benchmark)
Initialement écris pour MySQL, Sysbench a évolué afin de supporter de multiples moteurs de données.
Exemple de commande de préparation :
$ sysbench --test=oltp --db-driver=mysql --mysql-user=user --mysql-password=password --mysql-db=sysbench_table_for_test --mysql-host=host --mysql-table-engine=innodb prepare
Exemple de commande dexécution :
$ sysbench --test=oltp --db-driver=mysql --num-threads=1 --mysql-host=host --mysql-user=user --mysql-password=password --mysql-db=sysbench_table_for_test --max-time=60 --max-requests=0 --oltp-read-only=off run
Je vous laisse faire le tour de cet outil bien pratique et n'hésitez pas à en discuter dans les commentaires ;)" class="smiley !
Installation en ligne de commande : yum install sysbench
Installation avec l'interface graphique : Autres > System performance benchmark
Localisation dans le menu : Non présent
Lancement en ligne de commande : /usr/bin/sysbench
Site web : http://sysbench.sourceforge.net/
Remi Collet : Dotclear 2.5
Ça y est ! La dernière version de Dotclear est installée.
Migration en douceur, aucun problème. Comme d'habitude, j'ai simplement appliqué le patch. Non, je n'utilise pas la fonction intégrée de MAJ qui nécessite des réglages à l'encontre des règles de sécurité. . Mon thème fonctionne parfaitement.... Lire Dotclear 2.5
Remi Collet : php-5.4.13
Les RPM de PHP 5.4.13 sont disponibles pour Fedora et pour Enterprise Linux dans le dépôt remi. Cette version corrige 2 failles de sécurité.
Utilisez YUM pour les installer : yum --enablerepo=remi update php-\* Ces versions seront aussi prochainement des mises à jour officielles pour : Fedora 18 Fedora 17 Pour toute question ou demande d'aide, merci d'utiliser les Forums.... Lire php-5.4.13
Premier Samedi : Avril 2013
Patrice Ferlet : Pool de thread avec limite de parallélisation
Je travaillais cette semaine sur un script python qui récupérait des centaines de milliers de données depuis un serveur. Pour gagner en temps de calcul, j'ai décidé de faire des threads. Limitant la taille de mes tâches parallèles à un nombre spécifique, le script bloquait... car j'utilisais des fonctions threadées qui lançaient récursivement d'autres threads. Sauf que la Queue que j'utilisais pour faire le pool se bloquait si trop de threads se lançaient en même temps attendant indéfiniment que quelqu'un veuille bien lire la Queue... J'ai alors trouvé ma solution, et je la partage avec vous. Je vous explique le problème, je vous montre un exemple, et ensuite on voit la solution.
J'ai cherché un peu partout sur le net, et je n'ai pas trouvé de solution à mon problème. Ainsi, pour vous montrer ce qui coince, je vous ai préparé un exemple de script très simple. Le script suivant lance 5 Threads qui eux même vont en créer... Pour limiter le nombre de tâche parallèles je passe par une classe assez connue (depuis python recipes) qui utilise la classe Queue avec une limite de taille.
Chaque fois qu'on ajoute une tâche dans la classe, la Queue est remplie... les workers vont alors lire en boucle dans cette dernière pour lancer la tâche et les arguments stoqués. Tant que la Queue est remplie, il faut attendre que quelqu'un la lise... sinon l'appel à "put" reste bloqué.
Voici la classe de base que j'ai utilisée (et modifié):
# -*- encoding: utf-8 -*- # file threadingpoolbad.py import logging from threading import Thread from Queue import Queue class ThreadPool: class _ThreadQueue(Thread): def __init__(self, pool, *args, **kwargs): """ Get tasks queue then launch thread """ super(ThreadPool._ThreadQueue, self).__init__(*args, **kwargs) self.tasks = pool.tasks self.daemon = True self.start() def run(self): """ Read tasks from limited size queue, then launch task """ while True: # read bloking Queue .. task,args = self.tasks.get(True) try: task(*args) except Exception, e: logging.exception(e) print "Error" finally: self.tasks.task_done() def __init__(self, num=10): """ Create a limited pool with "num" threads """ self.tasks = Queue(num) for _ in range(num): self._ThreadQueue(self) def add_task(self, target, args): """ Write in unlimited size queue which will be read in "run" method of a thread Block if tasks Queue is full ! """ self.tasks.put((target, args)) def wait_completion(self): """ Wait for tasks to be completed """ self.tasks.join()Voilà comment utiliser cette classe:
import time from threadingpoolbad import ThreadPool def test(pool, num=0): num += 1 print "num is %d" % num if num < 5: pool.add_task(target=test, args=(q, num)) time.sleep(0.5) #create a pool of 2 threads, launch test function pool = ThreadPool(2) pool.add_task(target=test, args=(pool,))Jusqu'ici tout va bien... mais admettons que j'ajoute 5 ou 6 appels à add_task:
# ... #create a pool of 2 threads, launch test function pool = ThreadPool(2) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,))Si vous lancez le test... ça coince. Pour arrêter le script faites CTRL+Z puis "kill %%".
Tout le souci se trouve entre deux méthodes:
- add_tasks qui tente d'écrire dans une queue, l'appel à "put" bloque si la Queue "tasks" est pleine
- dans "run" on libère un espace au moment où la fonction "task" est terminée
Or, dans notre exemple, la fonction "test" ne libère pas la queue de suite, car elle écrit dans la Queue via add_task... mais comme d'autres threads sont aussi en cours, la Queue est pleine et aucun espace n'est libre. On se retrouve en attente indéfinie...
Pour la plupart des scripts, vous n'allez pas vous retrouver dans cette situation, mais voilà... pour moi c'est arrivé.
Comment corriger le souci ? revoir l'algo ? c'est dommage... tout ce qui nous manque c'est de pouvoir écire dans la Queue sans limite, mais limiter quand même le nombre de threads.
La classe Queue peut tout à fait ne pas bloquer, et avoir une taille indéfinie. Si on lui passe un entier en argument de constructeur elle se limite à bloquer sa taille max à ce nombre. Mais si on ne lui donne pas de paramètres, ou "0" ou un nombre négatif, alors sa taille est illimitée.
Or, je veux tout de même limiter le nombre de process simultanés. Tout ce dont j'ai besoin c'est de ne pas bloquer l'insert de tâches... vous me suivez ?
C'est alors très simple ! il suffit de gérer tout ça avec 2 Queue:
- une qui n'est pas limitée, elle gardera toutes les taches à lancer, quelque soit le nombre
- une qui va limiter le nombre de thread, celle-ci sera limité à nombre qui correspond au nombre de threads. C'est quasiement le même fonctionnement que la classe de threadingpoolbad.py
On y va:
# -*- encoding: utf-8 -*- #file threadingpool.py import logging from threading import Thread from Queue import Queue class ThreadPool: class _ThreadQueue(Thread): def __init__(self, pool, *args, **kwargs): """ Get task and pool Queue. Then launch thread. """ super(ThreadPool._ThreadQueue, self).__init__(*args, **kwargs) self.pool = pool.pool self.tasks = pool.tasks self.daemon = True self.start() def run(self): """ Run unlimited while Queues are not joined """ while True: # reinsert the nonblocking queue # in blocking queue, that should block # if "tasks" queue is full self.tasks.put(self.pool.get(True)) #and read this queue... task,args = self.tasks.get(True) try: task(*args) except Exception, e: logging.exception(e) finally: self.tasks.task_done() self.pool.task_done() def __init__(self, num=10): """ Create the thread queue with "num" thread in parallel""" self.tasks = Queue(num) self.pool = Queue() for _ in range(num): self._ThreadQueue(self) def add_task(self, target, args): """ Write in unlimited size queue which will be read in "run" method of a thread That should not block ! """ self.pool.put((target, args)) def wait_completion(self): """ Wait for the all threads to be completed """ self.pool.join() self.tasks.join()Vous voyez ici les deux queues, "tasks" et "pool". La première est limitée, l'autre non.
Et cette fois ci, ça marche: j'ai bien deux threads qui tournent mais je ne bloque plus lors de l'appel à "add_task":
import time from threadingpool import ThreadPool def test(pool, num=0): num += 1 print "num is %d" % num if num < 5: pool.add_task(target=test, args=(q, num)) time.sleep(0.5) #create a pool of 2 threads, launch test function pool = ThreadPool(2) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) pool.add_task(target=test, args=(pool,)) #...Et voilà ! Désormais, mes 120 000 tâches que j'ai à lancer ne se bloquent plus, elles se placent en file l'attente et j'ai bien un nombre limité de tâches en parallèle.
Je ne vous montre pas mon script d'import, mais croyez moi, la récursion (bien contrôlée) est énorme, et avoir résolut mon problème a été un soulagement énorme.
Premier Samedi : Mars 2013
Association Borsalinux-Fr : Compte rendu de l'Assemblée Générale de Borsalinux-fr du 16 février
Le samedi 18 février 2013 a eu lieu l'Assemblée Générale de l'association Borsalinux-fr au café des 3 arts à Paris.
Les 11 membres présents ont approuvé le bilan moral et financier de l'année 2012.
Par la suite, un 4e Conseil d'administration a été voté et est composé de :
-Emmanuel Seyman (eseyman) - Président
-Pierre-Yves Chibon (pingou) - Vice-président
-Nicolas Chauvet (kwizart) - Trésorier
-Pablo Martin-Gomez (bouska) - Trésorier-adjoint
-Charles-Antoine Couret (Renault) - Secrétaire
-Kévin Raymond (shaiton) - Secrétaire-adjoint
-Guillaume Kulakowski (llaumgui)
Ce conseil a un mandat de 2 ans.
Nous tenons à souligner l'extrême longévité de llaugmi au sein de l'association, étant le seul membre fondateur restant et qui est bien entendu un des piliers de l'association et des contributeurs francophones à Fedora via le maintient du site fedora-fr.org à jour.
Cet assemblée a également été l'occasion de discuter sur les moyens pour obtenir de nouveaux adhérents à l'association mais également pour avoir plus de contributeurs au projet Fedora en lui même. Si vous souhaitez soutenir le projet Fedora et Borsalinux-fr, nous vous rappelons que vous pouvez librement contribuer au projet et adhérer à l'association. À d'autres occasions durant les deux années à venir la communication sera tournée en ce sens pour susciter des vocations, les contributions étant avant tout l'œuvre de personnes passionnées et bénévoles.
Nous en avons profité aussi pour revenir sur la réussite du FUDCon EMEA dernier à Paris et sur l'année à venir notamment sur les financements de l'association qui sont stables. Le FUDCon a été l'occasion d'obtenir du matériel supplémentaire pour les évènements où Borsaliux-fr sera présent comme un kakemono et une nappe.
Et l'association poursuivra toujours son but de soutenir l'action des ambassadeurs francophones de Fedora lors d'évènements en lien avec le projet ou le Logiciel Libre en général.




