Aller au contenu

FAQ

Pourquoi gapline est plus rapide que gtfs-validator ?

Section intitulée « Pourquoi gapline est plus rapide que gtfs-validator ? »

Trois raisons :

  1. Pas de démarrage JVM à froid. gapline est un binaire Rust statique. gtfs-validator paie une à deux secondes de démarrage JVM à chaque run, ce qui domine les workloads sur petits flux.
  2. Parallélisme en mémoire. La validation exécute les règles en parallèle sur les lignes via rayon. Les règles qui peuvent travailler indépendamment sur différents fichiers ou plages de lignes le font sans locks.
  3. Layout de données contigu. La représentation du flux est basée sur Vec avec des index inverses construits une fois au chargement. Pas de graphe d’objets, pas d’allocation heap par ligne pendant la validation.

Sur un flux réel de taille moyenne, cela donne 7–9× plus rapide de bout en bout. Sur un petit flux (< 1 Mo), le coût de démarrage JVM pousse le ratio vers 90×.

Non. gapline cible GTFS Schedule uniquement — les horaires statiques. GTFS-Realtime est une spec protobuf séparée (mises à jour de trajets, positions véhicule, alertes) et est hors scope.

Puis-je ajouter des règles de validation custom ?

Section intitulée « Puis-je ajouter des règles de validation custom ? »

Pas sans fork aujourd’hui. Les règles sont compilées dans le binaire ; il n’y a pas d’interface plugin ni de hook scripting. Si vous avez une règle qui a sa place dans la suite par défaut, ouvrez une issue sur GitHub — la plupart des règles actuelles ont atterri ainsi.

Pour des vérifications ad-hoc, un gapline read <target> --where "..." --format json piped dans jq couvre la majorité des one-offs.

Mon flux échoue en validation structurelle. Qu’est-ce que ça veut dire ?

Section intitulée « Mon flux échoue en validation structurelle. Qu’est-ce que ça veut dire ? »

La validation structurelle est le premier stage. Elle vérifie que l’archive contient les fichiers requis, qu’ils parsent en CSV, et que les colonnes requises sont là. Les stages suivants (champs, références, sémantique) ne tournent pas de façon pertinente si le structurel échoue — corrigez-le d’abord.

Erreurs structurelles courantes : un fichier requis manquant (stops.txt, routes.txt, trips.txt, stop_times.txt), un fichier non UTF-8, une ligne avec moins de colonnes que l’en-tête.

Oui. Dans PowerShell :

Fenêtre de terminal
Invoke-WebRequest https://gapline.dev/install.ps1 | Invoke-Expression

L’installeur dépose gapline.exe dans %USERPROFILE%\.local\bin et met à jour le PATH utilisateur. Voir installation.

Non. gapline est 100% hors-ligne. Il ne contacte aucun service, ne lit/écrit rien en dehors des fichiers passés en ligne de commande et de la chaîne de config (./gapline.toml, ~/.config/gapline/config.toml).

Si un firewall ou un sandbox bloque le trafic sortant, gapline fonctionne exactement comme sur une machine connectée.

Non. GTFS impose UTF-8 ; gapline rejette les fichiers non UTF-8 avec un message clair (quel fichier, quel offset). Si un opérateur livre en Latin-1 ou Windows-1252, transcodez avec iconv avant. Voir corriger les problèmes courants.

Les tests réels tournent sur des flux de plusieurs millions de lignes stop_times sans souci. Le bottleneck principal est la RAM disponible — le flux est en mémoire — mais la représentation est compacte (quelques mégaoctets pour un opérateur typique).

Si vous heurtez un plafond mémoire sur un très gros flux, découpez l’archive par opérateur ou par période avant la validation.

Les fichiers .gl chaînent plusieurs commandes gapline en un script reproductible unique. Le flux est chargé une fois, chaque commande agit sur la copie en mémoire, et une seule écriture atomique en fin persiste le résultat. C’est l’outil pour les nettoyages hebdomadaires, les patches pilotés par la CI, ou tout ce que vous voulez versionner.

Voir écrire des scripts .gl pour un parcours et syntaxe .gl pour la grammaire.

Parce qu’un delete sur un flux relationnel a une zone d’impact plus large que ne le suggère la ligne de commande — retirer un arrêt peut cascader vers des centaines de lignes stop_times. Le prompt montre l’aperçu complet avant application. Passez --confirm en script, mais prévisualisez le match avec gapline read d’abord.

Oui. Le script Linux marche dans n’importe quelle image glibc. Exemple minimal :

FROM debian:stable-slim
RUN apt-get update && apt-get install -y curl ca-certificates \
&& curl -fsSL https://gapline.dev/install.sh | sh -s -- --version 1.0.1 \
&& ln -s /root/.local/bin/gapline /usr/local/bin/gapline
ENTRYPOINT ["gapline"]

Pour Alpine / musl, compilez depuis les sources — le binaire du script est glibc aujourd’hui.

Comment trouver l’ID d’une règle à désactiver ?

Section intitulée « Comment trouver l’ID d’une règle à désactiver ? »
Fenêtre de terminal
gapline rules list
gapline rules list --severity warning
gapline rules list | grep -i speed

Passez l’ID à --disable-rule :

Fenêtre de terminal
gapline validate -f gtfs.zip --disable-rule speed_validation

L’autocomplétion shell suggère aussi les IDs enregistrés — voir autocomplétion shell.

  • Introduction — ce qu’est gapline et pourquoi.
  • Quickstart — première validation en cinq minutes.
  • Concepts — idées de fond derrière le CLI.