Journal Portage de TapTempo en Perl

Posté par  . Licence CC By‑SA.
Étiquettes :
15
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  (site web personnel) . Évalué à -3. Dernière modification le 27 février 2018 à 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  (site web personnel) . É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 février 2018 à 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  (site web personnel) . É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 février 2018 à 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  (site web personnel, Mastodon) . É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  (site web personnel) . É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 🙂

    Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

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

      Posté par  . É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 !

      Emacs le fait depuis 30 ans.

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

        Posté par  (site web personnel) . É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  (site web personnel) . É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.

          Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

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

        Posté par  (site web personnel) . É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.

        Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

Suivre le flux des commentaires

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