Arthur Accroc a écrit 2084 commentaires

  • [^] # Re: Dérangeant

    Posté par  . En réponse au journal [HS] Tester les intuitions morales. Évalué à 3.

    Et c'est la que l'exemple du tram est meilleur que ton exemple ;-)

    Mon exemple ne prétendait pas avoir un intérêt dans ce genre d'études. C'était en réponse à l'affirmation que la question du tram me dérangeait. La raison pour laquelle je ne répondais pas à la question, c'est que faire la réponse de la majorité n'apporte pas d'intérêt.

    Je pense que le questionnaire serait plus impliquant avec des exemples réalistes et auxquels ont pourrait plus s'identifier (genre "6 piétons sont sur le trottoir, 5 traversent brusquement juste devant ta voiture, tout ce que tu peux faire pour les éviter, c'est braquer, mais ça implique de faucher celui qui est resté sur le trottoir").

    L'autre problème de réalisme du questionnaire pour les questions de ce genre, c'est la limitation des réponses : tu as le choix entre ces deux réponses, alors que dans la vraie vie, le bon comportement consiste à chercher si au delà des mauvais choix évidents, il n'y aurait pas une solution moins évidente, mais meilleure.
    Si je recrutais quelqu'un pour un poste à responsabilités dans une société de tramway en lui posant la question avec les trois choix, pour moi le bon candidat serait celui qui me dirait qu'actionner la manette serait compréhensible, mais doit être absolument prohibé par le réglement de la compagnie, mais surtout n'accepte pas la limitation des réponses et me dirait que si cet exemple est sérieux, il y a de graves problèmes de sécurité dans la compagnie qu'il propose de s'atteler à résoudre tout de suite.

    Sinon, concernant l'intérêt du questionnaire, c'est un peu dommage qu'ils n'aient pas prévu une granularité un peu plus fine dans leurs réponses :
    1. obligatoire,
    2. souhaitable,
    3. acceptable mais pas souhaitable,
    4. moralement interdit.

    Je pense que là, on commencerait peut-être à voir des différences de sensibilité dues à la culture. Par exemple, pour le tram, un russe pourrait être plus enclin à considérer la réponse 2, puisqu'en Russie, à ce qu'il me semble, en cas d'accident entre deux usagers ayant des véhicules de type différent (voiture-piéton, camion-voiture), il est toujours considéré que le conducteur du plus gros véhicule est en tort. Donc le russe pourrait considérer que les cinq personnes sur la voie normale du tram n'ont pas vraiment plus de torts que celui sur la voie de garage.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Dérangeant

    Posté par  . En réponse au journal [HS] Tester les intuitions morales. Évalué à 7.

    tu dois choisir entre les deux, que fais-tu?

    La question d'origine, c'est de savoir si on considère le fait de dévier le tram comme obligatoire, acceptable ou moralement interdit, ce n'est pas la même chose.
    À cette question-là, je répondrais acceptable et je peux même te préciser pas moral : les personnes qui discutent au milieu de la voie normale du tram ont pris un risque, ce n'est pas moral que ce soit quelqu'un d'autre qui en paye les conséquences, même si ça fait moins de victimes. Cela dit, faire ce choix dans l'urgence me paraît tout-à-fait excusable.
    Quant à ce que je ferais à la place de l'employé qui contrôle l'aiguillage, ce qui est une question différente, je ne sais pas : il s'agit de réagir dans le feu de l'action et la réaction qu'on a dans ce type de situation ne correspond pas forcément au choix qu'on aurait fait à tête reposée.

    Bah... Je constate surtout que comme la question te dérange

    Pas plus qu'une autre, c'est juste que l'exemple est naze, à moins de graves problèmes de conception du tram quant à ce qui est de la sécurité.

    Une situation qui dérange vraiment, c'est une situation qui peut t'arriver demain à toi. Par exemple :
    Tu es au volant de ta voiture, un piéton déboule au milieu de la rue juste devant toi, pas le temps de freiner, juste de donner un coup de volant, sachant que ça va faire arriver ta voiture sur le trottoir, mais même pas le temps de jeter un coup d'œil pour vérifier qu'il n'y a pas de piéton en face, de toute façon même pas le temps de réfléchir, tu donnes le coup de volant par réflexe, pendant deux dixièmes de secondes, tu est soulagé d'avoir épargné le piéton, avant que ta voiture en fauche six autres, qui étaient tranquillement sur le trottoir.
    Je sais, je n'ai pas posé de question, mais une situation qui dérange, ce n'est pas tant une situation où il s'agit de rélféchir à un choix par rapport à ton sens moral, qu'une situation où tu n'as pas le temps de te poser la question et où la réponse que tu donnes par réflexe s'avérera après coup complètement contraire à celui-ci.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Re: tramway

    Posté par  . En réponse au journal [HS] Tester les intuitions morales. Évalué à 2.

    La proposition de diriger le tram sur une voie de garage pose le même problème : il devient quoi, le tram, en bout de voie de garage ? et ses passagers, qu'est-ce qu'il en reste ?
    Sinon, le tram fou, il faut voir quels autres accidents il risque d'avoir (virage trop serré plus loin, etc.) et en particulier quels sont les autres moyens dont on dispose pour l'arrêter et avec quels risques pour les passagers.
    Le moyen le moins risqué serait sûrement de couper le courant de la ligne. Bizarre que la compagnie ne l'ai pas déjà fait alors qu'elle est au courant.
    Bizarre aussi que le conducteur de dispose ni de frein de secours (sur une simple voiture, c'est obligatoire : c'est l'un des rôles du frein à main) ni d'un coupe-circuit mécanique pour couper l'alimentation du moteur.

    En fait, c'est naze comme question. Rassurez-moi, le gars qui l'a posée , il est psychologue ou philisophe, il ne travaille pas dans la conception ou l'exploitation de tramways ? ,-)

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Alternatives à la souris

    Posté par  . En réponse au journal Dvorak c'est mal!. Évalué à 2.

    le trackbal c'est bien ca ?

    J'ai commencé à avoir des douleurs, principalement à la main droite. J'ai amélioré ma position sur le clavier, je suis passé à un MS Natural Keyboard et j'ai repassé la souris à gauche. J'ai alors commencé à avoir des douleurs à la main gauche...
    Le fait est qu'il est possible d'avoir une position à peu près correcte avec (malgré) un clavier standard, alors que c'est impossible avec une souris standard : poignet horizontal et main pliée vers le haut à cause de la forme bombée resserrent le canal carpien, la tension musculaire contribue à comprimer le nerf qui passe dans le canal carpien, il ne manque plus que les mouvement du poignet et les clics qui font jouer les tendons pour l'écraser au mieux.

    Du coup, j'ai essayé un trackball (un basique), un touchpad (PS2 et de type Synaptic pour avoir le meilleur support sous GNU/Linux, et configuré aux petits oignons avec accélération progressive, zones de défilement, vitesse appropriée) et une souris ergonomique type 3M (une AniMax, la marque d'origine).
    La souris type 3M m'a apporté un soulagement immédiat (position idéale, plus de mouvements du poignet), mais manque un peu de molette de défilement (et il faut un peu de temps pour retrouver de la précision alors que c'est le bras qui bouge et plus le poignet)...
    Avec le touchpad, c'est un peu moins flagrant (plus de tension musculaire, bonne position possible, mais encore des mouvements du poignet), mais c'est bien si l'on n'a pas déjà des douleurs au moment.
    Le trackball n'a pas été convaincant pour moi (beaucoup de mouvement des doigts), quoique plutôt mieux quand même qu'une souris standard.

    Après, ça peut dépendre de si ta constitution t'expose plus au risque de syndrome du canal carpien, de tendinite ou d'autre chose...

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Frein à main

    Posté par  . En réponse au journal Augmentez les performances de votre ... Linux. Évalué à 1.

    Certaines personnes dclarent quelles peuvent faire fonctionner votre PC comme le puissant Pentium 4 3 gigahertz avec 512MB de RAM.
    [...]
    en plus ça date un peu c'est plus un pc puissant ça


    Tu rigoles ! Un PC actuel qui fonctionnerait comme un P4 à 3 GHz avec 512 Mo sans enlever le frein à main Windows Vista, ce serait la folie !

    J'ai eu l'occasion de tester un portable récent avec Vista (une version sans effets tape à l'œil pourtant), c'était pire que mon vieux portable P3 700 MHz avec 256 Mo !
    On ne comprend même pas comment ils sont arrivés à une telle catastrophe.

    Bon, depuis peu, la situation a changé : la moitié haute de la mémoire de mon portable déconne par intermitence, alors j'en suis réduit à tourner avec 128 Mo...
    Faudrait que je regarde : ils ont peut-être un logiciel pour ça. ;-)

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # OK, merci

    Posté par  . En réponse à la dépêche Évolutions sur LinuxFr. Évalué à 1.

    Sauf qu'elle est toujours là (affichée une fois sur deux en page d'accueil).

    OK, merci.
    D'habitude, je la regarde quand je la vois, je ne m'étais jamais demandé si elle était affichée tout le temps.
    Là, je me suis demandé si elle était encore là, donc je la cherche, une chance sur deux, loi de Murphy et forcément elle n'était pas affichée...

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # Les astuces, c'était mieux avant.

    Posté par  . En réponse à la dépêche Évolutions sur LinuxFr. Évalué à 2.

    Je me joins aux remerciements pour tout le travail accompli pour maintenir le site, mais je me permets toutefois de soulever deux petits bémols concernant les astuces :
    - J'aimais bien la boîte astuces !
    - Supposons que je tombe sur une astuce un peu vieille et que je me dise « tiens, il y a plus simple pour faire ça, maintenant ». Là, je me dis que je pourrais l'ajouter en commentaire, mais avec les forums, ce n'est plus possible, c'est dommage...

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Re: 2020

    Posté par  . En réponse au journal La quête du clavier parfait en 10 points. Évalué à 1.

    Le Logitech Comfort est nickel aussi, pour ça.

    Oui, mais il court encore moins les rues que le Microsoft. Surtout si l'on espère trouver la version avec fil moins chère...

    Sinon, je serais encore plus tenté par un Kinesis Contoured (sauf le prix !) et le croisement d'un Typematrix avec un Goldtouch, ça serait pas mal non plus, si l'une des deux boîtes se décidait à le faire...

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # 2020

    Posté par  . En réponse au journal La quête du clavier parfait en 10 points. Évalué à 1.

    Le TypeMatrix 2020 est mieux placé que le 2030 pour tes points 5 (touches Enter et autres plus grosses) et 10 (moins cher à la base et TypeMatrix vend au compte gouttes des 2020 de base encore moins cher sur eBay).
    Il permet aussi une meilleure séparation des mains, donc une moindre déviation latérale des poignets. Par contre, il est moins moderne et moins chic. Il faut savoir ce qu'on veut.

    Cela dit, je tape tout ça sur un vieux Microsoft (tant pis) Natural Keyboard (bon, c'est le seul produit MS que j'apprécie) avec un gros repose poignet devant qui me sert de repose avant bras (sinon, le clavier est trop épais) : les touches en quinconce, c'est pas génial, mais j'y étais déjà habitué avant, et la meilleure orientation des poignets permise par les pavés séparés et orientés et la forme "en toit", j'y suis habitué aussi.
    Autant, je serais tout à fait près à me débarrasser des touches en quinconce, autant la disposition des poignets meilleure qu'avec un clavier plat et "tout collé", j'y tiens ! Utiliser un clavier plat me donne tout de suite une impression désagréable, voire très désagréable s'il est en plus penché vers l'avant.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Dictionnaire

    Posté par  . En réponse au journal Vista c'est vraiment un OS rigolo :). Évalué à 5.

    Non, mais les gars aussi, ils pensent encore lire de l'anglais, alors qu'il faut prendre son dictionnaire de globish de marketing.

    On connaissait déjà :
    ready : qui n'est pas réellement ou ne supportera jamais
      ex : "HD ready", "V92 ready"

    Maintenant, on sait aussi que :
    capable : qui peut supporter, mais de préférence sans possibilité d'en retirer une quelconque utilité

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Re: Animaux féminins

    Posté par  . En réponse au journal Tergiversations psychoquantiques. Évalué à 2.

    À vue de nez, il manque encore :
    - oie (il y a un masculin, mais on emploie plutôt le féminin génériquement),
    - plie,
    - tanche...

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Re: À propos de Python

    Posté par  . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 1.

    donc grosso merdo 2000~2001.

    Il me semble que j'avais essayé un peu après ça, mais la doc que j'avais trouvée n'était peut-être pas hyper à jour...

    Existerait-il une doc (à peu près à jour...) genre "Python en 30 mn pour ceux qui programment déjà dans un langage de script" ?
    (Ce n'est pas que je ne pourrais pas chercher moi-même, c'est juste que si je tombe aussi bien que la dernière fois...)

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # À propos de Python

    Posté par  . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 1.

    Bah, tu peux utiliser la methode __iadd__ :
    variable_avec_un_nom_significatif += 1

    Merci de l'info.
    C"est récent, cette possibilité (moins de quelques années), ou c'est la doc que j'avais trouvée quand j'avais essayé Python qui était toute pourrie ?

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Re: Alors ? enfin des destructeurs ???

    Posté par  . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 1.

    Le problème c'est que avec un GC tu n'as pas vraiment de controle sur le moment de destruction de tes objets comme en C++ .

    J'en suis conscient. La conclusion logique est de ne pas utiliser un GC.
    Sur le coup, j'ai presque failli me lancer à faire un fork de Ruby avec un comptage de références et des destructeurs (mais bon, je me suis assis et j'ai attendu que ça passe ;-) ).
    Bon, Perl 6 est sensé avoir un GC et des destructeurs. J'ai jeté un coup d'oeil à la description du principe, ça a l'air complexe, voire lourd, donc j'attends de voir (et dans le doute, je suis peut-être le perliste le moins impatient de la sortie de Perl 6)...

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # 60 Hz

    Posté par  . En réponse au journal Les grands écrans c'est bien (mais galère). Évalué à 1.

    j'obtiens sans aucun problème la résolution de 2048x1536@60Hz

    Et tu l'utilises vraiment ?
    Non, parce que 60 Hz, sur un CRT, c'est un truc à se finguer les yeux !

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Poster du code

    Posté par  . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 1.


    class Plop:
    ....def __init__(self):

    ....def __str__(self):

    (désolé pour les '.' mais je savais pas comment faire plus rapidement ;-))


    http://linuxfr.org/tips/572.html

    Jeu thématique : le recoder en Ruby (ça ne doit pas être très difficile).

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # Pistes

    Posté par  . En réponse au message Problème LDAP. Évalué à 1.

    Afin d'utiliser l'authentification SASL avec ldaps

    Je précise tout d'abord que je n'ai jamais utilisé SASL pour quoi que ce soit. J'ai déjà configuré (au boulot) un annuaire LDAP avec authentification de machines clientes dessus (et TLS pour empêcher tout sniffage de mot de passe sur le réseau), mais je ne sais pas quel impact supplémentaire a l'utilisation de SASL. Donc en particulier, ce que je vais te dire n'en tient pas compte.

    As-tu un intérêt à utiliser SASL au delà de la connexion au serveur LDAP ?
    Parce que je pense que la plupart des gens se contentent de TLS et que ça marche relativement facilement; en plus, comme ça n' a pas d'impact sur le mécanisme en général, tu peux commencer par mettre au point sans lui et l'ajouter quand le reste fonctionne.

    je stocke les mots de passe en CLEARTEXT.

    Pas glop !
    S'il n'est pas possible d'avoir un mot de passe chiffré avec SASL, c'est une bonne raison de ne pas l'utiliser.

    J'arrive à faire mes requêtes ldapsearch avec l'utilisateur admin et avec les utilisateurs autres, en ldap et en ldaps.

    ldaps, c'est normalement du SSL. Quel est l'intérêt d'utiliser SASL en plus (en fait, c'est une vrai question, l'intérêt de SASL m"échappe d'un point de vue général, alors qu'il doit bien y en avoir un) ? ou est-ce utilisé à la place ?

    En plus, les ACLs sont respectées : typiquement, tous les champs userPassword sont accessible depuis admin, un utilisateur lambda peut voir son mot de passe mais pas les autres, que du classique.

    Ce qui signifie que l'authentification sur le serveur LDAP fonctionne correctement.
    Note que si un des tes utilisateur en laisse un autre sur son compte 5 mn, celui-ci récupère son mot de passe en clair ! Il est normalement possible dans les ACL d'autoriser uniquement l'authentification et l'écriture pour le mot de passe, sans la lecture.
    Au passage, évite les regexps dans les ACL, cela grève les perfs d'OpenLDAP.

    Si je fait 'getent passwd', j'ai bien mes utilisateurs ldap.

    Donc nss est bien configuré.

    Par contre, nss et pam ne peuvent pas accéder au champ userPassword

    Ils n'ont pas à accéder au champ userPassword. À supposer qu'ils y accèdent, comme il n'est pas dans un format Unix, ils ne sauront pas quoi en faire.

    Le principe est que pamldap avec pam bien configuré teste avec une authentification sur le serveur LDAP si l'utilisateur et le mot de passe sont valides dessus, et considèrent si c'est le cas que l'utilisateur a le droit d'accéder à la machine cliente. Il s'agit d'un bind LDAP avec le dn de l'utilisateur et le mot de passe fourni, précédé d'une recherche avec la conf par défaut de ldap.conf (anonyme pour moi, mais ce n'est peut être pas forcément le cas, je n'ai pas de ldap.conf sous le coude pour vérifier) sur le nom d'utilisateur pour déterminer son dn. Il faut que ces deux opérations soient possibles.

    Pour moi, le problème vient donc de ta configuration de PAM (le plus probable, il est très pointilleux : pour situer, ça m'est arrivé souvent qu'un fichier de conf qui fonctionne parfaitement avec une version ne fonctionne plus avec une version ultérieure) ou de ton ldap.conf (ou alors ça fonctionne mal à cause de SASL). Note que si ça n'a pas changé, ldapsearch et autres utilisent /etc/openldap/ldap.conf et toutes les autres applis dont PAM /etc/ldap.conf . Moi, pour éviter des problèmes incompréhensibles, je remplace systématiquement l'un des fichiers par un lien sur l'autre.
    Tu devrais tracer les requêtes sur ton serveur pour voir si ton client fait bien les bonnes requêtes et si elles se déroulent correctement.

    Je ne peux pas te donner un exemple de configuration (je suis en vacances), mais éventuellement, si tu peux tester avec une installation de Fedora sur une machine cliente, son installateur graphique a l'avantage de générer une configuration de l'authentification sur LDAP directement fonctionnelle (avec TLS, bon, pour SASL...), ça te ferait une base pour ta configuration de PAM (voire ton ldap.conf).

    Sinon, pour tous tes problèmes de LDAP, la liste ldap-fr ( http://listes.cru.fr/sympa/info/ldap-fr ) peut être un meilleur endroit que LinuxFr pour obtenir des réponses.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Aors ? enfin des destructeurs ???

    Posté par  . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 1.

    Maintenant (et c'est absolument pas un argument) j'ai l'impression que beaucoup plus de personnes utilisant perl se tourne vers ruby plutôt que python.

    Alors, j'ai failli me mettre à Ruby : j'ai commencé un truc en Ruby pour essayer, je m'y suis mis super-vite, j'ai trouvé ça joli, sympa... et puis j'ai eu besoin d'un destructeur. Donc, j'ai tout jeté et j'ai arrêté définitivement Ruby (à moins qu'il n'existe vraiment un jour des destructeurs).

    J'ai envisagé de me mettre à Python (pour écrire du code un peu plus abordable pour le commun des mortels, en particulier pour mes collègues), mais l'idée de devoir écrire du code genre
    variable_avec_un_nom_significatif = variable_avec_un_nom_significatif + 1
    parce que le concepteur estime que l'opérateur ++ est une complexité superflue, ça me bloque.

    Le modèle objet de ruby est, je trouve, l'un des meilleurs que j'ai vu pour le moment (c'est pas parfait, mais bcp mieux que certains autres langages)

    Plus joli que celui de Perl 5, OK. Mais l'un des meilleurs, rappelez-moi quand il incluera les destructeurs ! Je préfère largement un modèle objet un peu moche à un modèle objet limité.

    Pas la peine de me dire pour la n-ième fois qu'il suffit d'utiliser les fermetures, ça n'a rien à voir, il faut le faire à l'utilisation des objets et non pas à la définition d'une classe : à ce stade-là, il faudrait, au lieu de définir une variable au début d'un bloc, passer systématiquement le bloc en paramètre au constructeur de la variable, au cas où l'on s'aperçoive ultérieurement qu'on a une finalisation à faire sur ce type d'objet. Et là, comme lisibilité de code, il y aura de quoi envier Perl !!!

    Ah, j'ai failli passer sur le fait que les end, c'est naze, parce que c'est moins facile pour déterminer à quoi il correspondent (notamment quand on s'aperçoit qu'on en a oublié un quelque part) qu'avec une indentation comme Python ou des accolades comme Perl ou le C/C++ (de nombreux éditeurs, quand on passe sur une accolade, surlignent l'autre accolade correspondante).

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # Plus lisible !

    Posté par  . En réponse au message [Perl] Modifier un PDF avec PERL. Évalué à 1.

    Intéressant, mais semble y avoir eu un léger problème de mise en page entre le moment où tu as écrit ton astuce et son arrivée dans la rubrique astuce, non ?
    Je pense que le résultat aurait dû ressembler à ça :


    Dernièrement, j'ai eu besoin de modifier un grand nombre de documents PDF, en ajoutant un en-tête et un numéro de page sur chaque page.
    J'ai pu réaliser cette opération rapidement en utilisant Perl et le module
    PDF::API2.
    Voici une version "light" du script Perl que j'ai utilisé :


    #!/usr/bin/perl

    use PDF::API2;

    my $file=shift;
    my $out_file=shift||"test.pdf";
    my $page_cnt=shift||1;
    my $pdf = PDF::API2->open($file);
    my $f1=$pdf->corefont('Times-Roman',-encode => "latin1");
    my $f2=$pdf->corefont('Times-Italic',-encode => "latin1");

    for my $p (1..$pdf->pages()){
        my $page=$pdf->openpage($p);
        $page->add_font($f1);
        $page->add_font($f2);
        my $gfx = $page->gfx;
        $gfx->save; $gfx->fillcolor('black');
        $gfx->textstart;
        
        # Ajout du numéro de page centré en bas
        $gfx->font($f1,10);
        $gfx->translate(297.5,30);
        $gfx->text_center("$page_cnt");
        
        # Ajout de l'entete en haut à droite
        $gfx->font($f2,10);
        $gfx->translate(570,812);
        $gfx->text_right("Texte placé en haut à droite");
        
        $gfx->textend;
        $gfx->restore;
        $page_cnt++;
    }

    $pdf->saveas($out_file);
    exit;

    Vous pouvez aussi placer dans la boucle les instructions suivantes pour afficher en arriere plan de chaques page le mot "TOP-SECRET" en rouge et en diagonal :

        my $gfx2 = $page->gfx(1);
        $gfx2->save;
        $gfx2->fillcolor('red');
        $gfx2->translate(297.5,420);
        $gfx2->rotate(30);
        $gfx2->font($f1,80);
        $gfx2->text_center("TOP SECRET");
        $gfx2->textend;
        $gfx2->restore;

    (c'est le (1) de l'appel de $page->gfx(1) qui permet la mise en arrière plan de texte)


    Pour finir un dernier exemple qui permet d'ajouter un logo (
    logo.jpg) en haut à gauche sur toutes les pages :

    #!/usr/bin/perl

    use PDF::API2;

    my $file = shift;
    my $out_file = shift||"test.pdf";
    my $pdf = PDF::API2->open($file);
    my $nb_pages = $pdf->pages();
    my $img = $pdf->image_jpeg('logo.jpg');
    for my $p (1..$nb_pages){
        my $page=$pdf->openpage($p);
        my $gfx = $page->gfx(1);
        $gfx->save;
        $gfx->image($img,40,790,0.4); # 0.4 est le facteur d'echelle
        $gfx->restore;
    }
    $pdf->saveas($out_file);


    P.S.: Si PDF::API2 n'est pas déja installé sur votre système, vous pouvez utiliser la commande : perl -MCPAN -e "install PDF::API2" pour l'installer.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Mon script

    Posté par  . En réponse au journal Canonical aurait des actions de fabricants de disques durs!. Évalué à 4.

    tu compile le noyau une fois par minute ?

    Je veux pouvoir encore faire quelque chose avec ma machine ! :-)

    j'imagine que c'est un dd bien placé dans le cron

    Au début (j'ai fait des tests plus poussés après avoir écrit le script, justement en l'utilisant), je craignais de devoir activer le disque avec une périodicité inférieure à 10 secondes (ç'eût été le cas avec hdparm -B 255), donc cron était écarté d'office. De toute façon, je préfère avoir une granularité inférieure à une minute, et puis cron n'est pas sensé non plus garantir un déclenchement très précis.
    Qui plus est, l'utilisation de cron pour une très faible périodicité conduit quelquefois en cas de forte charge système à l'accumulation d'appels.
    Un simple sleep dans le script suffit à garantir un délai entre les opérations sans inconvénient.

    combiné avec sync ?

    Je n'étais pas trop chaud pour sync non plus, ayant l'expérience (avec le traitement massifs de mails par le serveur mail après rapatriement par uucp) de la charge système induite par des syncs fréquents (le serveur mail en fait un pour chaque mail).
    Comme une écriture sans sync ne force pas d'activité disque, je me suis donc orienté vers une lecture (aléatoire pour essayer d'éviter de tomber sur des données en cache, doublée pour améliorer les chances).
    En cas de forte charge en accès disque, logiquement ma demande de lecture doit attendre son tour comme les autres, ce qui tendrait à augmenter la périodicité dans une situation où l'opération est superflue. Tant mieux.

    Par ailleurs, pour réduire le risque de délai supplémentaire inopportun au déclenchement en cas de très forte charge CPU, je voulais éviter tout chargement de contexte, donc tout appel d'une commande externe, donc je me suis dirigé vers une solution en Perl pur.

    Bon, je ne prétends pas qu'il n'y aurait pas une meilleure solution (fsync, plus léger qu'un sync complet, serait une bonne piste; une lecture planifiée plutôt qu'aléatoire serait plus propre, mais nécessiterait des informations supplémentaires comme la quantité de données mise en cache à chaque accès disque), mais en tout cas, celle à laquelle j'ai abouti fonctionne de manière satisfaisante : pas d'augmentation du nombre de parquage des têtes après le démarrage, plus discrète que ne l'était le parquage, augmentation de la charge du système insensible.

    tu aurais pus poster le script car il ne doit pas etre tres grand :)

    Il n'est pas hyper petit non plus, vu qu'il contient en plus tout ce qu'il faut pour fonctionner comme un démon.
    Enfin voilà :
    --------
    #!/usr/bin/perl -w
    use strict;

    # Lecture periodique sur le disque dur pour empecher le parquage des tetes
    # alors que le nombre maximal prevu est deja explose depuis longtemps.
    # Fonctionne comme un demon si son nom se termine par "d".

    # Delai entre deux lectures, valeur a ajuster suivant le materiel.
    # ATTENTION : une valeur incorrecte peut ACCELERER la deterioration du disque.
    # Il est donc crucial de l'ajuster finement en controlant l'effet avec smartctl.
    # La valeur presente dans /etc/sysconfig/no_park est prioritaire et les
    # parametres passes en ligne de commande sont encore plus prioritaires.
    my $delai = 60;
    # Descripteur de peripherique du disque, valeur par defaut normalement ecrasee
    # par celle determinee a partir de /etc/fstab.
    my $disque = '/dev/hda';

    use POSIX;

    # Determination du peripherique
    if (open FSTAB, '</etc/fstab') {
        while (<FSTAB>) {
            m:^(\S+?)\d+\s+/\s: and $disque = $1 and last;
        }
        close FSTAB;
    }

    # Determination du delai entre deux activations
    if (open CONF, '</etc/sysconfig/no_park') {
        while (<CONF>) {
            /^\s*DELAI\s*=\s*(\d+)\s*(#|$)/ and $delai = $1;
        }
        close CONF;
    }

    # Prise en compte prioritaire des eventuels parametres de la ligne de commande
    foreach (@ARGV) {
        if (m:/:) {
            $disque = $_;
        } elsif (/^\d+$/) {
            $delai = $_;
        }
    }

    # Ouverture du disque en lecture
    open DD, "<$disque" or die "Impossible d'ouvrir $disque\n";

    # Fermeture du disque et sortie en cas de signal d'interruption
    $SIG{TERM} = $SIG{INT} = sub {
        close DD;
        exit;
    };

    # Affichage des parametres retenus
    warn "no_park : disque $disque, delai : $delai\n";

    # Si le nom de commande se termine par "d", il s'agit du demon,
    if ($0 =~ /d$/) {
    # donc on detache le processus.
        my $tent = 0;
      DETACH:
        if (my $pid = fork()) {
        # Processus parent, on ferme.
            close DD;
            exit;
        } elsif (!defined $pid) {
            if ($! =~ /No more process/ && $tent++ < 5) {     
            # Erreur de fork eventuellement recuperable
                sleep 5;
                redo DETACH;
            } else {
            # Erreur de fork bizarre
                die "Impossible de detacher le processus : $!\n";
            }
        }
        # Processus fils
        close STDIN;
        close STDOUT;
        close STDERR;
        POSIX::setsid();
    }

    # Determination de la fin du disque
    seek DD, 0, 2;
    my $fin = tell(DD);

    # Lecture periodique de donnees au hasard
    my $tamp;
    while (1) {
        seek DD, rand($fin), 0;
        read DD, $tamp, 1;
        # Une deuxieme lecture pour limiter les risques de tomber sur un secteur en cache
        seek DD, rand($fin), 0;
        read DD, $tamp, 1;
        # On laisse passer le delai entre deux activations.
        sleep $delai;
    }
    ----------
    Note : si quelqu'un fait un copier-coller du code ci-dessus avec un navigateur qui conserve les espaces insécables à la copie (ce n'est pas le cas de Firefox), il aura intérêt à les enlever avec une commande du style :
    sed -e 's/\xC2\?\xA0/ /' code_recupere.txt > /usr/local/sbin/no_parkd

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # Autodestruction

    Posté par  . En réponse au journal Canonical aurait des actions de fabricants de disques durs!. Évalué à 4.

    Je suis l'heureux possesseur d'un ultra portable de 2001, un Gateway Solo 3350, mais le même, peut-être dans une qualité un peu meilleure (au moins pour la coque), a aussi été vendu sous la marque Dell (Latitude L400 je crois).
    Même si ce n'est pas une fusée, compte tenu de son âge, il reste agréable à utiliser et suffisant pour ce que j'en fais, mais la question est qu'il reste en état de marche.

    Je me doutais bien au bruit qu'il passait son temps à faire des parcages de tête, mais je n'avais pas pensé que leur nombre était limité. Il a atteint un highscore :
    225 Load_Cycle_Count 0x0032 066 066 070 Old_age Always FAILING_NOW 349225

    La question n'est même pas la distribution que j'utilise : il était déjà paramétré en hdparm -B 255, mais il s'en fiche complètement, il parque quand même les têtes au bout de juste quelques secondes !
    Avec hdparm -B 254, cette fois, il prend le paramètre en compte et atteint la durée mirobolante d'une minute avant de parquer les têtes.

    En conséquence, pour maximiser mes chances de faire durer le disque qui d'après smart est en train de tomber en panne, j'ai fait un script pour empêcher le parcage en forçant une activité disque une fois par minute.
    Ça empêche toute mise en veille du disque, mais de toute façon, je ne l'utilise plus sur batterie depuis qu'il a décidé de tuer sa batterie en la chargeant par intermittences sans jamais la décharger...

    Bon, si quelqu'un d'autre essaye de faire survivre un matériel conçu pour l'autodestruction, je peux éventuellement poster mon script.

    En tout cas, l'info véritablement intéressante quand on achète (entre autres) un portable serait : est-il programmé spécifiquement pour s'autodétruire après un certain temps ?

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Re: Non

    Posté par  . En réponse à la dépêche L'arrêt du support de PHP4 annoncé. Évalué à 1.

    Tu me fais penser à une caractéristique que j'avais oubliée : les buses n'y comprennent rien.

    Pour moi, c'est un avantage : je me vois déjà bien trop souvent obligé de travailler avec des buses (j'ai même un collègue dont le boulot consiste en bonne partie à faire du PHP, à qui j'ai dû expliquer comment faire un truc en PHP, alors que je ne connais pas le PHP), donc toute occasion de l'éviter est bonne à prendre.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Non

    Posté par  . En réponse à la dépêche L'arrêt du support de PHP4 annoncé. Évalué à -1.

    Tous les langages imposent leur façon de penser.

    Mettons que je t'accorde qu'un langage fait forcément des choix pour ses grandes orientations : principalement impératif ou purement fonctionnel (sans parler d'autres principes comme le moteur d'inférences de Prolog), à typage statique ou dynamique, verbeux ou concis,etc..

    Au delà, je ne suis pas d'accord avec toi, parce qu'il y a au moins un contre exemple à tous les langages qui imposent la façon de penser de leur(s) auteur(s). Larry Wall a conçu Perl avec comme devise "There Is More Than One Way To Do It". Et comparé aux langages qui partagent les mêmes orientations principales, comme Ruby ou Python, il n'y a pas photo.

    Si je veux utiliser des destructeurs, j'en ai. Si je préférais utiliser des fermetures à tout va comme l'absence de destructeurs l'impose en Ruby, je pourrais, ça marche, je l'ai fait une fois (une seule) où ça me semblait réellement approprié.
    Si je veux une vérification rigoureuse que j'ai bien initialisé toutes les variables que j'utilise, c'est possible. Si je préfère qu'il m'initialise tout seul les variables auxquelles je fais référence, c'est possible aussi.
    Je peux programmer en orienté objet (au moins, je dispoise du paradigme object complet, avec les destructeurs (pourvu que ça résiste au GC de la version 6)), mais si je préférais me cantonner à un style impératif, je pourrais aussi...

    Alors je reprendrai ta phrase en disant que la plupart des langages imposent leur façon de penser. À part certains dont l'intérêt est justement une façon de penser profondément originale et particulièrement appropriée à certains types de problèmes, ce sont en général les langages que je n'aime pas.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Modèle objet de Ruby

    Posté par  . En réponse à la dépêche L'arrêt du support de PHP4 annoncé. Évalué à 0.

    J'avais déjà été impressionné par le modèle objet de PHP 5.

    Je ne dirai rien, je ne le connais pas (encore; si je retrouve mon hors série PHP 5 de Linux Mag, j'y jette un coup d'oeil cet été).

    Celui de Ruby est incomparable.

    J'avais pensé ça aussi, quand j'avais essayé Ruby, et puis j'ai eu besoin d'un destructeur.

    Je sais, s'il n'y a pas de destructeur, c'est dû au choix du garbage collector (alors peut-être est-ce un mauvais choix) et il y a moyen de contourner (mais c'est plus lourd et j'aime les langages qui supportent ma façon de penser et non pas qui m'imposent la leur).

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • [^] # Vu de plus près...

    Posté par  . En réponse à la dépêche Open Motif 2.3 : Anticrénelage, unicode et plus…. Évalué à 2.

    sur http://en.tldp.org/HOWTO/Font-HOWTO/notgood.html#xorg , il y a carrément deux systèmes de fontes qui cohabitent, avec plus ou moins de bonheur, l'original de X11, et le nouveau, dit "fontconfig", qui supporte les polices vectorielles.

    Après, le fait que les applis (entre autres GTK2 ou Qt) qui utilisent le nouveau puissent ou pas utiliser des polices bitmap dépend en bonne partie de la configuration de fontconfig, dans /etc/fonts/fonts.conf notamment.
    Je n'ai pas encore trouvé pourquoi sur ma distrib certaines polices bitmap sont reconnues par le sélecteur GTK et d'autres pas...

    SInon, le même document explique pourquoi les polices (vectorielles) ne rendent pas forcément très bien sous Linux ( http://en.tldp.org/HOWTO/Font-HOWTO/notgood.html ) et comment améliorer la situation ( http://en.tldp.org/HOWTO/Font-HOWTO/fix.html ; pas de bol, la bibliothèque Freetype améliorée avec l'algo bréveté, je l'avais déjà avant...).

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone