<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title><![CDATA[Le Blog du CEPCAM]]></title>
        <description><![CDATA[Le blog du cepcam, développeur de code.]]></description>
        <link>https://blog.cepcam.fr</link>
        <generator>RSS for Node</generator>
        <lastBuildDate>Wed, 05 Aug 2026 18:22:43 GMT</lastBuildDate>
        <atom:link href="https://blog.cepcam.fr/feed/rss.xml" rel="self" type="application/rss+xml"/>
        <copyright><![CDATA[2026]]></copyright>
        <language><![CDATA[fr]]></language>
        <managingEditor><![CDATA[Cepcam]]></managingEditor>
        <webMaster><![CDATA[cepcam]]></webMaster>
        <item>
            <title><![CDATA[Combien ça coûte de vendre en ligne ( ses BD )]]></title>
            <description><![CDATA[<p>Depuis 1 an, j&#39;ai l&#39;opportunité de pouvoir enfin tenter un projet qui me trotte en tête depuis des années : trouver un système suffisamment rémunérateur pour la BD en ligne pour qu&#39;il soit viable afin que nous, lecteurs et lectrices, puissions lire plein de bd passionnantes tout en étant sûr/es que leurs créatrices et créateurs soient correctement rémunéré/es.</p>
<p>J&#39;avoue être très frustré de l&#39;échec de la bd en ligne ( appelez ça comme vous voulez, blog bd, turbomedia, webcomics ou webtoon ) . Alors que c&#39;était une formidable opportunité de distribuer de la bd sans passer par la fabrication et la distribution d&#39;un objet livre coûteux, les éditeurs semblent avoir très mal investit le domaine et seul 2 modèles ,frustrant, ont émergés :</p>
<ul>
<li>la prépublication gratuite sur internet en vue d&#39;une vente de livres physiques, travail entièrement assumé par les auteurs et autrices et que les éditeurs se sont appropriés sans que la question de la réévaluation des bénéfices dédiés aux auteurices,  qui assument maintenant, le travail de communication et marketing, n&#39;ait été posée correctement.</li>
<li>les grosses plateformes,  comme webtoon par exemple, où chaque oeuvre, parfois cédée gratuitement en échange de la visibilité, vient alimenter une énorme masse de contenus vendue comme un argument de vente, sans que les œuvres ne bénéficient de mise en avant individualisée ( sauf dans certains cas comme <a href="https://www.ono.live/">ono</a> par exemple qui semble apparemment rémunérer correctement ses artistes et les mettre en valeur ).</li>
</ul>
<p>J&#39;aimerais donc qu&#39;un autre modèle émerge.</p>
<p>Cela soulève énormément de question et je sais que de nombreux autres avant moi ont échoué mais quoi qu&#39;il se passe, je suis au moins certain que à l&#39;issue de cette expérience j&#39;aurais appris pleins de choses dans un domaine qui m&#39;intéresse.</p>
<p>Je compte dorénavant partager toutes ces questions, qu&#39;elles soient  techniques, éthiques ou  administratives, et les réponses que j&#39;ai pu y trouver sur ce blog, question par question, à commencer par la 1ère qui s&#39;est posée  : combien ça coûte de vendre en ligne ?</p>
<h2><em>Build or Buy</em></h2>
<p>Il y a une expression qui revient souvent dans le monde du développement, sous forme de termes anglais, c&#39;est &quot;<em>Build or buy</em>&quot; ( littéralement &quot;Construire ou Acheter&quot; ).</p>
<p>Cette question, elle arrive quand vous avez besoin d&#39;un service, ou d&#39;une fonctionnalité, que vous êtes capable de coder vous même mais qu&#39;une autre société existante propose déjà pour un certain prix.
Les développeurs et développeuses ont une vilaine tendance à vouloir tout coder soi même, pour le plaisir d&#39;apprendre. Mais avec l&#39;expérience, on apprend le coût réel d&#39;une fonctionnalité codée soi même :</p>
<ol>
<li>le coût initial : si vous passez 5 jours à coder quelque chose, ça vous coûte environ 1800€ ( sur la base des prix du marché des dev et à raison de 218 jours travaillés par an )</li>
<li>La maintenance. Tout le monde oublie ça mais du code que vous avez écrit c&#39;est du code dont il va falloir s&#39;occuper quand ça pète. Alors que si vous utilisez les services d&#39;une société externe, c&#39;est son problème et ça n&#39;engendre à priori pas de surcoûts ( et de stress).</li>
</ol>
<p>Pour mon projet, je sais qu&#39;il me faut <em>a minima</em> :</p>
<ol>
<li>une vitrine pour montrer les &quot;produits&quot; à vendre ( un site web quoi )</li>
<li>un moyen d&#39;encaisser des paiements</li>
<li>une infrastructure pour héberger et télécharger des fichiers (ça a un coût non négligeable )</li>
</ol>
<p>Je me sais capable, en tant que développeur, de coder tout ça moi même mais je sais AUSSI qu&#39;il existe déjà de nombreuses plateformes et outils qui permettent cela, pour des coûts…eeerrr…disons… dur à déchiffrer.</p>
<h2>La Jungle des coûts</h2>
<p>Reprenons de manière très simplifié la fonctionnalité principale ( sur le ton d&#39;un <em>user story</em> comme on dit dans le monde du dev ) :</p>
<blockquote>
<p>Je veux que les gens puissent acheter le pdf de ma bd en ligne pour environ 5€</p>
</blockquote>
<p>Les prix d&#39;un service qui permettrait de faire ça se décompose grosso-modo entre les 3 points exposés plus haut : site web boutique, paiement et hébergement des fichiers.</p>
<p>Pour disposer de ces services, il est possible de combiner plusieurs plateformes existantes ou d&#39;en prendre une seule qui fait ( presque ) tout.
Commençons par le plus simple : une plateforme qui fait tout.</p>
<h2>Zero dev</h2>
<p>Je paye, je met mon contenu en ligne j&#39;ai une boutique  qui permet d&#39;acheter mes pdf. Dans ce domaine on trouvera par exemple square space, gumroad, big Cartel, itch.io ( et oui ! ) ou Ko-fi.</p>
<p>Décomposons les coûts pour mieux comprendre ( <em>petite précision cependant. Etant donné la complexité des offres, je ne prétend pas que les chiffres soient exacts. Il y a plein de coûts cachés et aucune offre n&#39;est identique. L&#39;exercice vaut plutôt pour réflexion</em> )</p>
<h3>Gumroad</h3>
<p>Gumroad à l&#39;air le plus <a href="https://gumroad.com/pricing">trivial en apparence </a> : sur chaque vente que vous faites, la plateforme prélève 50c environ + 10%.</p>
<p>MAIS</p>
<p>En cherchant bien on touve cette page, <a href="https://gumroad.com/help/article/66-gumroads-fees">gumroad fees</a>, qui précise qu&#39;il faut rajouter les frais de carte bleue de environ 30c + 3% par transaction.</p>
<p>Voyons ce que ca fait sur une bd à 5€ ( on va pas s&#39;encombrer avec la TVA, je n&#39;ai pas trouvé s&#39;ils prélevaient leur commission sur les prix HT ou TTC)</p>
<p>Commission sur une vente à 5€</p>
<pre><code>= 0.5€ + 5*10% + 0.30€ + 5*3% =1,45€
</code></pre>
<p>J&#39;ai oublié de le préciser plus haut, c&#39;est l&#39;occasion de le faire,mais disons au doigt mouillé que pour que mon idée soit viable ( pour moi et les artistes ), il faut qu&#39;on fasse au moins 4000 ventes par mois ( à 5€ = 20 000€ par mois, ça permet de faire de la bd et payer le site. Même si c&#39;est discutable ).</p>
<p>4000 ventes par mois sur chacune de laquelle est prélevé 1,45€ =&gt; 5800€ par mois. Ou environ 70 000€ par an. De quoi se faire soi même une belle boutique et payer quelqu&#39;un pour la maintenance.</p>
<p>Alors évidemment, si vous êtes un/e auteurice qui fait quelques ventes par mois, disons 100 ventes, il va sans dire que ce que ca vous coûte ( 1740€ par an ) est sans comparaison à ce que vous couterez un/e dev si vous vouliez votre propre boutique. Mais dans mon cas, où le but est d&#39;avoir une plateforme qui génère suffisamment de ventes, la solution gumroad n&#39;est pas envisageable.</p>
<p>Passons à squarespace</p>
<h3>Square Space</h3>
<p>Je dois dire que Square space est assez génial. Pour les gens non technique ca permet de faire tout un tas de chose, du simple site web à la boutique de vente en ligne, de produits physiques ou numériques. L&#39;inconvénient c&#39;est que <a href="https://www.squarespace.com/pricing">leur offre</a> est un peu complexe.</p>
<p>Pour commencer, leur commission n&#39;est pas la même pour la vente de produits physiques et numériques ( ce qui est normal car vendre un produit numérique signifie héberger le fichier pour téléchargement, ce qui a un coût, alors que pour un produit physique c&#39;est le vendeur ou la vendeuse qui gère ces coûts ).</p>
<p>Ainsi, avec l&#39;abonnement minimum à 12€ par mois, la commission est de 2% sur les produits physiques et 7% sur les produits numériques <strong>à laquelle il faut encore rajouter le coût de la carte bleue de 2%+25c</strong> )</p>
<p>Si vous passez à l&#39;abonnement à 828€ par an, ces coûts chutent à :</p>
<ul>
<li>0% de frais de commission pour eux !</li>
<li>25c + 1,5% de frais de CB</li>
</ul>
<p>Je n&#39;ai à priori trouver aucun autre coût caché.</p>
<p>Reprenons notre hypothese de 4000 ventes par mois / 48000 ventes par an à 5€ :</p>
<pre><code>commission(5€) = 5*1.5% + 0.25 = 0,325€
cout(48000 ventes) =828 +  48000*0,325 ~= 15828€
jours de dev(15828€)  = 15828/360 ~= 44 jours de dev
</code></pre>
<p>L&#39;option square space semble particulièrement attractive. On peut rapidement avoir une boutique fonctionelle, qui soit à peu près personalisable et pour l&#39;équivalent de 40 jours de dev par an. Je vais vous avouer que c&#39;est une option que je garde précieusement en tête, surtout en sachant que c&#39;est ce qui est utilisé pour le <a href="https://www.shortboxcomicsfair.com/">shortbox comics fair</a>, une festival de vente de bande dessinée numérique qui a rencontré un certain succés</p>
<blockquote>
<p>NOTE : si vous êtes une autrice ou un auteur de bd qui souhaite faire l&#39;équivalent d&#39;un shortbox comics fair mais français, n&#39;hésitez pas à <a href="mailto:arnold@cepcam.fr">me contacter</a>, je sais comment faire :D</p>
</blockquote>
<h3>Itch.io</h3>
<p>Itch.io est une plateforme pour vendre des fichiers numériques principalement connue pour le jeu vidéo un peu expérimental ( on y trouve des perles d&#39;ailleurs ).</p>
<p>Leur modèle, bien que <a href="https://itch.io/docs/creators/payments">clairement expliqué</a>, est un peu complexe à gérer car ils laissent chaque createurice décider du montant de leur commission, qui peut être de 0%.</p>
<p>Le taux par défaut est de 10%, que l&#39;on va prendre comme base, auxquels s&#39;ajoutent de toute façon l&#39;habituel taux de transaction (~ 30c + 3%).</p>
<pre><code>commission(5€) = 5*10% + 5*3% + 0,30 = 0,95€
cout(48000 ventes) = 48000*0,95 = 45600€
jours de dev(45600€) = 45600 / 360 ~= 127 jours de dev
</code></pre>
<p>Et si on fait l&#39;hypothese qu&#39;on ne va rien donner à la plateforme comme des gros schlags sortis de HEC :</p>
<pre><code>commission(5€) = 5*3% + 0,30 = 0,45€
cout(48000 ventes) = 48000*0,45 = 21600
jours de dev(21600) = 21600 / 360 ~= 60 jours de dev
</code></pre>
<h3>Big Cartel</h3>
<p>Alors…l&#39;offre Big Cartel à l&#39;air trop belle pour être vraie. Pour un abonnement à 12€ par mois, vous pouvez vendre des produits numériques (des fichiers donc, comme un pdf par exemple ) sans qu&#39;ils ne prennent de commission.</p>
<p>Evidemment, les habituels frais de transaction, qu&#39;on va continuer à évaluer à 3% + 30c, sont toujours là et il y a une limite de 50 produits par boutiques, qui peut être pousser à 500 avec l&#39;offre à 24€ par mois ( 288€ par an ).</p>
<p>Bref, on se retrouve avec les même tarifs que Itch.io en mode &quot;0% de commission&quot;, soit l&#39;équivalents de 60 jours de développement pour 1 années de ventes aux chiffres évoqués ( 4000 ventes à 5€ par mois ) auxquels s&#39;ajoutent 288€ d&#39;abonnement par an, négligeables quand on fait beaucoup de ventes (mais pas du tout négligeables quand on fait pas de ventes)</p>
<h3>Ko-fi</h3>
<p>Ko-fi, en plus de permettre les tips et les tips mensuels, permet de vendre ses produits digitaux. On retourve toujours les même frais de transaction ( décidemment ) auxquels on rajoute, si j&#39;ai bien compris, 5% de comission pour Ko-fi à chaque vente :</p>
<pre><code>commission(5€) = 5*5% + 5*3% + 0,30 = 0,7€
cout(48000 ventes) = 48000*0,45 = 33600€
jours de dev(33600€) = 33600 / 360 ~= 90 jours de dev
</code></pre>
<h3>Ok, et donc ?</h3>
<p>En résumé, pour cette première gamme de solution de boutiques en ligne (des plateformes complètes qui ne nécessitent pas de coder), je vais retenir 2 choses :</p>
<ul>
<li>même si c&#39;est un peu personnalisable dans les styles et les fonctionnalités, on reste sur des modèles et des fonctionnalités qui peuvent ne pas être extensibles.</li>
<li>en cherchant bien, on peut descendre à des frais très réduit mais dans tous les cas subsistent les frais de transactions de 30 centimes + 3%</li>
</ul>
<p>Pour un/e artiste qui voudrait une solution rapide pour vendre en ligne, couplée à un site web et une communication efficace sur les réseaux sociaux, toutes ces plateformes semblent raisonnables dans leurs prix (<em>à part Gumroad. Je comprend pas qu&#39;ils existent eux, j&#39;ai dû rater un truc</em>)</p>
<p>A noter que pour Big cartel, qui n&#39;a aucune commission, l&#39;abonnement peut paraître cher si vous faites très peu de ventes.</p>
<p>Comparons 2 profils pour voir les coûts pour quelques unes des solutions évoquées.</p>
<p><strong>Profil 1</strong>
Une autrice de Bd qui vend environ 50 pdf par mois à 6€</p>
<p><strong>Square space essentiel</strong></p>
<pre><code>abonnement mensuel : 18€
cout abonnement à l&#39;année : 216€

coût proportionelle par vente: 7% ( 5% square space + 2% carte bancaire)
coût absolu par vente: 25c ( Commission carte bancaire)
coût par vente à 6€ : 67c
total des commissions pour 50 ventes par mois, 600 ventes par an : 402€

Total abonnement + commissions : 618€
coût effectif par vente ( 600 ventes ): 1,03€
Commission effective: 1,03 / 6 = 17%
</code></pre>
<p>Ho ho ho !</p>
<p><strong>Square space Advanced</strong></p>
<pre><code>abonnement mensuel : 69€
cout abonnement à l&#39;année : 828€

coût proportionelle par vente: 1.5% ( carte bancaire uniquement )
coût absolu par vente: 25c ( Commission carte bancaire)
coût par vente à 6€ : 34c
total des commissions pour 50 ventes par mois, 600 ventes par an : 204€

Total abonnement + commissions : 1032€
coût effectif par vente ( 600 ventes ): 1,72€
Commission effective: 1,72 / 6 = 29%
</code></pre>
<p>Et oui. Si vous faites peu de ventes, vous pouvez avoir jusque 30% qui partent dans la plateforme.</p>
<p><strong>Big Cartel</strong></p>
<pre><code>abonnement mensuel : 12€
cout abonnement à l&#39;année : 144€

coût proportionelle par vente: 3% ( carte bancaire uniquement )
coût absolu par vente: 30c ( Commission carte bancaire)
coût par vente à 6€ : 48c
total des commissions pour 50 ventes par mois, 600 ventes par an : 288€

Total abonnement + commissions : 432€
coût effectif par vente ( 600 ventes ): 0,72€
Commission effective: 0,72 / 6 = 12%
</code></pre>
<p>(<em>pour info : ca veut dire que pour 3600€ de ventes sur l&#39;années vous récupérez 3168€</em> )</p>
<p>Big Cartel reste définitivement très intéressant pour les &quot;petits&quot; vendeurs.</p>
<p><strong>Profil 2 : un petit éditeur ou un groupement d&#39;auteurs ou un collectif, ou n&#39;importe quoi qui arrive à faire 2000 ventes par mois à 6€ ouais je sais j&#39;ai changé les chiffres en cours de route</strong></p>
<p><strong>Square space Advanced</strong></p>
<pre><code>abonnement mensuel : 69€
cout abonnement à l&#39;année : 828€

coût proportionelle par vente: 1.5% ( carte bancaire uniquement )
coût absolu par vente: 25c ( Commission carte bancaire)
coût par vente à 6€ : 34c
total des commissions pour 2000 ventes par mois, 24000 ventes par an : 8160€

Total abonnement + commissions : 8988€ ( 25 jours de dev)
coût effectif par vente ( 24000 ventes ): 0,37€
Commission effective: 0,37 / 6 = 6%
</code></pre>
<p><em>Profil 3 : VOTRE PROJET A GROSSI VOUS VOUS ETES STRUCTURES ET VOUS VENDEZ 10000 FICHIERS PAR MOIS A 4€</em></p>
<p><strong>Square space Advanced</strong></p>
<pre><code>abonnement mensuel : 69€
cout abonnement à l&#39;année : 828€

coût proportionelle par vente: 1.5% ( carte bancaire uniquement )
coût absolu par vente: 25c ( Commission carte bancaire)
coût par vente à 4€ : 31c
total des commissions pour 10000 ventes par mois, 120 000 ventes par an : 37200€

Total abonnement + commissions : 38028 ( 105 jours de dev)
coût effectif par vente ( 120000 ventes ): 0,32€
Commission effective: 0,32 / 4 = 8%
</code></pre>
<p>Et ouais. Le taux a augmenté. C&#39;était le piège. J&#39;ai changé le prix des produits sans vous le dire.
En baissant le prix des ventes, les &quot;25 centimes de commissions par ventes&quot; font plus mal.</p>
<h3>Ca me saoul tous les petits chiffres et les calculs là on peut pas passer à autre chose ?</h3>
<p>Les 1ères solutions évoquées ci dessus faisaient partie de la catégorie &quot;je veux pas coder&quot;. Faciles a prendre en main, elles permettent de rapidement lancer sa boutique, en échange d&#39;un coût qui peut être elevé et de possibilités d&#39;évolutions et de personnalisations qui peuvent être limitées.</p>
<p>Voyons l&#39;étape suivante, qui parait séduisante : on prend une solution technique existante, possiblement open source, mais on se la gère soit même sur son serveur. Comme ça on peut avoir son propre nom de domaine et le design de notre rêve au lieu des templates tout pourri de Squarespace.</p>
<p>J&#39;en ai noté 2 :</p>
<ul>
<li>Wordress et son plugin woocommerce</li>
<li>Snipcart</li>
</ul>
<p>Relativement opposées dans leurs approches.</p>
<h2>Purée mais c&#39;est quoi le .htaccess ?</h2>
<p>Ici, on va enlever un coût, la commission de la boutique en ligne, puisqu&#39;on va tout gérer soi même, mais on va en rajouter un autre : le coût de développement initial.</p>
<p>Il faut faire cependant attention à un point : l&#39;abonnement mensuel, de Square Space par exemple, va être remplacé par les coûts d&#39;hébergement que vous allez devoir payer pour faire tourner votre site web.</p>
<p>Comme base de travail on va imaginer que le coût initial de dev ( que vous allez payer en faisant appel à un/e graphiste et un/e dev pour coder votre boutque) est d&#39;environ 2000€.
( à titre personnel, j&#39;arrive à monter une boutique Woocommerce complète avec un design basique en 2 jours. Donc pour le dev on peut descendre jusque 700€, arrondissons à 1000€ ).</p>
<p>On va aussi imaginer que votre boutique dure 3 ans avant d&#39;envisager de passer à autre chose, abandonner ou voir plus grand.</p>
<p>Vos coûts de dev ( <em>upfront</em> )se monte donc à 667€ par an.</p>
<h3>Woocommerce</h3>
<p>Wordpress reste la solution pour les sites web personnels ou de petites entreprises la plus répandue, et de loin. Le système est éprouvé et la communauté et l&#39;éco système sont riches. Il nécessite de se plonger un peu dans la technique mais avec un peu d&#39;effort et de motivation, n&#39;importe qui peut déployer son site.</p>
<p>Au dessus de wordpress, il existe un plugin, appel <a href="https://woocommerce.com/fr/">woocommerce</a>, qui est totalement gratuit et open source et permet d&#39;avoir très vite et très facilement une boutique en ligne, y compris pour les fichiers numériques. Cela nécessite encore et toujours de brancher un compte Stripe ou paypal, ou un des <a href="https://woocommerce.com/fr/product-category/woocommerce-extensions/payment-gateways/?categoryIds=1023&collections=product&page=1">nombreux autre fournisseurs de paiement compatible</a>, qui va prélever ses 30c + environ 3%, mais tout est extrêmement facile à configurer.</p>
<p>Faison donc une revue des coûts avec 2 hypothèses :</p>
<p><strong>100 ventes par mois à 4€</strong></p>
<ol>
<li>coûts de dev initiaux ( parce que vous avez engage un/e dev et un/e graphiste que vous avez payé ) : disons 700€ par an</li>
<li>coût d&#39;hébergements : pour ce niveau de fréquentation, on va être sur des hébergements autour de 10€ par mois, 120€ par an</li>
<li>coût par ventes : 4 * 3% + 0,30 = 0€42</li>
<li>Commission bancaire sur 1 an ( 1200 ventes ) : 504€</li>
</ol>
<p>Soit un coût total de environ 1320€ (700+120+504) pour un Chiffre d&#39;affaire de 4800€. Un taux effectif d&#39;environ 23% par vente. Clairement pas ouf mais au moins vous avez un nom de domaine et un design aux petits oignons.</p>
<p><strong>5000 ventes par mois à 4€</strong></p>
<ol>
<li>coûts de dev initiaux ( parce que vous avez engage un/e dev et un/e graphiste que vous avez payé ) : disons 700€ par an</li>
<li>coût d&#39;hébergements : il va falloir passer sur un plus gros serveur. J&#39;estime que pour être serein vous pouvez investir 100€ par mois ( 1200€ par an )</li>
<li>coût par ventes : 4 * 3% + 0,30 = 0€42</li>
<li>Commission bancaire sur 1 an ( 60000 ventes ) : 25200€  (!!!)</li>
</ol>
<p>Soit un coût total de environ 27100 (700+1200+25200) pour un chiffre d&#39;affaire de 240 000€. Soit environ 10,5% par ventes.</p>
<p>Evidemment, dans ce cas, le cout de développement initial devient négligeable et c&#39;est la commission des transactions qui pèse. Mais on va y revenir.</p>
<h3>Snipcart</h3>
<p>Je vais pas vous cacher que j&#39;ai été hyper emballé par <a href="https://snipcart.com/fr">snipcart</a>. C&#39;est énormément plus simple à mettre en place que Wordpress et son cortège de failles de sécurité. Vous pouvez faire juste une page web de base  en html , hébergée avec l&#39;offre gratuite ovh et y copier coller le code fournit par snipcart et vous avez une boutique qui fonctionne.
Comme la partie compliquée et gourmande en ressource est hébergée chez snipcart, vous vous épargnez les frais d&#39;hébergement élevés.</p>
<p>Le seul inconvénient que j&#39;y ai trouvé c&#39;est que la taille des fichiers est par défaut limitée à 20Mo mais on peut discuter avec eux pour l&#39;augmenter. Et bien sûr, il y a toujours les frais de carte bancaire, en plus des 2% de commission que prend snipcart.</p>
<p>Revoyons nos 2 profils</p>
<p><strong>100 ventes par mois à 4€</strong></p>
<ol>
<li>coûts de dev initiaux : franchement. je dirais 300€ en tout, soit 100€ par an</li>
<li>coût d&#39;hébergement : ca passe sur du <a href="https://www.ovhcloud.com/fr/domains/free-web-hosting/">ovh gratuit 100Mo</a> offert avec le nom de domaine</li>
<li>coût par ventes : 4*(2+3)% + 0,30 = 0€50</li>
<li>Commission bancaire sur 1 an ( 1200 ventes ) : 600€</li>
</ol>
<p>En se forcant un peu, ca va vous couter 700€ pour réaliser 4800€ de chiffre d&#39;affaire. Ca reste 14,5% de commission effective par vente mais ça peut être un bon compromis entre boutique personnalisée et solution rapide sans gros investissement initial.</p>
<p><strong>5000 ventes par mois à 4€</strong></p>
<ol>
<li>coûts de dev initiaux : disons qu&#39;on monte à 200€ par an parce que ca se complique un peu</li>
<li>coût d&#39;hébergement : ca passe encore sur du <a href="https://www.ovhcloud.com/fr/domains/free-web-hosting/">ovh gratuit 100Mo</a> à mon avis.</li>
<li>coût par ventes : 4*(2+3)% + 0,30 = 0€50</li>
<li>Commissions bancaires sur 1 an ( 60000 ventes ) : 30 000€</li>
</ol>
<p>C&#39;est toujours la partie fixe qui grève les coûts. Le coût de dev n&#39;a quasiment plus aucun impact mais les 30c par ventes, sur des ventes d&#39;un petit montant, font mal. Et je ne vais même pas évoquer le cas où vous vendez vos bd 2€.</p>
<h3>Est ce qu&#39;on peut pas renverser le systeme bancaire et payer en crypto monnaie du coup ?</h3>
<p>Alors non, on va pas faire ça. Par contre on va basculer sur la 3ème possibilité : je fais tout moi même à partir de rien.</p>
<h2>Build</h2>
<p>Jusqu&#39;à présent, on a seulement évoqué stripe et Paycart comme fournisseurs de paiement. On aura pu rajouter Mollie, qui a le mérite d&#39;être anglais plutôt qu&#39;américain mais on reste dans la même gamme de prix.</p>
<p>Vous aurez remarqué que ce qui grève le coût dans notre cas, où les ventes se font sur des petits montants, c&#39;est le montant fixe de la commission : en général 30 centimes par vente.</p>
<p>Ce n&#39;est pas pour rien que Stripe est si connu : leur produit fonctionne bien, la doc est très bien faite et tous les dev connaissent leur API par coeur. En contrepartie, ils se servent bien.</p>
<p>Mais il existe aussi des solutions techniques sans frais fixes comme par exemple <a href="https://www.sumup.com/fr-fr/paiements-en-ligne">sumup</a> dont la commission par transaction est de 2,5% (en gros. J&#39;omet les questions de cartes internationales, taux de change etc) ou les solutions de paiements en ligne…de votre banque.</p>
<h3>Bonjour c&#39;est votre conseiller bancaire. Vous connaissez nos solutions e-commerce ?</h3>
<p>Pour je ne sais quelles raisons, les banques communiquent peu, ou mal, sur leurs solutions de paiement en ligne dont les frais peuvents descendre jusque 1%  ( j&#39;ai même entendu parler d&#39;une banque qui proposait des frais de 0,5% mais je n&#39;ai jamais pu le vérifier).</p>
<p>L&#39;inconvénient c&#39;est que ce sont des solutions techniques très complexes et qui nécessitent en plus de gérer sa TVA, ses factures, …
Mais la disparition du taux fixe change tout.</p>
<p>Sans se concentrer sur chaque solution individuellement, qui vont toutes être du même niveau de complexité, voyons l&#39;impact de la disparition des commissions fixes, avec des commissions à 2,5% et à 1%.</p>
<p><strong>100 ventes par mois à 4€</strong></p>
<ol>
<li>coûts de dev initiaux : on va en reparler plus tard.</li>
<li>coût d&#39;hébergement : 10€ par mois</li>
<li>coût par ventes : 2.5% * 4 = 0€10 ou 1% * 4 = 0€04</li>
<li>Commission bancaire sur 1 an ( 1200 ventes ) : 120€ ou 48€.</li>
</ol>
<p>He ouais. Le fonctionnement de votre boutique, une fois le développement initial terminé ne va vous coûter que 240€ par an, voir 170€ dans le meilleur de cas. Pour 4800€ de chiffre d&#39;affaires.</p>
<p>Et c&#39;est encore mieux quand on grossit</p>
<p><strong>5000 ventes par mois à 4€</strong></p>
<ol>
<li>coûts de dev initiaux : j&#39;ai dit qu&#39;on allait en reparler.</li>
<li>coût d&#39;hébergement : désolé mais il va falloir taper dans le 100€ par mois minimum là, peut être même 150€.</li>
<li>coût par ventes : 0€10 ou 0€04</li>
<li>Commissions bancaires sur 1 an ( 60000 ventes ) : 6000€ ou 2400€</li>
</ol>
<p>Disons que votre infrastructure vous coute 1800€ par an, auxquels vous rajoutez 6000€ de comissions bancaire soit un total de 7800€ par an. A comparer aux 30 000€ si on se fait une shop woocommerce avec stripe. soit 22 2000€ économisé.</p>
<p>Soit environ 60 jours de dev. </p>
<p>3 mois de travail. </p>
<p>Pour coder une boutique en ligne qui permet de faire 5000 ventes par mois.</p>
<p>Je pense que vous avez compris l&#39;idée ( l&#39;idée c&#39;est : c&#39;est largement faisable et ça vaut le coup)</p>
<h2>Hé béh. C&#39;était compliqué. En plus y a pleins d&#39;erreurs de calculs et d&#39;approximations.</h2>
<p>Oui.</p>
<p>J&#39;ai un peu tout mélangé, omis certains coûts, me suis trompé dans certains calculs, … Mais le but était plutôt de partager la 1ère réflexion que j&#39;ai du avoir il y a un an, dont les conclusions ne seraient évidemment pas les mêmes si vous êtes une artiste sans compétences de code qui souhaite juste vendre une cinquantaine de fanzine par mois.</p>
<p>Comme cela était il y a un an, je peux même vous fournir un retour d&#39;expérience, parce que j&#39;ai bien enregistré tout ce que j&#39;ai fait : ma boutique est terminée, j&#39;y ai passé l&#39;équivalent de 30 jours de dev et les premiers tests de charge semblent montrer que je peux faire 100000 ventes par mois avec un serveur à 60€ par mois ( avec quelques techniques pour gérer les pics de ventes s&#39;il y en a).</p>
<p>Il me reste plus qu&#39;à trouver des bd à vendre.</p>
<h2>Petit épilogue commercial</h2>
<p>En lisant cet article, vous vous êtes peut être dit &quot;dis donc il s&#39;est sacrément penché sur le sujet,  il doit s&#39;y connaitre un max en boutique en ligne et en plus il est capable d&#39;adapter ses propositions à mes capacités et contraintes franchement faudrait trop que je lui demande un devis pour ma boutique&quot;</p>
<p>C&#39;est clair que vous avez l&#39;oeil pour ce genre de chose. <a href="mailto:arnold@cepcam.fr">Contactez moi donc</a> pour que je fasse votre boutique, ou alors venez me causer sur <a href="https://bsky.app/profile/cepcam.fr">bluesky</a>.</p>
<p>On a un <a href="https://discord.gg/vv6WE5zYN">discord</a> pour poser des questions aussi si vous voulez.</p>
<h2>DEUXIEME EPILOGUE</h2>
<h3>du coup on va l&#39;appeler &quot;péroraison&quot; plutôt</h3>
<p>Un point important que je vais marteler pendant les prochains mois : si plusieurs personnes ont un besoin similaire, elles dépensent moins d&#39;argent en mettant leurs besoins en commun ( appelons ça une coopérative. Comme les trucs qui vendent le rosé le long de la national l&#39;été )(enfin, qui faisait ça avant que toutes les nationales ne soient coupées à cause des feux de forêt ).</p>
<p>Pour une personne seule, évidemment qu&#39;investir 5000€ dans une développeuse et prendre un serveur ou un abonnement à 20€ par mois pour faire 50 ventes ça vaut pas le coup mais à partir de 20 personnes qui font chacune 50 ventes, ça fait 1000 ventes par mois, ce qui peut largement justifier un investissement. </p>
]]></description>
            <link>https://blog.com/articles/87</link>
            <guid isPermaLink="false">https://blog.com/articles/87</guid>
            <pubDate>Wed, 05 Aug 2026 08:26:01 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Les plateformes de contenu]]></title>
            <description><![CDATA[<p>Sur Internet :</p>
<ul>
<li>des gens produisent du contenu ( des journalistes, des artistes...)</li>
<li>des société hébergent ce contenu ( site web ad hoc comme lemonde.fr ou plateforme comme Artstation, twitter,...)</li>
<li>d&#39;autres les recensent et organisent ( Google mais aussi facebook ou twitter avec leurs algos ! )</li>
<li>et enfin, une dernière catégorie de plateforme, souvent la même que celle qui hébergent, permet de consommer le contenu
Si vous publiez une video sur Youtube, vous êtes la créatrice du contenu, youtube l&#39;héberge, Bing ou Google le recensent, Bluesky peut l&#39;afficher. ( il y a quelques nuances à tout ça mais simplifions …). Internet est un réseau de tubes dans lequel on injecte des contenus.</li>
</ul>
<p>Mais ces dernières années, ce contenu a été accaparé par les plateformes, le modèle était &quot;tu upload ton contenu sur notre plateforme, il nous appartient, on en contrôle l&#39;accès et éventuellement on te reverse une partie des bénéfices qu&#39;on fait avec&quot; Et évidemment, tout ca fonctionnait parce qu&#39;en réalité, ce qui était vendu c&#39;était les consommateur/ices de contenu.</p>
<p>L&#39;argent sur internet ne provient pas de personnes qui achètent ce que produisent d&#39;autres personnes mais de plateformes qui vendent à des annonceurs l&#39;attention qu&#39;elles ont réussi à capter chez des individus. Attention captée par l&#39;exposition gratuite du contenu d&#39;autres personnes.</p>
<p>Pourtant il n&#39;y a aucune raison valable pour ca.</p>
<h1>le prix du web</h1>
<p>Si je suis, disons, une autrice de bd, mettre mes bd en ligne, lisible par 2 millions de personnes sans que le serveur n&#39;explose me couterait actuellement 12€ par mois de bande passante et 15€ par an de nom de domaine. 159€ par an soit sans doute autant que les dépenses en peintures et pinceaux d&#39;une artiste tradi. Et mettre un bouton paypal ne coute rien. Et les gens qui aiment lire la bd pourraient soutenir l&#39;artiste en donnant 1€ par mois. Et si ils étaient 3000, ca permettrait à l&#39;artiste de vivre à peu près correctement tout en cotisant pour sa retraite et l&#39;assurance maladie</p>
<p>Mais ça ne s&#39;est pas passé comme ça pour, à mon avis, 3 raisons</p>
<ol>
<li>Quoi que moi j&#39;en crois en tant que développeur, le palier technique à l&#39;entrée est en fait grand. Faire un site web vs ouvrir un compte vite fait sur Instagram ? Zero sujet jusqu&#39;à présent</li>
<li>La vitrine. C&#39;est chouette de faire son site web chacun dans son coin mais les lecteurs et lectrices ne sont pas des petits chercheur/euses d&#39;or qui parcourent tout le web à la recherche de la pépite. Non, ce qu&#39;on aime c&#39;est un gros hub centrale qui nous balance une joli vitrine déjà présélectionnée et où on a juste à choisir.</li>
<li>Le micropaiement n&#39;existe pas. Coté lecteur, sortir sa CB, voir ouvrir un compte paypal / kofi / Patreon / whatever quand j&#39;ai lu une bd rigolote de 4 cases, c&#39;est bof. Coté artiste, sur 1€ je vais me faire éclater 25c par le fournisseur de paiement , qui en plus peut décider de son coté de ne plus accepter le paiement pour mes produits parce que il y a un perso LGBT ou un téton féminin visible</li>
</ol>
<p>On aurait pu penser que le web aurait permis l&#39;émergence de circuits courts mais au final, des années après, c&#39;est le modèle classique qui domine : les économies d&#39;echelles favorisent les gros acteurs ( il est plus facile de mettre 10 000€ dans un site web pour Naver que pour une autrice de webtoon) et plutôt que de se disperser, la consommation se réduit à quelques plateformes dans lesquelles il est impossible de ne pas être si on veut exister. Quand au paiement, ce n&#39;est pas le modèle dominant sur Internet, habitués au contenu gratuit permis à la fois par l&#39;exploitation des créatrices et créateurs de contenus et la vente du temps d&#39;attention des consommateurs et consommatrices des contenus.</p>
<p>Evidemment, rien de nouveau ici, le phénomène s&#39;était déjà produit avec la presse et la télé. Faire un journal ce n&#39;est pas rentable mais vendre les lecteurs d&#39;un journal à des annonceurs, ca aide. Il y a une sorte de fatalité avec les médias, dont on dirait que personne n&#39;est prêt à accepter le prix que ca coute de produire un média de qualité. Que ce soit de l&#39;information de qualité ou un feuilleton bd.</p>
<p>Les journaux d&#39;informations ont commencé à sortir de cette phase et leurs lecteurices aussi. Mediapart, Les Jours, … Je ne connais pas le détail de leurs revenus mais force est de constater qu&#39;ils existent encore et produisent du contenu de qualité sans avoir recours à la pub ou la vente de temps d&#39;Attention de leurs lecteurices. Je ne sais pas si un modèles similaire est possible dans la bd, de nombreuses tentatives ont déjà échoués, mais j&#39;espère que oui.</p>
]]></description>
            <link>https://blog.com/articles/42</link>
            <guid isPermaLink="false">https://blog.com/articles/42</guid>
            <pubDate>Tue, 30 Jun 2026 15:14:46 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Sortir des algorithmes]]></title>
            <description><![CDATA[<p>Je reprend volontairement le titre de<a href="https://mail.paulineharmange.fr/archive/algorithmes/"> cette article par l&#39;autrice Pauline Harmange</a> pour me joindre au chœur et peut être en faire un mantra. Il est temps de sortir des algorithmes.</p>
<h1>Je ne connnais même pas la musique qu&#39;ecoutent mes enfants.</h1>
<p>Je suis tellement en accord avec l&#39;article de Pauline Harmange que j&#39;ai l&#39;impression de ne pouvoir que paraphraser.</p>
<p>J&#39;écoute énormemént de musique, j&#39;aime beaucoup ça. Depuis des années, sans doute à cause du travail en Open Space, je passe une grande partie de ma journée avec un casque sur la tête et une appli, Spotify avant, Apple Music maintenant, pour le remplir de contenu. Mais depuis environ 1 mois, j&#39;ai remplacé Apple Music par un transistor Sony à 15€ acheté chez Darty et branché sur FIP.</p>
<p>Comme l&#39;autrice citée plus haut, j&#39;ai été de plus en plus déçu au fil des années de mon wrapped annuel, cette pratique consistant à produire un récapitulatif de ce qu&#39;on a écouté ( ou vu, ou lu ) l&#39;année passée.</p>
<p>En plus de me rendre compte que c&#39;est finalement toujours les 20 mêmes chansons en boucle, elles ont pour la plupart en commun d&#39;être juste des tubes de l&#39;époque où j&#39;avais 20 ans. Evidemment, çe me plait. La preuve, je les écoute en boucle. Mais récemment, à l&#39;occasion d&#39;un voyage en voiture avec 3 ados au cours duquel on a été contraint de partager le haut parleur principal de la voiture, j&#39;ai découvert Théodora, et j&#39;ai adoré.</p>
<p>Je me suis rendu compte que :</p>
<ol>
<li>je ne connais quasiment aucune ou aucun artiste récent/e</li>
<li>Quand j&#39;en découvre un/e, il arrive que j&#39;aime beaucoup.</li>
<li></li>
</ol>
<p>Pourtant il me semblait que les recommandations de l&#39;algorithmes de Apple Music étaient super. Quasiment à chaque fois que il me proposait un morceau, j&#39;aimais ça. D&#39;ailleurs c&#39;est pareil sur Instagram, quand je m&#39;y met, je peux passer 1 à 2 heures à scroller et cliquer sur ses propositions !</p>
<p>Est ce que j&#39;ai découvert de nouvelles illustratrices, ou illustrateurs, dont je suivrais dorénavant le travail ?</p>
<p>Non.</p>
<p>Est ce que j&#39;ai appris des trucs sur la peinture de figurines, un de mes hobby qui m&#39;avait fait venir sur Insta ?</p>
<p>Non plus.</p>
<h1>Discover</h1>
<p>Je suis développeur et il y a bientôt 1 an, je suis repassé Freelance avec l&#39;idée que si les artistes n&#39;ont plus de visibilité sur le web c&#39;est parce qu&#39;ils n&#39;ont pas leur propre site web. C&#39;est en partie vrai ou en tout cas une condition sine qua non pour exister. Mais être indépendant dans son petit coin du web ne résoud pas tout. Même avec un contenu qui plait suffisamment pour convaincre les gens de vous suivre voir de payer pour votre travail, il reste 2 barrières à franchir :</p>
<ol>
<li>Que les gens découvrent votre travail</li>
<li>Qu&#39;ils soient mis au courant quand vous publiez du nouveau contenu.</li>
</ol>
<p>Pendant longtemps, la découverte se faisait par mots clé. Si vous vouliez lire une bd d&#39;aventures, vous tapiez &quot;bd d&#39;aventures&quot; sur google et vous obteniez une liste de site web de bd d&#39;aventures, classée selon le nombre de sites web qui citaient cette page comme référence en matière de bd d&#39;aventures. Notez que déjà là, la découvrabilité d&#39;un site dépendait d&#39;un algorithme et de recommandations externes mais au moins les mots clés étaient pris en compte et surtout, pendant longtemps, les recommandations étaient sur ce que vous aviez demandé ( &quot;bd d&#39;aventure&quot;).</p>
<p>Puis il y a eu les réseaux sociaux et les recommandations personnalisées. On a pu rajouter un retour interactif aux contenus (&quot;j&#39;aime&quot;,&quot;Partager&quot;, …) permettant de dresser une <a href="https://fr.wikipedia.org/wiki/Filtrage_collaboratif">relation entre contenu et consommateur/ices</a>. Plutôt que d&#39;avoir une liste de bd d&#39;aventures, vous aviez la liste des bd d&#39;aventures auxquelles des gens similaires à vous avaient réagi.</p>
<p>Evidemment, on ne peut pas complètement se passer de traitement algorithmique.</p>
<p>L&#39;indexation de contenu, puisque c&#39;est de ça qu&#39;il s&#39;agit, est un problème complexe à l&#39;échelle d&#39;internet. Si des gens recherchent de la bd d&#39;aventure, vous ne pouvez pas vous contenter de retourner tous les sites qui ont mis &quot;bd d&#39;aventure&quot; dans leur titre, au risque que quelqu&#39;un fasse une page blanche dont le titre serait &quot;bd d&#39;aventure&quot; et soit propulsé aussi haut qu&#39;une autre bd d&#39;aventure plus légitime. Mais par contre il est temps de se demander si &quot;les gens qui ont réagi à ce type de contenu ont aussi réagi à ce type de contenu&quot; reste pertinent pour découvrir du contenu de qualité.</p>
<h1>Si vous avez aimé… alors vous aimerez…</h1>
<p>On voit poindre la différence entre 2 types d&#39;objectifs, pour lequels on peut parfois employer les même algorithmes.</p>
<p>proposer du contenu recherché à propos d&#39;un sujet (&quot;bd d&#39;aventure&quot;)
proposer du contenu qui va me faire réagir.
Pour le premier cas, il s&#39;agit d&#39;indexation pure. Etant donné un sujet, quelles pages web ( on parle plutôt de &quot;document&quot; ) sont légitimes à parler de ce sujet. La difficulté de la tache est donc de définir la légitimité d&#39;un document à propos d&#39;un sujet au moment de ma recherche. Parfois, rien que le fait d&#39;<a href="https://fr.wikipedia.org/wiki/TF-IDF">en parler de manière plus spécifique que d&#39;autres termes</a> suffit à positionner un document comme traitant du sujet mais plus souvent, on se base sur les recommandations des autres, reconnaissant ainsi tacitement qu&#39;un contenu légitime est un contenu très souvent cité.</p>
<p>Notez en passant que &quot;montre moi <a href="https://bouletcorp.com/feed/rss.xml">les bd produites par cet artiste que j&#39;aime bien</a> &quot; est une forme d&#39;indexation. Ici point d&#39;algos, on a la forme d&#39;indexation de contenu la plus simple possible : l&#39;identité du producteur ou de la productrice de contenu est utilisé pour indexer le contenu et on récupère tous les contenus indexés par cette identité, classés par date. Mais même cette indexation très simple est dévoyée et dans instagram, vous abonner au contenu d&#39;un/e artiste que vous aimez ne garantit même pas que vous le voyez dans votre feed.</p>
<p>Pour le 2ème cas, tout le problème est dans la relation entre &quot;apprécier&quot; et &quot;decouvrir&quot;, en plus de la prémice un peu vite acceptée que partager du contenu voir même aimer du contenu signifie qu&#39;on en veut plus.</p>
<p>J&#39;aime le travail de <a href="https://www.instagram.com/sil_eibm/">Maïlis Colombié</a>, j&#39;aimerais en voir plus. Je me suis abonné à son compte instagram ainsi qu&#39; à celui d&#39;autres artistes. Est ce que instagram m&#39;a proposé des blog bd similaires ? non.</p>
<p>Est ce que google me permet de trouver des bd ou des blogs bd dans ce style ? non plus.</p>
<p>Il n&#39;existe plus aucun moyen de trouver facilement du contenu sur un sujet, ou similaire à un sujet. Par contre, je peux passer 2 heures a scroller sur instagram.</p>
<h1>Portal</h1>
<p>Ce que je voudrais semble-t-il, c&#39;est une sorte de page web en laquelle j&#39;aurais confiance et qui me proposerait des recommandations sur un sujet donné. Il se trouve que <a href="https://www.comicsblog.fr/">cela existe pour certains sujets </a> ou, le cas contraire, que c&#39;est assez facile à faire.</p>
<p>Il y a 3 sortes d&#39;actrices et d&#39;acteurs sur Internet : les créateurices de contenu, les consommatrices et consommateurs et… les référents. Les créateurices commencent à prendre conscience des problemes des plateformes mais en reste dépendant/es. Les consommatrices aussi. Mais pour résoudre le problème il va falloir qu&#39;on se remette à recommander, ce qui va plus loin que de juste liker ou partager de manière molle un contenu,</p>
<p>Si vous faites de la photo, du dessin, du tricot, vous pouvez vous faire un website ou un blog pour partagez vos créations mais même si vous ne créez pas, vous pouvez parler de ce que vous aimez et faire une page web en dehors des plateformes, avec des liens vers d&#39;autres sites web qui vous plaisent, qui feront de même, etc...</p>
<p>J&#39;ai besoin d&#39;un site web qui recensent tous les blog bd d&#39;aventures chouettes. Mettez vous y s&#39;il vous plait,<a href="https://cepcam.fr/tutoriel-web/"> je vous explique comment faire.</a></p>
]]></description>
            <link>https://blog.com/articles/39</link>
            <guid isPermaLink="false">https://blog.com/articles/39</guid>
            <pubDate>Tue, 30 Jun 2026 15:13:28 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Tester l'équité des dés.]]></title>
            <description><![CDATA[<p>Je racontais dans<a href="https://cepcam.fr/blog/2025/11/02"> un article précedent </a>que pour améliorer ma connaissance du typescript, et à l&#39;occasion de la sortie de la nouvelle édition 5.5; j&#39;avais commencé à implémenter les règles de Donjons &amp; Dragons.</p>
<p>Dans ce jeu de rôle, comme dans la plupart des jeux de rôle (pas tous), une des composantes principales du système de jeu est le lancer de dés. Il faut donc que le notre soit irréprochable.</p>
<h1>Définir par les tests.</h1>
<p>Avant de parler statistiques et math, parlons un peu méthode.</p>
<p>Quand vous vous apprétez à coder un nouveau système, la première étape n&#39;est souvent pas de déterminer comment vous allez faire, quel langage, quel algorithme,... Mais plutôt comment on va déterminer que le projet est clôt et réussi.</p>
<p>Je m&#39;explique.</p>
<p>Le vrai métier d&#39;un·e dévelopeureuse c&#39;est de modéliser : transcrire en un code formel des besoins exprimés de manière naturelle ( par opposition à formelle ). Attention, je ne dis pas que c&#39;est le travail du chercheur ou de la chercheuse en informatique, qui travaillent sur l&#39;informatique en tant qu&#39;outil technique. Mais pour les gens qui gagnent leur vie avec le développement informatique, la plus grande valeur ajoutée une fois la syntaxe du langage maitrisée, c&#39;est de savoir définir ce qu&#39;on attend du code.</p>
<p>Les méthodes diffèrent mais comme je l&#39;avais dis une fois sur les réseaux de manière à moitié sérieuse, j&#39;ai tendance à apprécier la méthode qu&#39;on appelle le <a href="https://fr.wikipedia.org/wiki/Programmation_pilot%C3%A9e_par_le_comportement">BDD</a> (Behavior-Driven development). Si on vous demande &quot;Ha tiens j&#39;aimerais une app qui me prédit la Température de demain&quot;, j&#39;aurais tendance à écrire ceci :</p>
<pre><code>function tomorrowTemp():number {
  return 14.5 ; //Température moyenne en France
}
</code></pre>
<p>_
(il y a une très bonne note de XKCD là dessus mais je crois qu&#39;elle n&#39;est que dans l&#39;édition papier de ses &quot;How to&quot;)_</p>
<p>Et là vous allez me dire</p>
<p>  <strong>Mais c&#39;est complétement débile et complétement faux ?!</strong></p>
<p>  <em>Très bien, vous avez raison, pourquoi c&#39;est faux ?</em></p>
<p>(<em>(évidemment que ca se passe pas littéralement comme ça)</em>)</p>
<p><strong>C&#39;est pas la même température à Toulouse et à Lyon ?! Il fait pas la même température partout</strong></p>
<p><em>Ok donc déjà vous voulez une température par ville</em></p>
<p><strong>et puis ca peut pas etre la même température toute l&#39;année.</strong></p>
<p><em>…par date donc</em></p>
<p><strong>Et puis c&#39;est faux ? Il a pas fait 14 tous les jours ces dernières années</strong></p>
<p><em>Ok donc pour valider la fonction on va la vérifier sur les archives de températures</em></p>
<p><strong>Et faut pas que ca se trompe dans les prédictions plus de 95% du temps</strong></p>
<p><em>(donc sans doute que ce qu&#39;il veut c&#39;est une cross entropy sur la cross validation )</em></p>
<p>Etc.</p>
<p>Le dialogue est extrêmement caricatural mais je pense qu&#39;il illustre bien le fond de l&#39;idée qui est de commencer par définir formellement ce qu&#39;on attend d&#39;un programme, qu&#39;on doit considérer comme une boite noire, au lieu de se concentrer sur comment il va le faire. Et si vous trouvez ça vraiment débile, pensez à tous les programmes en cours d&#39;intelligence artificielle ( nous somme en Novembre 2025 au moment où ce billet est écrit) qui ont juste spécifié &quot;on va foutre de l&#39;IA &quot; au lieu de &quot;on va améliorer le taux de détection&quot;, &quot;on va réduire le temps d&#39;attente&quot;, &quot;on va augmenter la détection de taux de defection&quot;.</p>
<p>Pour être très concret, et juste pour montrer à quoi ca peut ressembler, cela veut dire que quelque part dans votre projet vous allez avoir un fichier qui ressemble à ça</p>
<pre><code>import { describe, it, expect } from &quot;vitest&quot;;
import DiceCup from &quot;@models/DiceCup&quot;;
import constants from &quot;@stdio/constant&quot;;

describe(&quot;Dice diceDescriptor string Parser&quot;, () =&gt; {
  it(&quot;should create One four sided face if you use 1D4&quot;, () =&gt; {
    const myCup = new DiceCup(&quot;1D4&quot;);

    expect(myCup.modifier).toBeUndefined();
    expect(myCup.dice.length).toBe(1);
    expect((myCup.dice[0].dieValue = 4));
  });

  it(&quot;should create not create 1Dsix+douze&quot;, () =&gt; {
    const myCup = new DiceCup(&quot;1Dsix+douze&quot;);

    expect(myCup.modifier).toBeUndefined();
    expect(myCup.dice.length).toBe(0);
  });

  it(&quot;should create not create 1Dboule&quot;, () =&gt; {
    const myCup = new DiceCup(&quot;1Dboule&quot;);

    expect(myCup.modifier).toBeUndefined();
    expect(myCup.dice.length).toBe(0);
  });

})
describe(&quot;Fair throw and expected value&quot;, () =&gt; {
  it(&quot;should respect chiSquared criteria for 1D6&quot;, () =&gt; {
    const startTime: number = performance.now();
    const faces = 6;
    const maxChisquared = constants.chiSquared005Table[faces];

    let myCup = new DiceCup(&quot;1D&quot; + faces);
    const nRoll = 60000;
    const valueCount = new Array(faces).fill(0);

    for (let i = 0; i &lt; nRoll; i++) {
      const r = myCup.roll();
      valueCount[r - 1]++;
    }

    /** Ok now go chi squared */
    const valuesExpected = new Array(faces).fill(nRoll / faces);

    let chiSquared = 0;
    for (let i = 0; i &lt; faces; i++) {
      const a = (valueCount[i] - valuesExpected[i]) ** 2;
      chiSquared += a / (nRoll / faces);
    }
    const endTime: number = performance.now();
    const elapsedTime = endTime - startTime;
    expect(elapsedTime).toBeLessThan(200);
    expect(chiSquared).toBeLessThan(maxChisquared);
  });
})
</code></pre>
<p>   Le fichier ci-dessus utilise une syntaxe courante à base de mots clés comme &quot;it&quot;,&quot;should&quot;,&quot;expect&quot;, qui sont des vrais mots clé informatique dans ce cadre, interprétés très formellement par l&#39;ordinateur.</p>
<p>Mais revenons en au sujet de l&#39;article et regardons plus en détail ce test &quot;it should respect chiSquared criteria for 1D6&quot;</p>
<p>Quantifier l&#39;aléatoire
Comme je suis très sérieux, je veux écrire un test pour vérifier que mes dés virtuels sont corrects pour jouer à Donjons &amp; Dragons. Seuleument, la difficulté intrinsèque à tester un lancer de dés est qu&#39;il n&#39;y aucune certitudes sur ce qu&#39;on peut attendre du résultat.</p>
<p>Dois-je lancer les dés 6 fois et vérifier que j&#39;ai bien chaque chiffre ? 60 fois et vérifier que chaque chiffre apparait 10 fois ? Non, ca serait pas systématique. Alors lancer 100 fois 60 fois 1D6 et vérifier que dans 50% des cas j&#39;ai bien 10 fois chaque chiffre ?</p>
<p>En matière d&#39;aléatoire, les statistiques ne nous donnent qu&#39;une certitude : plus j&#39;effectue un même tirage (lancer un dé, une pièce, tirer une boule d&#39;un sac,…) et plus le résultat va se rapprocher de la distribution théorique espérée.</p>
<p>Distribution
Le cœur des tests statistiques ce sont les distributions. Une distribution ce n&#39;est ni plus ni moins qu&#39;une valeur avec une autre valeur en face qui dit dans quelle proportion je devrais la trouver si j&#39;effectue mon operation un million de fois, 100 milllions de fois, 100 000 milliards de fois…</p>
<p>Cela peut prendre 2 formes :</p>
<p>Un tableau qui recense toutes les valeurs et met en face la proportion attendue</p>
<table>
<thead>
<tr>
<th>Valeur</th>
<th>Probabilité</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>1/6</td>
</tr>
<tr>
<td>2</td>
<td>1/6</td>
</tr>
<tr>
<td>3</td>
<td>1/6</td>
</tr>
<tr>
<td>4</td>
<td>1/6</td>
</tr>
<tr>
<td>5</td>
<td>1/6</td>
</tr>
<tr>
<td>6</td>
<td>1/6</td>
</tr>
</tbody></table>
<p>Ou une fonction qui vous dit très précisemment pour chaque nombre (de son domaine) la proportion de valeur autour de ce nombre (c&#39;est en réalité plus compliqué que ça mais ce n&#39;est pas le sujet aujourd&#39;hui)</p>
<p><img src="https://blog.cepcam.fr/backend/uploads/eq_765px_130359aacd.png" alt="eq_765px.png"></p>
<p>Dans le cas qui nous intéresse on a juste besoin du tableau de nombre, qui est la &quot;distribution d&#39;un dé à 6 faces non biaisé&quot;. Il va donc falloir trouver un test qui vérifie que la distribution qu&#39;on obtient avec un nombre suffisamment grand de lancer est proche de la distribution espérée.</p>
<h1>χ²</h1>
<p>Heureusement,<a href="https://fr.wikipedia.org/wiki/Test_du_%CF%87%C2%B2">ce test là</a> est un test bien connu et maitrisé en statistique, c&#39;est même l&#39;un des premiers que vous apprenez, et s&#39;appelle le test du chi-squared. La page wikipedia vous en dira plus mais elle un peu rude, même si elle donne précisemment le dé à 6 faces qui nous interesse comme exemple d&#39;application.</p>
<p>Sans rentrer dans les détails de la démonstration, qui peut être difficile, voyons au moins le raisonnement et comment l&#39;utiliser en tant que dev. La première utilité à noter c&#39;est que le test du chi-squared vous donne pour n&#39;importe quelle distribution un nombre et un seul. C&#39;est particulièrement pratique pour nos tests puisqu&#39;on va pouvoir lancer nos dés virtuels des milliers fois et réduire tous ces lancers à un seul nombre, puis décider quelle valeur notre test attend pour ce nombre.</p>
<p>Je met le raisonnement derrière ce nombre pour celles et ceux que ca intéressent</p>
<ol>
<li>On connait la loi qui régit le nombre de 1 ( et de 2, et de 3, et de 4...) que vous allez obtenir en lancant 1 million de fois un dé à 6 faces : c&#39;est la même que celle de pile ou face. En effet, à chaque tirage vous avez 1 chance sur 6 d&#39;obtenir un 1 et 5 chances sur 6 de NE PAS obtenir un 1. Pareil pour les autres valeurs.</li>
<li>Si considère donc chaque tirage comme &quot;obtenir un 1 ou ne pas obtenir un 1&quot; , on a une formule qui nous dit combien on aura de 1 à la fin, de 2, de 3 etc…</li>
<li>Evidemment on sait tous que en moyenne on aura 1/6 de chaque mais la loi ci dessus est beaucoup plus puissante, elle nous donne la probabilité qu&#39;on ait a peu pres 10 000 fois le nombre 5 si on fait 60 000 lancer mais aussi la probabilité qu&#39;on l&#39;ait à peu pres 6000 fois, à peu pres 2000 fois, etc. Car souvenez-vous que meme si évènement se produit en moyenne 10000 fois sur 60000, ça ne veut pas du tout dire que il se produira 10000 fois à chaque fois que vous faites 60000 lancers. Le point important ici est que le compte de chaque valeur suit une distribution Normale (parfois appelée Gaussienne)</li>
<li>Il se trouve qu&#39;une autre loi, qui sert de titre à ce paragraphe, vous donne la valeur espéré des comptes, en gros, de plusieurs variables suivant une loi gaussienne, soit exactement notre cas !
Bref, comme on a eu des cours de statistiques, on connait une loi qui nous dit quelle valeur espérer si je fais la somme des carrés (<em>les carrés permettent de faciliter certaines operations mathématiques comme la dérivation, vous tracassez pas</em>) de la difference entre ce que j&#39;observe et ce que j&#39;espere.</li>
</ol>
<p>Dont acte</p>
<pre><code>const nRoll = 60000; // On lance le dé un nombre suffisamment grand de fois
const valueCount = new Array(faces).fill(0); // Au début , chaque nombre est obtenu zero fois

for (let i = 0; i &lt; nRoll; i++) { // On va faire 60 000 jets virtuelles
  const r = myCup.roll(); // On note le résultat
  valueCount[r - 1]++; // On rajouter &quot;+1&quot; dans la case correspondante ( &#39;0ème&#39; case pour le résultat 1 et &#39;5ème&#39; case poru le résultat 6)
}

/** Ok now go chi squared */
const valuesExpected = new Array(faces).fill(nRoll / faces); // Notre distribution idéale POUR UN DE NON BIAISE serait de 1/6 de 60 000 pour chaque valeur de dé

let chiSquared = 0;
for (let i = 0; i &lt; faces; i++) {    // Pour chaque valeur possible de dé
  const a = (valueCount[i] - valuesExpected[i]) ** 2; // on mesure la difference entre le nombre de fois où on l&#39;a vue et le nombre de fois qu&#39;on aurait espéré la voir, et on met au carré
  chiSquared += a / (nRoll / faces); // on divise par la le nombre de fois espéré (pour normaliser la somme) puis on additionne au total
}
const endTime: number = performance.now(); // Tant qu&#39;on y est on mesure aussi le temps d&#39;exécution
const elapsedTime = endTime - startTime;
expect(elapsedTime).toBeLessThan(200);
expect(chiSquared).toBeLessThan(maxChisquared);   // et enfin on vérifie que notre chisquared reste inférieur à une certaine valeur standard des statistiques.
</code></pre>
]]></description>
            <link>https://blog.com/articles/36</link>
            <guid isPermaLink="false">https://blog.com/articles/36</guid>
            <pubDate>Mon, 29 Jun 2026 15:08:29 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Coder Donjons & Dragons... en typescript ?]]></title>
            <description><![CDATA[<p>J&#39;ai commencé, encore, un nouveau projet.</p>
<h1>Donjons et Dragons, en typescript</h1>
<p>Ainsi que je le disais <a href="https://bsky.app/profile/did:plc:77kictovuv7go7f3xzflg4xu/post/3m4ll723o7k22">sur le réseau social Bluesky</a>, je me suis mis en tête à l&#39;occasion de la mise à jour des règles de Donjons et Dragons en version 5.5 de voir si je pouvais coder une partie de celles-ci, sans la partie graphique, en Typescript.</p>
<p>Donjons &amp; Dragons est un jeu de rôle, c&#39;est à dire un ensemble de règles, plus ou moins complexes, permettant de simuler un univers fictif ainsi que la description de l&#39;univers en question : ses pays, ses différentes formes de vies, son économie,... Ce n&#39;est sans doute pas <a href="https://monolithedition.com/portfolio/capitaine-vaudou/">mon jeu de rôle préféré</a> mais il a l&#39;avantage de laisser peu de places à l&#39;interprétation dans ses règles, assez bien formalisées et relativement cohérentes.</p>
<p>Quand à typescript, il s&#39;agit d&#39;un langage de programmation à l&#39;histoire un peu particulière puisqu&#39;il n&#39;existe que pour combler les défauts d&#39;un autre langage déjà existant mais perclus de défauts, le javascript. Imaginez ça comme un ajout de mots clés au langage, que vous avez le droit ou pas d&#39;utiliser mais qui, quand vous le faites, rend tout plus formel.</p>
<p>Pour des raisons que nous allons expliquer plus loin.</p>
<h1>Mais c&#39;est quoi le travail de développeur et développeuse au juste ?</h1>
<p>Sans doute que pour les gens dont ne c&#39;est pas le métier, la principale activité d&#39;une personne qui développe, qu&#39;on appelera désormais &quot;developpeureuse&quot; par souci d&#39;inclusion, c&#39;est d&#39;écrire des lignes de code, ce qui est en en grande partie vraie.</p>
<p>Quand on débute, la maitrise du langage informatique, voir de plusieurs, représente la plus grosse difficulté et l&#39;activité sur laquelle on passe le plus de temps, à l&#39;instar de la dessinatrice débutante qui doit se concentrer pleinement pour dessiner une guerrière à cheval chargeant une automobile vue de 3/4. Mais avec la pratique apparait le vrai métier de développeureuse : la modélisation.</p>
<p>Plus on avance et plus le métier consiste à recevoir une suite d&#39;instructions en langage naturel, imprécises et ouvertes à l&#39;interprétation, émises par des responsables produits, dirigeant·es de startup ou chef·fes de projet, pour les convertir en règles beaucoup plus strictes, formelles et surtout déterministes, qui prendront la forme de ligne de code qu&#39;on tapera nous même ou confiera à une personne encore au stade de l&#39;apprentissage de la technique de codage.</p>
<p>La capacité d&#39;abstraction est une compétence commune à beaucoup de profession scientifiques ou créatives. Elle consiste, à mon avis, à saisir ce qui est la quintessence d&#39;une chose, ce à quoi on peut la réduire au minimum sans trahir sa nature. Et pour le coup, je me permettrais de citer une célébrité connue parce que je trouve que ça colle parfaitement :</p>
<blockquote>
<p>La perfection est atteinte, non pas lorsqu&#39;il n&#39;y a plus rien à ajouter, mais lorsqu&#39;il n&#39;y a plus rien à retirer.</p>
</blockquote>
<p><em>Probablement Antoine de Saint-Exupéry</em></p>
<h1>Des vertus du formalisme</h1>
<p>C&#39;est sans doute le propre des sciences, et peut être en partie de l&#39;Art, de chercher, pour toute choses et tout phénomène, comment le réduire à sa forme la plus élémentaire tout en expliquant et reproduisant un maximum des observations qui en ont été ou en seront faites. C&#39;est aussi ce que certains et certaines d&#39;entre nous font en informatique et que j&#39;appelais plus haut &quot;modéliser&quot;, décrire de la manière la plus succinte, mais qui reste fonctionelle pour le but recherché, les choses.</p>
<p>Ainsi par exemple, &quot;un site web où l&#39;utilisateur peut lire mes bd&quot; deviendra &quot;des listes d&#39;images ordonnées, listes elles mêmes numérotées par date&quot; puis</p>
<pre><code>interface BdPage {
  images: string[];     // une image c&#39;est juste une url donnant son emplacement.
  date: Date;
}

interface blog {
    pages: BdPages[];
}
</code></pre>
<p>et voilà ! vous avez tout ce qui faut pour faire un blog BD !</p>
<h1>Types.</h1>
<p>Revenons brièvement sur cette histoire de Typescript. Le web moderne repose pour beaucoup sur un langage, le dénommé javascript, qui a d&#39;après la légende était conçu à la va vite. Ainsi, entre autre reproche qu&#39;on lui fait, celui ci ne possède pas réellement de système de typage de ses variables, problème corrigé par un autre langage qui vient s&#39;y greffer, le Typescript.</p>
<p>Une partie du métier de dévelopeureuse est justement de choisir comment décrire chaque élement qui va composer notre application. Et décrire, c&#39;est typer. Voyons ça avec mon exemple de Donjons &amp; Dragons et demandons nous ce qu&#39;est un jet de dés au juste :</p>
<pre><code>import constants from &quot;@stdio/constant&quot;;

import constants from &quot;@stdio/constant&quot;;

interface Die {
  dieValue: number;
}

interface DiceCupTemplate {
  dice: Die[];
  modifier?: number;
  roll(): number;
}

/**
 *  DiceCup is a cup with some dices, only the polyhedral ones,
 *  and maybe a modifier ( a number that add at the end )
 *  It&#39;s created from a classic DND string like &quot;1D8 + 4&quot;.
 *
 */
class DiceCup implements DiceCupTemplate {
  dice: Die[] = [];
  modifier?: number;

  /**
   * constructor is a little bit complex because we parse string
   * First we split on the &#39;+&#39;
   * then, each element may be a number or a dice
   * It&#39;s a dice if splitting it on the D gives 2 elements
   */
  constructor(diceDescriptor: string) {
    //1D6, 1D6+9 etc
    const itemList: string[] = diceDescriptor.replace(/\s/g, &quot;&quot;).split(&quot;+&quot;);

    for (let item of itemList) {
      const maybeADie: string[] = item.toLowerCase().split(&quot;d&quot;);

      if (maybeADie.length === 1) {
        const c = parseInt(maybeADie[0]);

        if (!isNaN(c)) {
          this.modifier = c;
        }
      }

      if (maybeADie.length === 2) {
        const dieCount: number = parseInt(maybeADie[0]);
        const dieValue: number = parseInt(maybeADie[1]);

        if (!isNaN(dieCount) &amp;&amp; !isNaN(dieValue)) {
          if (constants.polyhedralDieValues.includes(dieValue)) {
            for (let i = 0; i &lt; dieCount; i++) {
              this.dice.push({ dieValue } as Die);
            }
          }
        }
      }
    }
  }

  static getRandomIntInclusive(min: number, max: number) {
    const randomBuffer = new Uint32Array(1);

    window.crypto.getRandomValues(randomBuffer);

    let randomNumber = randomBuffer[0] / (0xffffffff + 1);

    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(randomNumber * (max - min + 1)) + min;
  }
  roll(): number {
    let total = 0;
    for (let die of this.dice) {
      total += DiceCup.getRandomIntInclusive(1, die.dieValue);
    }

    if (this.modifier) {
      total += this.modifier;
    }

    return total;
  }
}

export default DiceCup;
</code></pre>
<p>Dans le jeu Donjons &amp; Dragons, un jet de dé consiste à lancer un ou plusieurs dés polyédriques ( restreints aux polyèdres réguliers plus le dé à 100 faces qu&#39;on peut simuler avec un dé à 10 faces) et à y ajouter un modificateur pour obtenir un nombre entier.</p>
<p>Un &quot;jet de dé&quot; c&#39;est donc :</p>
<ul>
<li><p>Une liste de 0, 1 ou plus dés,</p>
</li>
<li><p>0 ou 1 nombre entier ( le modificateur),</p>
</li>
<li><p>Une méthode &quot;lancer&quot; (roll en anglais ) qui retourne en entier dépendant des dés lancer
et un dé c&#39;est :</p>
</li>
<li><p>un nombre entier appartenant à l&#39;ensemble 4,6,10,12,20</p>
</li>
</ul>
<p>De plus, le jeu propose une formalisation de la description d&#39;un lancer de dé sous la forme &quot;2D6&quot;,&quot;1D20&quot;, &quot;2D6+1D4+10&quot;. On rajoute donc la règle</p>
<pre><code>Une description d&#39;un lancer de dé est une suite de 0, 1 ou plus élèments séparés par le caractères &quot;+&quot;. Chaque éléments est soit sous la forme d&#39;un entier, soit sous la forme de 2 entiers séparés par la lettre &quot;D&quot;
</code></pre>
<p>Et boum. Vous voilà à inventer une grammaire et écrire un analyseur syntaxique pour déchiffre ( &quot;parse&quot;) cette grammaire.
Bien qu&#39;en apparence trivial, ce travail est déjà une énorme suite de choix et de simplifications. Après tout, j&#39;aurais très bien pu décrire un lancer de dés comme un ensemble de polyhèdres non élastiques munis d&#39;une vitesse initiale et d&#39;un moment cinétique et soumis aux lois de la gravité mais pour ce jeu là en particulier, voir un dé comme un nombre entier muni d&#39;une méthode &quot;lancer&quot; est suffisant (je connais <a href="https://laregledujeu.fr/produit/dungeon-fighter-2eme-edition/">au moins un jeu</a> pour lequel ce serait nécessaire par contre)</p>
<p>Vous aurez évidemment remarqué que pour l&#39;instant on ne s&#39;est pas préoccupé de décrire COMMENT obtenir notre nombre entier à partir de la description de l&#39;objet &quot;lancer de dés&quot; (Vous pouvez cependant lire le code en détail pour voir comment). Nous nous sommes juste demander &quot;de quoi a ton besoin pour notre simulation&quot; et &quot;qu&#39;est ce qui décrit ce dont on a besoin&quot;. Le boulot ensuite sera d&#39;écrire ça sous forme de langage informatique et c&#39;est là qu&#39;on retrouvera la compétence qu&#39;on prête aux dévelopeureuses : écrire du code</p>
<pre><code>// Un dé c&#39;est
interface Die {
  dieValue: number; // Juste un nombre ( Typescript ne fait pas de différence entre nombres flottants, entiers etc)
}
// Un jet de dé c&#39;est :
interface DiceCupTemplate {
  dice: Die[]; // Une liste de dé
  modifier?: number; //  un nombre entier
  roll(): number; // et une méthode roll() qui retourne un entier, sans doute à partir de la liste de dé et du modificateur
}
// Pour créer un jet de dé, on fournit une chaine de caractères
  constructor(diceDescriptor: string)
  [...]
</code></pre>
]]></description>
            <link>https://blog.com/articles/16</link>
            <guid isPermaLink="false">https://blog.com/articles/16</guid>
            <pubDate>Mon, 29 Jun 2026 14:59:09 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Distribuer son contenu Numérique ?]]></title>
            <description><![CDATA[<p>J&#39;ai commencé, encore, un nouveau projet.</p>
<h2>Distribution de PDF</h2>
<p>Je ne suis pas suffisamment compétent ni informé pour savoir si c&#39;est viable &quot;commercialement&quot; mais en l&#39;espace de quelques jours, sans doute en partie parce que j&#39;y prétais une oreille attentive, des artistes, autrices et auteurs de bd particulièrement, ont évoqués autour de moi l&#39;idée de mettre leur contenu sous forme numérique en téléchargement, gratuitement ou en échange d&#39;un prix libre. Je me suis demandé quelle forme ca pouvait prendre techniquement. Vous pouvez m&#39;écouter en train d&#39;y réflechir ( et commencer à coder ) sur la vidéo suivante, issue de <a href="https://twitch.tv/cepcam">ma chaîne twitch</a></p>
<h2>Fonctionnalités, problèmes</h2>
<p>Quand je commence un projet qui à vocation à être réellement utilisé ( et donc pas juste à tourner sur un pc en local avec 10 utilisateurices maximum ) j&#39;aime bien commencer par lister clairement :</p>
<ul>
<li>à quoi ça sert, pour chaque intervenant,</li>
<li>de quel problème faut il se prémumnir
Ainsi ici :</li>
<li>Les artistes veulent déposer leur pdf sur un service et permettre à leurs lecteurices de payer une petite somme</li>
<li>les lecteurices veulent télécharger ( et lire ) le pdf pour lequel ils ont payé
Mais :</li>
<li>A priori, l&#39;artiste veut éviter que le lien de téléchargement, acheté une seule fois, ne soit partagé</li>
<li>L&#39;artiste, et son développeur, ne veulent surtout pas garder de numeros de carte bleues ou données personnelles dans leurs bases de données à part le stricte nécessaire</li>
<li>Il faut que le lecteur, ou la lectrice, recoivent l&#39;url de download par email plutôt que d&#39;être redirigé directement après achat vers une page de download dont il, elle pourrait oublier ou perdre le lien</li>
</ul>
<h2>Architecture</h2>
<p>Cela me conduit une architecture qui ressemblerait à quelque chose comme ça, avec 3 élèments notables et importants :</p>
<ul>
<li>les urls de donwload sont signées, assurant ainsi qu&#39;elles ont bien été autorisées ET qu&#39;elles sont uniques à l&#39;email de la personne qui a payé.</li>
<li>Dès son départ, l&#39;état de la transaction est suivi en BDD et évolue selon la sequence CREEE -&gt; DEMANDEE -&gt; ECHOUEE ou TERMINEE. Le status &quot;DEMANDEE&quot; permet entre autre de suivre les downlaods qui auraient démarrés mais n&#39;aurait jamais pu aboutir pour quelque raison que ce soit.</li>
<li>Très important : le paiement n&#39;est rééllement capturé ( c&#39;est à dire effectif ) que si le download s&#39;est bien terminé. Cela fait porter le risque sur l&#39;artiste de voir des paiements effecctué mais jamais &quot;consommés&quot; mais cela évite les demandes remboursements massives suite à un problème techniques, demandes de remboursements qui ont un coût pour le vendeur
<img src="https://blog.cepcam.fr/backend/uploads/seq_dwnld_6279d144da.png" alt="seq_dwnld.png"></li>
</ul>
<p>Et c&#39;est sur ces bases que l&#39;on attaque le codage , dont vous pouvez voir une partie dans la vidéo ci dessus.</p>
]]></description>
            <link>https://blog.com/articles/6</link>
            <guid isPermaLink="false">https://blog.com/articles/6</guid>
            <pubDate>Mon, 29 Jun 2026 14:54:06 GMT</pubDate>
        </item>
    </channel>
</rss>