muttum est un jeu libre dont le but est de retrouver un mot en quelques essais. La première lettre est fixe pour avoir des plateaux différents à chaque fois. Une première version de muttum est publiée sur Flathub depuis le début de l’été.
Sommaire
Histoire
Le projet muttum est né suite à la découverte des jeux Wordle et Sutom qui proposent également de deviner un mot une fois par jour dans le dictionnaire anglais pour le premier et français pour le second.
J’ai décidé de me lancer dans l’aventure de développer muttum sur mon temps libre pour proposer le jeu de devinette sans avoir besoin d’Internet et pour pouvoir essayer plusieurs mots dans la même journée sans limitation artificielle.
Une autre de mes motivations était d’apprendre à créer une application avec les bibliothèques GTK et GObject. J’avais déjà joué avec GTK quelques fois, mais je n’avais pas utilisé le concept des objets proposé par GObject et il me semblait que GObject pouvait simplifier l’utilisation des composant GTK complexes. Par exemple, après avoir implémenté la vue en table des budgets HomeBank, j’ai eu l’impression que ça aurait été plus facile de créer la table GTK si les données à afficher avait déjà été mises en forme avec GObject.
Je voulais également essayer également d’utiliser le langage C directement, le langage utilisé par GTK, pour ne pas avoir besoin de dépendre des introspections (interfaces de GTK avec les autres langages de programmation, comme Python, C++…).
C’est ainsi que le développement a commencé en février 2022 sous le nom temporaire LeBonMot avec une structure assez simple qui mélangeait le moteur logique du jeu et l’interface graphique dans un seul et même code source.
Après quelques semaines de développement, j’ai trouvé le nom muttum et j’ai débuté la location du nom de domaine muttum.org
en avril 2022 :
$ rdap muttum.org
Domain:
Domain Name: muttum.org
Domain Name (Unicode): > muttum.org
[…]
Event:
Action: registration
Date: 2022-04-12T08:46:16.285Z
muttum
serait, d’après le Wiktionnaire, un nom commun latin qui signifie bruit, grognement et dont la dérivation en français a formé le nom commun mot. Cette information m’a bien plu puisque justement le but du jeu est de retrouver le bon mot et que, en plus, c’est un palindrome.
Durant la même période, j’ai commencé une réorganisation du code pour séparer la partie moteur de calcul de la partie graphique, ce qui permettra dans le futur de développer plusieurs styles d’interface graphique. Pour l’instant muttum ne propose qu’une interface développée pour la plateforme GNOME, car elle dépend de la bibliothèque libadwaita.
Quand je décide de faire cette séparation, j’ai deux idées d’interfaces : une qui serait multi-plateforme en n’utilisant que GTK (sans libadwaita) et une interface web en utilisant WebAssembly pour utiliser le moteur de muttum. Pour l’instant, aucune de ces 2 interfaces n’a été développée. La version multiplateforme sera assez rapide à implémenter (il faut enlever libadwaita des dépendances) et la version web ne sera peut-être jamais utile finalement : depuis 2025 GTK propose un portage expérimental pour la plateforme Android.
Vers septembre 2022, je décide de séparer le code source dans deux répertoires différents: muttum
ne contiendra que l’interface graphique et libmuttum
ne contiendra que le moteur du jeu. Le travail est donc continué sur libmuttum
jusqu’à fin janvier 2023 (séparation du moteur, ajout de tests pour le moteur…).
Le projet est en pause complète jusqu’en novembre 2024, je ne sais plus pourquoi, mais certainement parce que les rénovations de ma maison ont débuté en 2023 et que je n’avais plus la tête à coder sur mon temps libre.
En novembre 2024, le premier commit de la reprise indique que je reprends le code du moteur avec le langage Rust et ce pour plusieurs raisons :
- je souhaitais apprendre Rust et le code de ce moteur était un bon bac à sable pour apprendre un nouveau langage. Il m’avait d’ailleurs déjà permis d’apprendre à utiliser C et GObject ;
- je ne retrouve plus la référence exacte, mais un des développeurs principaux de GTK conseillait d’utiliser Rust pour débuter de nouvelles applications (c’était probablement l’article On Vala d’Emmanuele Bassi) ;
- les éditions ENI m’ont offert le livre Rust, Développez des programmes robustes et sécurisés pour une de mes contributions à LinuxFr.
Enfin, en juin 2025, la première version publique a été publiée sur Flathub.
Fonctionnalités
muttum fonctionne avec des dictionnaires : ce sont des fichiers textes qui contiennent un mot connu par ligne et qui sont encodés en UTF-8. Les dictionnaires distribués avec la version Flathub proviennent des projets:
- wfrench pour le français
- scowl pour les dictionnaires anglais
- igerman98 pour les dictionnaires allemands
muttum permet aux distributeurs de définir n’importe quel dictionnaire avec un fichier de configuration. Ceci permet aux empaqueteurs d’utiliser les paquets déjà existant pour les dictionnaires et de donner le chemin à charger pour chaque langue. Ce fichier de configuration est également utilisé dans le dialogue À propos des dictionnaires pour créditer les projets qui ont créé les dictionnaires.
muttum sait gérer l’alphabet latin, mais il est architecturé pour définir d’autres alphabets. Pour ce faire, il faut définir les caractères de base. muttum utilise cette liste pour filtrer les caractères entrés par l’utilisateur et pour filtrer les mots valides.
À mesure que l’utilisateur essaie des mots différents, muttum met à jour l’alphabet affiché en dessous du plateau pour indiquer si toutes les occurrences d’une lettre ont été trouvées (couleur verte), si des occurrences ont été trouvées et qu’il pourrait en exister plus (couleur orange) ou si une lettre n’existe pas dans le mot (couleur grise).
Limitations
muttum nécessite un clavier pour saisir les caractères, il n’y a pour l’instant pas de possibilité de saisir les caractères avec un écran tactile. L’écran doit aussi être assez grand pour pouvoir afficher le plateau complètement, donc pour l’instant il n’est pas utilisable sur les smartphones.
muttum n’applique pas de filtres sur les mots des dictionnaires, il contrôle uniquement qu’un mot est valide selon l’alphabet défini. Par exemple, il est conseillé qu’un dictionnaire contienne les conjugaisons complètes des verbes et donc un mot à deviner peut être n’importe quelle forme du verbe.
Développements futurs
Pour l’instant, je vais faire une pause dans le développement de ce jeu, parce que je souhaite travailler sur d’autres projets.
Néanmoins, j’ai déjà quelques idées pour la suite de ce projet :
- ajouter un dialogue pour expliquer comment jouer (utilisation du clavier), la signification des couleurs et la mise à jour de l’alphabet sous le plateau
- ajouter un chronomètre en sous-titre de la fenêtre et afficher le temps pour terminer le plateau dans le dialogue de fin de jeu
- dans le dialogue de fin, j’aimerai ajouter un bouton de partage comme le fait Sutom. Pour que ce soit intéressant, il faudra que j’ajoute un lien pour que les amis puissent essayer le même plateau. Donc il faut que muttum gère le schéma d’application
muttum://
et il faudrait mettre le mot à trouver encodé en base64 et les paramètres du plateau dans le lien - vers la fin du projet, j’ai appris l’existence de l’option
pedantic
pour le linter clippy et je voudrais corriger les points qu’il remonte pour avoir un meilleur style de code. - la bibliothèque icu a sorti une nouvelle version majeur, il faudrait mettre à jour le code de muttum pour celle-ci.
- rendre l’application compatible avec les smartphones. Ça passera sûrement par l’utilisation d’entrées textes à la place des labels dans le plateau, cacher l’alphabet par défaut et rendre le plateau défilable.
Aller plus loin
- site du projet (140 clics)
- muttum sur Flathub (35 clics)
- code source (34 clics)
# Worlde
Posté par sylTer . Évalué à 1 (+1/-0).
Bonjour,
Merci pour cet article fort intéressant.
Wordle existe aussi en français : https://wordle.louan.me/
Dans le même genre aussi : https://www.tusmo.xyz/ (français, anglais, espagnol, allemand).
Bonne journée.
[^] # Re: Worlde
Posté par Adrien Dorsaz (site web personnel, Mastodon) . Évalué à 2 (+0/-0).
Bonjour,
En effet, il y a déjà eu beaucoup de clones en ligne de wordle et même des versions desktop.
Sous Linux nous avons souvent le choix entre plusieurs applications, voilà un choix de plus pour s'amuser à deviner des mots :)
# Joli et petite suggestion
Posté par Guillaume Smet (site web personnel) . Évalué à 3 (+2/-0).
Très mignon.
Si je peux suggérer quelque chose qui va casser la symétrie du clavier : l'une des choses qui me manquent dans Wordle.louane.me, c'est la capacité à taper un caractère blanc.
Perso, ça m'aide pas mal à visualiser les mots de mettre les lettres supposées et des blancs. C'est une chose qu'on peut faire dans SUTOM.
[^] # Re: Joli et petite suggestion
Posté par Adrien Dorsaz (site web personnel, Mastodon) . Évalué à 3 (+1/-0).
Merci pour le retour, je n'avais pas pensé à l'utilité de pouvoir saisir des espaces.
J'ai testé hier soir, le correctif était assez simple pour le permettre. Je suis en train de publier une nouvelle version 25.07.1 avec cette nouveauté :)
# Absence de filtre et mots rares
Posté par thoasm . Évalué à 3 (+0/-0).
Je viens de tomber sur :wikt:scalant par exemple, c'est pas très fréquent et pas du tout facile à trouver. C'est pas spécialement rare de tomber sur un mot dont on ne connaît pas l'existence.
Une idée pourrait être d'utiliser des données lexicales, par exemple http://www.lexique.org/ qui apparemment a des données de fréquences pour filtrer un peu ça. On y trouve pas "scalant" il me semble, bien qu'il y ait de quoi faire, 180000 termes.
[^] # Re: Absence de filtre et mots rares
Posté par Adrien Dorsaz (site web personnel, Mastodon) . Évalué à 3 (+1/-0).
En effet, c'est une limitation assez forte de muttum, il n'y a pas de filtres disponibles parce que ça nécessite d'implémenter des filtres pour chaque langue et que je ne connais pas de liste de filtre déjà existant.
Si on prend le cas de Wordle et Sutom, ils n'ont pas vraiment ce problème car ils limitent fortement les choix possible: un seul mot ne peut être joué par jour et il est contrôlé par un serveur. L'hébergeur du serveur peut à sa guise créer sa sélection de mots et pour une année, il lui suffit de trouver 365 mots.
La force de muttum est justement de pouvoir faire autant de partie que voulue, mais c'est aussi sa faiblesse puisqu'aucun filtre éditorial n'est proposé.
C'est une idée, mais ça ne sera disponible que pour le français et, en plus, la licence de ces données m'empêche de les redistribuer facilement (c'est du CC-BY-NC).
Une autre idée serait de créer un fichier de regexp par langue pour exfiltrer certaines formes de mot durant la sélection du mot à trouver.
Pour le français, on pourrait par exemple supprimer les formes conjuguées des verbes (surtout le passé simple, le subjonctif, les participes passés…).
Je ne sais pas si les regexp seraient vraiment adaptées et facilement utilisables ou s'il faudrait plus simplement faire une liste de mots interdits.
Quelque soit la forme, l'avantage d'une seconde liste de mot est qu'elle peut être agrandie à mesure par les joueurs et qu'elle n'empêche pas de continuer à jouer, même si la langue est inconnue pour moi et que la liste est vide.
[^] # Re: Absence de filtre et mots rares
Posté par Benoît Sibaud (site web personnel) . Évalué à 4 (+1/-0). Dernière modification le 21 juillet 2025 à 09:36.
Wiktionary a une pseudo indication de fréquence et de typage (nom commun, adjectif, etc.). J'ignore si la corrélation est facile à faire.
Je me demande si les outils de cassage de mots de passe n'ont pas des stats d'occurrences ou au moins des dicos ordonnés par fréquence.
[^] # Re: Absence de filtre et mots rares
Posté par thoasm . Évalué à 3 (+0/-0).
Il y a moyen d'utiliser les données lexicographiques de Wikidata. On peut récupérer une liste de mots dans virtuellement n'importe quelle langue (dépendante de la couverture sur WD évidemment, qui est loin d'être complète pour l'instant) donc y compris le breton, basque, créole haïtien, virtuellement n'importe quel élément Wikidata peut être utilisé … Évidemment ça dépend de la couverture des langues sur Wikidata qui est variable.
Une requête interactive (langue sélectionnable) pour générer une liste de mots : https://w.wiki/EoUX On récupère facile une liste
Double effet kiss-cool, ma requête filtre en principe les flexions ! Wikidata les regroupe dans un unique "lemme" qui a plusieurs "formes" (pluriel, conjugaisons, …) dont une principale, la requête ne récupère que la forme principale. Ça prend quelques secondes pour exécuter la requête en anglais. C'est donc faisable au chargement, et cachable dans les données du programme.
Évidemment l'ouverture peut poser problème et pour les langues des signes ça va pas marcher hors de la boîte vu que les lemmes sont codés et que de toute façon c'est pas évident de savoir quoi faire de ces lemmes. Et pour les langues avec des alphabets syllabaires et des idéogrammes, comme le japonais, faudrait filtrer pour n'avoir que les syllabaires (taper "japonais" dans ma requête interactive, on voit le problème). C'est gérable je pense en
compliquant un peu la requête, il devrait y avoir les données sur WD pour faire ça, voir si c'est performant), ça nécessite de filtrer un peu plus les données (les lemmes ont des codes de langue différent, "ja" et "ja-hira", le second est pour le syllabaire). Pas sur que le jeu fonctionne pour les idéogrammes.
Il y a aussi des extensions envisageables avec ces données, comme filtrer sur un niveau de langue, par exemple ici pour n'inclure que du "slang" en anglais : https://w.wiki/EoUo
Doit y avoir moyen de filtrer aussi par domaine d'usage : https://w.wiki/EoUv ici les termes en anglais utilisé en informatique (il y en a encore peu).
Il n'y a pas par contre à l'heure actuelles de données sur la fréquence des lexèmes dans Wikidata. Ça pourrait changer si la communauté s'y met, le modèle est extensible il "suffit" de proposer de nouvelles propriété pour les ajouter (et d'avoir des données utilisables évidemment).
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.