Journal TapTempo sous la forme d'un service sur internet

Posté par . Licence CC by-sa
Tags :
19
11
mar.
2018

Bonjour tout le monde,

Vu que nous somme en 2018, il est temps de passer à une version plus moderne de TapTempo. Toutes les versions étaient jusqu'à présent exécutées en local, alors que c'est tellement plus simple et plus pratique sous la forme d'un service sur internet exécuté sur un autre ordinateur, voir potentiellement dans le nuage (hype °o°).

Bien évidemment l'application reste destinée à être utilisée en ligne de commande:

telnet theglu.org 2999

Si vous avez l'envie de déployer ça chez vous, voici le code pour référence. C'est du python3, +/- inspiré des autres versions en python qui traient :)

import socketserver
from collections import deque
from time import time


HOST, PORT = "0.0.0.0", 2999


class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass


class TapTempoHandler(socketserver.BaseRequestHandler):

    def handle(self):

        self.request.sendall(b"TapTempo : Send any character, q to quit\r\n")

        counter = 0
        last = 0
        t = deque(maxlen=6)

        while True:
            c = self.request.recv(1)

            if c == b'q':
                break

            now = time()

            if now - last > 10:  # Reset if more than 10s
                t.clear()
            else:
                t.append(now - last)

            last = now

            counter += 1

            if counter > 2 and t:
                counter = 0
                bpm = round(60.0 * len(t) / sum(t), 3)
                self.request.sendall(" BPM: {}\r\n".format(bpm).encode('utf-8'))

        self.request.sendall(b"Bye!\r\n")

if __name__ == "__main__":

    with ThreadedTCPServer((HOST, PORT), TapTempoHandler) as server:
        server.serve_forever()
  • # Calcul un peu hasardeux

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

    L'idée est absolument fascinante ! Cependant après avoir essayé ton serveur de tempo sur theglu.org, j'ai constaté qu'il se plantait allègrement d'environ un facteur 2 (le BPM affiché est 2x trop gros). Au vu du code, j'ai un peu de mal à comprendre pourquoi…

    • [^] # Re: Calcul un peu hasardeux

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

      Parce que telnet envoit un CR LF quand tu appuie sur enter. Si tu test avec nc, tu as un BPM plus bas (vu que je n'ai pas de rythme, je ne peux pas te dire si c'est deux fois plus bas).

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

      • [^] # Re: Calcul un peu hasardeux

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

        Arf excellent ! J'y aurais jamais pensé :)

        • [^] # Re: Calcul un peu hasardeux

          Posté par . Évalué à 1.

          Effectivement le soucis c'est que y'a deux caractères qui sont envoyé. Je me suis demandé si ça valait la peine d'ignorer les \r, mais je sais pas trop ce qui est envoyé pour les gens sous macos, donc j'ai ignoré le soucis :)

          • [^] # Re: Calcul un peu hasardeux

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

            Il faudrait peut-être compter comme un seul tous les caractères envoyés dans les x millisecondes.

            « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

            • [^] # Re: Calcul un peu hasardeux

              Posté par . Évalué à 2.

              Ou alors, en partant de l'assertion que le ending ne change jamais, attendre le 1er "\r\n" XOR "\r[^\r]" XOR "[^\r]\n", retenir ce que c'est et ne compter que les occurrences de ce marqueur?

    • [^] # Re: Calcul un peu hasardeux

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

      Mode berserk ? (un caractère unicode sur 4 octets déposé à chaque clic souris, à un rythme pourtant raisonnable)

      $ telnet theglu.org 2999
      (...)
      TapTempo : Send any character, q to quit
      🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧
       BPM: 4301850.256
       BPM: 2974683.688
       BPM: 3746772.804
       BPM: 8342262.099
       BPM: 9263493.497
      (...)
      
      $ nc theglu.org 2999
      TapTempo : Send any character, q to quit
      🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧
       BPM: 5719505.455
       BPM: 3122310.67
       BPM: 3673842.92
       BPM: 8579258.182
       BPM: 9437184.0
      (...)
  • # I'll be back

    Posté par . Évalué à 0.

    La vague d’implémentation en mode réseau ? :D

  • # infonuagique

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

    Marrant cette version :-)
    Je ne connais pas le protocole telnet, mais est-ce qu'on pourrait imaginer passer des arguments à la connexion pour régler le nombre d'échantillons ou la précision ?

    • [^] # Re: infonuagique

      Posté par . Évalué à 2.

      Vu que c'est qu'une connexion TCP, il n'y a pas vraiment moyen, par contre on pourrait imaginer un menu à la connexion qui permet de régler les paramètre avec quelques questions.

      On aller encore plus loin et utiliser l'énorme range des IPV6s pour y mettre les paramètres, vu qu'il y a de la place dans les /64 qui sont généralement donnés au gens ^

    • [^] # Re: infonuagique

      Posté par . Évalué à 6.

      Ca aurait été mieux un service rest en json

      • [^] # Re: infonuagique

        Posté par . Évalué à 0.

        Comment vois-tu l'implémentation ?

        les client telnet sont plutôt standardisé, pour un service rest c'est plus compliqué, notamment sur l'envoie des entrées.

        Après je dis ça je suis pas top en réseaux.

      • [^] # Re: infonuagique

        Posté par . Évalué à 1.

        Hum… c'est moi, ou REST, c'est: t'envoies une requête, tu lis la réponse et rien n'est remémoré par le serveur (enfin, hors logs bien sûr)?

        • [^] # Re: infonuagique

          Posté par . Évalué à 2. Dernière modification le 12/03/18 à 15:54.

          D'ou l'intéret du json qui t'enverrait le dernier timestamp renseigné par le serveur. Par contre faut taper très vite au clavier pour un tempo rapide :)

  • # Image docker?

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

    Pour bien faire il aurait fallu mettre une image docker. ;)

Suivre le flux des commentaires

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