<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://paguielng.github.io/mdb2/feed.xml" rel="self" type="application/atom+xml" /><link href="https://paguielng.github.io/mdb2/" rel="alternate" type="text/html" /><updated>2026-03-26T17:11:12+00:00</updated><id>https://paguielng.github.io/mdb2/feed.xml</id><title type="html">Le Garage Maker</title><subtitle>I build stuff... sometimes in the right order.</subtitle><author><name>Paguiel NGANJI</name><email>paguiel.nganji-mucyo@etu.iut-tlse3.fr</email></author><entry><title type="html">Arduino Rocket Guidance</title><link href="https://paguielng.github.io/mdb2/posts/2014/08/blog-post-3/" rel="alternate" type="text/html" title="Arduino Rocket Guidance" /><published>2026-03-09T00:00:00+00:00</published><updated>2026-03-09T00:00:00+00:00</updated><id>https://paguielng.github.io/mdb2/posts/2014/08/blog-post-3</id><content type="html" xml:base="https://paguielng.github.io/mdb2/posts/2014/08/blog-post-3/"><![CDATA[<p>Rocket guidance can be achieved 2 ways, thrust vectoring and fin angling. The way I am guiding my rocket is by using thrust vectoring.
<a href="https://www.instructables.com/Arduino-Rocket-Guidance/?utm_source=Pinterest&amp;utm_medium=organic">Arduino Rocket Guidance : 7 Steps - By Coolnventions</a></p>

<p>The way I am guiding my rocket is by using thrust vectoring. Basically, an Arduino with a gyroscope and an accelerometer tell servo motors which way to angle the engine, and the rocket will move to the opposite of the engine’s thrust vector. Lets get this show started with some material lists!</p>

<h2 id="step-1-material-list">Step 1: Material List</h2>
<p>This section should give you a basic idea about what you will need, more details will be explained in future steps</p>
<ol>
  <li>Power distro board (Custom Made)</li>
  <li>25 inch Aluminum billet or 3/8 inch basswood (For the chassis)</li>
  <li>Rocket Motor</li>
  <li>MPU6050 6 axis gyro chip</li>
  <li>Arduino</li>
  <li>laser cutter</li>
  <li>Computer</li>
  <li>Metal Gear Servos</li>
</ol>

<h2 id="step-2-make-the-power-distro-board">Step 2: Make the Power Distro. Board</h2>
<p>Its critical to save weight on a rocket, and the power distro. board will take power from a 11v lipo battery and distribute it to the servo motors and to the arduino/sensors. Using the diagram i posted, make a distro board.</p>

<h2 id="step-3-wire-the-gyro-to-the-arduino">Step 3: Wire the Gyro to the Arduino</h2>

<p>The gyroscope has to be wired to the arduino in a specific way for it to work/be read. Since this is a fairly cheap module, no directions were provided and I had to figure it out myself. Using the pictures, make a cable for the gyroscope.</p>

<h2 id="step-4-make-the-thrust-vectoring-frame">Step 4: Make the Thrust Vectoring Frame</h2>

<p>The thrust vectoring frame must be powerful enough to take the rocket motor’s thrust and not break. For this reason I went with a custom plasma cut aluminum frame, although if you pick a smaller engine, you could go with a wooden one.</p>

<p>The 2 inner rectangles are going to be used to house the servo motors, while the outer circle moves in the x axis and the inner circle moves in the y axis. The rocket engine will sit in the inner circle. I lost the laser cutting files for this piece so you might have to piece it together yourself</p>

<p class="notice"><strong>Important!</strong> Since the data is parsed as JSON <em>all</em> of the keys will need to be quoted for the plot to render. The use of a tool like <a href="https://jsonlint.com/">JSONLint</a> to check syntax is highly recommended.</p>

<h2 id="step-5-attach-servos-to-the-frame">Step 5: Attach Servos to the Frame</h2>

<p>The servo motors I am using are metal geared and shave a fairly fast movement time (critical to rockets). The servos are attached to rods, which connect to both the inner and outer circle. I had to epoxy the servo motors in because they kept coming loose.</p>

<h2 id="étape-6-make-the-electronics-bay">Étape 6 : Make the Electronics Bay</h2>

<p>The electronics bay will house the arduino and power board, along with the battery, and will keep these items safe from the rocket’s thrust. You have to be creative here and I made mine so I could slide a tube over it for launch</p>

<h2 id="step-7-programming">Step 7: Programming</h2>
<p>The code here will let the rocket fly straight up without fins using artificial stabilization, great for the first test flight!</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gh">#include "Wire.h"       // allows communication to i2c devices connected to arduino</span>
<span class="gh">#include "I2Cdev.h"     // I2Connection library (communication to serial port)</span>
<span class="gh">#include "MPU6050.h"    // IMU library</span>
<span class="gh">#include "Servo.h"      // servo control library</span>
 
MPU6050 mpu; //defines the chip as a MPU so it can be called in the future
 
int16_t ax, ay, az;  // x y z orientation values from accelerometer
int16_t gx, gy, gz;  // x y z orientation values from gyrscope
/////////////////////////////////////////////////////////////////////////////////////// 
Servo outer; 
Servo inner;
///////////////////////////////////////////////////////////////////////////////////////
int valo;     // outer val
int prevValo; // outer prev val
///////////////////////////////////////////////////////////////////////////////////////
int vali;  //inner val
int prevVali; //outer prev val
/////////////////////////////////////////////////////////////////////////////////////// 
//initializes the IMU
void setup() 
{
    Wire.begin(); 
    Serial.begin(38400); 
 
    Serial.println("Initialize MPU");
    mpu.initialize();
    Serial.println(mpu.testConnection() ? "Connected" : "Connection failed"); 
    outer.attach(9); //servo on pin 9 for large ring y
    inner.attach(10);//servo on pin 10 for small ring x
}
/////////////////////////////////////////////////////////////////////////////////////// 
void loop() 
{
    mpu.getMotion6(&amp;ax, &amp;ay, &amp;az, &amp;gx, &amp;gy, <span class="ni">&amp;gz);</span> 
 
    valo = map(ax, -17000, 17000, 179, 0);
    if (valo != prevValo)
    {
        outer.write(valo); 
        prevValo = valo; 
    }
    
     vali = map(ay, -17000, 17000, 179, 0);
    if (vali != prevVali)
    {
        inner.write(vali); 
        prevVali = vali; 
    }
}
///////////////////////////////////////////////////////////////////////////////////////

</code></pre></div></div>
<!-- 
<table>
<tr>
<td>
  <a href="https://github.com/paguielng/mdb2/blob/master/files/FBNZ04FI194496R/FBNZ04FI194496R.ino">
    <img src="https://github.com/paguielng/mdb2/blob/master/files/download_code.png?raw=true" alt="Télécharger sketch_jan21b.ino" width="600">
  </a>
</td>
</tr>
</table>
 -->
<p class="notice"><strong>Important!</strong> Since the data is parsed as JSON <em>all</em> of the keys will need to be quoted for the plot to render. The use of a tool like <a href="https://jsonlint.com/">JSONLint</a> to check syntax is highly recommended.</p>]]></content><author><name>Paguiel NGANJI</name><email>paguiel.nganji-mucyo@etu.iut-tlse3.fr</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[Rocket guidance can be achieved 2 ways, thrust vectoring and fin angling. The way I am guiding my rocket is by using thrust vectoring. Arduino Rocket Guidance : 7 Steps - By Coolnventions]]></summary></entry><entry><title type="html">Slime Soccer number</title><link href="https://paguielng.github.io/mdb2/posts/2012/08/blog-post-4/" rel="alternate" type="text/html" title="Slime Soccer number" /><published>2025-09-15T00:00:00+00:00</published><updated>2025-09-15T00:00:00+00:00</updated><id>https://paguielng.github.io/mdb2/posts/2012/08/blog-post-4</id><content type="html" xml:base="https://paguielng.github.io/mdb2/posts/2012/08/blog-post-4/"><![CDATA[<p>Un jeu de football 2D basé sur la physique mettant en scène deux slimes qui s’affrontent sur un terrain bleu. Ce projet est une réinterprétation fidèle du classique jeu de navigateur original créé par Quin Pendragon, développée avec React et Canvas. <a href="https://rxeus.netlify.app/">Cliquez ici pour jouer dès maintenant</a></p>

<h1 id="vue-densemble">Vue d’ensemble</h1>
<p><strong>Slime Soccer</strong> est un jeu arcade rétro qui combine des mécaniques de physique réalistes avec une jouabilité simple mais profonde. Deux joueurs contrôlent des créatures gélatineuses (slimes) dans le but de marquer des buts en propulsant une balle dans les filets adverses. Le jeu propose plusieurs modes de jeu chronométrés et une interface intuitive.</p>

<h1 id="caractéristiques-principales">Caractéristiques principales</h1>

<h2 id="mécanique-de-jeu">Mécanique de jeu</h2>
<ul>
  <li><strong>Physique réaliste</strong> : Implémentation complète de la gravité, des rebonds et des collisions pour une expérience de jeu authentique</li>
  <li><strong>Contrôle des slimes</strong> : Les joueurs peuvent se déplacer horizontalement, sauter et interagir avec la balle de manière fluide</li>
  <li><strong>Système de scoring</strong> : Détection automatique des buts avec comptage en temps réel</li>
  <li><strong>Balle dynamique</strong> : La balle répond aux forces physiques, aux collisions avec les slimes et aux limites du terrain</li>
</ul>

<h2 id="modes-de-jeu">Modes de jeu</h2>
<p>Le jeu propose cinq durées de match différentes pour adapter le temps de jeu à vos préférences :</p>

<table>
  <thead>
    <tr>
      <th>Mode</th>
      <th>Durée</th>
      <th>Utilisation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1 Minute</td>
      <td>60 secondes</td>
      <td>Matchs rapides et intenses</td>
    </tr>
    <tr>
      <td>2 Minutes</td>
      <td>120 secondes</td>
      <td>Jeu équilibré et accessible</td>
    </tr>
    <tr>
      <td>4 Minutes</td>
      <td>240 secondes</td>
      <td>Matchs standard</td>
    </tr>
    <tr>
      <td>8 Minutes</td>
      <td>480 secondes</td>
      <td>Parties longues et stratégiques</td>
    </tr>
    <tr>
      <td>World Cup</td>
      <td>300 secondes</td>
      <td>Mode spécial (5 minutes)</td>
    </tr>
  </tbody>
</table>

<h2 id="interface-utilisateur">Interface utilisateur</h2>
<ul>
  <li><strong>Menu principal</strong> : Sélection facile des modes de jeu avec boutons clairs</li>
  <li><strong>Affichage du score</strong> : Visualisation en temps réel des scores des deux équipes</li>
  <li><strong>Chronomètre</strong> : Compte à rebours visible au centre de l’écran</li>
  <li><strong>Écran de fin</strong> : Affichage du gagnant avec option pour rejouer</li>
</ul>

<h1 id="contrôles">Contrôles</h1>
<p>Joueur de gauche (Slime cyan)
——</p>

<table>
  <thead>
    <tr>
      <th>Action</th>
      <th>Touche</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Déplacement gauche</td>
      <td><strong>A</strong></td>
    </tr>
    <tr>
      <td>Déplacement droit</td>
      <td><strong>D</strong></td>
    </tr>
    <tr>
      <td>Saut</td>
      <td><strong>W</strong></td>
    </tr>
  </tbody>
</table>

<h2 id="joueur-de-droite-slime-rouge">Joueur de droite (Slime rouge)</h2>

<table>
  <thead>
    <tr>
      <th>Action</th>
      <th>Touche</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Déplacement gauche</td>
      <td><strong>←</strong></td>
    </tr>
    <tr>
      <td>Déplacement droit</td>
      <td><strong>→</strong></td>
    </tr>
    <tr>
      <td>Saut</td>
      <td><strong>↑</strong></td>
    </tr>
  </tbody>
</table>

<h1 id="architecture-technique">Architecture technique</h1>

<h2 id="structure-du-code">Structure du code</h2>
<p>Le projet est construit autour d’un composant React monolithique (<code class="language-plaintext highlighter-rouge">SlimeSoccer</code>) qui gère l’ensemble de la logique du jeu. Voici les principaux éléments :</p>

<h2 id="état-du-jeu">État du jeu</h2>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">gameStateRef</span><span class="p">.</span><span class="nx">current</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">leftSlime</span><span class="p">:</span> <span class="p">{</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">vx</span><span class="p">,</span> <span class="nx">vy</span><span class="p">,</span> <span class="nx">color</span> <span class="p">},</span>
  <span class="na">rightSlime</span><span class="p">:</span> <span class="p">{</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">vx</span><span class="p">,</span> <span class="nx">vy</span><span class="p">,</span> <span class="nx">color</span> <span class="p">},</span>
  <span class="na">ball</span><span class="p">:</span> <span class="p">{</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">vx</span><span class="p">,</span> <span class="nx">vy</span> <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="constantes-de-physique">Constantes de physique</h2>

<table>
  <thead>
    <tr>
      <th>Constante</th>
      <th>Valeur</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">GRAVITY</code></td>
      <td>0.6</td>
      <td>Accélération gravitationnelle appliquée aux objets</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">SLIME_SPEED</code></td>
      <td>5</td>
      <td>Vitesse de déplacement horizontal des slimes</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">SLIME_JUMP_POWER</code></td>
      <td>-12</td>
      <td>Force initiale du saut (valeur négative = vers le haut)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">BALL_DAMPING</code></td>
      <td>0.99</td>
      <td>Amortissement de l’air (ralentissement progressif)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">BALL_BOUNCE_DAMPING</code></td>
      <td>0.8</td>
      <td>Perte d’énergie lors des rebonds</td>
    </tr>
  </tbody>
</table>

<h2 id="boucle-de-jeu">Boucle de jeu</h2>
<p>La boucle de jeu utilise <code class="language-plaintext highlighter-rouge">requestAnimationFrame</code> pour assurer une animation fluide à 60 FPS. Elle exécute deux étapes principales à chaque frame :</p>

<ol>
  <li><strong>Mise à jour de la physique</strong> (<code class="language-plaintext highlighter-rouge">updatePhysics</code>) : Traite les entrées clavier, met à jour les positions et vérifie les collisions</li>
  <li><strong>Rendu</strong> (<code class="language-plaintext highlighter-rouge">draw</code>) : Dessine tous les éléments du jeu sur le canvas</li>
</ol>

<h2 id="système-de-collision">Système de collision</h2>
<p>Le jeu implémente plusieurs types de collisions :</p>

<ul>
  <li><strong>Collision avec les limites</strong> : Les slimes et la balle ne peuvent pas sortir du terrain</li>
  <li><strong>Collision avec le sol</strong> : Les slimes et la balle rebondissent sur le sol gris</li>
  <li><strong>Collision slime-balle</strong> : Détection de collision circulaire avec transfert de vélocité</li>
  <li><strong>Détection de but</strong> : La balle qui touche le sol dans les zones de but marque un point</li>
</ul>

<h2 id="rendu-graphique">Rendu graphique</h2>
<p>Le jeu utilise l’API Canvas 2D pour le rendu. Les éléments visuels incluent :</p>

<ul>
  <li><strong>Terrain</strong> : Fond bleu (ciel) avec zone grise (sol)</li>
  <li><strong>Slimes</strong> : Demi-cercles avec yeux pour l’expression</li>
  <li><strong>Balle</strong> : Cercle jaune doré</li>
  <li><strong>Buts</strong> : Grille de carrés blancs représentant les filets</li>
</ul>

<h1 id="installation-et-utilisation">Installation et utilisation</h1>

<h2 id="prérequis">Prérequis</h2>
<ul>
  <li>Node.js 18+ ou version supérieure</li>
  <li>npm ou pnpm comme gestionnaire de paquets</li>
</ul>

<h2 id="installation">Installation</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Cloner le dépôt</span>
git clone &lt;repository-url&gt;
<span class="nb">cd </span>slime-soccer-game

<span class="c"># Installer les dépendances</span>
npm <span class="nb">install</span>
<span class="c"># ou</span>
pnpm <span class="nb">install</span>
</code></pre></div></div>

<h2 id="lancer-le-jeu">Lancer le jeu</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Mode développement</span>
npm run dev
<span class="c"># ou</span>
pnpm dev
</code></pre></div></div>

<p>Le jeu sera accessible à <code class="language-plaintext highlighter-rouge">http://localhost:3000</code> dans votre navigateur.</p>

<h2 id="construire-pour-la-production">Construire pour la production</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Créer une version optimisée</span>
npm run build
<span class="c"># ou</span>
pnpm build

<span class="c"># Prévisualiser la version de production</span>
npm run preview
<span class="c"># ou</span>
pnpm preview
</code></pre></div></div>

<h1 id="mécanique-de-physique-détaillée">Mécanique de physique détaillée</h1>

<h2 id="mouvement-des-slimes">Mouvement des slimes</h2>
<p>Les slimes sont contrôlés par le joueur via les touches directionnelles. Leur mouvement est limité à l’axe horizontal, tandis que la gravité affecte leur position verticale. Chaque slime peut sauter une seule fois tant qu’elle est en contact avec le sol.</p>

<h2 id="comportement-de-la-balle">Comportement de la balle</h2>
<p>La balle suit une physique réaliste avec les caractéristiques suivantes :</p>

<ul>
  <li><strong>Gravité</strong> : La balle accélère vers le bas à chaque frame</li>
  <li><strong>Amortissement de l’air</strong> : La vélocité horizontale diminue progressivement</li>
  <li><strong>Rebonds</strong> : Lorsque la balle touche une surface, sa vélocité est inversée et réduite par le coefficient d’amortissement</li>
  <li><strong>Transfert de momentum</strong> : Quand un slime frappe la balle, sa vélocité est transférée à la balle</li>
</ul>

<h2 id="détection-des-collisions">Détection des collisions</h2>
<p>La détection de collision slime-balle utilise une approche basée sur la distance. Si la distance entre le centre de la balle et le centre du slime est inférieure à la somme de leurs rayons, une collision est détectée. La réponse à la collision repositionne la balle et recalcule sa vélocité en fonction de l’angle de collision.</p>

<h1 id="dépannage">Dépannage</h1>

<h2 id="le-jeu-ne-démarre-pas">Le jeu ne démarre pas</h2>
<p>Vérifiez que vous avez installé toutes les dépendances avec <code class="language-plaintext highlighter-rouge">npm install</code> ou <code class="language-plaintext highlighter-rouge">pnpm install</code>. Assurez-vous également que vous utilisez une version compatible de Node.js (18+).</p>

<h2 id="les-contrôles-ne-répondent-pas">Les contrôles ne répondent pas</h2>
<p>Assurez-vous que la fenêtre du navigateur a le focus. Cliquez sur le canvas du jeu avant de commencer à jouer pour vous assurer que les événements clavier sont correctement capturés.</p>

<h2 id="le-jeu-est-saccadé-ou-lent">Le jeu est saccadé ou lent</h2>
<p>Vérifiez que votre navigateur n’exécute pas d’autres applications gourmandes en ressources. Fermez les onglets inutiles et essayez de relancer le jeu. Si le problème persiste, mettez à jour votre navigateur vers la dernière version.</p>

<h1 id="crédits">Crédits</h1>
<ul>
  <li><strong>Jeu original</strong> : Créé par Quin Pendragon (début des années 2000)</li>
  <li><strong>Remake</strong> : Hector Bennett</li>
  <li><strong>Réimplémentation React</strong> : Développé avec React 19 et Canvas 2D</li>
</ul>

<h1 id="contribution">Contribution</h1>
<p>Les contributions sont bienvenues ! Si vous souhaitez améliorer le jeu, veuillez :</p>

<ol>
  <li>Fork le dépôt</li>
  <li>Créer une branche pour votre fonctionnalité (<code class="language-plaintext highlighter-rouge">git checkout -b feature/ma-fonctionnalite</code>)</li>
  <li>Commit vos modifications (<code class="language-plaintext highlighter-rouge">git commit -m 'Ajouter ma fonctionnalité'</code>)</li>
  <li>Push vers la branche (<code class="language-plaintext highlighter-rouge">git push origin feature/ma-fonctionnalite</code>)</li>
  <li>Ouvrir une Pull Request</li>
</ol>

<h1 id="support">Support</h1>
<p>Pour toute question, bug ou suggestion, veuillez ouvrir une issue sur le dépôt GitHub du projet.</p>

<hr />

<p><strong>Dernière mise à jour</strong> : Janvier 2026</p>

<p><strong>Version</strong> : 1.0.0</p>]]></content><author><name>Paguiel NGANJI</name><email>paguiel.nganji-mucyo@etu.iut-tlse3.fr</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[Un jeu de football 2D basé sur la physique mettant en scène deux slimes qui s’affrontent sur un terrain bleu. Ce projet est une réinterprétation fidèle du classique jeu de navigateur original créé par Quin Pendragon, développée avec React et Canvas. Cliquez ici pour jouer dès maintenant]]></summary></entry><entry><title type="html">Blog Post number 2</title><link href="https://paguielng.github.io/mdb2/posts/2013/08/blog-post-2/" rel="alternate" type="text/html" title="Blog Post number 2" /><published>2013-08-14T00:00:00+00:00</published><updated>2013-08-14T00:00:00+00:00</updated><id>https://paguielng.github.io/mdb2/posts/2013/08/blog-post-2</id><content type="html" xml:base="https://paguielng.github.io/mdb2/posts/2013/08/blog-post-2/"><![CDATA[<p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>

<h1 id="headings-are-cool">Headings are cool</h1>

<h1 id="you-can-have-many-headings">You can have many headings</h1>

<h2 id="arent-headings-cool">Aren’t headings cool?</h2>]]></content><author><name>Paguiel NGANJI</name><email>paguiel.nganji-mucyo@etu.iut-tlse3.fr</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.]]></summary></entry><entry><title type="html">Blog Post number 1</title><link href="https://paguielng.github.io/mdb2/posts/2012/08/blog-post-1/" rel="alternate" type="text/html" title="Blog Post number 1" /><published>2012-08-14T00:00:00+00:00</published><updated>2012-08-14T00:00:00+00:00</updated><id>https://paguielng.github.io/mdb2/posts/2012/08/blog-post-1</id><content type="html" xml:base="https://paguielng.github.io/mdb2/posts/2012/08/blog-post-1/"><![CDATA[<p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>

<h1 id="headings-are-cool">Headings are cool</h1>

<h1 id="you-can-have-many-headings">You can have many headings</h1>

<h2 id="arent-headings-cool">Aren’t headings cool?</h2>]]></content><author><name>Paguiel NGANJI</name><email>paguiel.nganji-mucyo@etu.iut-tlse3.fr</email></author><category term="cool posts" /><category term="category1" /><category term="category2" /><summary type="html"><![CDATA[This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.]]></summary></entry></feed>