Cook ou… le grimoire ?!

Je vais vous parler de deux bouquins, qui abordent des concepts assez similaires mais selon deux modalités bien différentes : Le guitar Cookbook et le guitar grimoire. Alors, avant tout je précise que je ne suis sponsorisé ni par l’un ni par l’autre, je ne connais aucun des auteurs, j’ai acheté moi-même les deux livres et c’est pourquoi je vous propose aujourd’hui mon retour d’expérience.

A ma gauche, 64 pages en couleurs et reliure en spirales: Le cookbook!
A ma droite, 212 pages en noir et blanc, reliure cartonnée et papier épais: Le grimoire!

Les deux livres en question parlent des gammes, et des relations entretenues par les gammes avec les modes et les accords. Ce ne sont pas ouvrages de théorie, bien que pour chacun d’entre eux il y ait des éléments théoriques en début d’ouvrage pour utiliser au mieux le contenu que vous y trouverez.

Petite précision: Si vous ne savez pas ce que désigne le terme mode d’une gamme, vous pouvez le dire en commentaires je ferai un petit explicatif (encore une fois, je ne suis ni guitariste professionnel, ni prof de guitare donc je vous expliquerai ça selon mes propres mots). Mais en tout cas, ce n’est pas un frein à la l’utilisation de ces ouvrages puisque toutes les explications nécessaires s’y trouvent.

Les explications théoriques et le mode d’emploi

Chacun des deux bouquins expose son mode d’emploi (comment sont organisés les schémas, comment en tirer le meilleur parti) et des éléments théoriques pour comprendre ce qu’est une gamme (pour commencer, c’est pas mal de savoir!) puis comment gammes, modes et accord sont reliés.

Le cookbook, comme son nom ne l’indique pas, a été préparé par un chef français et contient une double rédaction en anglais et en français. Le guitar grimoire est rédigé exclusivement en anglais, ce n’est pas de l’anglais très compliqué mais si vous ne parlez pas du tout ou si vous avez vraiment du mal, il y a deux cas de figure :

1 – Vous connaissez déjà la théorie reliant accords, gammes et modes. Dans ce cas les schémas présentés vous paraîtront de toute façon assez clairs en eux-mêmes,

2 – Vous ne la connaissez pas et là, il vaut probablement mieux vous tourner vers le cookbook.

Et sinon, il y a quoi dedans?

Dans les deux bouquins, vous allez trouver la même liste de 27 gammes et de leurs modes associés.

Les deux ouvrages présentent des schémas représentant le manche de la guitare, permettant de situer les notes composant les gammes et les modes dont il est question sans avoir besoin de lire le solfège.

Le guitar grimoire présente non seulement les schémas de guitare mais aussi la situation des notes en question sur un clavier. Un petit plus qui peut être utile.

La taille des deux ouvrages est très différente. On voit nettement que le grimoire est beaucoup plus gros que le cookbook. La raison est que le grimoire présente non seulement les schémas généraux des gammes indépendamment de leur fondamentale (la première note de la gamme) mais aussi tous les schémas de toutes les gammes et de tous les modes pour chaque fondamentale!

Donc, pour chaque gamme et chaque mode, vous trouverez douze schémas sur le grimoire, et un seul schéma sur le cookbook.

Maintenant, est-ce que c’est utile ? A mon avis non, et c’est même potentiellement contre-productif. Inutile, parce que finalement, ces douze schémas sont en réalité un seul et unique schéma décalé de case en case sur le manche. Donc, le présenter une seule fois est déjà suffisant.

Et potentiellement nocif parce que ça n’encourage pas à faire l’exercice de trouver justement les endroits où se trouve la fondamentale pour chaque configuration. Cette information n’est d’ailleurs indiqués nulle part sur les schémas du grimoire (et, par extension, aucun autre intervalle n’est matérialisé). Le cookbook en revanche, et c’est un avantage primordial de mon point de vue, indique non seulement pour chaque schéma où se trouve la fondamentale mais également tous les autres intervalles de chaque gamme et de chaque mode.

Le grimoire contient par contre un diagramme supplémentaire par rapport au cookbook: Il s’agit d’un schéma de sweeping présentant les mêmes gammes mais sous une organisation facilitant le jeu en sweeping. Donc c’est l’organisation des notes sur les différentes cordes qui est modifiée. A vous de voir si c’est quelque chose qui vous intéresse.

Facile à utiliser ou une galère?

La façon de matérialiser la relation entre les gammes, les modes et les accords est très différente entre les deux livres. Là, de mon point du vue le cookbook marque un dernier point décisif.

Les modes « écclésiastiques » et la gamme majeure dont ils sont issus, présentés dans le cokbook

Alors que le grimoire nous présente un tableau à deux colonnes, avec en première colonne le nom de la gamme ou du mode et en seconde colonne le type d’accord sur lequel cette gamme ou ce mode « colle », le cookbook nous propose un schéma complet, avec les différents degrés clairement indiqués pour chacun des types d’accords. Infiniment plus immédiat, en tout cas pour moi. De la même façon, le cookbook présente une vue de l’instrument avec la gamme sur tout le manche, et découpe la gamme en zones qui correspondent aux différents modes. Et ça c’est très malin, ça permet de cadrer tout de suite la gamme et ses modes, de voir comment tout ça s’articule. De plus, toutes les zones mènent aux schémas des accords en partie basse de la page. Du coup, lire le cookbook c’est comme utiliser un GPS alors que le grimoire en reste à la bonne vieille carte routière.

Mêmes modes, même gamme de base, dans le grimoire. Il ne s’agit que de la première page, il y en a exactement 20 autres qui suivent pour présenter tous les modes dans toutes les tonalités sur tout le manche. Les magiciens sont bavards.

En revanche, un choix qui me paraît regrettable dans le cookbook est celui d’avoir fait figurer les « formules » (les intervalles des différentes notes composant les gammes et modes) comme s’il s’agissait d’accords. Dans les deux images que je vous ai mises, on voit que pour le mode Ionien par exemple le cookbook indique « 1,3,5,7,9,11,13 » là où le grimoire nous dit « 1,2,3,4,5,6,7 ». Bien sûr c’est la même chose, mais c’est dommage d’avoir à recaler les 9=2, 11=4 etc. quand on cherche la formule d’un mode qu’on ne connaît pas.

C’est toutefois compensé par le fait que sur les diagrammes, on a bien les 1,2,3,4,5,6,7 pour le mode Ionien de notre exemple. Mais j’aurais trouvé plus clair que la formule soit calquée sur la gamme plutôt que sur l’accord.

Concernant l’ergonomie, le cookbook est relié par des spirales, un choix qui se révèle très pratique pour afficher la page que l’on utilise au lieu de devoir maintenir un gros livre comme le grimoire ouvert devant nous. Ca paraît tout bête, mais ça facilite vraiment l’utilisation au quotidien.

Jolis bouquins?

Passons à l’objet lui-même. Là je suis vraiment fan du grimoire qui joue à fond le côté « grimoire », justement, avec du papier épais, non glacé et une couverture en carton noire épaisse très chouette. Le cookbook a un côté magazine qui m’accroche moins, avec par contre des superbes illustrations de guitares et des pages en couleurs, des couleurs qui ne sont pas là uniquement pour le fun mais qui facilitent la lecture.

Voilà pour les points communs et les différences entre ces deux livres, pour moi vous l’aurez compris le cookbook gagne le match. Je lui trouve beaucoup d’avantages en termes de lisibilité et de présentation de l’information, mais cela ne s’arrête pas là. Le fait que l’on identifie tous les intervalles de chaque diagramme permet de vraiment comprendre ce que l’on fait, plutôt que de visualiser sur le manche des points sans relation entre eux.

Si vous cherchez des schémas de sweeping ou si vous voulez voir les gammes que vous utilisez à la guitare matérialisées aussi sur un clavier, ou enfin si vous soulez avoir immédiatement accès à tous les schémas dans toutes les tonalités immédiatement, sans chercher les fondamentales et sans connaître les intervalles (encore une fois : mauvaise idée), alors c’est le grimoire qu’il vous faut. Mais si vous voulez avoir toutes les infos, gammes, modes et accords d’un seul coup d’oeil, et éventuellement tester immédiatement des accords dont vous n’avez pas l’habitude alors le cookbook est ce que vous cherchez.

Voilà, si vous utilisez d’autres livres pour votre pratique de la guitare, n’hésitez pas à les indiquer en commentaires, si vous avez d’autres éléments que ceux que j’ai mentionnés concernant la comparaison entre ces deux volumes, ce serait super de nous les faire partager, aussi en commentaires. A plus !

https://youtu.be/x0dGF7mwQnI
Introduction à Python.

Pour un premier article concernant l’informatique, il me semble opportun de commencer par Python. D’abord, parce que la syntaxe de ce langage est simple et convient à des programmeurs débutants. Ensuite, parce que cette simplicité ne grève aucunement les possibilités offertes. Enfin, parce que justement, les possibilités sont très nombreuses et dans des domaines d’applications très différents (Web, jeux vidéo, applications scientifiques, science des données…).

Je vais donc ici aborder les points les plus importants à connaître lors des premiers contacts avec ce langage. Cette introduction est à destination des débutants en python, qui connaissent tout de même des rudiments d’algorithmie et dans un second temps, de langage objet. si vous vous sentez en terre inconnue, laissez un commentaire en décrivant votre difficulté ou en posant votre question, j’y répondrai.

Les captures d’écran sont issues d’une formation que j’ai donnée il y a quelques années en utilisant la version 3.3, un peu ancienne aujourd’hui, de Python. Mais les instructions et les principes sont parfaitement valables pour la version actuelle (3.9).

Tous les fichiers d’exemple sont téléchargeables, les liens sont dans le corps de l’article. Afin d’être le plus accessible, cet article se basera sur une installation sous Windows, ce qui n’aura d’importance que pour l’installation et le lancement.

Installation, lancement et premiers pas.

Allez, on plonge! Et on commence par l’installation: Python est un langage qui fonctionne sur Linux, Windows, et Mac OS notamment. La procédure d’installation est décrite ici. Mais, si vous avez pas envie de lire la page en anglais, vous pouvez aussi télécharger directement python ici et lancer l’installation en suivant en double-cliquant sur le fichier téléchargé (le lien concerne la version Windows, pour Linux c’est tout simple avec le gestionnaire de paquets de votre distribution favorite et pour Mac OS je vous laisse vous pommer tout seul).

Une fois python installé, vous avez deux possibilités (voir captures d’écran ci-dessous): Soit lancer IDLE, ou Python lui-même, soit passer par l’invite de commandes et lancer « python ».

Voilà, nous sommes prêts à commencer. Un programme informatique passe une grande partie de son temps à manipuler des valeurs (des chiffres à ajouter, des caractères à afficher …). Ces valeurs sont stockées dans des « variables » (dans la capture suivante, n1 , msg , n2 sont les variables et 4, 7, « Coucou » sont les valeurs prises par ces variables). Comme on ne peut pas, par exemple, ajouter des chaînes de caractères et des entiers ces variables sont « typées » implicitement par le langage.

Ce typage implicite signifie deux choses: Une fois que vous assignez une valeur à une variable, elle est considérée comme appartenant à un type (entier, chaîne de caractères dans notre exemple) et doit se conformer à ce qu’il est possible de faire avec ce type (par exemple, on ne peut pas ajouter une variable de type entier et une variable de type caractère). La seconde chose, qui donne son nom « implicite » à ce typage, est que vous n’avez pas besoin de déclarer de quel type est une variable, python l’affecte automatiquement (« implicitement ») au bon type en fonction de ce que vous y stockez. Ce qui n’est pas le cas pour d’autres langages comme le C par exemple.

Concrètement, voilà ce que ça donne:

Ce typage est qualifié de « dynamique » puisque vous pouvez, comme dans la capture ci-dessus, changer « à la volée » le contenu d’une variable avec un contenu d’un type différent et python adaptera le type de la variable elle-même à son nouveau contenu.

Les bases des chaînes de caractères

Les chaînes de caractères sont comme des tableaux, que l’on peut manipuler en indiquant à quel élément du tableau nous souhaitons accéder. Voici quelques manipulations de chaînes de caractères, dans la capture en dessous.

Charger des fichiers, utiliser des fonctions

Le module introduction est téléchargeable ici.

Dans un « shell » (une invite de commandes) aussi bien que dans un programme python, il est possible d’importer un autre programme, on parle alors plus volontiers de « module ». Ici, le module introduction (son nom complet est introduction.py) est chargé dans le shell par l’instruction « import introduction », en omettant l’extension .py du module. En suivant ce chargement, nous avons accès à toutes les fonctions définies dans le module dit.

Mais, qu’est-ce qu’une fonction déjà? Ici, la fonction « fonction_intro » sera notre exemple. Une fonction est un ensemble d’instructions qui seront exécutées par le programme lorsque la fonction, justement, qui les contient sera elle-même appelée. Cela évite d’avoir à répéter, dans le code, une suite d’instruction dont on se sert souvent. On définit cette suite d’instruction une bonne fois, on la met dans une fonction et lorsqu’on en a besoin, on appelle simplement cette fonction. Ici, fonction_intro comprend deux instructions: on affecte un contenu à une variable puis on affiche la dite variable. Cette fonction est reconnue en tant que telle grâce à trois éléments:

  • le mot-clé « def » précédent son nom
  • les (): suivant son nom (nous verrons plus tard le rôle de ces parenthèses)
  • les indentations (espaces blancs) précédant les instructions qui composent la fonction elle-même

L’accès à cette fonction se fait par un appel utilisant le_nom_du_module ». »le_nom_de_la_fonction. Nous voyons que si le com du module est omis, la fonction n’est pas reconnue. Il y a des moyens de faire différemment, mais nous ne les aborderons pas dans un article d’introduction.

Structures conditionnelles

Le module « iffor » est téléchargeable ici.

C’est ici que les rudiments d’algorithmie que j’évoquais en introduction vont devenir utiles. Si vous ne savez pas ce que sont des boucles ou des structures conditionnelles, ce qui suit risque de vous demeurer obscur. Dites-le dans les commentaires si vous voulez un article sur la question. Si vous êtes à l’aise avec ça, ou que vous n’avez même pas peur, on continue.

Il faut noter, comme spécifié sur la capture ci-dessus, que les indentations font partie du langage. Si vous indentez (« alignez ») incorrectement vos blocs, python les considérera comme appartenant à un bloc différent. Suivant les cas, cela créera une erreur (pas trop grave, on corrige) ou bien une confusion avec un bloc différent (beaucoup plus désagréable à détecter et corriger). Vous pouvez essayer en alignant les « print » sous les « if » dans l’exemple ci-dessus, vous verrez tout de suite.

Ce comportement est parfois considéré comme une faiblesse du langage, je fais partie de ceux qui pensent que c’en est une force. En effet, lire un code mal indenté est désagréable, difficile et source d’erreurs. Avec python, ce risque-là disparaît par nature puisqu’un code mal indenté ne fonctionne pas.

le module bouclefor est téléchargeable ici.

D’autres types de données

Commençons par les listes. Elles sont déclarées en utilisant les crochets: maliste = [] crée une liste vide. Elles peuvent contenir des éléments hétérogènes (des listes mêlant booléens, chaînes de caractères, entiers etc. sont possibles). L’instruction « sort » permet de les trier, mais exige alors des listes homogènes. Les listes sont modifiables, on peut ajouter des éléments, les réorganiser, les supprimer.

Les tuples ne sont pas modifiables, illustration:

Les dictionnaires sont probablement, pour moi en tout cas, le type de données le plus génialement chouette de l’univers connu. Comme leur nom l’indique, ils agissent comme des entrées (des clés, « key » du point de vue de certaines opérations techniques en python) liées à des contenus (des valeurs, « values »).

Ici on déclare trois clés, trois contenus de type différent (char, float, list). Le module « ptilarousse » est téléchargeable ici.

Notez la facilité de parcours du dictionnaire: « for cle in dico ». Tant qu’il y a des clés à explorer, on les explore. la fonction str(x) prend le contenu de x et le trasforme en châine de caractères (sinon, le contenu de la clé « pi » qui vaut 3.14 ne pourrait pas être affiché dans l’instruction print telle qu’elle est employée dans notre exemple).

Arguments de fonctions, accès aux fichiers

Python utilise la fonction open() pour accéder aux fichiers sur disque. Cette fonction prend des arguments, c’est-à-dire des indications sur son comportement et sur les « valeurs d’entrée » de la fonction. Ces arguments sont définis à l’intérieur des parenthèses suivant le nom de la fonction (je vous avais bien dit qu’on y reviendrait!) et passés lors de l’appel à la fonction.

Pour la fonction open(), les paramètres sont le nom du fichier à ouvrir et le mode d’ouverture. Il y a plusieurs modes d’ouverture, les plus communs sont:

  • w -> Ecriture. On accède aux droits en ecriture sur le fichier, et les écritures effaceront le contenu précédent du fichier.
  • a -> « append », on ajoute au contenu du fichier ce que l’on y écrit.
  • r -> lecture, on a uniquement le droit de lire dans le fichier.

Ces droits peuvent se cumuler, par exemple ‘wr’ donne les droits en lecture et en écriture.

La fonction « write » prend en argument une chaîne de caractères et écrit dans le fichier cette chaîne. Mais, on voit que le fichier dans lequel écrire n’est pas indiqué dans les arguments de la fonction. Alors, comment sait-on dans quel fichier on écrit? La réponse est toute simple.

Lors de l’appel à la fonction open, on affecte le résultat de cette ouverture à une variable (« f » dans l’exemple). Puis, c’est en passant f.write() que la fonction « write » sait dans quel fichier elle doit écrire: dans « f », qui est ce que l’on appelle un « handler ». Nous avons déjà utilisé ce mécanisme en appelant les fonctions d’un module, et nous allons les généraliser lors de notre passage à la programmation objet. C’est le même mécanisme qui est utilisé lors de l’appel à f.close() qui ferme le fichier dont le handler est « f ».

Le module « litfichier » est disponible ici.

Outre les différents droits d’accès (lecture, écriture…), il est également possible de parcourir le fichier suivant différentes modalités.

  • Pour lire d’un seul coup toutes les lignes, on fait appel à la fonction « readlines ». Toujours à partir du handler retourné par la fonction open. Cette fonction retourne une liste de valeurs, dont chaque élément est une ligne du fichier. Il faut ensuite parcourir la liste pour avoir accès aux lignes.
  • Pour lire le fichier ligne par ligne, on utilise « readline » (sans « s »). Chaque appel à readline fait passer à la ligne suivante.
  • On peut aussi passer par une boucle « for » sur le même principe que celui utilisé pour parcourir un dictionnaire.

Python objet

La dernière partie de cet article de découverte de python porte sur les concepts objet. Le but de cet article n’est pas de présenter les différents concepts (héritage, ploymorphisme, surcharge, constructeurs…) mais de voir comment les utiliser en python. Si ces concepts ne vous sont pas familiers et que vous voulez des explications, n’hésitez pas à utiliser les commentaires en fin d’article.

Les différents fichiers présentant les fonctionnalités sont téléchargeables ici, , et encore ici.

Nous commençons par un cas classique d’héritage. On définit de quelle classe (« classe parente ») hérite une classe (« classe héritière ») en passant la classe dont on hérite en argument de la seconde classe (« l’héritière »). Un de moyens d’exprimer le polymorphisme est simplement de redéfinir une méthode (rappel: en concepts objets, les fonctions définies à l’intérieur des classes sont appelées « méthodes »).

Le constructeur d’une classe est défini par la méthode __init__ (self):

Le « self » est un mot-clé renvoyant vers les valeurs prises dans l’instanciation de l’objet en cours d’utilisation, pas vers la classe à partir de laquelle il est instancié.

Il est possible de faire de l’héritage multiple, et ainsi d’avoir accès aux méthodes de toutes les classes dont on hérite. Mais attention dans ce cas, l’ordre dans lequel sont indiquées les classes dont on hérite n’est pas neutre: on ne passe que dans le premier constructeur rencontré.

Voilà pour cet article présentant rapidement les bases du langage python, s’il y a des points que vous aimeriez éclaircir ou des concepts sur lesquels vous voudriez des précisions, n’hésitez pas à le dire en commentaires.

Amusez-vous bien!