Comment les morceaux s’emboîtent
Trois façons d’atteindre le même moteur. Entre deux cases, il y a toujours deux flèches : la première dit ce qui est demandé, la seconde dit ce qui revient.
1. Le client passe par nous
Le client crée son document dans une page de ce site, et il récupère le PDF fini. Il n’installe rien et il n’écrit aucun programme : tout ce qui se passe entre l’éditeur et les pages créées tourne chez nous.
- Le client dans le navigateur du client
- à l’aller : crée le PDF et le demande au retour : le PDF fini, prêt à enregistrer
- L’éditeur en ligne une page de ce site : créez un compte et elle est à vous
- à l’aller : ce qui a été créé, tel que l’éditeur le tient au retour : le PDF fini
- Le site tourne chez HQF Development
- à l’aller : le même document, écrit en JSON au retour : le PDF fini
- Le serveur tourne chez HQF Development
- à l’aller : un appel par chose à dessiner : un paragraphe, un tableau, une image au retour : les pages, créées
- La bibliothèque dans le serveur
Ce que le client paie : un abonnement, au mois.
2. Le client a acheté le serveur et la bibliothèque
Le client écrit lui-même le JSON et l’envoie au serveur qui tourne chez lui. Il n’y a ni éditeur ni site devant : la chaîne commence dans son propre programme et ne quitte jamais ses machines.
- Le programme du client tourne chez le client
- à l’aller : le document, écrit en JSON au retour : le PDF fini
- Le serveur tourne chez le client
- à l’aller : un appel par chose à dessiner : un paragraphe, un tableau, une image au retour : les pages, créées
- La bibliothèque dans le serveur
Ce que le client paie : le serveur et la bibliothèque, achetés une fois pour toutes.
3. La bibliothèque toute seule
Une équipe de développement écrit du Rust ou du Python et appelle la bibliothèque directement depuis son programme. Aucun JSON ne circule, et il n’y a pas de serveur : la bibliothèque fait partie du programme que l’équipe a écrit.
- Une équipe de développement écrit du Rust ou du Python
- à l’aller : appelle la bibliothèque, une instruction par chose à dessiner au retour : le PDF fini, écrit dans un fichier ou rendu sous forme d’octets
- La bibliothèque à l’intérieur du programme de l’équipe
Ce que le client paie : la bibliothèque, achetée une fois pour toutes.
Le même document, demandé de trois façons : ce qui diffère, et pourquoi
Rust et Python, c’est le même code. Le module qu’appelle un programme Python n’est qu’une fine enveloppe autour de la bibliothèque elle-même : rien, entre les deux, ne pourrait différer, et de fait rien ne diffère — tous les documents publiés ici sortent des deux identiques, octet pour octet. La troisième façon n’est pas un appel du tout. C’est une description envoyée par le réseau, que le serveur lit et met en page lui-même — et c’est là que les octets divergent.
- Chaque exemple de ce site est écrit deux fois, une fois en Rust et une fois en Python. Lancez les deux : ce qui en sort est rigoureusement le même fichier. 908 documents finis y sont tenus, et y sont tenus de nouveau à chaque changement.
- 120 de ces documents sont aussi demandés d’une troisième façon, sous forme de requête envoyée au serveur par le réseau. Pour 6 d’entre eux, ce qui revient est rigoureusement le même fichier.
- Pour les 114 autres, ce qui revient est le même document à l’œil : chaque page correspond au point près, et le texte que vous pouvez sélectionner et copier est le même mot pour mot. Les fichiers, eux, diffèrent, et seulement parce que les deux façons de demander écrivent les mêmes instructions de dessin dans un ordre différent.
- Chacune de ces paires a un fichier à elle qui dit lequel des deux accords elle tient, et pourquoi elle ne peut pas tenir le plus strict des deux. Chaque écart est nommé et expliqué.
Ce qui diffère
- Un exemple détaillé appelle la bibliothèque à la main : il nomme la police, puis le point où la ligne commence, et écrit toute la ligne en une seule instruction. Un bloc de texte décrit à travers le réseau nomme d’abord son point, puis sa couleur, et écrit un mot à la fois — parce que c’est le serveur qui coupe la ligne et espace les mots, et qu’il doit rester libre de placer chaque mot là où la coupure le met.
- Un rectangle que la bibliothèque trace est un seul opérateur de rectangle. Le même rectangle décrit par le réseau, ce sont ses quatre coins parcourus comme un chemin fermé.
- Une rangée de tirets que la bibliothèque trace est un seul chemin. Décrite par le réseau, elle compte autant d’éléments que de tirets.
Ce qui est tenu à quoi
Dans les trois, l’encre tombe sur les mêmes points. Ce que l’on compare, ce n’est pas la formulation des instructions mais ce qu’elles tracent : les deux fichiers sont rendus page par page et comparés entre eux point pour point, chacun est confronté aux polices que ses pages emploient réellement, et chaque mot au cadre qu’il occupe.
Ce que cette comparaison ne lit pas : les octets d’un flux, un objet qu’aucune page ne montre, et une différence d’encre trop petite pour déplacer un point. Une paire jugée sur l’image plutôt que sur les octets s’accompagne d’un fichier qui lui est propre, publié à côté de sa requête, et qui nomme ce qui la sépare de l’accord le plus strict.