yeKblog

Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Aller au contenu | Aller au menu | Aller à la recherche

Keyword - script

Fil des billets

Révisions de tables d’addition et multiplication - Mathématiques CE2

Pour que mon fils apprenne et révise ses tables d’addition et multiplication j’ai commencé par lui poser des questions, comme l’ont fait mes parents lorsque j’étais enfant. Puis j’ai tenté de laisser l’informatique prendre le relais car apprendre en jouant est souvent apprécié par les enfants (et par les adultes aussi d’ailleurs).

Calcul pour les enfants

Après quelques recherches parmi la tonne de jeux éducatifs, j’ai lancé Calcul pour les enfants sur tablette (application gratuite mais non libre et avec publicités).

L’avantage de cette application est qu’il est possible d’activer/désactiver certaines tables, ce qui est très pratique lorsque votre enfant doit apprendre les tables de 1 à 5 mais n’a pas encore appris les suivantes.

J’avais initialement proposé de jouer à TuxMath, un jeu avec un temps limite par opération, mais il se mettait dans un état de stress tel, malgré un compte à rebours très long, qu’il me semblait préférable de trouver autre chose. Cette application n’a pas de limite de temps, il pouvait jouer sereinement. Il a beaucoup jouer à ce jeu et son petit frère de 4 ans (3 quand il a commencé) était très content d’y jouer également pour imiter son frère (se limitant aux additions et se servant des doigts de son père comme boulier). Seul souci, en cas de faute, mon plus grand fils refuse de continuer la partie, cache la section de l’écran où sa faute apparaît et se met dans des états impossibles (crise de larme,…). Rien à faire pour le raisonner.

[Digression] Quand je le vois jouer à la console, je constate que les jeux actuels aident énormément les joueurs en difficulté, il n’est pas nécessaire de recommencer encore et encore si on rate. Les Mario actuels (par exemple) disposent d’un mode automatique si vous ratez trop de fois, si l’on compare cela au fait que le premier Mario sur NES n’avait pas de sauvegarde… Est-ce parce que c’était difficile que l’idée de tout recommencer ne me dérangeait pas ? Je me rappelle avoir fait et refait les premiers niveaux de Wonder Boy des dizaines voire des centaines de fois et avoir adoré ce jeu, cela contraste tellement avec mon fils qui hurle qu’il est nul parce qu’il a fait une erreur… bref, il faudra que je le fasse jouer à de vieux jeux pour vérifier ma théorie et que je m’occupe de ce problème d’assurance. [/Digression]

iTooch CE2

Puisqu’il entre en CE2, j’ai installé quelques jours avant la rentrée, deux applications pour qu’il révise un peu. Il adore iTooch Mathématiques CE2 et iTooch Français CE2 (applications gratuites mais non libres et avec publicités). Dans ces deux applications pour tablette, des questions sont posées dans plusieurs catégories, des étoiles récompensent les meilleurs résultats, on peut choisir la notation (18/20 ou B+). Mon fils ne semble pas ressentir de frustration, il aime jouer. Il faut dire que du jeudi au samedi, les écrans sont interdits à la maison, sauf quelques rares fois, pour les jeux éducatifs, que ne serait-il pas prêt à faire pour jouer sur écran ?

TuxMath

L’année scolaire commence par des révisions de tables d’addition. J’aurais pu le faire un peu rejouer au premier jeu cité, mais cette fois c’est l’extrême lenteur à laquelle il répond qui pose problème. J’ai donc ressorti TuxMath (jeu gratuit et libre) sur PC.

Les opérations tombent plutôt lentement, surtout en plein écran (fullHD), il est possible de choisir un peu le niveau, le mode arcade est certainement le plus intéressant. Les parties sont très longues, du coup, il a pu réviser sans pour autant ressentir de lassitude. Parmi les regrets, je trouve dommage de ne pas pouvoir supprimer la table d’addition de 0 car cette table est assez peu utile à réviser, quelques réglages plus fins sur les niveaux seraient intéressants. Mais de toute façon, le mélange laser/astéroïdes rend le jeu attirant.

Les révisions vont bon train jusqu’à ce qu’une nouvelle crise de larme n’apparaisse après plusieurs minutes de jeu, le deuxième jour. Non pas qu’il en ait raz-le-bol mais parce que le jeu commence à être trop rapide pour lui. C’est un peu comme Tetris, au fur et à mesure le jeu accélère et ne s’arrête qu’une fois que vous n’arrivez plus à suivre et qu’un « Game Over » apparaisse. Le problème ici est que mon fils considère alors qu’il perd, qu’il est mauvais, qu’il a échoué. Décidément, cette idée est tenace et un brin agaçante ! J’ai beau lui expliquer que c’est le fonctionnement du jeu en mode arcade qui est ainsi, qu’il ne peut pas continuer indéfiniment et qu’il ne faut pas voir cela comme une défaite mais comparer son score aux fois précédentes, rien à faire pour le raisonner. Décidément il va falloir que je travaille ce point.

Réfléchir est un jeu... Et toi, à quoi tu joues ?

Je pourrais tester encore et encore les centaines d’applications pour en trouver une qui convient mais j’ai finalement trouvé plus amusant. Il me faut un jeu sans timing par question, sans « Game Over », qui permet de sélectionner les tables à réviser où le score dépend de la vitesse, du nombre de fautes… après tout, c’est une bonne occasion de jouer moi-même : Je vais l’écrire ce jeu !

Je n’ai pas besoin de fioriture, un simple script en console devrait suffire. Avec un peu de chance, si le code est suffisamment simple, je pourrais initier mes enfants au code (Lourd est le parpaing de la réalité sur la tartelette aux fraises de nos illusions) ! C’est parti pour l’écriture d’un script en python ! Par quoi commencer ? Ben, apprendre python, pardi ! Je constate assez vite que c’est plus simple que ce à quoi je m’attendais initialement. Il faut dire que mon script ne demande pas de fonctionnalités bien complexes…

Après quelques courtes minutes et recherches sur la toile, j’obtiens le code suivant :

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from random import randint
x=(randint(1,9))
y=(randint(1,9))
z=x+y
print(x,"+",y,"=")
input_reponse = input("Votre réponse : ")
if (z==int(input_reponse)):
  print ("yes")
else:
  print("no")

Alors certes, cela ne casse pas trois pattes à un canard mais c’est moi qui l’ai fait ! Je suis content de moi, il m’en faut peu j’en conviens, mais je suis content d’avoir créé moi-même le programme dont j’avais besoin. Pas besoin de connaissance poussées en informatique, je suis persuadé que la majeure partie des gens aurait pu écrire ces 12 lignes. Le problème est que la plupart des gens ne se savent pas capables de le faire, un manque de confiance mélangé, il faut l’admettre et c’est normal, à une dose de flemme saupoudrée de total désintérêt. C’est dommage car c’est amusant (bien plus stimulant et intéressant que la partie de solitaire sur tablette à laquelle ma voisine de car jouait hier soir, si vous voulez mon avis).

Un tout petit peu plus loin

Quelques minutes et une boucle while plus tard, j’obtiens une petite soixantaine de lignes de code. J’ai maintenant un script assez simple et qui convient pour mon usage.

Je pourrais enregistrer les meilleurs scores, vérifier si la réponse est bien un entier, faire une interface graphique avec des dessins, ajouter les soustractions, multiplications, divisions,… cela me permettrait d’apprendre un peu plus le langage et l’algo… un jour peut-être, quand le besoin se fera ressentir. À moins que ce script me serve justement à démontrer aux fistons qu’il est facile d’obtenir un programme simple en le codant soi-même…

J’ai mis cela sur mon dépôt GitHub sous licence libre évidemment (CC0 aurait été plus approprié que GPL vu la simplicité de l’algo mais bon, j’avais le fichier de licence GPL déjà prêt…). Aurez-vous envie d’y jeter un œil ? Je ne pense pas que cela puisse vous être d’une grande utilité, c’est plus l’idée de faire soi-même que le code que je voulais partager ici.

Pour le score, pas facile de trouver le juste équilibre, j’ai fini par choisir cette formule :

score=partie_entière_de( 1000× (points-0.2×nb_fautes)/temps_moyen_par_question )

je ne sais pas si c’est le meilleur choix mais il n’est pas aisé de trouver la formule idéale… il va falloir que j’y réfléchisse un peu plus… chic !?

Bonus : Smartphone

Il existe une application Android qui permet d’exécuter des scripts Python (dans mon cas Python3) : QPython3. Celle-ci ne semble pas libre (we will push on the whole qpython to be opensource gradually) et demande l’accès à beaucoup de choses dans mon téléphone (il y a une explication à cela, puis-je vraiment faire confiance ?) mais je n’ai pas trouvé d’équivalent dans F-droid…. Toujours est-il que maintenant mes enfants pourront faire des additions sur mon téléphone dans la salle d’attente du médecin, ce sera toujours plus utile qu’Angry Birds.

Conclusion

Je n’ai pas fait grand chose ici, bien moins que pour mes scripts nautilus, bien moins que n’importe quel développeur que vous aurez l’occasion de croiser. Je n’ai rien développé d’important ici, ce n’est pas du code dont je peux être particulièrement fier pourtant j’éprouve une satisfaction certaine, le plaisir de réfléchir à des algorithmes simples, le plaisir d’apprendre une nouvelle syntaxe, le goût des choses simples comme diraient Ludwig Schweisfurth et son épouse Wilhelmine.

Mes scripts… mes règles de structure

Dans le navigateur de fichier Nautilus, j’ai très vite apprécié la possibilité d’écrire des scripts qui simplifient souvent les tâches courantes (tourner des images, renommer en fonction des données exif, convertir,…). Ces scripts sont accessibles dans le menu qui apparaît lors d’un clic droit sur un fichier, cette possibilité devient très vite indispensable. J’utilisais pas mal cette possibilité il y a quelques années et dernièrement j’ai remis le nez dans ces fameux nautilus-scripts.

J’ai re-téléchargé un ou deux packs de scripts car les miens avaient disparus suite à une mauvaise manipulation ou je ne sais quelle maladresse combinée à une sauvegarde défaillante. J’ai montré cette fonctionnalité à un de mes collègues. Il a trouvé cela génial. Mais étrangement les scripts que j’avais mis de côté ne fonctionnaient pas sur sa machine. J’ai pensé qu’il n’avait pas installé les dépendances (ce qui était en effet le cas) mais un problème peut en cacher un autre : les scripts en question utilisaient la variable $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS or il utilise Nemo, cette variable a été renommée $NEMO_SCRIPT_SELECTED_FILE_PATHS dans ce navigateur… J’ai trouvé cela très ennuyeux et c’est là que commence mon aventure.

Les scripts sont simples à écrire, quelques lignes suffisent mais en contrepartie, les scripts sont souvent assez peu bavards : s’il y a une erreur de dépendance, bien rien ne se passe ; si vous appliquez un script prévu pour un certain type de fichier, sur un autre, cela peu donner des résultats catastrophiques car de plus, certains scripts écrasent le/les fichier(s) source(s) ! Je me souviens d’un clic légèrement décalé par rapport à celui désiré qui avait détruit un de mes svg en appliquant une conversion prévue pour un jpg…

Du coup, j’ai créé mon dépôt de scripts sur github (je migrerais sûrement sur gitlab un jour), j’y dépose évidemment mes scripts mais surtout mes règles de structures. Mes scripts respectent donc les règles suivantes :

  • N’écrase jamais l’entrée !!!
  • Fonctionne aussi bien dans le prompt que dans n’importe quel navigateur de fichiers supportant les nautilus-scripts
  • Des notifications (en cas de problèmes de dépendances ou de type de fichiers invalide), on ne laisse pas l’utilisateur dans l’incompréhension en cas d’erreur !
  • Le type de fichier est déterminé par la commande file --mime-type -b "$input" | cut -d "/" -f2 (au besoin remplacer f2 par f1, supprimer le cut) jamais en déterminant les caractères après le dernier point ou pire les 3 derniers caractères du nom de fichier !
  • Tous les textes en anglais car les traductions sont difficiles à maintenir, le moins de texte possible.
  • Le nom du script contient des caractères utf-8 permettant de mieux comprendre le fonctionnement (ajouter ↶ ou ↷ pour un script de rotation permet de déterminer le sens c’est très pratique !)
  • Le nom du script contient des variables si le script est décliné en plusieurs version
  • Utilisation directe (pas de boite de dialogue)
  • Faciles à copier et à adapter (donc commenté, proprement indenté,…)

Je modifie régulièrement, au fur et à mesure de mes idées et des commentaires de contributeurs éventuels, les fonctions permettant d’obtenir ces résultats, tout est expliqué sur le dépôt.

Pour l’instant assez peu de scripts sont écrits mais une fois la structure bien en place le nombre de scripts devrait vite augmenter. Pour l’instant, sont disponibles :

  • installer des polices
  • concaténer / séparer les pages, tourner, compresser des pdf
  • redimensionner, recadrer automatiquement, convertir, tourner des images (90°, 180°, 270°, symétrie axiale)
  • renommer des photos à partir des données exif (date)
  • supprimer un fond blanc, ajouter un fond coloré à une image

Cela me permet de plus, d’apprendre à utiliser git, c’est tout bénef.

svg2png 0.2

Information

svg2png permet la conversion de fichiers svg en fichiers png. Cette nouvelle version ne pose plus qu'une seule question ce qui accélère son utilisation ("Page/Dessin ?" à été supprimée). Autre nouveauté : Elle est optimisée pour être utilisée avec nautilus-actions.

Caractéristiques :
  • Bilingue (Français/Anglais)
  • Dépendances : Zenity, Inkscape
Capture d'écran :

Installation

Pour l'installer, commencez par installer nautilus-actions :
sudo apt-get install nautilus-actions

Téléchargez le fichier de config et le script (que vous placerez dans un dossier .bin dans votre répertoire personnel, avec des droits d'execution). Pour faire simple en une seule commande :
cd ~ && wget http://yeknan.free.fr/blog/fichiers/nautilus-actions/svg2png.schemas && mkdir .bin && cd .bin && wget http://yeknan.free.fr/blog/fichiers/nautilus-actions/svg2png && chmod u+x svg2png

Allez dans Système > Préférences > Configuration des actions de Nautilus

Cliquer sur Importer/Exporter pour importer le .schemas fraîchement téléchargé :

Redémarrez Nautilus (nautilus -q) pour que l'import soit effectif.

Utilisation

svg2png permet de convertir plusieurs fichiers en même temps mais n'est pas récursif (vous ne pouvez pas sélectionner de dossier).

En faisant un clic droit sur un ou plusieurs .svg voici ce que vous verrez apparaître :

Rotate-Mirror_pictures 0.3

Quelle honte ! Depuis le 10 février, Pat Carr m'a envoyé un patch très bien fait pour mon script Rotate-Mirror_pictures. Ce patch ajoute deux fonctionnalités intéressantes. Je l'ai appliqué chez moi et j'ai attendu aujourd'hui pour vous faire profiter de cette nouvelle version. Je m'excuse d'avoir été si long et je remercie Pat Carr pour son excellent travail.

Les nouveautés apportées par le patch :

  • Traduction en Espagnol
  • Il est possible d'utiliser le script sans jhead (la fonction auto est désactivée et vous en êtes averti par un message)

Lire la suite...

dvd2wav 0.1

Vous venez d'acheter le dvd d'un concert et vous aimeriez l'écouter régulièrement. Pas la peine de sortir votre dvd à chaque fois, vous pouvez extraire la piste son et la convertir ensuite en ogg vorbis (ou en mp3 ou autre selon votre goût). La commande miracle :
mplayer -vo null -ao pcm:file=$folder\/$titre-$chap\.wav -chapter $chap\-$chap dvd://$titre
avec :

  • $folder : Le dossier ou vous voulez placer vos wav.
  • $titre : Le titre contenant les chapitres du concert.
  • $chap : Le chapitre a convertir.

Vous vous dites que ce serait plus pratique si cette commande était placée dans un script ? Je m'en doutais. Allez, comme je suis sympa je vous fourni le script dvd2wav que je viens d'écrire à partir de ce script et avec l'aide de Bobousse, Taliesin et Philippe.

Le script extrait les pistes audio en wav, aucune conversion n'est faite avec ce script car je ne voulais pas l'alourdir avec des fonctionnalités que vous pourrez obtenir avec WOM_audioconverter ou Audio convert. Peut-être qu'une future version incluera WOM, je verrais selon mes besoins (ou les vôtres si vous le demandez dans les commentaires).

Voici une copie d'écran :
dvd2wav0.1

Pour l'installer, tapez dans une console (tout le texte en une seule commande) :
cd ~/.gnome2/nautilus-scripts/ && wget http://yeknan.free.fr/blog/fichiers/dvd2wav && chmod u+x ~/.gnome2/nautilus-scripts/dvd2wav

Pour les personnes qui n'aiment pas la console : Téléchargez ce fichier et copiez le dans votre dossier ~/.gnome2/nautilus-scripts/, rendez-le executable.

Dépendances : zenity et mplayer (j'utilise mplayer-nogui personnellement).

svg2png 0.1

Une nouvelle version de svg2png est disponible ici

Il est possible de convertir des svg en png avec l'excellent Inkscape. Hélas, la conversion de plusieurs fichiers devient vite pénible (imaginez répéter 10, 20 ou 30 fois la même opération !). Heureusement que sous Linux il existe une console qui permet de tout faire et qu'il vous est possible d'écrire des scripts de façon très simple.

J'ai donc écrit un script Nautilus permettant de convertir facilement un grand nombre de fichiers svg en png : svg2png 0.1. Celui ne vous pose que deux questions :

  • Quelle partie de l'image convertir (page ou dessin) ?
  • Quelle résolution ? (par défaut 90 dpi)

A noter : Le script ne travaille pas de façon récursive, il n'est donc pas possible de sélectionner un dossier.

Voici des copies d'écran :
svg2png1 svg2png2

Pour l'installer, tapez dans une console (tout le texte en une seule commande) :
cd ~/.gnome2/nautilus-scripts/ && wget http://yeknan.free.fr/blog/fichiers/svg2png && chmod u+x ~/.gnome2/nautilus-scripts/svg2png

Pour les personnes qui n'aiment pas la console : Téléchargez ce fichier et copiez le dans votre dossier ~/.gnome2/nautilus-scripts/, rendez-le executable.

Les dépendances : zenity et inkscape.

Rotate-Mirror_pictures 0.2

Une nouvelle version du script est disponible ici.

Cela faisait quelques temps que je n'avais pas amélioré mon script Rotate-Mirror_pictures, pourtant quelque chose me manquait dans celui-ci.

Pour mémoire Rotate-Mirror_pictures est un script nautilus permettant de tourner des images de 90, 180 ou 270°, de faire un miroir horizontal ou vertical. Il ne travaille pas de façon récursive mes il est possible de tourner plusieurs fichiers à la fois.

Le problème : Lorsque vous tournez une photo contenant des données exif, certains logiciels les prennent en compte et d'autres non. Ainsi, lorque vous tourniez vos photos avec Rotate-Mirror_pictures 0.1 alors que les données exif indiquaient déjà une rotation, les logiciels reconnaissant ces indications tournaient encore les photos ! Avec la version 0.2, une fois que vous avez utiliser mon scripts, les informations de rotation contenues dans les données exif sont effacées, ainsi, tous les logiciels se mettent d'accord.

De plus, j'ai ajouté une fonctionnalité : Rotation automatique à partir des données exif. Ça simplifie la tâche.

Voici une copie d'écran :

Pour l'installer, tapez dans une console (tout le texte en une seule commande) :
cd ~/.gnome2/nautilus-scripts/ && wget http://yeknan.free.fr/blog/fichiers/Rotate-Mirror_pictures && chmod u+x ~/.gnome2/nautilus-scripts/Rotate-Mirror_pictures

Pour les personnes qui n'aiment pas la console : Téléchargez ce fichier et copiez le dans votre dossier ~/.gnome2/nautilus-scripts/, rendez-le executable.

Les dépendances : jhead, zenity et mogrify (dans le paquet imagemagick).

Easydpkg2

Sur le forum de Ubuntu-fr, Anbreizh (reconnaissable par l'avatar ci-dessus) a ouvert un topic pour signaler qu'il écrivait un script simplifiant l'utilisation de dpkg.

a) Dpkg
Sous Ubuntu, les logiciels sont installés à l'aide de paquets, gérés par apt-get (et son interface graphique synaptic). Ses paquets se trouvent le plus souvent sur des dépôts (cd d'installation ou serveurs principalement) et apt-get s'occupe de télécharger, installer, gérer les dépendances,... Problème : Certains paquets ne sont pas sur les dépôts et vous devez les télécharger pour les mettre sur votre disque dur. Vous devez donc utiliser dpkg pour l'installer. Hélas,

  • dpkg n'a pas d'interface graphique. Personnellement cela ne me dérange pas mais c'est parfois problèmatique pour certains allergiques au bash.
  • dpkg ne gère pas les dépendances.

C'est là que Easydpkg2 intervient.

b) Easydpkg2
Easydpkg2 est un script nautilus permettant d'utiliser dpkg sans passer par la ligne de commande. Ce script va vous permettre :

  • d'installer des paquets locaux (des paquets sur votre disque dur et pas sur un serveur).
  • de convertir des .rpm en .deb avant de les installer.
  • de gérer les dépendances.

c) Installation et utilisation
Rien de plus facile. Téléchargez ce fichier et placez le dans le répertoire ~/.gnome2/nautilus-scripts/ (~ représentant votre répertoire personnel). Rendez le executable en ajustant les propriétés du fichier. Vous pouvez le faire en ligne de commande (tout le texte en une seule commande) :

cd ~/.gnome2/nautilus-scripts/ && wget http://yeknan.free.fr/blog/fichiers/easydpkg/easydpkg2 && chmod u+x easydpkg2

Pour l'utiliser, faites un clic gauche sur un (ou plusieurs) fichier(s) deb ou rpm (si vous avez installé alien) que vous souhaitez installer, rendez-vous dans le sous-menu "Scripts" puis cliquez sur easydpkg2. Laissez-vous guidez par les questions.

lancer
ed2

d) Comment en sommes nous arrivez là ?
À l'origine de ce script il y a deux scripts et un mail.

  • Anbreizh propose deux scripts sur le forum cité plus haut : Un script pour faire un dépôt à partir d'un dossier et un autre pour utiliser dpkg sans ligne de commande.
  • J'écris à Anbreizh un courriel pour lui demander s'il ne trouverait pas intéressant de fusionner ses deux scripts pour faire un dpkg amélioré, je lui propose un pseudo algorithme écrit rapidement.
  • Retour de mail, l'idée lui plait et nous décidons de co-écrire le script. Il me renvoi un premier script déjà très avancé (quasiment tout le travail est presque fait, il code vite et bien).
  • J'ajoute le support des langues et propose un algorithme pour une partie qu'y lui pose problème (je suis bien meilleur en algorithme qu'en code)
  • Anbreizh code le tout, finalise et propose le résultat sur le forum (quand je vous dit qu'il est fort).

e) Conclusions
1- J'espère que ce script vous plaira.
2 - Ceci est encore une preuve (la première étant ici) que même si vous n'êtes pas programmeur (bon, j'avoue qu'il faut un peu de base), si vous le désirez, vous pouvez aider la communauté du libre.

WOM_audioconverter est mort !

Argh. Mais alors pourquoi en avoir sortie une version il y a quelques heures. Tout simplement parce que je viens juste d'être prévenu par mon agrégateur de news. audio-convert 0.3 est sorti et c'est une bombe :D .

Lire la suite...

WOM_audioconverter 0.3

Cela faisait longtemps que je n'avais pas retouché à mes scripts nautilus : Rotate-Mirror_pictures (que je n'ai pas modifié depuis le mois de mars) et WOM_Audioconverter (dont la dernière mise à jour remontait au mois de mai). C'est de ce dernier dont je vais vous parler ici, puisque je l'ai mis à jour cette nuit.

Lire la suite...