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 Sten Spårvagnhög (site web personnel) . É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 claudex . Évalué à 9.
Parce que
telnet
envoit un CR LF quand tu appuie sur enter. Si tu test avecnc
, 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 Sten Spårvagnhög (site web personnel) . Évalué à 3.
Arf excellent ! J'y aurais jamais pensé :)
[^] # Re: Calcul un peu hasardeux
Posté par the_glu . É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 claudex . É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 freem . É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 Benoît Sibaud (site web personnel) . Évalué à 9.
Mode berserk ? (un caractère unicode sur 4 octets déposé à chaque clic souris, à un rythme pourtant raisonnable)
# I'll be back
Posté par Cheuteumi . Évalué à 0.
La vague d’implémentation en mode réseau ? :D
# infonuagique
Posté par mzf (site web personnel) . É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 the_glu . É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 totof2000 . Évalué à 6.
Ca aurait été mieux un service rest en json
[^] # Re: infonuagique
Posté par ze0 . É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 freem . É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 totof2000 . Évalué à 2. Dernière modification le 12 mars 2018 à 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 Michaël (site web personnel) . Évalué à 7.
Pour bien faire il aurait fallu mettre une image docker. ;)
[^] # Re: Image docker?
Posté par Sacha Trémoureux (site web personnel) . Évalué à 4.
Tout ça dans Kubernetes.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.