Michaël a écrit 2935 commentaires

  • [^] # Re: en awk

    Posté par  (site web personnel) . En réponse au message Help pour script. Évalué à 2.

    à croire qu'il n'y a que des universitaires pour l'utiliser pour du big data…

    C'est aussi la technologie derrière l'outil machine leraning de AWS :)

    Est-ce que avec R on peut faire des “dashboards“ du genre

    1. Connecte toi à la MySQL x.y
    2. Fait une requête et dessine moi un graphe à partir des colonnes X, Y, Z (timeseries, disons)
    3. Tant que tu y es, fais moi une un histogramme et une fonction de répartition sur X, Y, Z
    4. Fais une calibration de X (disons) sur un modèle donné et fais moi un graphe qui compare la distribution calibrée à la distribution originale.

    Par exemple, à la fin j'ai une page web locale avec deux champs de date que je complète et il fait 1. 2. 3. et 4. ?

  • [^] # Re: en sed

    Posté par  (site web personnel) . En réponse au message Help pour script. Évalué à 2. Dernière modification le 08 juillet 2015 à 23:13.

    la solution sed qui fait 128 caractères ? Le gagnant en a 30 :-)

    Pour moi le challenge était de faire un petit calcul avec sed – dont on peut s'accorder à dire qu'il n'est peut-être pas fait pout ça! :) Sinon j'ai aussi écrit la solution awk qui fait 70 caractères et arrive comme premier parmi les langages généralistes.

  • [^] # Re: en awk

    Posté par  (site web personnel) . En réponse au message Help pour script. Évalué à 2.

    Oui c'est encore plus fragile que la version avec les regexp mais je comprends qu'il s'agit d'un traitement unique, alors bon, autant en profiter!

    Le field splitter est en fait une expression rationnelle. Je n'ai pas le Awk Programming Language (par A, W and K) mais le sed & awk de chez O'Reilly laisse penser que le field splitter est une expression rationnelle dans le programme original.

  • [^] # Re: en sed

    Posté par  (site web personnel) . En réponse au message Help pour script. Évalué à 2.

    Merci :D

    Si tu aimes bien le sed et le awk tu peux savourer les solutions que j'ai données à un petit puzzle sur CodeGolf SE: http://codegolf.stackexchange.com/questions/23259/do-we-sink-or-swim

    Je suis particulièrement fier de la solution sed ! :)

  • [^] # Re: en awk

    Posté par  (site web personnel) . En réponse au message Help pour script. Évalué à 3.

    ou comme ça :)

    BEGIN {
        FS=" *: *"
    }
    
    (NR % 5) == 2 {
        ns = $1
    }
    
    (NR % 5) == 4 {
        printf("%s,%s\n", ns, $2);
    }
    
  • [^] # Re: en awk

    Posté par  (site web personnel) . En réponse au message Help pour script. Évalué à 4. Dernière modification le 08 juillet 2015 à 21:52.

    Je ferais plutôt comme ça, avec un fichier reformat.awk

    BEGIN {
        FS=" *: *"
    }
    
    /Numero de serie/{
        flag = 1
        next
    }
    
    flag {
        ns = $1
        flag = 0
    }
    
    $1 == "chiffrement du certif" {
        printf("%s,%s\n", ns, $2);
    }
    

    puis

    % awk -f reformat.awk < input.text
    12345677889,SHA256
    23345677889,SHA1
    26545677889,SHA1```
  • # en sed

    Posté par  (site web personnel) . En réponse au message Help pour script. Évalué à 5.

    Ton fichier reformat.sed

    /Numero de serie/{
      s/.*//
      N
      h
    }
    
    /chiffrement du certif/{
      s/.*: //
      H
      x
      s/^\n//
      s/\n/,/g
      p
    }
    

    puis

    % sed -n -f reformat.sed < input.text
    12345677889,SHA256
    23345677889,SHA1
    26545677889,SHA1
    26545677889,SHA1
  • [^] # Re: shell

    Posté par  (site web personnel) . En réponse au message Besoin d'aide pour mon premier script en perl: parser un fichier BIND. Évalué à 2.

    Tu peux faire beaucoup plus simple pour la lecture en faisant

    process_lines()
    {
      local recordname type ip
      while IFS=',' read recordname type ip
        # Do something with the zone file
      done
    }
    
    print_csv()
    {
      sed -n -e '2,$p' "$1"
    }
    
    print_csv "/tm[/csvfile" | process_lines
    
  • [^] # Re: Le + intéressant c'est le futur proche

    Posté par  (site web personnel) . En réponse au journal Et ce soir, la démocratie l'emporte ! . Évalué à 4.

    Aube Dorée est très minoritaire (6,28% aux dernières élections, en recul par rapport au précédentes)

    C'est un précision très importante. Les quelques commentaires que j'avais pu lire dans la presse à leur sujet, les donnaient gagnants à l'élection qui a en réalité consacré Syrizia, leur donnant ainsi une importance qu'ils n'auraient pas en réalité.

  • [^] # Re: Le + intéressant c'est le futur proche

    Posté par  (site web personnel) . En réponse au journal Et ce soir, la démocratie l'emporte ! . Évalué à 3.

    Accepter de l'augmenter indéfiniment avec les propositions de l'UE c'est juste accepter un esclavage à vie.

    Ce serait surtout ouvrir la voie à l'élection des néo-nazis d'Aube Dorée. Je pense qu'il faut éviter cela à tout prix, qui a envie de voir un tel parti arriver au pouvoir en Grèce – ou ailleurs? En dépit de la crise terrible qui s'abat sur lui, le peuple Grec a fait le choix de la démocratie et s'est doté d'un gouvernement républicain: tout ceux qui pousseraient Syriza vers l'échec politique feraient le jeu de l'extrême droite!

  • [^] # Re: Deuxième message...

    Posté par  (site web personnel) . En réponse au message re linuxmint 17.1. Évalué à 2.

    Je vois pas de quoi tu parles. (je suis pas très intelligent)

    Pour faire des sauvegardes des fichiers sur une partition, tu peux faire:

    1. Une copie bit à bit de la partition (genre dd)
    2. Une copie du système de fichiers (comme avec dump sous FreeBSD)
    3. Une copie des fichiers eux-mêmes (avec rsync par exemple).

    Tu peux effectivement garder (en plus de /boot) une partition classique, au cas où, si ton volume physique LVM s’est banané… ça m’est jamais arrivé et je suis presque sûr que si ça m’arrive un jour se sera à cause d’un problème matériel.

    Imaginons que j'ai planté un serveur qui ne démarre plus et mon prestataire me propose seulement d'accéder au disque via une console dédiée… pour réparer, je peux faire une copie bit à bit du système de base, réparer chez moi et retransférer l'image sur le serveur. Mon intérêt est d'avoir le transfert le plus petit possible, je suis donc intéressé par une forte granularité dans mon système de partititons.

    (En vrai, c'est aussi un atout du immutable server pattern de ne pas avoir à se soucier de ces cas là!)

  • [^] # Re: Deuxième message...

    Posté par  (site web personnel) . En réponse au message re linuxmint 17.1. Évalué à 2.

    Est-ce que tu peux accéder aux volumes logiques à travers /dev/ ? Parfois c'est important d'avoir des partitions petites pour faire de la restauration bit à bit ou au niveau du système de fichier, à travers le réseau.

  • [^] # Re: Support du math-mode LaTeX ?

    Posté par  (site web personnel) . En réponse à la dépêche Sortie de Makefly 0.4, alternative au moteur de blog statique Nanoblogger. Évalué à 2. Dernière modification le 03 juillet 2015 à 16:55.

    J'accepte toute aide pour des informations complémentaires et des pistes à ce sujet (équations mathématiques). Car pour l'instant je n'ai aucune idée de quoi chercher en particulier.

    Le standard de fait utilisé par la communauté scientifique est LaTeX. L'AMS (American Math Society) a sponsorisé le développement de MathJax, un script JavaScript qui compile les formules LaTeX en HTML (probablement MathML).

    Si tu veux l'intégrer à ton soft, le plus simple est de suivre les recommendations de l'AMS ou bien de regarder comment les autres le font (MathOverflow, plugin MathJax pour trac, par exemple).

  • [^] # Re: Deuxième message...

    Posté par  (site web personnel) . En réponse au message re linuxmint 17.1. Évalué à 3.

    Sous freebsd, quand faut compiler openoffice y a besoin de minimum 30Go…

    C'est probablement vrai, mais si tu fais partie des rares personnes qui doivent compiler OO au lieu de l'installer par les packages, rien ne t'oblige à utiliser un dossier sur ton système racine comme répertoire de travail.

  • [^] # Re: outils unix

    Posté par  (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 2.

    c'est vrai qu'avec la solution que je propose, le cas du tag qui s'étale sur 2 lignes ne sera pas pris en compte… mais ça peut se négocier :)

    Oh oui, je pense qu'avec un script sed bien poilu, on pourrait presque à faire onsgmls sur du HTML! :D

    D'un autre coté , l'idée est de "monter en compétence", donc l'utilisation d'un outil tout prêt ne me semble pas être ce que Bobmoutarde demande.

    Oui bien sûr, mais c'est bien de savoir que certains outils ont leur limites, et l'idée qu'on peut utiliser des expressions rationnelles pour analyser le HTML, c'est comme le chiendent, il vaut mieux s'en débarrasser le plus vite possible. C'est pas comme si analyser du HTML était la seul chose qu'on pouvait faire avec du texte!

    Par exemple, on peut extraire des données des pages HTML avec de expressions rationnelles. Si il cherche du texte pour rentrer dans la moulinette, il peut prendre des livres (Gutenberg Project), faire du sqlite3 + shell, etc.

    http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

  • # Solution avec onsgmls

    Posté par  (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 3.

    Utilise le programme onsgmls de Jim Clark pour normaliser ton document

    % onsgmls index.html 2>&- | sed -n -e 's/^(//p' | sort | uniq -c
       4 A
       1 BODY
       2 BR
       1 DIV
       1 H1
       1 HEAD
       1 HTML
       3 LI
       6 LINK
       1 META
       1 TABLE
       2 TD
       1 TITLE
       1 TR
       1 UL

    Comme écrit plus haut la sortie de onsgmls ressemble à ça:

    % onsgmls index.html 2>&- 
    (HTML
    (HEAD
    AREL CDATA stylesheet
    AHREF CDATA style.css
    ATYPE CDATA text/css
    (LINK
    ACONTENT CDATA text/html; charset=iso-8859-1
    AHTTP-EQUIV CDATA Content-Type
    (META
    AREL CDATA Start
    AHREF CDATA index.html
    ATYPE IMPLIED
    (LINK
    AREL CDATA Appendix
    AHREF CDATA index_types.html
    ATYPE IMPLIED
    ATITLE CDATA Index of types
    (LINK
    AREL CDATA Appendix
    AHREF CDATA index_values.html
    ATYPE IMPLIED
    ATITLE CDATA Index of values
    (LINK
  • [^] # Re: outils unix

    Posté par  (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 3. Dernière modification le 01 juillet 2015 à 19:54.

    Je suis certainement le premier à utiliser Unix pour résoudre un problème, mais si je veux extraire la ligne de tags de quelque chose comme

    <a
    href="http://pasla"
    >Un guillemet"<
    img
     alt="Un chevron<"
     src="http://ailleurs" /></a>
    

    avec du sed et bien il va falloir par commencer par nettoyer très soigneusement l'entrée.

    Sans aller jusqu'à utiliser (explicitement) une bibliothèque adaptée je pense que le passage par un des outils de onsgmls ou bien par tidy est à recommander.

    Exemple de output de onsgmls

    (HTML
    (HEAD
    AREL CDATA stylesheet
    AHREF CDATA style.css
    ATYPE CDATA text/css
    (LINK
    ACONTENT CDATA text/html; charset=iso-8859-1
    AHTTP-EQUIV CDATA Content-Type
    (META
    AREL CDATA Start
    AHREF CDATA index.html
    ATYPE IMPLIED
    (LINK
    AREL CDATA Appendix
    AHREF CDATA index_types.html
    ATYPE IMPLIED
    ATITLE CDATA Index of types
    (LINK
    AREL CDATA Appendix
    AHREF CDATA index_values.html
    ATYPE IMPLIED
    ATITLE CDATA Index of values
    (LINK
    AREL CDATA Appendix
    AHREF CDATA index_modules.html
    ATYPE IMPLIED
    ATITLE CDATA Index of modules
    

    Après si il y a une bonne raison de tout faire n'importe comment, c'est chacun comme il veut.

  • [^] # Re: outils unix

    Posté par  (site web personnel) . En réponse au message Compter les tags HTML d'une page. Évalué à 4.

    Tu n'es quand-même pas en train de recommander d'analyser du HTML avec des expressions rationnelles? :)

  • [^] # Re: Chouette

    Posté par  (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 0.

    N'importe quoi !

    Oui tu as raison d'être plus précis.

    Et même dans le contexte du javascript, pourquoi ne pourait-on pas copier les structures qui ont des méthode.

    Parceque tu ne peux pas copier (au sens de dupliquer) les fonctions, ou plutôt les closures.

  • [^] # Re: Chouette

    Posté par  (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 3.

    Qu'as-tu donc contre la myriade d'exemples qu'on peut trouver sur le web ? :)

    Je n'ai rien contre, je veux juste comprendre à quoi ça sert. Mon parcours de programmeur avant le JavaScript contient plein de choses, et beaucoup de fonctionnel (surtout OCaml et un peu de Scheme). Dans ses langages on a des streams et des catamorphismes (le nom pédant de forEach et reduce et consorts.) et on pourrait utiliser les même mécanismes en JavaScript. Mais on préfère introduire une nouvelle syntaxe pour implémenter ces fonctionnalités et je veux juste comprendre pourquoi. C'est de la curiosité, tout simplement.

    (Pour comprendre pourquoi une solution à un problème est intéressante, la meilleure méthode est d'essayer de résoudre soi-même le problème.)

  • [^] # Re: Chouette

    Posté par  (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.

    yield n'est pas obligatoire pour faire un Iterable en JS. Ton objet peut être imutable. Tout ceci dépend de ton implementation.

    J'ai lu un peu rapidement et fait une confusion entre iterable et générateurs. La question que je pose est à quoi sert yield qui demande une extension syntaxique alors qu'on peut apparemment se passer de générateurs en implémentant des fonctions d'ordre supérieur de type reduce ou forEach. Est-ce qu'il y a des cas qu'on ne peut que traiter avec un générateur?

  • [^] # Re: Chouette

    Posté par  (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.

    Je ne vois pas trop bien ce que tu veux dire par programmation pseudo synchrone mais cela n'a certainement rien de spécifique aux générateurs. Si la génération d'un nouvel élément dure longtemps, on peut très bien demander son calcul à une promise qui se chargera d'appeler le callback et de demander la génération du prochain élément au moment voulu.

    Je n'ai jamais vu un exemple où les générateurs apportaient quelque chose par rapport à une fonction de type forEach, et apparemment ce n'est pas pour aujourd'hui! :)

    Tu as un exemple relativement petit de programmation pseudo-synchorne avec des générateurs et des promises?

  • [^] # Re: Chouette

    Posté par  (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.

    Par exemple on peut configurer l'objet a la création pour lui fixer une borne supérieure. Je voulais juste monter comment définir un forEach qui ne fonctionne de façon paresseuse, sans faire trop attention aux autres détails.

  • [^] # Re: Chouette

    Posté par  (site web personnel) . En réponse à la dépêche ECMAScript 2015 est approuvé. Évalué à 2.

    Pour donner un exemple concret de définition d'un objet itérable au moyen d'un forEach j'ai défini un objet primes qui énumère les nombres premiers (SpiderMonkey / js) – de la façon la plus naïve possible:

    var createPrimes = function(spec, _my) {
        var that = {};
        var my = _my || {};
    
        my.knownPrimes = [ 2 ];
        my.upperBound = 2;
    
        var isDivisible = function(n) {
            return my.knownPrimes.some(function(k) {
                return (n % k) === 0;
            });
        };
    
        var findPrimesUpTo = function(n) {
            for(var i = my.upperBound; i <=n; ++i) {
                if(! isDivisible(i)) {
                    my.knownPrimes.push(i);
                }
            }
            my.upperBound = n;
        }
    
        var isPrime = function(n) {
            findPrimesUpTo(n);
            return my.knownPrimes.some(function(k) {
                return k === n;
            });
        }
    
        that.forEach = function(callback) {
            var i = 2;
            while(true) {
                if(isPrime(i)) {
                    callback(i);
                };
                ++ i
            };
        };
    
        return that;
    };
    
    var primes = createPrimes();
    primes.forEach(print);
    

    Cela ne s'arrête jamais, mais si le code utilisant l'énumération en a marre, il peut lancer une exception par exemple. On peut partager le même énumérateur entre plusieurs threads dans node.js par exemple. Qu'est-ce qu'apporte une réécriture avec yield dans cet exemple? Et dans d'autres exemples?

  • [^] # Re: Mon expérience

    Posté par  (site web personnel) . En réponse à la dépêche Instantané sur le parallélisme et le code. Évalué à 3.

    Oui Lwt utilise des monades, ce qui permet de programmer en composant des threads un peu comme on compose des fonctions. Même si on programme un peu à la va-comme-je-te-pousse, cela reste à peu près lisible et maintenable, tandis que les paradigmes basés sur des callbacks comme Node.js requièrent uneplus grande discilpline de programmation.