Marotte ⛧ a écrit 8719 commentaires

  • [^] # Re: Comprends pas...

    Posté par  . En réponse au message Créer un multi-boot avec clé de démarrage sur carte SD. Évalué à 3.

    Je ne voudrais pouvoir lancer windows que si la carte SD est insérée.

    Pourquoi ?

  • [^] # Pour compléter ces exemples, la version avec socket non-bloquantes

    Posté par  . En réponse au message Communication inter-processus. Évalué à 3.

    Bon alors pour mon exemple ça ne sert à rien d’avoir des sockets non-bloquantes puisse qu’il y en a qu’une mais dans le cas où on devrait en manipuler plusieurs on peut faire ainsi :

    #!/usr/bin/env python3
    
    import sys
    import subprocess
    import socket
    import signal
    import select
    import os
    
    pidFilename = '/tmp/'+sys.argv[0]+'.pid'
    
    def graceful_exit(signum, frame):
    
        print('I terminate, my PID is '+str(os.getpid())+' and I received signal '+str(signum)+'', file=sys.stderr, flush=True)
        sys.exit(0)
    
    try:
    
        if sys.argv[1] == 'start':
    
            sleeper = subprocess.Popen([sys.argv[0], 'run'], stdin=subprocess.PIPE, shell=False)
            pidfile = open(pidFilename,'w')
            _pid = str(sleeper.pid)
            pidfile.write(_pid)
            pidfile.close()
    
        elif sys.argv[1] == 'run':
    
            signal.signal(signal.SIGTERM, graceful_exit)
            signal.signal(signal.SIGINT, graceful_exit)
    
            server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            server.bind(('127.0.0.1', 1234))
            server.setblocking(0)
            server.listen(3)
    
    
            while True:
    
                _sockets_ready = select.select([server],[],[])
                client, addr = _sockets_ready[0][0].accept()
    
                message = client.recv(65535).decode('UTF-8')
    
                if message:
    
                    print('I’m alive, my PID is '+str(os.getpid())+' and I’ve been told to say : « '+message+' »', file=sys.stderr, flush=True)
    
    
        elif sys.argv[1] == 'stop':        
    
            try:
    
                pidfile = open(pidFilename,'r')
                os.kill(int(pidfile.read()), signal.SIGTERM)
                pidfile.close()
                os.unlink(pidFilename)
    
            except (FileNotFoundError, ProcessLookupError):
    
                pass
    
        elif sys.argv[1] == 'say' and len(sys.argv) > 1:
    
            try:
    
                client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                client.connect(('127.0.0.1', 1234))
                client.send(bytes(sys.argv[2],'utf8'))
    
            except ConnectionRefusedError as e:
    
                print(str(e), file=sys.stderr)
    
    except IndexError as e:
    
        print(str(e), file=sys.stderr)

    C’est le select qui prend en objet les trois listes de sockets (potential_readers, potential_writers, potential_errs) et retourne ces trois listes avec seulement les sockets qui sont prêtes :

    _sockets_ready = select.select([server],[],[])
    client, addr = _sockets_ready[0][0].accept()
    message = client.recv(65535).decode('UTF-8')

    Ici le accept() n’aura pas lieu tant qu’il n’y a rien à lire sur la socket 'server', « bloquant » ainsi la boucle while, qui n’a effectivement aucune raison de tourner s’il n’y a rien à lire…

    https://docs.python.org/3/howto/sockets.html#non-blocking-sockets

    J’espère ne pas avoir raconté trop de connerie et qu’on me corrigera le cas échéant.

  • # Pour compléter ces exemples

    Posté par  . En réponse au message Communication inter-processus. Évalué à 3.

    En utilisant une socket de type AF_INET c’est un peu différent.

    #!/usr/bin/env python3
    
    import sys
    import subprocess
    import socket
    import signal
    import os
    
    pidFilename = '/tmp/'+sys.argv[0]+'.pid'
    
    def graceful_exit(signum, frame):
    
        print('I terminate, my PID is '+str(os.getpid())+' and I received signal '+str(signum)+'', file=sys.stderr, flush=True)
        sys.exit(0)
    
    try:
    
        if sys.argv[1] == 'start':
    
            sleeper = subprocess.Popen([sys.argv[0], 'run'], stdin=subprocess.PIPE, shell=False)
            pidfile = open(pidFilename,'w')
            _pid = str(sleeper.pid)
            pidfile.write(_pid)
            pidfile.close()
    
        elif sys.argv[1] == 'run':
    
            signal.signal(signal.SIGTERM, graceful_exit)
            signal.signal(signal.SIGINT, graceful_exit)
    
            server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            server.bind(('127.0.0.1', 1234))
            server.listen(3)
    
    
            while True:
    
    
                client, addr = server.accept()
                message = client.recv(65535).decode('UTF-8')
    
                if message:
    
                    print('I’m alive, my PID is '+str(os.getpid())+' and I’ve been told to say : « '+message+' »', file=sys.stderr, flush=True)
    
    
        elif sys.argv[1] == 'stop':        
    
            try:
    
                pidfile = open(pidFilename,'r')
                os.kill(int(pidfile.read()), signal.SIGTERM)
                pidfile.close()
                os.unlink(pidFilename)
    
            except (FileNotFoundError, ProcessLookupError):
    
                pass
    
        elif sys.argv[1] == 'say' and len(sys.argv) > 1:
    
            client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            client.connect(('127.0.0.1', 1234))
            client.send(bytes(sys.argv[2],'utf8'))
    
    
    except IndexError as e:
    
        print(str(e), file=sys.stderr)
  • [^] # Re: Chaussette

    Posté par  . En réponse au message Communication inter-processus. Évalué à 3.

    Merci pour ta réponse. Je peux continuer à ouvrir mon fifo dans la boucle si je le mets en bloquant et que je le ferme une fois que j’ai lu mes 65535 caractères :

    while True:
    
        _fifo = os.open(fifoFilename, os.O_RDONLY)
        _message = os.read(_fifo, 65535).decode('UTF-8')
    
        if _message:
    
            print('I’m alive, my PID is '+str(os.getpid())+' and I’ve been told to say : « '+_message+' »', file=sys.stderr, flush=True)
    
        os.close(_fifo)

    Là ça fonctionne comme je veux.

    Mais du coup je suis parti sur l’utilisation d’une socket…

    L’avantage d’une socket, si j’ai bien compris, c’est que je pourrais remplacer facilement, de manière transparente, ma socket UNIX par une socket INET, pour faire communiquer mes deux processus s’ils ne tournaient pas sur la même machine…

  • # Chaussette

    Posté par  . En réponse au message Communication inter-processus. Évalué à 3.

    Après quelques recherches il me semble que les sockets puissent également être une solution à mon problème.

    J’arrive à ça, en essayant de faire exactement l’équivalent du premier script mais en utilisant socket :

    #!/usr/bin/env python3
    
    import sys
    import subprocess
    import socket
    import signal
    import os
    
    pidFilename = '/tmp/'+sys.argv[0]+'.pid'
    socketFilename = '/tmp/'+sys.argv[0]+'.socket'
    
    def graceful_exit(signum, frame):
    
        print('I terminate, my PID is '+str(os.getpid())+' and I received signal '+str(signum)+'', file=sys.stderr, flush=True)
        sys.exit(0)
    
    try:
    
        if sys.argv[1] == 'start':
    
            sleeper = subprocess.Popen([sys.argv[0], 'run'], stdin=subprocess.PIPE, shell=False)
            pidfile = open(pidFilename,'w')
            _pid = str(sleeper.pid)
            pidfile.write(_pid)
            pidfile.close()
    
        elif sys.argv[1] == 'run':
    
            signal.signal(signal.SIGTERM, graceful_exit)
            signal.signal(signal.SIGINT, graceful_exit)
    
            if os.path.exists(socketFilename):
    
                os.remove(socketFilename)
    
            server = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
            server.bind(socketFilename)
    
            while True:
    
                _message = server.recv(65535).decode('UTF-8')
    
                if _message:
    
                    print('I’m alive, my PID is '+str(os.getpid())+' and I’ve been told to say : « '+_message+' »', file=sys.stderr, flush=True)
    
        elif sys.argv[1] == 'stop':        
    
            try:
    
                pidfile = open(pidFilename,'r')
                os.kill(int(pidfile.read()), signal.SIGTERM)
                pidfile.close()
                os.unlink(pidFilename)
    
            except (FileNotFoundError, ProcessLookupError):
    
                pass
    
        elif sys.argv[1] == 'say' and len(sys.argv) > 1:
    
            if os.path.exists(socketFilename):
    
                client = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
                client.connect(socketFilename)
                client.send(bytes(sys.argv[2],'utf8'))
                client.close()
    
    except IndexError as e:
    
        print(str(e), file=sys.stderr)

    J’ai du mal à appréhender les pour et les contre de chaque méthode.

    En tous cas avec socket je n’ai pas besoin de faire ce truc crade avec sleep()… ça répond tout de suite, et ça n’interfère pas avec le stdin de mon terminal…

  • # Petite correction

    Posté par  . En réponse au message Communication inter-processus. Évalué à 3.

    sleeper = subprocess.Popen([sys.argv[0], 'run'], stdin=subprocess.PIPE, shell=False)

    Il ne faut pas préfixer avec './' !

  • [^] # Re: Faite ce que je dis, pas ce que je fais

    Posté par  . En réponse au message Téléchargement d'un PDF ????. Évalué à 1.

    D’un autre côté c’est justement ce qu’il dénonce, l’omniprésence des géants comme Adobe qui verrouillent la technologie.

    S’il avait pu faire cette « campagne numérique » qu’avec du libre et des services « équitables et ouverts » on lui aurait dit : « Bah tu vois bien Jean-Luc ! Tu vois des problèmes où il n’y en a pas ! » :)

  • [^] # Re: Je ne sais pas

    Posté par  . En réponse au message baloo et krunner sur xfce, possible?. Évalué à 2.

    OK Je comprends un peu mieux.

    ~$ krunner
    Gtk-Message: Failed to load module "gail"
    Gtk-Message: Failed to load module "atk-bridge"
    Invalid Context= "Mimetypes" line for icon theme: "/usr/share/icons/Faba/symbolic/mimetypes/"
    Icon theme "elementary" not found.
    QDBusConnection: name 'org.kde.kglobalaccel' had owner '' but we thought it was ':1.119'
    detected kglobalaccel restarting, re-registering all shortcut keys

    En cherchant (vite fait) sur Google à partir de ton message d’erreur je tombe sur :

    https://forum.manjaro.org/t/kcalc-dead/1204

    Un problème de thème non installé ?

    Cherche aussi avec Failed to load module "gail" et Failed to load module "atk-bridge"

    Il manque peut-être des « bouts de KDE »… Peut-être un service de KDE qui ne tourne pas et dont krunner a besoin…

    Je t’avoue que je sèche, je ne connais pas bien KDE. Bon courage quand même.

  • # Je ne sais pas

    Posté par  . En réponse au message baloo et krunner sur xfce, possible?. Évalué à 2.

    Il y a des chances. L’installation va être sûrement un peu conséquente si tu n’utilises aucun logiciel KDE pour le moment. Il va falloir pas mal de bouts de KDE. Ce n’est pas un problème à moins que tu sois ricrac sur l’espace disque. Personnellement j’utilise quelques application de KDE sous Xfce sans trop problème. Elles n’ont juste pas forcément le même look et la même ergonomie, puissent qu’elles sont à la base faites pour s’intégrer avec un environnement de bureau en particulier mais c’est tout.

    Pour en revenir à ta question. krunner (que je ne connais pas) semble être un lanceur, pourtant il y a l’équivalent sous Xfce ? Tu peux mettre un lanceur sur le bureau ou dans un panel ?

    Et baloo semble être un framework d’indexation destiné à être utilisé par d’autres applications… ? C’est pour krunner ?

    Si c’est pour simplement indexer (mais tu connais p-e déjà) c’est updatedb et locate. La première commande indexe, tu la fais tourner régulièrement, à la fréquence désirée, et la seconde te permet de retrouver un fichier très rapidement.

    $ locate issue.net
    /etc/issue.net
    Les options de locate sont de plus haut niveau que celles de find. Il y en a donc moins, la courbe d’apprentissage est plus rapide. Sans compter que find cherche « en direct » et n’indexe rien…

    Les diverses GUI d’indexation se base sur ces commandes ou sur les mêmes bibliothèques qu’elles.

    locate lui ne dépend que du minimum, ici :

    $ ldd /usr/bin/locate
    linux-vdso.so.1 (0x00007ffc04319000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff4f602f000)
    /lib64/ld-linux-x86-64.so.2 (0x00005586d17c1000)

  • [^] # Re: Pas mieux

    Posté par  . En réponse au message Les avantages du VPN. Évalué à 3. Dernière modification le 17 janvier 2017 à 15:01.

    Bon, même moi j’ai compris le principe :)

    donc tu n'iras pas "plus vite", tu emets/recois potentiellement plus de paquets puisque tu encapsule tes requetes HTTP/TCP dans une enveloppe UDP

    Le truc c’est qu’il assemble tous les paquets (en l’occurrence pour du web : tous les paquets nécessaires pour afficher la page) avant d’envoyer le tout, via le VPN, à son utilisateur.

    Du coup, du point de vu de l’utilisateur « ça va plus vite © », c’est Freedom-ip qui se bouffe les latences mais qui a par ailleurs une meilleure connexion à Internet qu’une box ADSL dans la cambrousse…

    Le temps « freedom-ip récupère la page sur internet (TCP) + l’envoi à son abonné (UDP) » est plus court que « l’abonné récupère directement sa page en TCP depuis Internet »

    Cela dit je me pose quand même une question, un paquet UDP pouvant ne pas arriver à destination, est-ce que cette méthode n’est pas parfois contre-productive (ie: la page va au final se charger moins vite) dans certains cas ?

  • [^] # Re: Pas mieux

    Posté par  . En réponse au message Les avantages du VPN. Évalué à 1.

    Arf… Dans ce cas oui mais on a plus exactement affaire à un simple VPN, si je ne dis pas de bêtise.

    À moins que ce soit la norme pour un VPN d’avoir un tel cache ?

  • [^] # Re: Pas mieux

    Posté par  . En réponse au message Les avantages du VPN. Évalué à 1.

    Je n’arrive pas à joindre ton site, le proxy du boulot me bloque pour « proxy avoidance » :) J’irai voir ce soir…

    Ai-je parlé de temps de réponse quelque part ? Non.

    Ai-je parlé de navigation plus rapide ? Oui.

    Par contre cela ne pourra pas accélérer les téléchargements, on est d'accord ;)

    J’ai un peu de mal à voir comment tu peux avoir une « navigation plus rapide » si ni le débit ni le temps de réponse ne sont concernés…

    Je ne dis pas que tu as tort, je n’y connais moi-même pas grand-chose en réseau, je me (donc te) pose une question c’est tout.

    Hypothèse : la route n’est pas la même ?

  • [^] # Re: Pas mieux

    Posté par  . En réponse au message Les avantages du VPN. Évalué à 0.

    Tu as une source pour étayer cette information ?

    Non parce que comme les précédents participants j’ai écarquillé les yeux en lisant ça :)

    Je ne vois vraiment pas comment le temps de réponse (ie: le ping) pourrait être plus court en passant par un hôte supplémentaire…

  • [^] # Re: Solution pas chère

    Posté par  . En réponse au message Carte son usb pour home studio. Évalué à 3.

    un compresseur dont j'évalue mal la fonction

    Pour faire simple, un compresseur va augmenter le volume des sons faibles et réduire le volume des sons forts…

    Un exemple, en haut le signal d’origine (une intro guitare-basse-batterie-voix), en bas le signal (très fortement) compressé :

    Exemple signal compressé

    Un usage assez pratique de la compression dans VLC c’est quand tu regardes un film et que tu veux entendre quand ça chuchote sans pour autant saigner des tympans quand il y a une explosion ou que ça crie :)

    Je sais qu’on utilise souvent le compresseur en bout de chaîne (ie: sur le master) mais je ne sais pas du tout ce qu’il en est de son utilisation directement sur un instrument.

  • [^] # Re: Rien d‘anormal

    Posté par  . En réponse au journal Du choix discutable des sources de Google pour ses définitions automatiques. Évalué à 2.

    Amasein a raconté hier comment le mot "pieuvre" est arrivé dans le dictionnaire grâce (ou à cause) de Hugo. Je ne commenterai ni la "bravitude", ni "l'amicalité" …

    "Bravitude" et "amicalité" ne sont ni dans le Larousse ni dans le Robert. Tu m’as fait peur :)

    Pour "bravitude" je n’ai jamais compris pourquoi elle ne s’était pas « défendu » en racontant qu’elle l’avait entendu de la bouche d’un chinois et que c’était ressorti à ce moment là, surtout qu’elle commence sa phrase par « Comme me disait un chinois… »

  • [^] # Re: Rien d‘anormal

    Posté par  . En réponse au journal Du choix discutable des sources de Google pour ses définitions automatiques. Évalué à 3.

    Je vais chipoter un peu mais quand tu écris :

    je ne reproche pas a Google d'être partisan

    On peut comprendre (et c’est ce que j’ai fait) :

    • Google est partisan
    • je ne leur reproche pas

    Bon après c’est peut-être moi qui aies la comprenette difficile c’est vrai, mais ta formulation laisse place à cette interprétation, àmha.

  • [^] # Re: Rien d‘anormal

    Posté par  . En réponse au journal Du choix discutable des sources de Google pour ses définitions automatiques. Évalué à 1.

    je ne reproche pas a Google d'être partisan

    Google n’est pas partisan de quoi que ce soit ici… ce n’est pas parce qu’un site FN arrive en premier résultat que Google prend parti pour le FN.

    ils faut qu'ils trouvent une solutions pour que des sites partisans ne l'exploitent pas comme support de communication.

    Marion Lepen a exploité l’algorithme de Google parce qu’elle a intitulé sa page « Le rôle du député - Marion Maréchal-Le Pen » ?

    Il pourrait par exemple se limiter à des sources qu'ils auront vérifiées un minimum

    Personnellement je préfère que Google soit le plus neutre possible… Donc pas qu’il tienne une base de données des « bons » et des « mauvais » sites… Et selon quels critères ?

    Sinon je fais pareil je squatte la réponse à "ou payer ses impots ?" pour que google renvois une réponse générale qui renvois vers une page avec un joli formulaire pour payer qui pointe vers mon paypal :) Là je suis sûr que Google serait plus réactif.

    Tu peux payer pour placer ton site « en haut », dans les très justement nommés « résultats sponsorisés », mais sinon il ne suffit pas d’être celui qui « match » le mieux une requête, le nombre de liens pointant vers la page en question va jouer sur le classement de la dite page.

    Bref… Tu sembles reprocher à Google d’être partisan alors qu’au contraire c’est bien un algorithme, que je qualifierais d’aveugle, qui a placé ce résultat en première place…

  • [^] # Re: Rien d‘anormal

    Posté par  . En réponse au journal Du choix discutable des sources de Google pour ses définitions automatiques. Évalué à 3.

    il est normal que dans certaines situations le résultat semble inadapté

    Oui. J’ai l’impression que les gens s’attendent à bien trop de pertinence de la part des ces algorithmes…

  • # Rien d‘anormal

    Posté par  . En réponse au journal Du choix discutable des sources de Google pour ses définitions automatiques. Évalué à 5.

    Dans le site de Marion Maréchal-Lepen je trouve ça :

    <title>Le rôle du député - Marion Maréchal-Le Pen</title>

    alors que dans la page http://www.vie-publique.fr/decouverte-institutions/institutions/fonctionnement/parlement/definition/qu-est-ce-qu-depute.html il n’y a même pas le mot "rôle"…

    Quant à Wikipédia, chez moi il arrive en 11e place, avec la page https://fr.wikipedia.org/wiki/Assembl%C3%A9e_nationale_(France)

    là on y trouve le mot "rôle", mais pas proche du mot "député"… donc voilà quoi…

  • # Lien

    Posté par  . En réponse au journal Du choix discutable des sources de Google pour ses définitions automatiques. Évalué à 3.

    Tu as cliqué sur le lien « About this result - Feedback » ?

    C’est de ça dont tu parles quand tu parles de :

    J'ai signalé le problème via le formulaire google

    ?

  • [^] # Re: Intérêt ?

    Posté par  . En réponse au journal Deux ans après, Charlie Hebdo de cette semaine. Évalué à 4.

    -Peine de prison ferme systématique

    L’enfermement n’est pas une solution dans la grande majorité des cas de non respect de la loi. Ça ne fait souvent même qu’empirer le problème. Un J. Cahuzac ou une C. Lagarde ne sont pas des menaces « directe » pour la société. Ils ne vont pas aller tuer ou violer (où même blesser) quelqu’un comme ça sur un coup de tête…

    -Inéligibilité sur de pnus longues périodes ou à vie suivant le mandat

    Là par contre je suis entièrement d’accord. On ne peut plus rentrer dans la police et dans pas mal d’autres organismes quand on a un casier. Pourquoi dans ce cas peut-on encore se voir confier la responsabilité de ses concitoyens ?

    Obligation de rendre le procès public

    Il me semble qu’en France tous les procès sont publics, sauf quand il s’agit de juger des mineurs.

  • [^] # Re: Chromium !

    Posté par  . En réponse au message Où va Firefox ?. Évalué à 2.

    ça fausse les statistiques

    Qu’est-ce qu’on en a à faire des statistiques sur les clients oueb ?

    Perso j’utilise une UA string complètement custom qui ne correspond à aucun véritable client. Si un site me jette à cause de ça tant pis pour eux. J’ai rarement des problèmes bien que mon navigateur se présente comme "Saucisse de Toulouse"… Je change de temps en temps…

    Le seul problème que j’ai c’est le site d’une banque qui fait partir FF en sucette… je ne sais pas si ça vient de l’UA et il faudrait d’ailleurs que je teste à nouveau. Pour pas me prendre la tête j’ai chromium en « navigateur de secours ».

    je ne cautionne pas du tout

    Bah moi je dis au contraire, utilisons tous une UA string personnelle, aléatoire et volatile, comme ça aucun service oueb ne se basera dessus et le contenu/fonctionnement sera le même pour tout le monde :)

    C'est comme acheter une machine sous windows pour le virer et réinstaller Linux à la place.

    Sauf que contrairement à l’achat d’une machine, changer d’UA n’a aucune implication financière.

  • # Bonjour

    Posté par  . En réponse au message installer le gub. Évalué à 6.

    C’est bien que tu aies résolu ton problème de GRUB. Maintenant tu vas pouvoir passer un peu de temps à réviser ton français… parce que là, sans vouloir être méchant, te lire est extrêmement pénible…

    Tu peux par exemple aller faire un tour ici : http://lecons.ssz.fr/

  • [^] # Re: Chromium !

    Posté par  . En réponse au message Où va Firefox ?. Évalué à 2.

    l'espace parent Pronote de l'éducation Nationale ne reconnaissent pas Chromium comme Chrome

    Il doit y avoir, comme sous Firefox, un plugin pour changer ton "user agent string" selon le site, souvent ça suffit pour que le serveur pense avoir affaire au client indiqué dans cette variable.

  • [^] # Re: Intérêt ?

    Posté par  . En réponse au journal Deux ans après, Charlie Hebdo de cette semaine. Évalué à 2. Dernière modification le 08 janvier 2017 à 23:42.

    Et donc ta règle de transitivité de la partie vers le tout ne s'applique pas.

    Mais non… c’est la règle de la transnistrité qui s’applique !

    Le régime politique semble bien être le même que la Russie (état civil géré par la Russie), dans ce cas précis, donc si c’est un régime stalinien…