niol a écrit 403 commentaires

  • # Explication?

    Posté par  (site web personnel) . En réponse au journal Petit coup de gueule contre les distributions grand public. Évalué à 3.

    Ca s'explique pourtant assez simplement, cette double vitesse : les gens qui sont en capacité à mettre à jour ne s'intéressent pas à la totalité des paquets. Mettre à jour la version est considéré par certains mainteneurs comme une responsabilité à corriger les bugs éventuellement introduits, donc s'il ne s'intéresse pas au paquet, il ne va pas prendre cette responsabilité.
  • # Professeur

    Posté par  (site web personnel) . En réponse au journal Pascal Brisset est mort. Évalué à 9.

    C'était aussi un professeur remarquable et j'ai eu la chance d'assister à plusieurs de ses enseignements (programmation fonctionnelle [ocaml], complexité [des algorithmes], compilation, etc.) pendant mes études. Et il est sans doute à l'origine de tout l'intérêt que je porte à la programmation et plus généralement aux logiciels libres, même si j'ai depuis quitté emacs pour vim.

    Donc oui, merci pour son œuvre.
  • # Limites de l'étude

    Posté par  (site web personnel) . En réponse au journal Le piratage détruit les emplois.. Évalué à 3.

    A lire sur Ars une analyse de toutes les limites de ce genre d'études.

    http://arstechnica.com/business/news/2010/05/bsas-latest-fig(...)

    Avec notamment la remarque que le piratage peut créer des emplois dans la pays en voie de développement (car rend la technologie accessible).
  • # man

    Posté par  (site web personnel) . En réponse au message Paquets Debian: triggers, triggers pour man-db. Évalué à 2.

    Effectivement la documentation est difficile à trouver.
    $ man -k triggers
    deb-triggers (5)     - actions différées du paquet
    
    Au pire, tu peux regarder les sources des paquets qui les utilisent, et si ça t'intéresse les sources du paquet man-db pour voir comment les déclarer.
  • # apt-listbugs

    Posté par  (site web personnel) . En réponse au message Gestion des bus remontées par apt-listbugs. Évalué à 1.

    La chance est redonnée au paquet par le script cron de apt-listbugs une fois que le bug critique est corrigé.
  • # Exemple

    Posté par  (site web personnel) . En réponse au message Atteindre des éléments d'un fichier XML ?. Évalué à 2.

    Comme tu n'as besoin que de certaines infos, je te conseille SAX plutôt que DOM qui a l'avantage de ne pas charger intégralement le fichier scribus en mémoire.

    La page suivante te donne un exemple simplissime à adapter à ton besoin.

    http://www.wellho.net/resources/ex.php4?item=y151/sax_xml2.p(...)
  • [^] # Re: Mieux?

    Posté par  (site web personnel) . En réponse au message Threads : Help !. Évalué à 1.

    Ce que j'ai posté fonctionne comme ça. Il suffit d'adapter pour passer un argument, et certainement un callback pour être prévenu quand c'est fini et mettre à jour l'IHM.
  • [^] # Re: Mieux?

    Posté par  (site web personnel) . En réponse au message Threads : Help !. Évalué à 2.

    Mais n'y a-t-il pas une autre manière que définir une méthode du style 'set_target' pour faire faire différentes chose par un thread ?

    Des milliers j'imagine.

    Précise.
  • # Mieux?

    Posté par  (site web personnel) . En réponse au message Threads : Help !. Évalué à 3.

    La méthode que j'utilise, pour éviter l'attente active comme tu le fais (le while 1 en boucle), est la suivante, qui a l'avantage d'être bloquante (l'OS sait que le processus n'a rien à faire donc utilise le CPU pour autre chose).
    #!/usr/bin/python
    # -*- coding: ISO-8859-15 -*-
    
    from threading import Thread
    from Queue import Queue
    from time import sleep
    
    
    class StopException: pass
    
    
    def thread_action(f):
        def newf(self):
            self.working = True
            f(self)
            self.working = False
        return newf
    
    
    class ComplexThread(Thread):
    
        def __init__(self):
            Thread.__init__(self)
            self.__queue = Queue()
    
        def stop(self):
            raise StopException
    
        def run(self):
            try:
                self.working = False
                while True:
                    # La clé se situe dans le fait que ce queue.get() est bloquant
                    self.__queue.get()()
            except StopException:
                # Stoping thread
                pass
    
        def set_target(self, target):
            self.__queue.put(target)
    
        @thread_action
        def funct_1(self):
            print('In function 1')
            sleep(2)
            print('finished funct_1')
    
        @thread_action
        def funct_2(self):
            print('In function 2')
            sleep(2)
            print('finished funct_2')
    
    
    if __name__=='__main__':
        test = ComplexThread()
        test.start()
        test.set_target(test.funct_1)
        sleep(0.1)
        while test.working:
           print('.')
           sleep(0.1)
        test.set_target(test.funct_2)
        sleep(0.1)
        while test.working:
           print('o')
           sleep(0.1)
        test.set_target(test.stop)
    
    Bref je te conseille de jeter un oeil à Threading.Lock(), threading.Event(), Queue.Queue(), c'est bon de savoir que ça existe. Aussi, pour commenter un peu ce que j'ai écrit, j'utilise les décorateurs (modifier plusieurs fonctions de la même manière pour changer l'attribut working), et le fait qu'en python, une fonction est un objet que l'on peut passer en paramètre. Bon courage pour la doc!
  • # Pourquoi?

    Posté par  (site web personnel) . En réponse au journal Passage du noyau Debian 2.6.30-2 au noyau Vanilla 2.6.31-2. Évalué à 8.

    Salut,

    Quelles sont les différences entre ton .config et celui du noyau précompilé de Debian?

    Observes-tu les mêmes différences de performance avec un 2.6.30 Vanilla? Je pose la question car tu sembles sous-entendre que le noyau précompilé de la distribution n'est pas adapté à ta machine et/ou à ton utilisation.

    Enfin, observes-tu les mêmes améliorations avec un 2.6.31 précompilé? Tu peux le trouver à l'adresse suivante : http://kernel-archive.buildserver.net/debian-kernel (dès que ça sera revenu).
  • # gestion de version de /etc

    Posté par  (site web personnel) . En réponse au message Accès SSH, récupérer ip, nom de la personne. Évalué à 1.

    Peut-être que des outils comme etckeeper peuvent répondre à ton besoin de savoir qui modifie quel fichier de conf et pourquoi.

    http://joey.kitenet.net/code/etckeeper/
  • [^] # Re: ta méthode est fiable

    Posté par  (site web personnel) . En réponse au message Mettre en place un chroot SFTP sous Lenny. Évalué à 1.

    Chez moi, j'ai tout simplement ce qui suit :
    ~$ grep user /etc/passwd
    user:x:1008:1001:,,,:/home/user:/bin/false
    niol@ripley:~$ tail -n 5 /etc/ssh/sshd_config
    Match group sftponly
            ChrootDirectory /home/%u
            X11Forwarding no
            AllowTcpForwarding no
            ForceCommand internal-sftp
    ~$ ls -la /home/user/
    total 20
    drwxr-xr-x  5 root  root  4096 oct  1  2008 .
    drwxr-xr-x 11 root  root  4096 mar 29 16:03 ..
    drwxr-xr-x  4 user user 4096 oct  1  2008 7demo
    drwxr-xr-x  2 user user 4096 nov 29  2007 Projet
    drwxr-xr-x  3 user user 4096 sep  9  2007 site.fr
    
    Pour ce qui est du shell, comme tu es en ForceCommand, je ne pense pas que ça joue sauf si /etc/pam.d/sshd est configuré avec pam_shells.so (j'ai pas testé).
  • # ta méthode est fiable

    Posté par  (site web personnel) . En réponse au message Mettre en place un chroot SFTP sous Lenny. Évalué à 5.

    J'ai utilisé la même méthode sur plusieurs machines, et je ne vois rien de bizarre dans ce que tu as fait.

    Au moment où ça fonctionnait presque, il est normal que peter ne pouvait pas créer de répertoire ni de fichier! N'oublie pas que /home/peter appartient à root. Il faut donc donner des permissions à peter sur des sous-répertoires de /home/peter.

    Ensuite, le fait que ça se fige en verbose vient d'un problème dans la version OpenSSH de lenny qui n'incorpore pas un patch[1] qui fait qu'on ne peut pas mettre d'arguments à ForceCommand.

    [1] http://bugzilla.mindrot.org/show_bug.cgi?id=1527
  • # écouter l'évènement dbus de connexion & scripts de dispatch

    Posté par  (site web personnel) . En réponse au message Demarrer un prog lors de la connexion wifi sur un certain SSID ?. Évalué à 3.

    Le plus joli est d'écouter l'évènement dbus de connexion comme dans l'exemple d'implémentation[1] que j'ai pu trouver sur le net. Si tu parles python, ça devrait t'aider. Il y a une autre implémentation[2] très similaire. L'interface dbus doit certainement donner le ssid quelquepart.

    Sur la page man de NetworkManager, on parle aussi du répertoire /etc/NetworkManager/dispatcher.d qui contient des scripts qui sont exécutés sur évènement network-manager et qui reçoivent deux arguments : un nom d'interface et une action. En choisissant ton interface wifi et l'action up, tu dois pouvoir récupérer le ssid et faire un test dessus, certainement avec un truc du genre :
    $ /sbin/iwconfig $iface | perl -ne'print m/ESSID:\"(\w+)\"/'
    (en remplaçant " par une vraie double quote que je n'arrive pas à faire sur ce site...)

    [1] http://ubuntuforums.org/showthread.php?t=1027173#3
    [2] http://www.cs.unb.ca/~bremner//blog/posts/user_level_Network(...)
  • [^] # Re: Dans ta home dir ?

    Posté par  (site web personnel) . En réponse au message Solaris 8 : installation d'outils GNU pour un seul utilisateur. Évalué à 1.

    Exact, je l'ai déjà fait sous Solaris, je confirme que ça marche très bien avec
    $ ./configure --prefix=~/gnu
  • # Dans la même famille, ouvrir et décoder si besoin, en zappant le BOM

    Posté par  (site web personnel) . En réponse au message Recherche de BOM dans un site. Évalué à 1.

    <?php
    
    /*
     * This function was unshamefully stolen and modified from the following blog post :
     * http://www.practicalweb.co.uk/blog/08/05/18/reading-unicode-(...)
     */
    
    function fopen_utf8($filename, $mode){
        $encoding='';
        $handle = fopen($filename, $mode);
        
        $bom = fread($handle, 2);
        $bom_size = 0;
        if($bom === chr(0xff).chr(0xfe)  || $bom === chr(0xfe).chr(0xff)){
                // UTF16 Byte Order Mark present
                $encoding = 'UTF-16';
    	    $bom_size = 2;
        } else {
            if( $bom_size == 0 ){
                rewind($handle);
    	    $bom = fread($handle, 3);
    	    if($bom === chr(0xef).chr(0xbb).chr(0xbf) ){
    	        // UTF8 marker, not really byte order mark, present
    	        $encoding = 'UTF-8';
    	        $bom_size = 3;
    	    }else{
    	        rewind($handle);
    	        $file_sample = fread($handle, 1000) + 'e'; //read first 1000 bytes
                    // + e is a workaround for mb_string bug
                    rewind($handle);
       
                    $encoding = mb_detect_encoding($file_sample , 'UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP');
    	    }
    	}
    	
        }
        if ($encoding){
            stream_filter_append($handle, 'convert.iconv.'.$encoding.'/UTF-8');
        }
        
        fseek($handle, $bom_size);
        
        return $handle;
    }
    
    ?>
    
  • # django

    Posté par  (site web personnel) . En réponse au message Interface web de gestion de données. Évalué à 2.

    L'interface admin de django est peut-être ce que tu cherches : un administrateur écrit un modèle de données, les formulaire d'ajout et de modification sont automatique créés.

    http://docs.djangoproject.com/en/dev/ref/contrib/admin/
  • [^] # Re: Bonding

    Posté par  (site web personnel) . En réponse au message Basculement automatique WiFi / Ethernet. Évalué à 1.

    J'avais essayé il y a quelques années et ça ne marchait pas avec le WPA. Peut-être que ça a changé.

    La discussion qui m'avait fait essayer : http://www.debian-administration.org/articles/312#comment_9
  • [^] # Re: mpd ?

    Posté par  (site web personnel) . En réponse au message VLC remote web. Évalué à 1.

    Notre début de projet[1] fait aussi la vidéo. Par contre, pas de lecture sur le client. Et l'interface web pour iPhone n'est pas encore sortie dans une version. Et l'interface web dite lourde est en XUL ce qui contraint le navigateur. Mais c'est peut-être à regarder.

    [1] http://mroy31.dyndns.org/~roy/projects/deejayd
  • # test-wireless

    Posté par  (site web personnel) . En réponse au message guessnet et réseau non protégé. Évalué à 1.

    Tous tes réseaux guessnet ont une clause test-wireless essid xx donc ça parait normal. Peut-être mettre un default pour guessnet, ou alors d'autres règles que sur le ssid?

    Si tu tests beaucoup sur le ssid, je te conseille d'utiliser plutôt une configuration à base de wpa-roam et de mettre les correspondances dans le fichiers /etc/wpa_supplicant.conf : c'est plus simple.
  • [^] # Re: XVideo ne marche que sur une seule sortie très souvent

    Posté par  (site web personnel) . En réponse au message lecture vidéo par un vidéoprojecteur. Évalué à 1.

    Heu le > /dev/null ne sert que dans le script hein...
  • [^] # Re: XVideo ne marche que sur une seule sortie très souvent

    Posté par  (site web personnel) . En réponse au message lecture vidéo par un vidéoprojecteur. Évalué à 3.

    De mémoire il vaut changer l'écran sur lequel est le XV_PIPE (ne me demandez pas ce que c'est...). Avant xrandr, ça se faisait avec xvattr et ça se fait à chaud. Ca doit toujours marcher...
    $ xvattr -a XV_PIPE -v 1 > /dev/null
    
    J'avais écrit un script qui change cet attribut d'écran :
    #!/bin/bash
    # swap_overlay_pipe script
    # A good idea would be to map it to i the Fn-F7 key.
    # Swaps the overlay pipe using the xvattr utility
    
    set -e
    
    XVATTR=$(which xvattr)
    ATTRIBUTE=XV_PIPE
    CUR_PIPE=`$XVATTR -a $ATTRIBUTE | grep $ATTRIBUTE | cut -d' ' -f 3`
    
    if [ $CUR_PIPE -eq "0" ]
    then
      NEW_PIPE=1
    else
      NEW_PIPE=0
    fi
    
    $XVATTR -a $ATTRIBUTE -v $NEW_PIPE > /dev/null
    
    Après une petite recherche, cela semble toujours la seule solution. Attention, xvattr est seulement sur les dépots debian-multimedia.org car la personne qui voulait le mettre dans Debian ne l'a jamais fait.
  • [^] # Pour ne pas avoir à lançer dhclient...

    Posté par  (site web personnel) . En réponse au message Difficultés avec wpa_supplicant. Évalué à 1.

    Pour ne pas avoir à lançer dhclient au boot, je pense qu'il suffit de remplacer manual par dhcp.
  • [^] # Re: Qu'est ce qui permet de dire...

    Posté par  (site web personnel) . En réponse au message Difficultés avec wpa_supplicant. Évalué à 3.

    Celà fonctionne mieux car tu as inversé les deux blocs network : key_mgmt=NONE attrape tous les réseaux ouverts (donc neuf-wifi). L'ordre doit avoir une importance. Si tu veux quelquechose de plus explicite, tu peux utiliser les priorités :
    network={
    	ssid="your_case_sensitive_ssid"
           id_str="home"
    	psk="your_passphrase"
    	priority=5
    }
    
    # Connect to any public open access point  
    network={
    	key_mgmt=NONE
    	priority=0
    }
    
  • # debian est gelée

    Posté par  (site web personnel) . En réponse au message experimental vers unstable .... Évalué à 2.

    Debian est en ce moment gelée : tant que lenny n'est pas sortie, ne sont autorisés dans unstable que les nouvelles versions de paquets qui corrigent des bugs de sévérité critical. (en fait, on ne met pas[1] de nouvelles versions directement dans lenny, c'est comme ça, tout passe par unstable, donc lenny est gelée, unstable aussi).

    En conclusion, pour toi, soit tu utilises le paquet de experimental, soit tu te fais ton paquet qui incorpore le correctif, soit tu parviens à argumenter dans le rapport de bug que le bug est en fait un bug de sévérité critical (ce qui ne semble pas le cas à mon avis).

    [1] Quelques explications sur ce processus en bas de ce courriel : http://lists.debian.org/debian-devel-announce/2008/10/msg000(...)