柔道 : Différence entre versions
(→3) Code) |
(→3) Code) |
||
Ligne 125 : | Ligne 125 : | ||
done | done | ||
− | + | [[Fichier:True.sh ça marche!.jpg|cadre|gauche|script final]] | |
− | [[Fichier: |
Version actuelle datée du 18 décembre 2018 à 17:50
Sommaire
Projet initial
OK, le projet initial était de lier la pratique du terminal avec un sujet que j'aborde dans un autre cours, à savoir le judo.
Je pensais d'abord traduire les sons produits par un judoka chutant suite à l'exécution des techniques propres au kata. https://www.youtube.com/watch?v=YOcVfmmMBLY
Mais je ne savais pas comment aborder le terminal dans cette optique là. Et je n'avais pas encore pris réellement en main le programme, donc même avec les recherches sur le net, mes maigres essais se sont très vite révélés être des échecs, de quoi baisser les bras...
Mais c'est en m’intéressant aux projets des autres étudiants que j'ai pu découvrir les possibilités qui s'offraient grâce au terminal. C'est le projet de Léna Bruyère qui m'a le plus inspiré et décidé de travailler sur la notion d'aléatoire.
En effet, l'idée maintenant est de faire décider par la machine l’exécution d'une technique de judo debout suivie d'une technique de judo au sol, le tout aléatoirement. Excellent exercice pour les judokas à court d'idée d'enchaînement.
Pour ce faire, la première étape du projet est de lister l'ensemble des techniques de Nage-waza (68) et de Katame-waza (32), respectivement les techniques de projections et les techniques de contrôles.
La seconde est de rédiger un script qui irait dans un premier temps chercher aléatoirement un technique dans le premier fichier Nage-waza et dans un deuxième temps dans le fichier Katame-waza.
Et en pratique?
1) Documents texte
La première chose faite était la création des documents textes (ci-dessous):
2) Code
Ensuite il fallait déterminer la commande qui permettrait de demander au terminal de sélectionner aléatoirement une technique du groupe Nage-waza et une autre du groupe Katame-waza. Pour se faire j'ai demandé à mon entourage de m'aider et on a réussi à créer un code qui fonctionnait!
→ This script takes a random line from one file, a random line from another file and put them together in another file
- put the number of lines of file 1 in a variable
- choose a random number between 1 and the number of lines from file 1
- do the same things with file 2
- take the first "random_line1" lines from file 1, then take the last line of the result, then put it in WazaSelection.txt if WazaSelection.txt already exists, its content is erased before.
- take the first "random_line2" lines from file 2, then take the last line of the result, then append it to WazaSelection.txt
- print the results to the console
Ici, le code est simplifiable donc avec Alexia, nous avons chercher la manière la plus simple d'exécuter ma demande. Après quelques recherches et test, le code simplifié ne faisait plus qu'une ligne et ne prenait même pas la forme d'un script!
→ ici, en plus de la commande cat qui sert à afficher, on a utilisé la commande shuf qui sert à déterminer la selection aléatoire par l'ordinateur
→ pour que le terminal ne sélectionne qu'une seule technique je lui suggère -n1. Ainsi, il ne va sélectionner qu'une seule ligne du texte initial. D'où l'importance de bien revenir à la ligne à chaque technique différente dans le fichier texte.
→ les tests sont concluant mais il n'y a pas de séparation entre les deux fichiers textes: le terminal choisi aléatoirement dans les deux fichiers simultanément. Donc on pourrait avoir deux techniques du premier groupe et non pas deux techniques appartenant aux deux groupes différents.
→ Donc en fait, il est important de demander une chose à la fois à la machine. Ici, on demande d'afficher dans un premier temps 1 ligne aléatoire du document Nage-waza.txt et à la suite par la commande &&, la même chose pour le document Katame-waza.txt
→ La mission était remplie! Hourra :D
Aller plus loin
Une fois mon objectif rempli, il me fallait réinterroger le projet.
A quoi sert-il?
En fait si on suit ma ligne directrice de ce projet, c'est réellement un outil pratique pour exercer n'importe quel judoka.
Comment le mettre en application?
Pourquoi ne pas lier le médium vidéo aux techniques afin de donner à voir chaque technique? En partant de là, je voudrais commencer petit en m'attaquant non pas à l'ensemble des techniques de judo existantes (ça n'en finirait pas) mais bien au Kata, qui est une démonstration des techniques principales. Il en existe plusieurs catégories différentes, chacunes comportant 3 techniques démontrées à droite puis à gauche. En tant que judoka, je n'en connais que 3 groupes: Te-waza; Koshi-waza; et Ashi-waza. Au total donc, 9 techniques différentes.
1) Nouveau document texte
Ainsi, il me fallait réorganiser mes fichiers textes afin d'obtenir un résultat cohérant. Les 9 techniques seront regroupées dans un seul et même fichier.
2) Clip vidéo
J'ai moi même réalisé une vidéo de mon frère et moi réalisant le kata mais par soucis de droits à l'image, j'ai utilisé une vidéo professionnelle en provenance de Youtube. Ce qu'il fallait faire c'était de couper les séquences aux différentes techniques et les renommer comme ci-dessous (je n'ai pas réussi à importer ces mêmes vidéos...)
3) Code
Tout d'abord, il me fallait trouver comment lancer une vidéo dans le terminal.
cygstart.exe
Cela fonctionnait pour la vidéo test. Maintenant l'enjeu était d'allier la commande l'aller chercher aléatoirement une technique et de lancer la vidéo qui s'y rapportait...
"$ cygstart.exe "$(cat kata.txt | shuf -n1).mp4"
L'erreur se trouvait dans la nomination des vidéos et/ou du texte. C'était signifié par un rectangle vide.
ANECDOTE : en essayant de rajouter au fichier texte ".mp4" à la fin du nom des techniques, il y a eu un bug infini qu'il fallait stopper avec la commande "Ctrl+C"
Une fois les fichiers renommés (ci-dessous),
il fallait créer un script afin que le terminal puisse relancer l'action après x temps avec une variable et un compte à rebours.
while true do 'cygstart.exe "$(cat kata.txt | shuf -n1)"' sleep 3 done