Description
Bonjour, aujourd’hui nous parlons de relatif et d’absolu.
Le concept est abstrait, mais utilisé partout, mais vous le comprenez
déjà très bien. Malheureusement il y a parfois des confusions.
Contexte
Par exemple, quand vous dites “ma chambre est au premier étage”, on
suppose sans autre information qu’il s’agit de votre maison ou votre
appartement. Si vous êtes en déplacement, qu’il s’agit de votre hôtel
ou lieu de résidence. L’information est relative à quelque chose.
Mais si vous donnez l’adresse, il n’y a plus de doute.
On peut retrouver votre chambre dans l’absolu.
Il y a un contexte qui aide à trouver “à partir de quoi” vous parlez.
Désambiguisation
Malheureusement la confusion cause souvent des erreurs, non pas de
débutant mais d’étourderie, puisque ça arrive aussi aux experts.
C’est juste que quand ça leur arrive, ils savent vite le voir car
c’est en quelque sorte dans leur “checklist” interne de pistes
d’attaques pour débugguer : le débutant ne l’a pas encore et c’est en
rencontrant cette erreur (et tant d’autres) qu’il deviendra expert.
Le système de fichiers : un arbre
Depuis longtemps, les ordinateurs traitent des fichiers, qu’ils
rangent dans des dossiers, et on peut mettre autant de dossiers
qu’on veut dans un dossier. Bref, on a une sorte d’arbre.
C’est une métaphore très utile qui nous sert depuis longtemps, dont
“tout le monde” a l’habitude. Elle montre peut-être ses limites,
on nous promettait des systèmes de fichiers basés sur des “tags”
et peut-être que les terminaux mobiles et les applications Web
sont en train de nous changer nos habitudes, mais ce n’est pas
encore tout à fait ça.
Arborescence de fichiers
Bref, quand vous naviguez dans un explorateur de fichier, vous avez un
point de départ, un endroit où vous êtes en ce moment, et un point
d’arrivée désiré.
En version graphique on espère que l’outil vous aide visuellement
à situer où vous êtes. Windows, MacOSX et les différents Unix
vous proposent souvent plusieurs points de départ :
une “racine” d’arbre par support physique : je suis sur un disque dur ou une clé USB
quelques points d’entrée : système/applications, mon compte/mes documents
Et ensuite on navigue de plus en plus profond dans les dossiers, on remonte, etc.
Chaque dossier est noté, pour Unix avec des barres obliques (slash),
pour Windows avec des antislash (ou backslash).
PATH
On pourrait croire que dans la ligne de commande, il n’y a que deux
points d’entrée : le dossier racine /, et votre dossier personnel ~.
Et bien non ! Il existe une variable d’environnement, le PATH (chemin)
qui dira, quand vous cherchez une commande, où aller la chercher.
Votre shell va d’abord regarder si c’est pour lui (un builtin),
puis dans chacun des dossiers de départ. Faites echo $PATH et
vous verrez la liste séparée par des “deux points”, par exemple
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin.
Quand vous utilisez des gestionnaires de paquets, ils essaieront
probablement d’ajouter dans ce PATH un dossier pour que le système
regarde d’abord s’il n’y a pas le binaire voulu dedans.
Quand on fait des ateliers d’installation avec des débutants, on se
retrouve rapidement à gérer des erreurs du genre : soit l’exécutable
n’est pas où on veut, soit le dossier que l’on veut n’est pas dans le
PATH.
Le Web
Quand le Web a été inventé, il était lui aussi calqué sur l’échange
de fichiers, la mise à disposition de ressources à des endroits précis,
et a très naturellement calqué ses URL (Universal Resource Location),
emplacement universel de la ressource, un peu comme des fichiers,
d’où les slash dans de nombreuses adresses.
Imaginons http://bibliotheque.fr/sciences_et_techniques/informatique/web/url.htm
une adresse avec le protocole, le domaine, puis une arborescence de
fichiers qui
ne devrait jamais changer
vous permet aussi de voir un peu la structure qu’ils ont choisi, pour explorer davantage
Rails
En Ruby on Rails, on fait bien davantage que juste accéder à des
fichiers ou des représentations d’enregistrements de base de
données. On a potentiellement toute une application qui tourne
avec des actions différents et des process métiers spécifiques.
Au départ, le routage de base donnait par exemple /users/show/1
pour aller voir les utilisateurs (et le UsersController), son
action show (la méthode que vous avez codée) avec l’identifiant 1.
REST
Dans les applications Rails récentes on ne voit même plus le /show.
On ira voir /users/1 et on lui dira quelque chose : on va soit lui
demander de se présenter, soit lui ordonner des modifications, soit
le supprimer ou juste voir s’il existe sans se soucier des détails…
Ce sont respectivement les verbes HTTP GET, POST, DELETE, HEAD.
Il y a bien plus de verbes et de nuances dans l’utilisation qu’on
en fait, mais ce sont les conventions que Rails utilise, et donc
celles dont j’ai le plus l’habitude dans mes projets, ceux que
je donnerai aux autres et ceux que je récupèrerai des autres.
Encore une histoire de contexte à réexpliquer ou non.
URLs
En réalité, une requête Web est un peu plus complexe : il y a une
partie visible que vous voyez dans la barre d’adresses du navigateur,
et une partie cachée qui donnera des informations en plus.
Le fameux verbe, les fameuses données à envoyer, les cookies etc.
Relatif et absolu
Pour en revenir au sujet, on voit bien que répéter l’aborescence est
parfois pénible : quand vous demandez votre chemin, on vous donnera
souvent à partir de là où vous êtes, allez dans telle direction
jusqu’à tel repère etc. On ne vous réexplique pas comment arriver
là où vous êtes en ce moment, on ne vous donne pas l’adresse ou la
position GPS, mais plutôt quelque chose comme “troisième à gauche”.
De même, quand vous donnez une adresse Web, quand le moyen le plus
simple est de dire “par rapport à là où vous êtes, allez dans ce sens-là”,
ça vous embête de répéter “pour tel site web à tel endroit de départ”.
HTML
HTML vous permet, dans les liens, via les références hypertexte (href)
soit de commencer par le protocole (ou double slash // pour dire “reste
comme ça” : HTTP reste HTTP et HTTPS reste HTTPS) et le nom de domaine
(zenm4.net),
soit à partir du début de l’arborescence du site, avec un slash
(/archive ou /img/barque.png) ou encore juste un nom de fichier
ou dossier, sans slash, qui signifiera “à partir du dossier dans lequel
je me trouve”.
Rails
Rails cache beaucoup de “magie” dans son helper link_to, ou plus
précisément url_for :
vous pouvez mettre un objet ActiveRecord, et il tentera de voir si le routage, pris en sens inverse, permet de lui donner une URL
vous pouvez mettre des options et il tentera de trouver la bonne URL en imaginant que tout ce que vous lui précisez, c’est parce que ça change, et tout ce que vous ne lui précisez pas ne change pas (changer d’action dans le même contrôleur etc)
vous pouvez mettre du texte respectant la norme des liens HTML et il ne devinera rien, considérant que vous savez ce que vous faites
CSS
Même le CSS s’y met avec la directive position: absolute : HTML
permet de décrire une structure de boîtes dans des boîtes, et CSS
permet de préciser des règles d’affichage de ces boîtes.
Par défaut, tout est dépendant de la boîte dans laquelle vous êtes,
donc tout est relative, mais parfois vous voulez préciser que c’est
à partir du coin en haut à gauche de la page, donc absolute, voire
indépendamment de la page, fixé sur l’écran, donc fixed.
Fini la confusion
Voilà ! Comme toujours j’espère avoir démystifié le sujet et que cela
vous permettra de ne pas vous faire avoir par la suite.
Quand votre installation rate, votre fichier n’est pas trouvé, vos
liens ne fonctionnent pas en HTML ou Rails, vos affichages visuels
sont décalés… vérifier si vous parlez en absolu, ou bien en relatif,
et si oui par rapport à quoi.
C’est un outil crucial dans votre “boîte à outils de débuggueur”,
aussi important et bête que “avez-vous bien branché les câbles”,
“est-ce qu’il y a du courant électrique” ou “êtes-vous connecté à
Internet”.
Clarté et concision
Je n’ai pas de préférence entre l’un et l’autre.
Chaque cas d’usage fera que l’un est plus pratique que l’autre,
soit plus clair, explicite et verbeux, soit plus concis.
Si vous pensiez tout savoir, si vous pensez avoir perdu votre temps,
rappelez-vous surtout si vous formez de grands débutants que c’est
pourtant loin d’être évident : c’est en reformulant les référentiels
et en questionnant les bases que de grandes découvertes scientifiques
ont été faites (géocentrisme, héliocentrisme, physique de Newton et
relativité).
Carl Sagan disait “si vous voulez faire une tarte aux pommes à partir
de zéro, vous devez commencer par inventer l’univers”. Blague à part,
aucune communication humaine ne peut tout réexpliquer, toutes se
basent forcément sur des postulats de base.
Ça fait parfois du bien de les revisiter pour s’assurer qu’on est
toujours dans le même référentiel.
À bientôt !