Journal Portage de TapTempo en JavaScript

Posté par (page perso) . Licence CC by-sa
10
27
fév.
2018

Suite au journal de Blackknight à propos du journal de mzf, j'ai décidé de faire une version de TapTempo en Javascript.

Copier-coller le code suivant dans la console js de votre navigateur (F12), donner le focus à la page et tapoter n'importe quelle touche.

var t = [];
document.addEventListener("keydown", function() {
    t.push(performance.now());
    if (t.length > 1) {
        console.log(60000 / (t[t.length - 1] - t[0]) * (t.length - 1));
    }
    if (t.length > 4) {
        t.shift();
    }
})

Ça donne dans la console le tempo moyen en bpm sur les 5 dernières frappes max.

Vous pouvez tester sur JSFiddle.

  • # Golf

    Posté par (page perso) . Évalué à 3.

    t=[];addEventListener("keyup",e=>{l=t.length;t[l]=Date.now();if(l)console.log(60000/(t[l]-t[0])*l);t=t.slice(-4)})

    https://jsfiddle.net/x4Lo1af3/31/

    • [^] # 1 de moins

      Posté par (page perso) . Évalué à 4.

      t=[];addEventListener("keyup",e=>{l=t.length;n=t[l]=Date.now();if(l)console.log(60000/(n-t[0])*l);t=t.slice(-4)})

      https://jsfiddle.net/x4Lo1af3/35/

      • [^] # Re: 1 de moins

        Posté par . Évalué à 3. Dernière modification le 27/02/18 à 09:16.

        Pour moi, du golf, c'est fournir la même fonctionnalité.

        Ton code fait «presque» la même chose que taptempo. En fait, il fait la même chose, la lourdeur en plus, la sécurité, la doc et diverses fonctionnalités en moins.

        Pas moyen de stopper le code.
        Pas de nettoyage mémoire.
        Pas d'info de version (balo pour les évolutions futures).
        Pas d'i18n (même si ok, l'ada et le rust n'en ont pas non plus).
        Pas de configuration.

        Conclusion: ceci n'est pas un portage.

        Dans tous les langages, on peut écrire du code jetable, mais je ne pense pas que c'était le but des autres codes.

        • [^] # Re: 1 de moins

          Posté par (page perso) . Évalué à 5.

          Pas d'info de version (balo pour les évolutions futures).

          Ah bah, tiens, il me semblait qu'il y avait un petit truc qui manquait dans mon code, jesuis bon pour une mise à jour :)
          Merci

      • [^] # Re: 1 de moins

        Posté par (page perso) . Évalué à 4.

        En attendant, ça rentre à l'aise dans un marque-page Firefox, qui lui porte un titre et une description pour la doc.

        Merci pour cet élément de plus dans ma collection. J'ai juste tronqué les résultats à la virgule et ajouté l'unité à l'affichage :

        javascript:t=[];addEventListener("keyup",e=>{l=t.length;n=t[l]=Date.now()if(l)console.log(Math.floor(60000/(n-t[0])*l)+'%20BPM');t=t.slice(-4)})

        La liberté ne s'use, que si on ne s'en sert pas.

      • [^] # Re: 1 de moins

        Posté par . Évalué à 1.

        t=[];b=document.body;b.onkeyup=(e)=>{l=t.push(n=Date.now());b.innerHTML=(l*60000/(n-t[0]));l>3&&t.shift()}
        https://jsfiddle.net/x4Lo1af3/63/

        7 de moins avec un affichage dans le body pour me rapprocher de la solution d'origine

        • [^] # Re: 1 de moins

          Posté par . Évalué à 1.

          t=[];x=0;b=document.body;b.onkeyup=(e)=>{t[x%4]=n=Date.now();b.innerHTML=(4*60000/(n-t[((x++)-3)%4]))}
          103 caractères :)

          • [^] # Re: 1 de moins

            Posté par . Évalué à 2.

            t=[];x=0;b=document.body;b.onkeyup=e=>{t[x%4]=n=Date.now();b.innerHTML=(24e4/(n-t[(x++-3)%4]))}
            96 caractères

            • [^] # Re: 1 de moins

              Posté par (page perso) . Évalué à 4. Dernière modification le 27/02/18 à 14:09.

              Bien joué pour le modulo et la notation en 24e4. Mais on perd en fonctionnalité (le calcul dès les 2 premiers appuis), et les résultats sont faux (il faut faire %5).

              Corrigé et un peu rétréci :

              t=[];x=0;b=document.body;b.onkeyup=e=>{t[x%5]=n=Date.now();b.innerHTML=(24e4/(n-t[++x%5]))}

              91 caractères.

              • [^] # Re: 1 de moins

                Posté par . Évalué à 1.

                Je prenais mon pouls avec et je trouvais qu'il était un peu élevé. Maintenant, je comprends mieux :)

                Bien jouée "++x%5", c'est malin d'avoir pensé à prendre le tableau dans l'autre sens.

                • [^] # Re: 1 de moins

                  Posté par (page perso) . Évalué à 3. Dernière modification le 27/02/18 à 14:25.

                  Ça marche pareil avec --x%5.

                  L'important n'est pas l'ordre du tableau, mais le fait que la variable est modifiée avant d'être retournée.

                  • [^] # Re: 1 de moins

                    Posté par (page perso) . Évalué à 1.

                    79 caractères :

                    t=[];x=0;window.onkeyup=a=>{t[x%5]=n=Date.now();console.log(24e4/(n-t[++x%5]))}

                    Par contre, j'en reste à :

                    javascript:t=[];x=0;addEventListener("keyup",a=>{t[x%5]=n=Date.now();console.log(Math.floor(24e4/(n-t[++x%5]))+'%20BPM')})

                    Car concernant un code de marque-page, les versions les plus courtes ne permettent pas l'exécution du code.

                    La liberté ne s'use, que si on ne s'en sert pas.

    • [^] # Re: Golf

      Posté par . Évalué à 5.

      Qu’en est il de la précision?
      Js étant un language interprete/garbage collecté, tournant dans un navigateur qui peut être chargé et dont la vm peut vouloir soit faire une pause pour collecter la mémoire, soit préférer exécuter un autre script plus lourd sur une autre page?
      (C’est une vrai question, pas un troll)

      Linuxfr, le portail francais du logiciel libre et du neo nazisme.

      • [^] # Re: Golf

        Posté par (page perso) . Évalué à 5.

        Je pense qu'au même titre que les versions C++, Rust ou Ada, la précision en prend un coup dès que la machine, virtuelle ou non, est trop occupée.

        En plus, les IO sont, comme un terminal, sujettes à la pose de verrous.

        • [^] # Re: Golf

          Posté par . Évalué à 4.

          C'est un fait, sauf que, dans le cas d'un truc qui tourne sur un navigateur, on rajoute une couche de gestion. Après… je doute sincèrement que le lag système soit plus important que le lag humain de toute façon.

        • [^] # Re: Golf

          Posté par . Évalué à 5.

          Certes, mais un GC va ajouter des pauses qui sont inévitables, et qui arrivent de façon inopportune.

          Je m'attends a ce qu'un binaire natif se comporte de façon beaucoup plus constante et déterministe qu'un language interpreté.

          Linuxfr, le portail francais du logiciel libre et du neo nazisme.

          • [^] # Re: Golf

            Posté par (page perso) . Évalué à 2.

            Effectivement, le GC introduit un comportement non déterministe et du coup, difficilement quantifiable.

  • # Mème

    Posté par (page perso) . Évalué à 10.

    Aurais-je créé un mème ? :-)

  • # License

    Posté par (page perso) . Évalué à 2.

    Salut! J'aimerais bien intégrer ton code dans le repository de la Fédération TapTempo mais je ne suis pas sûr de quelle license utiliser. Si tu es d'accord, quelle license libre te conviendrait? Et quelle notice de copyright?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.