Journal Portage de TapTempo en Perl

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

Bonjour à tous,

Suites aux ports de TapTempo en Rust, Ada et JS, je me suis dit que ça pourrait être marrant de le faire en Perl. Ça a été un prétexte pour coder un peu (première fois depuis fort longtemps) et de re-découvrir un peu le Perl pendant une aprem.

Ce programme aborde quelques aspects intéressants pour découvrir vite fait les bases langage :
- le code minimal
- la gestion du typage
- quelques structures de base
- tests et conditions
- affichage de texte avec des variables
- gestion des paramètres
- lecture du clavier (sans appuyer sur entré)
- fouiller dans la doc du langage
et sûrement d'autres trucs.

Je vous laisse juge de trouver comment faire mieux et plus propre :).

  • # ma version en python 2.7 ;-)

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

    #!/usr/bin/python
    # -*- coding: utf-8 -*
    import sys,termios,tty
    from datetime import 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
    t=[]
    while 1:
        k=getKey()
        if k=="q":
            break
        else:
            t.append( datetime.now() )
    t=t[-5:]
    ll=[ (j-i).microseconds for i, j in zip(t[:-1], t[1:])]
    print 60000/((sum(ll)/len(ll))/1000.0)
    
    • [^] # Re: ma version en python 2.7 ;-)

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

      la version ++ :

      #!/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)
      
      • [^] # Re: ma version en python 2.7 ;-)

        Posté par . Évalué à 4. Dernière modification le 27/02/18 à 21:41.

        Je moinsse parce que tu n'as absolument rien compris à l'esprit du journal (et de ceux qui précèdent)

        • [^] # Re: ma version en python 2.7 ;-)

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

          mmmmmmm …. J'ai juste fait qqchose de lisible ;-)

          • [^] # Re: ma version en python 2.7 ;-)

            Posté par . Évalué à 6. Dernière modification le 27/02/18 à 21:44.

            Relis les autres journaux et les commentaires associés et tu comprendras peut-être (ça prouve qu'un pythoneux c'est pas très futé : si on ne lui dit pas les choses explicitement, il ne comprend pas).

            • [^] # Re: ma version en python 2.7 ;-)

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

              Qui plus est, le programme ne fonctionne pas de la même façon.
              Il ne permet pas de paramétrer la taille de la file, le temps de timeout avant de recommencer le calcul et la précision de l'affichage.

              En clair, il en manque.

  • # T'as gagné une Pull Request

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

    Et je te félicite pas ! J'avais autre chose à faire ce soir, moi. Mais bon, on me dit Perl, je vais forcément voir 🙂

    It's a fez. I wear a fez now. Fezes are cool !

    • [^] # Re: T'as gagné une Pull Request

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

      Ah, c'était pas prévu ça, il a fallut que je regarde comment marchent les pull request :D.

      Du coup, t'as gagné une question de néophyte : c'est quoi l'intérêt du "use 5.10.0;" ?

      Sinon, dans ma version je voulais faire en sorte d'avoir exactement le même affichage et comportement que dans celle décrite sur le journal d'origine (même si j'ai loupé une ligne). Mais ta version est bien plus élégante du coup. Merci pour tes modifs !

      Opera le fait depuis 10 ans.

      • [^] # Re: T'as gagné une Pull Request

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

        Le "use 5.10.0;" indique d'avoir une version de Perl supérieure à 5.10.0. C'est déjà une très ancienne version car contrairement à certains langages actuels, les API dans Perl sont souvent maintenus très longtemps ;-)

        • [^] # Re: T'as gagné une Pull Request

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

          Dans le cas qui nous intéresse, c'était pour pouvoir utiliser say au lieu de print, say ajoutant tout seul un saut de ligne (je trouve que ça améliore la lisibilité de pas devoir ajouter "\n" à toutes les phrases.

          It's a fez. I wear a fez now. Fezes are cool !

      • [^] # Re: T'as gagné une Pull Request

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

        Sinon, dans ma version je voulais faire en sorte d'avoir exactement le même affichage et comportement que dans celle décrite sur le journal d'origine (même si j'ai loupé une ligne). Mais ta version est bien plus élégante du coup. Merci pour tes modifs !

        J'm'en doutais un peu, mais je me suis dit qu'il valait mieux avoir une légère déviation pour un code plus simple à lire.

        It's a fez. I wear a fez now. Fezes are cool !

Suivre le flux des commentaires

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