<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LilaDoc</title>
    <description>The latest articles on DEV Community by LilaDoc (@liladoc).</description>
    <link>https://dev.to/liladoc</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1121457%2Fdc5a4363-9e23-4593-8e10-8e435e6876d2.png</url>
      <title>DEV Community: LilaDoc</title>
      <link>https://dev.to/liladoc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/liladoc"/>
    <language>en</language>
    <item>
      <title>Déploiement d’Omnimor</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Thu, 20 Feb 2025 14:39:31 +0000</pubDate>
      <link>https://dev.to/liladoc/deploiement-domnimor-1fh2</link>
      <guid>https://dev.to/liladoc/deploiement-domnimor-1fh2</guid>
      <description>&lt;p&gt;Je viens de finir le déploiement d’Omnimor ! &lt;/p&gt;

&lt;p&gt;Ça fait un moment que j’entends parler de Docker, et rendre Omnimor disponible était l’occasion parfaite pour enfin plonger dedans. Au premier abord, certaines notions n’étaient pas évidentes, notamment la différence entre image et container. J’ai regardé la vidéo de Nana (&lt;a href="https://www.youtube.com/watch?v=3c-iBn73dDE&amp;amp;t=5173s" rel="noopener noreferrer"&gt;lien ici&lt;/a&gt;), et franchement, grosse recommandation. 👌 Après ça, tout était limpide !&lt;/p&gt;

&lt;h3&gt;
  
  
  Après la théorie, place à la pratique
&lt;/h3&gt;

&lt;p&gt;Une fois lancée, j’ai dû faire face à quelques points un peu flous :&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;La base de données : où et comment la gérer ?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;J’ai utilisé Postgres comme base de données et la question s’est vite posée : dois-je utiliser la base de données créée automatiquement par le conteneur Docker ?&lt;/p&gt;

&lt;p&gt;En gros, lorsqu’on lance un container avec Postgres, une base est automatiquement initialisée. J’ai hésité :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Est-ce une bonne pratique d’utiliser celle-ci directement ?&lt;/li&gt;
&lt;li&gt;Ou est-ce mieux de créer et gérer moi-même mes bases via des scripts d’initialisation ?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En regardant d’autres projets, j’ai remarqué que beaucoup utilisent directement la base fournie par Postgres dans le container. Du coup, j’ai suivi le mouvement, mais j’ai encore quelques doutes sur la gestion des données en production. Est-ce que c’est scalable ? Y a-t-il des pièges à éviter ? Si vous avez des retours d’expérience, ça m’intéresse !&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Les variables d’environnement : découverte totale&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Là, révélation : je ne savais pas vraiment ce qu’était un environnement. 😅&lt;/p&gt;

&lt;p&gt;Jusqu’ici, j’utilisais bien un fichier &lt;code&gt;.env&lt;/code&gt; pour éviter d’exposer mes variables sensibles (mots de passe, clés API, etc.), mais sans réellement comprendre leur portée ni comment elles fonctionnaient en profondeur. Du coup, quand il a fallu les intégrer dans Docker Compose et mes Dockerfiles, ça s’est un peu compliqué.&lt;/p&gt;

&lt;p&gt;Petit à petit, j’ai découvert qu’on pouvait passer les variables d’environnement directement dans &lt;code&gt;docker-compose.yml&lt;/code&gt;. Et franchement, c’est super pratique ! Ça permet aux utilisateurs de personnaliser facilement leur setup (par exemple, en définissant leurs propres credentials et accès à leur base de données) tout en gardant ces infos sécurisées et séparées du code.&lt;/p&gt;

&lt;p&gt;Et le bonus ? Ces variables d’environnement sont ensuite disponibles côté application, ce qui permet de configurer dynamiquement le comportement de l’app selon l’environnement (dev, test, prod…). Bref, un vrai game-changer pour rendre l’application plus modulable et plus pro ! &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Le reverse proxy : une option que j’ai mise de côté (pour l’instant)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;À un moment, je me suis demandé si je devais intégrer un reverse proxy (exemple NGINX) pour gérer les requêtes entre le frontend et le backend. J’étais curieuse de voir comment ça fonctionnait et si ça pouvait être utile dès maintenant.&lt;/p&gt;

&lt;p&gt;Finalement, pas besoin. J’ai décidé de rester focus sur l’essentiel : faire tourner Omnimor avec Docker sans rajouter trop de complexité. Mais c’est un sujet que j’aimerais creuser pour les prochaines versions !&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Cette première immersion dans Docker a été vraiment fun ! J’ai découvert plein de concepts et j’ai hâte d’aller plus loin, notamment sur la gestion avancée des bases de données et le déploiement en production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Et vous, vous faites comment pour gérer vos bases avec Docker ?&lt;/strong&gt;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Omnimor - Keep-up</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Wed, 05 Feb 2025 10:23:20 +0000</pubDate>
      <link>https://dev.to/liladoc/omnimor-keep-up-english-version-1eod</link>
      <guid>https://dev.to/liladoc/omnimor-keep-up-english-version-1eod</guid>
      <description>&lt;h1&gt;
  
  
  I recently finished &lt;em&gt;The Complete Web Development Bootcamp&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;Now, it's time to roll up my sleeves and practice. With that in mind, I set myself a challenge: to complete a project every two weeks. And why not share my experience! 😃  &lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0rdfdd7acy0gaga9b34x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0rdfdd7acy0gaga9b34x.jpg" alt="Image description" width="236" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, I started looking for some project ideas. At the same time, Omnivore was saying its goodbyes. So, why not rebuild Omnivore?  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Okay. The goal of the project was mainly to see where I stood after the bootcamp.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The question: &lt;em&gt;How far can I go in two weeks?&lt;/em&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Set objective&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rebuild Omnivore and integrate as many features as possible in two weeks.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;At that point, I thought:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"Okay Lila, how do you organize yourself?"&lt;/em&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;First thing first: what features matter the most to me in this project?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Render article&lt;/strong&gt;: improve readability and remove distractions
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read Later&lt;/strong&gt;: centralize and organize articles I want to keep or read later
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata&lt;/strong&gt;: optimize my reading time and organization
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI&lt;/strong&gt;: optimize my content consumption
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used &lt;strong&gt;Perplexity&lt;/strong&gt; to guide me in project management. And yeah, that was a first for me. I had the idea to separate the setup, back, front, and data parts, but honestly, it was a bit blurry. And I don't like blurry things.  &lt;/p&gt;

&lt;p&gt;So, with Perplexity, I created a plan with milestones. Things were already much clearer.  &lt;/p&gt;

&lt;p&gt;Coming from the medical field, if there's one thing I &lt;em&gt;do&lt;/em&gt; master, it's to-do lists.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;If you're not familiar with patient care projects, it's basically a big to-do list per patient that you update throughout the day based on the information you receive about them.&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, I feel much more comfortable and efficient when my tasks are well defined.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Development&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I progressed relatively smoothly through the setup and back-end. The main challenge was finding a scraper.  &lt;/p&gt;

&lt;p&gt;I dug around and found &lt;strong&gt;Readability/jsDom&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Readability&lt;/strong&gt; analyzes the DOM generated by &lt;strong&gt;JSDOM&lt;/strong&gt; to extract only the article from the given URL.
&lt;/li&gt;
&lt;li&gt;Reading the documentation, I saw that there was a security issue related to displaying HTML code from an external (and potentially malicious) source.
&lt;/li&gt;
&lt;li&gt;Hence the use of &lt;strong&gt;DOMPurify&lt;/strong&gt;, which cleans the code before displaying it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My API was ready. &lt;strong&gt;GO for the front!&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
And then... &lt;strong&gt;disaster struck!&lt;/strong&gt; 🤣  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What happened?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I wasn't clear on the design.  &lt;/p&gt;

&lt;p&gt;I wanted to replicate Omnivore, but in my own way, improvising as I went… &lt;strong&gt;Mistake!&lt;/strong&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why was this a mistake?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A little context: I love creative arts. Drawing, pottery, painting...  &lt;/p&gt;

&lt;p&gt;Except that my creative process is the complete opposite of my work process:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"full improv!"&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;And that's the problem.  &lt;/p&gt;

&lt;p&gt;I tackled my DOM like a blank canvas.  &lt;/p&gt;

&lt;p&gt;As a result, I started getting lost.  &lt;/p&gt;

&lt;p&gt;When I realized it, I took a break and went on &lt;strong&gt;Figma&lt;/strong&gt; to create a wireframe and put everything in order.  &lt;/p&gt;

&lt;p&gt;Finally, after some reflection, I decided to replicate Omnivore's exact design, given the ETA.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What I learned from this&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For my next project, I'll organize the front &lt;strong&gt;exactly like I did for the back&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;That means spending time on the objectives and setting up a &lt;strong&gt;detailed execution plan&lt;/strong&gt;.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;In the end&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In two weeks, I implemented a &lt;strong&gt;full-stack web application (React + Node.js)&lt;/strong&gt; that allows saving and reading articles from any URL.  &lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;frontend (React/Vite)&lt;/strong&gt; provides an interface to manage articles, while the &lt;strong&gt;backend (Express/PostgreSQL)&lt;/strong&gt; extracts relevant content from web pages using &lt;strong&gt;Readability&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to check it out, it's here.&lt;/strong&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key features&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Article extraction
&lt;/li&gt;
&lt;li&gt;Database storage
&lt;/li&gt;
&lt;li&gt;CRUD operations
&lt;/li&gt;
&lt;li&gt;Responsive interface
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What I learned from this project&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two weeks is short&lt;/strong&gt; 😅
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve project management&lt;/strong&gt; (&lt;em&gt;Creative process for the front? NO.&lt;/em&gt;)
&lt;/li&gt;
&lt;li&gt;Lots of new concepts to explore:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS variables in React&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker/Docker Compose&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Query&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IndexedDB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; 🤩
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Today, the project is available on &lt;a href="https://github.com/LilaDoc/Omnimor" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, and my next goal is to deploy it via &lt;strong&gt;Docker Compose&lt;/strong&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Onward to new adventures!&lt;/strong&gt; 🤩
&lt;/h3&gt;

</description>
    </item>
    <item>
      <title>Omnimor - Keep-up (French)</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Tue, 04 Feb 2025 09:36:05 +0000</pubDate>
      <link>https://dev.to/liladoc/omnimor-keep-up-202o</link>
      <guid>https://dev.to/liladoc/omnimor-keep-up-202o</guid>
      <description>&lt;p&gt;J’ai récemment fini &lt;a href="https://www.udemy.com/course/the-complete-web-development-bootcamp/?couponCode=KEEPLEARNING" rel="noopener noreferrer"&gt;The Complete Web Development Bootcamp&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
Maintenant, c'est le moment de se retrousser les manches et de pratiquer. Dans cette optique, je me suis lancé un défi : réaliser un projet toutes les deux semaines. Et pourquoi ne pas partager mon expérience ! 😃  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0rdfdd7acy0gaga9b34x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0rdfdd7acy0gaga9b34x.jpg" alt="Image description" width="236" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Je me suis donc mise à chercher quelques idées de projet. Au même moment, Omnivore tirait sa révérence. Du coup, pourquoi ne pas refaire Omnivore ?&lt;br&gt;&lt;br&gt;
Ok. Le but du projet, c'était principalement de savoir où j’en étais après le bootcamp. La question : Jusqu’où est-ce que je peux aller en deux semaines ?  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objectif fixé&lt;/strong&gt;: Refaire Omnivore et intégrer le maximum de features en deux semaines.  &lt;/p&gt;

&lt;p&gt;À partir de là, je me suis dit : "Ok Lila, comment tu t’organises ?"  &lt;/p&gt;

&lt;p&gt;First thing first : quelles features me tiennent à cœur dans le projet ?  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Afficher l'article : améliorer la lisibilité et supprimer les distractions
&lt;/li&gt;
&lt;li&gt;Gérer les articles : centraliser et organiser les articles que je souhaite conserver ou lire plus tard
&lt;/li&gt;
&lt;li&gt;Metadata : optimiser mon temps de lecture et mon organisation
&lt;/li&gt;
&lt;li&gt;Ai : optimiser ma consommation de contenu
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;J’ai utilisé Perplexity pour me guider dans la gestion de projet. Et ouais, c'était une première pour moi. J’avais dans l’idée de séparer la partie setup, back, front et data, mais concrètement, c'était un peu flou. Et je n'aime pas trop ça, le flou.&lt;br&gt;&lt;br&gt;
Du coup, avec Perplexity, j'ai fait un plan avec milestones. C’était déjà plus clair.&lt;br&gt;&lt;br&gt;
Venant du médical, s'il y a bien une chose que je maîtrise, ce sont les to-do listes.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si vous n’êtes pas familier avec les projets de soins, basiquement, c’est une big to-do liste par patient que tu mets à jour toute la journée en fonction des infos que tu reçois à propos de ce patient.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Donc, je suis beaucoup plus à l’aise et efficace lorsque j’ai mes tâches bien définies.  &lt;/p&gt;




&lt;h3&gt;
  
  
  Développement
&lt;/h3&gt;

&lt;p&gt;J’ai avancé relativement sans friction sur la partie setup et back-end. Le principal challenge était de trouver un scraper.&lt;br&gt;&lt;br&gt;
J’ai investigué pour trouver Readability/jsDom :  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Readability analyse le DOM généré par JSDOM pour en extraire uniquement l'article de l’URL fournie.
&lt;/li&gt;
&lt;li&gt;En lisant la doc, j'ai vu qu’il y avait une problématique de sécurité liée à l’affichage de code HTML d’une source externe et donc potentiellement malveillant.
&lt;/li&gt;
&lt;li&gt;D’où l’utilisation de DOMPurify, qui nettoie le code avant l’affichage.
Mon API était prête, GO pour le front !
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et là, c’est le drame ! 🤣&lt;br&gt;&lt;br&gt;
En fait, ce qu’il s’est passé, c'est que je n’étais pas claire sur le design. Je voulais reproduire Omnivore, mais à ma sauce, en improvisant au fur et à mesure… Erreur !  &lt;/p&gt;

&lt;p&gt;Pourquoi cette erreur ?&lt;br&gt;&lt;br&gt;
Petit contexte : j’aime les arts créatifs. Le dessin, la poterie, la peinture...  Sauf que mon processus créatif, c’est l’inverse complet de mon processus de travail : "full impro !" Et c’est là le souci. Je suis partie sur mon DOM comme sur une page blanche. Du coup, j’ai commencé à me perdre.&lt;br&gt;&lt;br&gt;
Quand je m’en suis rendu compte, j’ai fait une pause, et je suis allée sur Figma pour faire une maquette et mettre tout ça en ordre.&lt;br&gt;&lt;br&gt;
Finalement, après réflexion, je suis partie sur l’option de refaire le même design qu’Omnivore, au vu de l'ETA.  &lt;/p&gt;




&lt;h3&gt;
  
  
  Ce que j’en tire
&lt;/h3&gt;

&lt;p&gt;C'est que pour mon prochain projet, je ferai exactement comme pour le back en termes d’organisation.  C’est-à-dire passer du temps sur les objectifs et établir un plan d’exécution détaillé.  &lt;/p&gt;




&lt;h3&gt;
  
  
  Au final
&lt;/h3&gt;

&lt;p&gt;En deux semaines, j’ai implémenté une application web full-stack (React + Node.js) permettant de sauvegarder et lire des articles depuis n'importe quelle URL.  &lt;/p&gt;

&lt;p&gt;Le frontend (React/Vite) offre une interface pour gérer les articles, tandis que le backend (Express/PostgreSQL) extrait le contenu pertinent des pages web via Readability.&lt;br&gt;&lt;br&gt;
Si vous voulez aller jeter un coup d'œil, c'est &lt;a href="https://github.com/LilaDoc/ReadLater" rel="noopener noreferrer"&gt;ici&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Principales fonctionnalités  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extraction d'articles
&lt;/li&gt;
&lt;li&gt;Stockage en base de données
&lt;/li&gt;
&lt;li&gt;CRUD
&lt;/li&gt;
&lt;li&gt;Interface responsive
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Ce que j’ai retenu de ce projet
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deux semaines, c'est court 😅
&lt;/li&gt;
&lt;li&gt;Améliorer le project management. (Processus créatif pour le développement front : NO.)
&lt;/li&gt;
&lt;li&gt;Plein de nouvelles notions à découvrir : CSS variables dans React, Docker/Docker Compose, React Query, IndexedDB, sécurité… 🤩
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Aujourd’hui, le projet est disponible sur &lt;a href="https://github.com/LilaDoc/Omnimor" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; et mon prochain projet sera de faire un déploiement via Docker Compose.  &lt;/p&gt;

&lt;p&gt;En route vers l’aventure 🤩  &lt;/p&gt;

</description>
    </item>
    <item>
      <title>My First Server</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Sat, 16 Dec 2023 13:01:53 +0000</pubDate>
      <link>https://dev.to/liladoc/my-first-server-527c</link>
      <guid>https://dev.to/liladoc/my-first-server-527c</guid>
      <description>&lt;p&gt;Today I built my first server with Express.&lt;br&gt;
It made me look up for what are The Well Known Ports,&lt;br&gt;
The Registered Ports, and The Dynamic and Private Ports.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What rules did I learn so far from doing the Advent of Code? 🎄</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Tue, 12 Dec 2023 03:25:18 +0000</pubDate>
      <link>https://dev.to/liladoc/what-rules-did-i-learn-so-far-from-doing-the-advent-of-code-1in0</link>
      <guid>https://dev.to/liladoc/what-rules-did-i-learn-so-far-from-doing-the-advent-of-code-1in0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I am enjoying December and all the Christmas vibes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And what better Advent calendar than &lt;a href="https://adventofcode.com/2023/about" rel="noopener noreferrer"&gt;the Advent Of Code&lt;/a&gt;? I'm thankful to the creators because I've learned so much so far and it's exquisitely fun! 🫶🏽&lt;/p&gt;

&lt;p&gt;Here are some rules that I took from practicing the Advent Of Code. Maybe it could serve someone else.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you think you understood the subject, read it again.&lt;/li&gt;
&lt;li&gt;Avoid Global Variables.&lt;/li&gt;
&lt;li&gt;Fraction your code!&lt;/li&gt;
&lt;li&gt;Talk to yourself (use detail in your console.log, use comments).&lt;/li&gt;
&lt;li&gt;Take breaks from your code (it’s not going anywhere).&lt;/li&gt;
&lt;li&gt;Detail your algorithm on paper. Unfold every single step. Use pseudocode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's it 👋🏽&lt;/p&gt;

</description>
    </item>
    <item>
      <title>POO</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Mon, 11 Dec 2023 04:01:38 +0000</pubDate>
      <link>https://dev.to/liladoc/poo-or-oop-but-in-french-16do</link>
      <guid>https://dev.to/liladoc/poo-or-oop-but-in-french-16do</guid>
      <description>&lt;p&gt;Object Oriented Programming is a way of coding. I came across this notion starting to code with NodeJS, an object-oriented language.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is the way of thinking:
&lt;/h2&gt;

&lt;p&gt;An object can have properties and methods. The properties are the “Be” and the methods are the “Do”.&lt;/p&gt;

&lt;p&gt;Take a nurse as an example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Properties
&lt;/h3&gt;

&lt;p&gt;You create an object Nurse that has several properties.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Nurse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lila&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;specialty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Biological analysis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;Age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is called an Object Literal. You use it when you only need one object of this type.&lt;/p&gt;

&lt;h3&gt;
  
  
  Constructor
&lt;/h3&gt;

&lt;p&gt;We use a constructor function to create more objects with the same properties. It is like a new “version” of the object.&lt;/p&gt;

&lt;p&gt;⚠️ To declare a constructor function, we must give it a name starting with a capital.&lt;/p&gt;

&lt;p&gt;To create the new object, we give the constructor function properties as inputs.&lt;/p&gt;

&lt;p&gt;Inside the function, we match the inputs with the properties’ names.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;proprety1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;proprety2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;proprety3&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;proprety1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;proprety1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;proprety2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;proprety2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;proprety3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;proprety3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;methode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="c1"&gt;//function&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// in our case&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Nurse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;specialty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;specialty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;specialty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How do we initiate the creation of a new object?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Nurse1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Nurse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Nelly&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ICU&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to access the property we use this syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;
&lt;span class="c1"&gt;//in or case&lt;/span&gt;
&lt;span class="nx"&gt;Nurse1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Method
&lt;/h3&gt;

&lt;p&gt;If we want our object to do something, we have to attach it to a function. It’s called a method.&lt;/p&gt;

&lt;p&gt;It says my object can do this: method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;nurse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;specialty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;iv&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;put&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;iv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How to call a function?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;method&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;// in our case&lt;/span&gt;
&lt;span class="nx"&gt;nurse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How to add a function in a constructor function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;proprety1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;proprety2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;proprety3&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;proprety1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;proprety1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;proprety2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;proprety2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;proprety3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;proprety3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;methode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="c1"&gt;//function&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Nurse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;specialty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;specialty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;specialty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;put&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;iv&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>I took some notes about servers.</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Tue, 05 Dec 2023 13:37:14 +0000</pubDate>
      <link>https://dev.to/liladoc/i-took-some-notes-about-servers-3c7e</link>
      <guid>https://dev.to/liladoc/i-took-some-notes-about-servers-3c7e</guid>
      <description>&lt;p&gt;I had difficulty figuring out what is a server. I was confused because peoples talking about server seems not to refer to the same thing. For me, a server was a machine that you could communicate and that could do whatever you want. Store data for example. Then I got to install Apach2, and at the moment my definition didn’t sound quite right. I was completely lost. How can Apach2 be a server if it wasn’t a machine but software?&lt;/p&gt;

&lt;p&gt;If you are in the same case, let me explain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, what is the internet, and what is the web?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Internet is all of the machines that communicate together by cables constituting a network.&lt;/p&gt;

&lt;p&gt;Those machines want to exchange messages. Those messages are sent by a protocol. A protocol is the way you should read the message. There are a lot of protocols: HTTP, SCP, FTP… Itch has its specificity. But the most common on the web is HTTP.&lt;/p&gt;

&lt;p&gt;HTTP is for HyperText Transfer Protocol. Everything is in the title. HTTP is a protocol that allows you to exchange Hypertext messages, so text. The language we use to write the message is HTML for HyperText Markup Language. So if you want to share information you can wright an HTML file.&lt;/p&gt;

&lt;p&gt;HTML files contain text that can be structured with tags. For example h1 to create a title. That’s how you build a web page. One of the tags is particularly interesting. It is the a tag. It allows you to create a link to another web page. So at the end, you have a tone of web pages linked between them. And that is the WWW. The World Will Web (WWW) is a network in which pages redirect to each other by links.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do we do that? How can we exchange messages?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wrote my web page index.html locally (on my laptop) that I want to share. Now what?&lt;/p&gt;

&lt;p&gt;I want people to have access to my web page. So I send my index.html to another machine that will have the job to share my web page. That could be any computer. This computer will listen to requests from other computers that want to have access to my web page (clients) and respond to them. This is what we call my server.&lt;/p&gt;

&lt;p&gt;But work, our computer needs software that can manage the requests and that knows HTTP. This software is my web server or my web application. There are many and Apach2 is one of them.&lt;/p&gt;

&lt;p&gt;To listen to requests, we have to attribute a port to our web server. Basically, we tell it “Hey! This is your canal of discussion!”. To reach our web server, the client will have to send its request to my server’s IP to this port. The default port for HTTP servers is port 80.&lt;/p&gt;

&lt;p&gt;When the APP (application) receives a request, it will search into the server’s files and send the content of the file requested. The file by default is index.html.&lt;/p&gt;

&lt;p&gt;Now, you can understand how a URL works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74gru1eyycgxoav02gig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74gru1eyycgxoav02gig.png" alt="Image description" width="578" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A little magic with GRID.</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Tue, 05 Dec 2023 13:32:24 +0000</pubDate>
      <link>https://dev.to/liladoc/a-little-magic-with-grid-3g35</link>
      <guid>https://dev.to/liladoc/a-little-magic-with-grid-3g35</guid>
      <description>&lt;p&gt;My first website was simple. A title, two links, and some text for the description. Let's be honest, it was quite unpleasant. &lt;br&gt;
For the second version, I pretty much used the same components. So what changed?&lt;/p&gt;

&lt;p&gt;Grid’s magic!&lt;/p&gt;
&lt;h2&gt;
  
  
  Question: What is grid?
&lt;/h2&gt;

&lt;p&gt;Grid enables easy organization and customization of website elements. Basically, it’s building a map and putting elements on it.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to use it?
&lt;/h2&gt;

&lt;p&gt;First, you define columns, rows, and their dimensions. &lt;/p&gt;

&lt;p&gt;Let’s say we build a div that we will call ocean. And that we want to put a ship in the ocean.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="Ocean"&amp;gt;
        &amp;lt;div class="Ship"&amp;gt;&amp;lt;/div&amp;gt; 
    &amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.Ocean{

    display: grid;
    grid-template-columns:100px 100px 100px;
    grid-template-rows:100px 100px 100px;
    width: 300px;
    background-color: aqua;

    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here you have built 3 columns of 100px and 3 rows of 100px.&lt;/p&gt;

&lt;p&gt;That's how you can represent it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua34quyo9lfe2wna4xh7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua34quyo9lfe2wna4xh7.png" alt="Image description" width="513" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You determine where you want to put your item.&lt;/p&gt;

&lt;p&gt;For example, if I want to ship the second row of the second column, I say “ Please grid, put my cross between the second and the third vertical lines. And between the second and the third horizontal lines.”&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.Ship {
        grid-column:2/2;
        grid-row: 2/2;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your ship will be between the second and the third vertical lines. So, in the second column.&lt;/p&gt;

&lt;p&gt;Your ship will be between the second and the third horizontal lines. So on the second raw.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwdaqw97pawschcyy37e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwdaqw97pawschcyy37e.png" alt="Image description" width="513" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that’s it! I hope that it was clear enough. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hi everyone!</title>
      <dc:creator>LilaDoc</dc:creator>
      <pubDate>Tue, 25 Jul 2023 13:58:31 +0000</pubDate>
      <link>https://dev.to/liladoc/hi-everyone-lhe</link>
      <guid>https://dev.to/liladoc/hi-everyone-lhe</guid>
      <description>&lt;p&gt;Hi everyone! I'm Lila and I began my journey in tech! I started some courses on Openclassroom. That's a start. :)&lt;br&gt;
I'm building a blog about my progress. It gives me the opportunity to play with CSS and HTML. Which is so exciting!&lt;br&gt;
I'm not very good at socials and I'm French. So my posts will contain errors so please be cool!&lt;br&gt;
Nice to meet you all!&lt;/p&gt;

</description>
      <category>welcome</category>
      <category>newbe</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
