daggett a écrit 533 commentaires

  • # marteau, mouche ?

    Posté par  . En réponse au message modifier une variable. Évalué à 7.

    J'aurais dit que créer le compte de l'élève via "useradd -m -b /home/eleve user" serait suffisant...(man useradd) maintenant il y a probablement des subtilités pour de l'authentification centralisée ?..

    En tout cas je pense que tout ce qui implique d'aller modifier les sources d'un truc système aussi enfoui indique qu'on fait fausse route, et qu'il y a probablement plus simple, au moins via un fichier de conf ou une option bien placée !
  • # Pas assez de protection par [ ]

    Posté par  . En réponse au message Bug de multiligne sous bash. Évalué à 3.

    Il manquait une protection par \[ \] au debut, avec ça je n'ai plus de probleme:
    export PS1='|\[\e[32m\e[1;31m\]\w\[\e[1;34m\]\$\[\e[0m\] '

    Cependant il m'arrive tout de même avec mon prompt perso d'avoir les mêmes problemes que toi, mais pas tout le temps. Je pense qu'il faut aussi regarder du coté des TERM comme dit plus haut (cependant, moi sous un xterm j'y mets "xterm", pas "linux" :) )
  • # malpropre !

    Posté par  . En réponse au message Killer un processus sans fermer la socket ?. Évalué à 3.

    Le noyau va s'occuper de nettoyer tout ce qui était attaché aux process que tu tues; Pour forcer le noyau à ne pas être propre, du plus simple au plus compliqué (je ne sais pas quelle méthode marchera dans ton cas):

    - envoyer un signal "STOP" au lieu de "KILL" à tes process, pour arreter le flux "applicatif"; la connection TCP restera gérée au niveau noyau cependant, bien que silencieuse.
    - Debrancher la prise réseau à la main pour simuler le crash de ton client vis-à-vis du serveur distant
    - ou alors descendre l'interface réseau pour interdire au noyau d'émettre, ça devrait revenir au même.
    - Si tu travailles via réseau, ça peut être embettant :) donc il te faudra créer une deuxieme interface réseau virtuelle du style eth0:0 (dans un network/routage qui soit bien distinct, pour qu'elle ne puisse pas servir de route de secour aux connections de ton appli de test)
    - Si tu n'as besoin que de faire des "connect" TCP qui ne soient pas suivis d'une déconnexion, et qu'il n'y a pas de données à réellement envoyer, tu peux tenter d'apprendre à forger des paquets TCP au niveau utilisateur au lieu de laisser faire le kernel. Mais ça c'est si tu es desespéré.
  • # Type struct != type pointeur

    Posté par  . En réponse au message problème de struct et d'alignement. Évalué à 4.

    Tu a définis Doc et Pos directement comme étant des types "pointeur vers structure" au lieu "structure"; tes deux malloc utilisent donc le sizeof de ces pointeurs (soit 4 octets sur une machine 32 bits) au lieu de la taille réelle des structures.
    Tes deux variables "doc" et "cur" vont donc se retrouver allouées dans la ram avec une taille de 4 octets alors qu'elles en ont besoin de plus, et les acces de leurs champs vont alors déborder. Par exemple là, quand tu écris la valeur de doc->cur, tu vas en fait taper pile à l'emplacement mémoire de cur->row :)

    Tu pourrais corriger rapidement avec "malloc(sizeof(&Doc))" pour avoir la taille réellement nécessaire; mais je trouve que ça fait beaucoup de circonvolutions et que ça embrouille le cerveau.
    Définis plutot tes types de structure en tant que structure ("typedef struct {...} Doc" au lieu de "*Doc") et déclare des variables explicitement pointeurs
    (Doc *doc, Pos *cur;), ce sera plus clair.
  • [^] # Re: find :)

    Posté par  . En réponse au message Effacer les fichier de moins 1K octet. Évalué à 2.

    Le plus propre reste qd meme soit un -exec, soit un find -print0 | xargs -0. En effet le rm $(find ...) se comporte très mal si les fichiers contiennent des espaces, des parenthèses, ou autre.
    Pour être parfaitement blindé, j'aurais dit qu'il faut même utiliser rm -- au lieu de juste rm si un fichier a le malheur de s'appeler quelquechose comme -rf .., mais apparemment ça ne provoque pas de catastrophe avec le rm naïf non plus ;)
  • [^] # Re: Bizarre

    Posté par  . En réponse au message Probleme d'ecriture dans un STRUCT de int .. Évalué à 1.

    les x86 sont little-endian (les octets de poids faibles d'un "int" sont en 1er en mémoire), les power- sont en bigendian.
    Donc quand ton scanf ecrit dans ce qu'il croit etre un pointeur sur int, sur x86 il va écrire "octet 1 octet 2 octet 3 octet 4", qui vont ecrire sur "x" et "y". Sur power il va ecrire "octet 4 octet 3 octet 2 octet 1".
    Puis il va ecrire sur "y et z", puis sur "z et au dela".
    Sur tes tests avec de petites valeurs, octets 2-4 valent 0, et seul l'octet 1 contient entre 1 et 12.
    Avec les écrasements successifs des "%d %d %d" tu vas écrire dans x y z:
    "octet 1 octet 2 , 1 - 2, 1-2" sous x86 (qui a donc la chance de donner la meme valeur si elle etait < 65535) et "3-4, 3-4, 3-4" sous power (donc que des octets nuls)

    Si vous faisiez des tests avec comme valeur "65536", sous x86 la sortie ne donnerait que des 0, et sous power, que des 1.
  • [^] # ou alors date +%s

    Posté par  . En réponse au message script de backup avec suppression de sauvegardes antérieures à n jours. Évalué à 1.

    La methode du find est probablement la plus simple et la plus propre.
    Cependant sache que find se base sur la date du fichier, pas la date codée dans le nom du répertoire: si tu fais une copie de ton backup sans l'option "-a" de cp, elle se retrouvera à la date d'aujourd'hui.

    On peut faire des comparaisons de dates au format texte en bidouillant, par exemple avec la sortie +%s de date qui donne l'équivalent en nombre de secondes depuis 1970.
    Si ton repertoire est deja de la forme YYYYMMDD ou YYYY-MM-DD (c'est ton cas) tu peux donner son nom directement à date, par exemple:

    date_aujourdhui=`date +%s`
    date_backup=`date -d "$tonrepertoire" +%s`
    ecart_secondes=$((date_aujourdhui-date_backup))
    ecart_jours=$((ecart_secondes/86400))

    Ceci va convertir les dates en secondes, et faire la conversion en nombre de jours. C'est un peu tordu, mais ça peut servir...
  • # [Howto]

    Posté par  . En réponse au message Problème multicast et UDP. Évalué à 3.

    A part te renvoyer sur le HOWTO http://tldp.org/HOWTO/Multicast-HOWTO-2.html , je ne sais pas...

    http://tldp.org/HOWTO/Multicast-HOWTO-3.html indique de mettre eventuellement une route pour les paquets multicast : "route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0"

    Vérifie que ton kernel a bien le support multicast (quoique si ton programme tourne c'est sans doute le cas; jete un oeil dans /proc/net/dev_mcast s'il y a bien ton interface réseau de listée)

    Une fois que ton programme tourne, essaier de pinguer l'IP du groupe multicaste abonné (224.0.0.1) depuis une autre machine pour voir si quelqu'un répond

    Le HOWTO semble dire que 224.0.0.1 est plus ou moins reservée... essaie avec un autre groupe multicast ?..
    As-tu fait tourner un sniffeur de paquet (ethereal/wireshark) pour voir si des paquets étaient bien émis/reçus sur le réseau, à défaut d'être reçu par l'appli ?
    Es-tu bien en réseau "local", c'est-à-dire toutes tes machines sur le même lien ethernet (via un switch éventuellement), sans routeur entre les deux ? Le multicast nécessite que les routeurs soient adaptés...

    Sinon pour tes questions:
    - je pense qu'un multicast est effectivement plus propre; au moins, les programmes qui l'utilisent peuvent tourner en utilisateur normal; le broadcast a, je crois, l'inconvénient de devoir magouiller les paquet à la main et d'avoir les privilèges root
    - L'IPv6 n'a pas d'impact sur le multicast v4
  • [^] # Re: Débordement de tableau ?

    Posté par  . En réponse au message Segmentation fault incomprehensible. Évalué à 3.

    Du peu que je peux deviner de ma non-connaissance du fortran, les irem() semblent être assignés aux indices des 2 éléments mn() qui ne sont ni le min, ni le max.
    Mais que se passe-t-il si tous les mn() sont égaux, ou qu'au moins 2 valeurs soient égales au min ou au max ? Dans ce cas seuls le 1er ou les 2 premiers "if" seront valides, et le else final ne sera jamais pris, ou pris 1 seul fois. irem(2), voire irem(1) ne sera jamais affecté et restera égal à la valeur de la case mémoire où il se trouve, donc aléatoire.

    Vérifie que ce cas particulier est bien traité dans ton code. Par exemple, change ta routine fortran pour tester si idummy vaut bien 3 à la fin, et sinon quitte en affichant toutes tes valeurs mn(); tu devrais voir la cause du problème.
  • [^] # Re: device

    Posté par  . En réponse au message no such device. Évalué à 1.

    Plus généralement, un "périphérique".
    sur une ioctl SIOCGIFINDEX (Interface index) , c'est probablement qu'il cherche une interface réseau qu'il ne trouve pas.
  • [^] # Re: Mes réponses

    Posté par  . En réponse au journal Que répond un codeur dont le programme ne fonctionne pas ?. Évalué à 10.

    Ne pas oublier la phase suivant où on débugue effectivement le code, et lorsqu'on trouve la cause du bug on se demande : "Mais, ça n'aurait même jamais dû marcher ?!"
    (Ça m'est arrivé plusieurs fois...)
  • [^] # Re: Les montres ? Quelles montres ?

    Posté par  . En réponse au journal Les montres. Évalué à 10.

    [pareil]. Avec le nombre d'horloges, horodateurs, enseignes de pharmacies, telephones portables, lecteurs mp3, applets dockables qui donnent l'heure, l'interet de la montre en tant que "outil de mesure du temps" est devenu nul. Ne reste plus que le coté décoration, finalement.
  • [^] # Re: La honte du noyau

    Posté par  . En réponse au message Raisons susceptibles du déclenchement d'OOM killer. Évalué à 3.

    vous pouvez desactiver le memory overcommitment [...]
    Voir "man proc" pour les valeurs à mettre effectivement dans /proc/sys/vm/overcommit_memory: (dépend si on a un 2.4 ou un 2.6)

    /proc/sys/vm/overcommit_memory
    This file contains the kernel virtual memory accounting mode.
    Values are:
    0: heuristic overcommit (this is the default)
    1: always overcommit, never check
    2: always check, never overcommit

    ou modifier la valeur dans /proc/sys/vm/overcommit_ratio


    Voir aussi /proc/meminfo, il y a des entrées sur l'utilisation de mémoire "overcommitée" expliquées dans http://www.redhat.com/advice/tips/meminfo.html
  • [^] # Re: rev

    Posté par  . En réponse au message Ecriture "mirroir". Évalué à 5.

    Bien sûr, si un des composants de l'IP a plusieurs chiffres, rev va les inverser aussi, je ne suis pas sûr que ce soit le comportement souhaité...
    Pour le cas précis d'une IP, on peut inverser les champs (au lieu des caractères) avec awk:
    echo "1.0.0.127" | awk -F . '{ print $4"."$3"."$2"."$1 }'

    Mais cela m'ammène à une question: pourquoi vouloir inverser ? Ça ressemblerait beaucoup à un problème de network byte order tout ça ;) Si c'est le cas, et que ça concerne la réparation de la sortie d'un programme C buggué, je conseille de corriger le programme en lisant la page de man de "htonl" par exemple.
  • [^] # Re: Celle qui n'a pas de ventilo !

    Posté par  . En réponse au journal Et pour noel c'est quelle carte graphique qu'on s'achète ???. Évalué à 6.

    Bientôt on en aura sur la ram !
    Trop tard.... http://www.clubic.com/actualite-37928-corsair-dominator-ddr2(...)
  • # ben

    Posté par  . En réponse au message Ta mère sous Linux (?). Évalué à 3.

    avec Linux je crains de me récolter l'assistance technique en pire qu'avec Windows ou MacOS...
    L'assistance technique, ce sera toi de toute façon, alors autant que ce soit sous le système que tu connais le mieux et qui est dépanable à distance via un ssh. Je te laisse conclure :)

    En ce qui me concerne j'ai installé une mandrake puis une ubuntu à ma mère, qui n'avait pas d'expérience de windows de toute façon. Ça se passe plutot bien... en plus de ssh on a même accès à la session graphique par vnc, bien pratique quand par téléphone on ne comprend rien à rien aux descriptions de ce qui se passe à l'écran...

    Son utilisation est plutot basique, mail, web, sauver des documents du web dans un coin, et parfois l'imprimante, le scanner et l'APN.

    L'environnement, c'est celui d'Ubuntu (gnome) par defaut; j'ai laissé les composants "standard", c'est-à-dire ceux que je n'aurais jamais utilisé personnellement ;) (par ex. Evolution pour le mail, je suis plutot Sylpheed) pour être à peu-près sûr que ça marche tout ensemble sans que j'aie à fignoler la config moi-même.

    Les réflexions pertinentes, euh... pas que je sache, ça marche ou pas. C'est plutot moi qui me les faits en fonctions des appels à l'aide (par exemple, l'extrème pertinence de Gnome de mettre les documents supprimés d'une clef USB dans la corbeille ... locale à la clef USB, et apres on s'étonne que la clef est vide mais qu'on ne peut rien mettre dessus.)
  • [^] # Re: Pauvres mouches

    Posté par  . En réponse au journal Licence d'une capture d'écran. Évalué à 3.

    Je comprends pas trop: si c'est libre, ils ont bien le droit, non ? (ou alors ta BD était sous une autre license incompatible...)
    De plus, apparemment il n'y a que les personnages de repris (pas une planche existante), à ce compte-là s'il y a vraiment un "propriétaire" ce serait le dessinateur, pas le scénariste ? Ou bien il aurait fallu changer les noms des personnages :) ?
  • # Des députés.

    Posté par  . En réponse au journal Que libéreriez-vous si vous aviez 100 millions de dollars ?. Évalué à 9.

    Y a pas de raison qu'il n'y ait que les majors et les lobby des brevets qui puissent acheter la/les voix de nos représentants du peuple.
  • [^] # interview sur groklaw

    Posté par  . En réponse au journal CopiePress contre l'internet bis le retour..... Évalué à 5.

    Un membre de Groklaw a fait une interview de quelqu'un de CopiePress:

    http://www.groklaw.net/article.php?story=2006101108382797

    (la version originale en Français est visible apres la traduction en anglais)

    On remarque que bien que robots.txt et les champs Meta "noarchive" existent, cette solution n'est "pas acceptable" pour elle. Mais pas plus de justification... effectivement, c'est un peu de la mauvaise foi.
  • [^] # schizo

    Posté par  . En réponse au journal Sus aux maniaques de la théorie du complot !. Évalué à 10.

    Strictement HS, mais tout le monde utilise le terme "schizophrène" à tord: la schizophrènie c'est surtout avoir des hallucinations (comme voir ou entendre des gens qui n'existent pas).
    Ce que tu voulais dire, c'est un trouble de personnalités multiples, et ça s'appelle "personnalité multiple" tout simplement (ou "Trouble dissociatif de l'identité" apparemment selon les dernières nomenclatures, ou juste "multi" sur la tribune)

    http://fr.wikipedia.org/wiki/Schizophr%C3%A9nie#A_priori_et_(...)
  • # Copie locale des images ?

    Posté par  . En réponse au journal Collection de mascottes libres. Évalué à 2.

    Je remarque que tu utilises directement les images sur leur serveur d'origine au lieu d'avoir fait une copie locales; en général les webmaster n'aiment pas trop qu'on leur "pique" leur bande passante :)
    De plus tu es à la merci de toute réorganisation coté distant; ce soir par exemple je ne voyais pas le logo FreeDOS car leur serveur renvoyait une erreur....
  • [^] # ou ECN

    Posté par  . En réponse au message Apache: les headers passent, pas les donnees. Évalué à 3.

    Ça me rappelle aussi un probleme que les kernels 2.4.x ont eu il y a quelques années apres avoir implémenté l'ECN (Explicit Congestion Notification) qui est un protocole relativement récent, et qui d'apres ce que j'ai lu utilise des bits sur les paquets IP qui étaient inutilisés. Certaines config de routeur/firewall sur les sites web distants (ou intermédiaires dans le réseau) empéchaient ces paquets "bizarrement formés" de passer.
    C'etait il y a 6 ans, hein; depuis tout le monde a corrigé ses routeurs; mais peut-être que tu es dans ce cas...
  • [^] # MTU ?

    Posté par  . En réponse au message Apache: les headers passent, pas les donnees. Évalué à 3.

    Peut-être une taille de trame max mal configurée sur ton interface, regarde avec ifconfig (1500 pour de l'ethernet, 1492 pour du pppoe.. "Content-Length: 1457" s'en rapproche dangereusement).

    L'outil "tracepath" permet de découvrir la MTU "minimum" entre deux machines (enfin je crois), mais je ne sais pas s'il découvre des erreurs de config

    Aussi dans /proc/net/snmp, la fin de la première ligne IP donne des stats sur les paquets IP fragmentés (plus gros que la MTU, et donc coupés en morceaux), regarde si les "FragFails" ou "ReasmFails" augmentent pendant tes tests (en meme temps, wireshark ne semble rien voir la dessus)
  • # Rien ne marche avec cette carte mère.

    Posté par  . En réponse au message Bloque au boot apres upgrade Duron => Core 2 Duo. Évalué à 2.

    Apparemment les cartes mere pour core 2 duo sont toutes affublées de ce controleur JMicron qui semble poser de gros problèmes au kernel.
    Hier soir j'étais au téléphone pour dépanner quelqu'un qui venait de s'acheter une config core 2 duo (carte mere MSI cette fois), et impossible d'installer quoi que ce soit, le lecteur CD étant en IDE.

    Avoir un disque IDE signifie de meme qu'il n'est pas visible (du SATA marcherait par contre).

    Ca fait quelques mois que ça dure:
    https://launchpad.net/distros/ubuntu/+source/linux-source-2.(...)

    Je ne sais pas si le tout dernier kernel 2.6.18 du jour a reglé le probleme...
    Essaye de booter en rajoutant l'option "all-generic-ide" , ça semblait passer pour certains kernels...
  • # Et l'outil de déploiement de packages sera...

    Posté par  . En réponse au journal la RATP sous Linux. Évalué à 10.

    ... ratp-get