Aller au contenu

Développer en C++ sans filet : l'odyssée pdf2cbz avec Antigravity

De l'idée au déploiement Homebrew en 60 minutes : découvrez comment j'ai bâti un convertisseur C++ haute performance avec Antigravity, sans même maîtriser le langage.

De développeur à chef d'orchestre : le nouveau paradigme avec Antigravity

Le C++ n'est pas mon langage de prédilection. J'en connais les bases, j'ai déjà manipulé quelques pointeurs, mais de là à bâtir un convertisseur haute performance, robuste et automatisé en une heure ? Il y a un gouffre.

C'est ici qu'entre en scène Antigravity. Plus qu'un simple copilote, il a été l'architecte et l'artisan d'un projet qui, sans lui, m'aurait pris des jours de recherche sur StackOverflow.

Voici comment, à travers le projet pdf2cbz, j’ai redécouvert le plaisir de développer avec une IA dotée d’une capacité d’auto-correction et d’une vision globale du projet.

L'idée : le problème du comic reader

Tout part d'un besoin personnel : convertir des fichiers PDF en archives CBZ (des dossiers d'images compressés) pour mes lecteurs de comics numériques.

Je pose la question à Antigravity : "Peut-on faire un convertisseur performant en C++ ?"

La réponse fuse. Antigravity propose une pile technique pragmatique :

  • Poppler (cpp wrapper) : le standard pour manipuler le PDF. Puissant, mais réputé pour sa complexité d'installation.
  • Miniz : une bibliothèque "single-file" pour le ZIP. Pas de dépendances lourdes, juste deux fichiers (.c et .h) à inclure.

Le premier mur : l'installation et l'auto-correction

C'est ici que l'expérience Antigravity se distingue. Sur macOS avec Homebrew, l'installation de Poppler est simple, mais le lier au build CMake est une autre affaire. Antigravity génère un premier CMakeLists.txt, tente de compiler, et là... Erreur de lien (ABI Mismatch).

Normalement, à ce stade, je commence à transpirer. Antigravity, lui, ne bronche pas. Il analyse l'erreur système, détecte un conflit entre le compilateur GCC (choisi par mon système) et la bibliothèque Poppler compilée avec Clang. Il corrige le tir immédiatement :

# Correction automatique apportée par Antigravity
set(CMAKE_CXX_COMPILER "/usr/bin/c++") # Forcer l'utilisation de Clang sur Mac

Il relance le build, vérifie le statut du terminal, et confirme : "C'est corrigé".

Je n'ai même pas eu à chercher la documentation du compilateur.

Je teste avec l'un de mes comics au format PDF acheté sur Humble Bundle : ça marche !

L'évolution : du séquentiel à l'hyper-vitesse

Une fois le noyau fonctionnel, je deviens exigeant : "Je veux que le traitement se fasse en parallèle !"

Antigravity prend en charge la refonte.

Le défi ? Poppler n'est pas "thread-safe".

Un document ouvert ne peut pas être lu par plusieurs threads simultanément. L'IA propose alors une solution élégante : chaque thread de travail charge sa propre instance du document.

// La vision d'Antigravity pour le multi-threading
workers.emplace_back([&, t]() {
    // Chaque thread ouvre son propre document
    std::unique_ptr<poppler::document> localDoc(poppler::document::load_from_file(m_inputPath));
    while (true) {
        int i = nextPage.fetch_add(1); // On pioche dans la pile de pages
        if (i >= totalPages) break;
        // Rendu et écriture...
    }
});

Mais l'écriture dans le fichier ZIP final reste un goulot d'étranglement. Je vois Antigravity ajouter un std::mutex pour protéger l'écriture dans l'archive, garantissant qu'aucune image ne soit corrompue.

Je teste à nouveau sur le même PDF de mon comics : la transformation prend 5 fois moins de temps !

L'effet grisant de l'ajout de nouvelles fonctionnalités

Lorsque je vois que le programme fonctionne bien, il est temps pour moi d'ajouter d'autres fonctionnalités.

Je demande à Antigravity : "Pourquoi ne pas activer le mode parallèle par défaut et détecter automatiquement le nombre de cœurs de l'hôte ?"

Il implémente std::thread::hardware_concurrency() et refactorise l'interface CLI.

Alors que je regarde les logs défiler à toute allure, je propose : "Il nous faudrait une barre de progression".

Antigravity ne se contente pas de modifier une boucle. Il sort de son rôle de simple codeur pour créer un nouvel outil : une classe ProgressBar dans un fichier utils.hpp dédié. Il l'intègre intelligemment dans le flux multi-threadé.

Le grand final : le déploiement sans friction

Dernière étape : je veux que ce programme soit accessible. Antigravity configure une GitHub Action.

Quand il rencontre une erreur 403 lors du push du tag v1.0.0 (permissions de token manquantes), il ne me demande pas ce qu'il doit faire. Il identifie le manque de contents: write dans le YAML, le corrige, supprime le tag défectueux à distance, et relance la procédure.

La cerise sur le gâteau : une distribution "Pro" avec Homebrew

Une fois le binaire compilé et performant, restait la question de la distribution. Comment permettre aux utilisateurs d'installer pdf2cbz aussi facilement que n'importe quel autre outil majeur ?

Antigravity a piloté la création d'un Homebrew Tap. Il a d'abord conçu une "Formula" Ruby capable de gérer intelligemment quatre architectures différentes (macOS et Linux, en x64 et ARM64). Fini le temps où l'utilisateur devait deviner quelle version télécharger ; la commande brew install s'occupe de tout.

Mais le plus impressionnant reste l'automatisation. Plutôt que de me demander de mettre à jour manuellement les sommes de contrôle (SHA256) à chaque version, l'IA a enrichi la GitHub Action. Désormais, dès qu'une release est publiée, un job dédié télécharge les binaires, calcule leurs empreintes numériques et met à jour automatiquement le dépôt de distribution. C'est un cycle de livraison continue (CD) digne des plus grands projets open-source, mis en place en quelques minutes.

Désormais, pour utiliser pdf2cbz, il vous suffit de taper les commandes suivantes :

brew tap hcross/tap
brew install pdf2cbz

Conclusion : de l'idée à la livraison en moins d'une heure

En tant qu'utilisateur, mon rôle a été celui d'un chef de projet technique.

J'ai posé les intentions, exprimé des doutes, et Antigravity a traduit cela en une réalité logicielle de haute qualité.

En plus il a réussi à me guider pour rendre mon programme et son code source disponible sur Internet... Le tout en moins d'une heure.

Cette expérimentation m'a convaincu que pour des programmes simples, il devient réellement possible de s'appuyer complètement sur l'IA générative pour mettre à disposition de tous un nouveau programme... C'est le début d'une révolution !

Retrouvez pdf2cbz sur GitHub : rapide, parallèle, et né d'une collaboration unique.

Antigravity : le futur de l’IDE par Google
J’ai testé le futur de l’IDE par Google et c’est bluffant. Je vous partage mon retour d’expérience sur Antigravity et la puissance de Gemini 3 Pro pour rendre une app entièrement responsive.

Dernier