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 :

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

  1. ne devrait jamais changer
  2. 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 :

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 !