cimcim a écrit 23 commentaires

  • [^] # Re: Je trouve le sujet souvent caricatural

    Posté par  . En réponse au journal Je veux pas y retourner. Évalué à 3.

    Et on ne sait surtout pas combien ils sont dans son bureau en télétravail ^^

  • [^] # Re: Lisibilité

    Posté par  . En réponse au journal Exercices de programmation et benchmarks. Évalué à 4.

    Mais si c'est un code qui est exécuté sur des milliers de produits et/ou chez des milliers de clients, le rapport temps gagné/temps dépensé est nettement plus favorable à l'optimisation.

  • [^] # Re: Mantis Bug Tracker, simple, efficace

    Posté par  . En réponse au journal Gestion des tickets/workflows. Évalué à 1.

    Il me semble que l'"administrator" de mantis est un compte utilisateur interne à mantis, pas l'administrateur du serveur sur lequel il est installé, et donc pas nécessairement l'admin IT de la société. N'importe qui peut être désigné comme admin Mantis et gérer les workflows.

  • # port dynamique

    Posté par  . En réponse au message IPtables -configuration. Évalué à 2.

    je ne suis pas un grand lecteur de iptables, mais de ce que j'en sais au niveau règles générales de fonctionnement de serveurs et de pare feu :
    quand tu te connectes à une page web distante (disons http), ton browser contacte le serveur sur le port 80, ce qui est possible grâce à la rêgle

    iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

    Mais une fois ce contact établi, le serveur te renvoie un autre numéro de port aléatoire pour que la communication réelle puisse se faire, sans bloquer un autre utilisateur voulant accéder à la même page web, qui se retrouverait à attendre que tu veuilles bien libérer le port 80.
    C'est là que le ESTABLISHED rentre en compte. Les rêgles

    iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

    indiquent que iptables doit laisser passer les connections "déjà établies", car sinon, la réponse de la part du serveur, et la tentative de connexion vers le nouveau port attribué serait bloqué par ton pare feu.
    L'idée générale est là (de ce que j'en sais (ou de ce que j'en ai compris :) )), je laisse des gens plus expérimentés que moi mieux préciser ces mécanismes.

  • # regardez plutôt du coté du driver, ou des sources de l'appli

    Posté par  . En réponse au message [Debian] : Améliorer ioctl.h pour communication non-standard. Évalué à 2. Dernière modification le 15 avril 2019 à 14:40.

    Bonjour,
    Les ioctl sont des commandes standards envoyées depuis un logiciel vers un driver, mais avec un contenu qui peut être fortement variable. Le format en lui même de la fonction ioctl ne doit pas avoir d'impact sur ce genre de message d'erreur.
    Par contre, la fonctionnalité intégrée dans le driver appelé via cet ioctl (TCGETS) renvoie cette erreur car c'est une fonction qu'il considère non applicable sur le matériel cible.
    La solution serait donc plutôt, soit de modifier le code source de l'appli si celle-ci s'appuie sur du matériel standard/courant/éprouvé (rayer la mention inutile), soit de modifier le driver du-dit matériel si il n'est pas très courant.

    voir par exemple cette page de man tty_ioctl qui indique

    ERRORS
    […]
    ENOTTY Inappropriate fd.

    et pour exemple, une fonction hung_up_tty_ioctl qui peut renvoyer cette erreur, appelé par la fonction tty_ioctl

  • [^] # Re: Aujourd'hui

    Posté par  . En réponse au journal J'avais un journal intéressant à écrire ..... Évalué à 1.

    j'y réfléchirai demain…

  • # strongswan

    Posté par  . En réponse au message Implémentation IPsec. Évalué à 2.

    Bonjour,
    pour les tunnels ipsec, je me souviens avoir utilisé strongswan.
    Assez complexe à configurer de mon point de vue, mais je ne crois pas qu'on ait rencontré d'incompatibilités.
    Je ne vais pas t'être beaucoup plus utile que ça, car ça fait longtemps que je n'ai plus joué avec…

  • [^] # Re: plusieurs erreur de base

    Posté par  . En réponse au message probleme if. Évalué à 1.

    Effectivement, toutes mes confuses, l'espace n'est pas nécessaire.
    J'ai tellement pris l'habitude d'en mettre un pour la lisibilité que j'en était arrivé à le croire obligatoire.

  • [^] # Re: plusieurs erreur de base

    Posté par  . En réponse au message probleme if. Évalué à 1.

    il peut mettre un ";" après le test du if si il veut avoir le then sur la même ligne, mais faut mettre un espace avant le ";"

    fichier="beta"
    if [ -d $fichier ] ; then
        echo "$fichier existe";
    else
        echo "$fichier n'est pas present";
    fi
  • [^] # Re: Pas photo

    Posté par  . En réponse au journal [HS] Etes-vous pour rester à l'heure d'été ou à l'heure d'hiver ?. Évalué à 3.

    Effectivement, c'est aussi pour ça que certaines professions (surtout celles travaillant en extérieur (maçons, couvreurs, …)) mettent en place des horaires décalés en été, pour commencer plus tôt et pouvoir profiter de la fraicheur

  • [^] # Re: Dynamique vs statique

    Posté par  . En réponse au message probleme pour comprendre l'édition de lien. Évalué à 4.

    L'utilitaire "strace" est également bien utile pour voir le cheminement des appels lors du chargement des librairies dynamiques.

    strace ./bonjour_dyn 
    execve("./bonjour_dyn", ["./bonjour_dyn"], 0x7ffe7a1756c0 /* 60 vars */) = 0
    brk(NULL)                               = 0x1715000
    access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
    fstat(3, {st_mode=S_IFREG|0644, st_size=124549, ...}) = 0
    mmap(NULL, 124549, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe9a3906000
    close(3)                                = 0
    openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\21\2\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0755, st_size=2066504, ...}) = 0
    mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe9a3904000
    mmap(NULL, 3889792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe9a334b000
    mprotect(0x7fe9a34f8000, 2093056, PROT_NONE) = 0
    mmap(0x7fe9a36f7000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1ac000) = 0x7fe9a36f7000
    mmap(0x7fe9a36fd000, 14976, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe9a36fd000
    close(3)                                = 0
    arch_prctl(ARCH_SET_FS, 0x7fe9a39054c0) = 0
    mprotect(0x7fe9a36f7000, 16384, PROT_READ) = 0
    mprotect(0x600000, 4096, PROT_READ)     = 0
    mprotect(0x7fe9a3925000, 4096, PROT_READ) = 0
    munmap(0x7fe9a3906000, 124549)          = 0
    fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 2), ...}) = 0
    brk(NULL)                               = 0x1715000
    brk(0x1736000)                          = 0x1736000
    brk(NULL)                               = 0x1736000
    write(1, "bonjour", 7bonjour)                  = 7
    exit_group(0)                           = ?
    +++ exited with 0 +++
    

    On peut voir dans ce log, un premier accès au fichier "/etc/ld.so.cache", qui permet au système de retrouver la librairie libc, qu'il va ensuite ouvrir

    openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC)

    Le système va ensuite faire un mmap de la fonction fprintf, qui appelle elle même d'autres fonctions (qui sont également mmapée), jusqu'à l'appel final qu'on peut voir vers la fin du log:

    write(1, "bonjour", 7bonjour)

  • [^] # Re: Pas forcément un casse tête

    Posté par  . En réponse au journal Mettre à jour l'embarqué. Évalué à 1.

    double banque, bootloader qui vérifie la signature avant de booter, backup de la version >précédente… il existe bcp de solutions pas complexes et très fiables.

    C'est vrai que les solutions existent, généralement à base de double banque pour pouvoir redémarrer sur la version précédente en cas d'échec de la MAJ. Par contre ça signifie 2 fois plus de ROM que "nécessaire", ce qui ne passe pas toujours lors des phases de réduction de cout, sur des très petits systèmes.

  • # config dhcpd serveur

    Posté par  . En réponse au message Configuration d'un serveur DHCP avec 2 interfaces. Évalué à 4. Dernière modification le 28 novembre 2018 à 15:21.

    au niveau de la config par interface, dans le fichier dhcpd.conf, tu indiques l'interface, ce qui n'est pas utile car l'interface est reconnue en fonction du sous réseau désigné, mais tu n'indiques pas la plage d'adresses ip à distribuer.
    Il faut plutôt faire un truc comme ça :

    subnet 192.168.10.0 netmask 255.255.255.0 { # s'associera automatiquement à eth0 car c'est la seule interface qui réponde au couple subnet/netmask
    range 192.168.10.200 192.168.10.240; # distribue les @ip de .200 à .240
    option routers 192.168.10.254;
    option broadcast-address 192.168.10.255;
    option subnet-mask 255.255.255.0;
    }

    pour plus d'info sur les différentes options, tu peux jeter un oeil à la page man dhcpd.conf

  • [^] # Re: bip bip

    Posté par  . En réponse au message Mon PC ne démarre plus.... Évalué à 2.

    Tu peux essayer aussi de démarrer ton pc sans ram, pour voir si les bip entendus sont les mêmes.
    Si oui, il est probable que ce soit la ram qui ait claqué. Ou en tous cas, que le souci se situe avant l'initialisation de la ram

  • [^] # Re: Retraduction en français

    Posté par  . En réponse au journal Nouvelles brosses publiées pour Krita. Évalué à 4.

    beaucoup de parenthèses n'étaient pas nécessaires pour le public d'ici

    Utile peut être pas, mais quand même intéressant pour une partie du public d'ici

  • # la hauteur d'un cercle

    Posté par  . En réponse au message trouver la hauteur d'un cercle. Évalué à 1.

    RTFM

  • # tab session manager ?

    Posté par  . En réponse au message Firefox url moz-extension://.... Évalué à 1.

    Salut,
    j'ai le même comportement sur mon poste de travail, et j'ai toujours considéré que c'était lié à un module que j'utilise qui permet de gérer des groupes d'onglets (sync tab groups)
    A y penser, ça pourrait aussi être interne à Firefox si l'option de restauration des onglets ouverts est activée, mais je n'ai fait aucune recherche sur le sujet, donc suis peut être complètement à coté de la plaque…

  • [^] # Re: pour implémenter : enrober dans une fonction

    Posté par  . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 0.

    OK, je vois mieux.

    C'est autant un argument qu'un résultat.

    Du coup, je rapproche ça à un pointeur (oui, je suis développeur c principalement…) avec le contenu de s' mis à jour dans g

    Merci pour ton temps et tes explications !

  • [^] # Re: pour implémenter : enrober dans une fonction

    Posté par  . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 0.

    Bon, comme dit dans mon autre commentaire, je ne connais pas Haskell, je risque donc de dire des énormités, merci de m'en excuser (et de m'expliquer, c'est comme ça qu'on progresse !)

    Mais je ne comprend pas comment ça peut fonctionner, aussi bien en interne (comment haskell gère des résultats non évalués) que ton bout de code final

    f l = let (res, s') = g s' l
          in res

    Ici, le s' que tu passes en argument , il vient d'où ?
    (car si je comprend bien,

    (res, s') = g s' l

    c'est l'évaluation de la fonction g, avec comme argument s' et l, retournant res et s'.)

    Le 2e point que je ne capte pas, c'est :

    La fonction g va se contenter de crée une liste qui contient :
    [L0/s,L1/s,…]
    Mais elle contient les fonctions non évaluées.

    La liste d'origine est donc parcourue pour créer la 2nde liste, contenant les fonctions non évaluées. Mais pour évaluer les résultats, la 2nde liste devra aussi être parcourue, non ?

  • [^] # Re: valeur vs pointeur

    Posté par  . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 2.

    Exact, j'étais parti dans l'idée que a(), b() et c() étaient des fonctions écrites soi même dont on maitrisait le contenu.

  • # valeur vs pointeur

    Posté par  . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 1.

    Je ne connais pas Haskell, mais l'évaluation ou non des paramètres d'une fonction, ça me fait penser à un passage d'argument par valeur ou par pointeur/réference…

    En c:

    int resultat( int longCalculA, int longCalculB )
    {
        if( !longCalculA )
            return longCalculA;
        else
            return longCalculB;
    }
    
    void main()
    {
        resultat( longCalculA(), longCalculB() );
    }

    exécutera les 2 fonctions pour pouvoir passer leur valeurs de retour en arguments.

    Alors qu'en passant les adresses des fonctions en arguments:

    int resultat( int (*longCalculA)(), int (*longCalculB)() )
    {
        int a = longCalculA();
        if( !a )
            return a;
        else
            return longCalculB();
    }
    
    void main()
    {
        resultat( &longCalculA, &longCalculB );
    }

    Seul longCalculA() sera exécuté si il retourne 0.

  • [^] # Re: Demain?

    Posté par  . En réponse au journal [HS] Aujourd'hui, c'est la journée mondiale de la procrastination. Évalué à 1.

    Pourquoi faire demain ce qu'un autre pourra faire le surlendemain ?

  • [^] # Re: Quelques informations sur le site

    Posté par  . En réponse au message information carte linux embarqué. Évalué à 1.

    Merci pour ta réponse !!!!
    Mais pour l'instant, je ne suis pas encore fixé...
    Il me manque notamment des infos sur le prix, le délai etc... de cette carte, et c'est un poids important dans la décision à prendre...
    Et ca, j'ai rien trouvé sur le site, et la demande d'information ne donne pas de réponse...
    En plus, le recherche de forums qui parle de ce chipset, ou de cette carte ne donne pas grand chose...
    Elle doit être bien récente !!!
    Bref, du courage il en faudra...
    Merci encore...