Journal Portage de TapTempo en Python (2.7)

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

Bonjour à tous,

Suites aux ports de TapTempo en Rust, Ada, JS, et PERL

Voilà ma version en python ;-)

#!/usr/bin/python
# -*- coding: utf-8 -*
import sys,termios,tty,datetime

def getKey():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(fd)
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    return ch

print "tapTempo : press any key (q for quit)"
t=[]
while getKey()!="q":
    t.append( datetime.datetime.now() )

ll=[ (j-i).microseconds for i, j in zip(t[:-1], t[1:]) ][-5:]
print "BPM:",60000000*len(ll)/sum(ll) if ll else None
  • # Sans deque ?!

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

    Tu peux utiliser un deque avec une taille fixe afin qu'il ne soit pas possible de faire exploser la taille de ta liste.

    from collections import deque
    
    t = deque(maxlen=5)
    
    # ... plus besoin du [-5:]
    • [^] # Re: Sans deque ?!

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

      J'ai essayé … mais impossible de faire des slice sur le deque … du coup, faut le reconvertir en list avant les slices ;-(

      Du coup, ça alourdi le code ;-)

  • # Périmètre différent

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

    Je pense que tu devrais faire tourner la version C++ d'origine car ton programme ne fonctionne pas de la même façon.
    Du coup, on ne peut pas vraiment dire que c'est un portage, c'est plutôt un approchant.

    • [^] # Re: Périmètre différent

      Posté par (page perso) . Évalué à 1. Dernière modification le 28/02/18 à 09:59.

      Je pense que j'aurai passé plus de temps à tenter de le faire s’exécuter, et à comprendre son fonctionnement, que de re-coder "qqchose de similaire"

      Voilà un patch pour s'approcher de l'original :

      print "tapTempo : press any key (q for quit)"
      t=[]
      while getKey()!="q":
          t.append( datetime.datetime.now() )
          ll=[ (j-i).microseconds for i, j in zip(t[:-1], t[1:]) ][-5:]
          if ll: print "BPM:",60000000*len(ll)/sum(ll)
      

      NB: j'ai juste décaler à droite, les 2 dernières lignes

      • [^] # Re: Périmètre différent

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

        Je pense que j'aurai passé plus de temps à tenter de le faire s’exécuter

        Franchement, ça se compile comme un charme sur une Ubuntu 17.10 et je pense qu'il n'y a aucune différence sur les autres distributions.

        et à comprendre son fonctionnement,

        C'était pourtant là toute la beauté du geste, comprendre ce qui est fait dans un langage pour réussir à le réécrire dans ton langage préféré et montrer ainsi les avantages et inconvénients de chacun.

        que de re-coder "qqchose de similaire"

        Du coup, similaire, pas identique donc ce n'est pas un portage

    • [^] # Re: Périmètre différent

      Posté par (page perso) . Évalué à 2. Dernière modification le 01/03/18 à 22:05.

  • # What else ?

    Posté par . Évalué à 3.

    Rust, Ada, JS, et PERL à quand une version assembleur ? :)

    • [^] # Re: What else ?

      Posté par . Évalué à -8. Dernière modification le 28/02/18 à 12:52.

      J'ai pas osé l'écrire, j'aurais eu droit au moinssage habituel.

      PS : à quand une version Turbo Pascal

      attention chérie ça va moinsser

    • [^] # Re: What else ?

      Posté par . Évalué à 3.

      C'est facile, tu prends la version C++ et les bonnes options de g++.

  • # -_-

    Posté par . Évalué à 3.

    Ou Brainfuck ?

  • # 2.7 ?

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

    Mais pourquoi faire du Python 2.7 en 2018 lorsqu'on peut faire du Python 3 ? La seule différence ici c'est les parenthèses autour des arguments du print.

    • [^] # Re: 2.7 ?

      Posté par (page perso) . Évalué à 2. Dernière modification le 28/02/18 à 16:32.

      Parce que à part ArchLinux, les autres OS sont obsolètes et forcent leurs utilisateurs à utiliser des technos obsolètes par défaut…

      • [^] # Re: 2.7 ?

        Posté par (page perso) . Évalué à 3. Dernière modification le 28/02/18 à 16:53.

        En même temps, rajouter un 3 dans la première ligne du programme (#!/usr/bin/python3) c'est pas compliqué.
        Est-ce vraiment la raison ?

        Maxime va pouvoir faire un nouveau journal pour le port en Python 3. :-)

        • [^] # Re: 2.7 ?

          Posté par (page perso) . Évalué à 3. Dernière modification le 01/03/18 à 02:22.

          En même temps, rajouter un 3 dans la première ligne du programme (#!/usr/bin/python3) c'est pas compliqué.

          Je ne sais pas ce qu’il voulait dire dans son commentaire, mais concernant ton point, la règle (PEP 394) c’est :

          • #!/usr/bin/python : programme compatible Python 2 et 3
          • #!/usr/bin/python2 : programme compatible Python 2 uniquement
          • #!/usr/bin/python3 : programme compatible Python 3 uniquement

          Bien sûr, ensuite, sur le système, /usr/bin/python est un lien vers l’un ou l’autre des interpréteurs.

      • [^] # Re: 2.7 ?

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

        Je ne connais pas toutes les distribs, mais Ubuntu ne propose que python3 par défaut (python2 n'est pas installé).

        • [^] # Re: 2.7 ?

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

          Package python

              trusty (14.04LTS) (…)    2.7.5-5ubuntu3: amd64 arm64 armhf i386 powerpc ppc64el
              xenial (16.04LTS) (…)    2.7.11-1: amd64 arm64 armhf i386 powerpc ppc64el s390x
              xenial-updates (…)    2.7.12-1~16.04: amd64 arm64 armhf i386 powerpc ppc64el s390x
              artful (…)    2.7.14-2ubuntu1: amd64 arm64 armhf i386 ppc64el s390x
              bionic (…)    2.7.14-4: amd64 arm64 armhf i386 ppc64el s390x
          

          Package python3

              trusty (14.04LTS) (…)    3.4.0-0ubuntu2: amd64 arm64 armhf i386 powerpc ppc64el
              xenial (16.04LTS) (…)    3.5.1-3: amd64 arm64 armhf i386 powerpc ppc64el s390x
              artful (…)    3.6.3-0ubuntu2: amd64 arm64 armhf i386 ppc64el s390x
              bionic (…)    3.6.4-1: amd64 arm64 armhf i386 ppc64el s390x
          
          • [^] # Re: 2.7 ?

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

            Je n’ai pas dit qu’il n’était pas disponible mais qu’il n’était pas installé sur une Ubuntu de base.

      • [^] # Re: 2.7 ?

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

        Raaah, j’ai pertinenté sans faire exprès >.<

        Ton commentaire n’as aucun sens. J’ai Python 3 sur toutes les Debian que j’ai sous la main (de Wheezy à Stretch), sur un Mac OS, et même sur OmniOS.

Suivre le flux des commentaires

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