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 Wawet76 . Évalué à 3.
https://jsfiddle.net/x4Lo1af3/31/
[^] # 1 de moins
Posté par Wawet76 . Évalué à 4.
https://jsfiddle.net/x4Lo1af3/35/
[^] # Re: 1 de moins
Posté par freem . Évalué à 3. Dernière modification le 27 février 2018 à 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 Blackknight (site web personnel, Mastodon) . Évalué à 5.
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 Siltaär (site web personnel) . É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 syj . É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 syj . É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 syj . É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 Wawet76 . Évalué à 4. Dernière modification le 27 février 2018 à 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 :
91 caractères.
[^] # Re: 1 de moins
Posté par syj . É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 Wawet76 . Évalué à 3. Dernière modification le 27 février 2018 à 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 Siltaär (site web personnel) . É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 groumly . É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 Blackknight (site web personnel, Mastodon) . É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 freem . É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 groumly . É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 Blackknight (site web personnel, Mastodon) . Évalué à 2.
Effectivement, le GC introduit un comportement non déterministe et du coup, difficilement quantifiable.
# Mème
Posté par mzf (site web personnel) . Évalué à 10.
Aurais-je créé un mème ? :-)
# License
Posté par Michaël (site web personnel) . É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 à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.