<?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>Forem: Kali Academy</title>
    <description>The latest articles on Forem by Kali Academy (@kaliacad).</description>
    <link>https://forem.com/kaliacad</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%2Forganization%2Fprofile_image%2F9314%2Fa29c1f4e-3f45-4615-bb67-8f4500636100.png</url>
      <title>Forem: Kali Academy</title>
      <link>https://forem.com/kaliacad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kaliacad"/>
    <language>en</language>
    <item>
      <title>Mon parcours de stage à KADEA Academy Goma</title>
      <dc:creator>Idrissa HEMEDY</dc:creator>
      <pubDate>Wed, 19 Feb 2025 05:26:50 +0000</pubDate>
      <link>https://forem.com/kaliacad/mon-parcours-de-stage-a-kadea-academy-goma-4c6g</link>
      <guid>https://forem.com/kaliacad/mon-parcours-de-stage-a-kadea-academy-goma-4c6g</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Le processus d'apprentissage dans le système LMD au Congo Kinshasa demande aux étudiants universitaires de compléter leur cursus de licence par un stage académique avant de passer au cycle suivant.&lt;br&gt;
C'est la raison première de mon stage à KADEA Academy.&lt;/p&gt;

&lt;p&gt;Plus encore, étant du domaine Informatique, un stage en milieu professionnel est une opportunité excellente pour mettre en pratique les connaissances acquises à la faculté, les évaluer et acquérir d'autres connaissances. Celle-ci est la deuxième raison de mon stage sans pour autant être moindre.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parcours
&lt;/h2&gt;

&lt;h3&gt;
  
  
  I. Période de stage
&lt;/h3&gt;

&lt;p&gt;Mon stage est allé du 12 Aout au 21 Septembre 2024, une période de 6 semaines en travaillant du lundi au vendredi chaque semaine&lt;/p&gt;

&lt;h3&gt;
  
  
  II. Organisation du travail
&lt;/h3&gt;

&lt;p&gt;Chaque semaine, j'avais un ensemble de tâches à réaliser pour atteindre les objectif de mon stage.&lt;br&gt;
Le travail est censé commencer chaque jour à partir de 8h30 et prendre fin aux alentours de 16h30.&lt;br&gt;
Pour chaque jour, un Daily Standup doit être établi. Celui-ci reprend les tâches accomplies le jour précèdent, celles à réaliser le jour dont il est question et les éventuels blocages auxquels on a été confronté.&lt;/p&gt;

&lt;h4&gt;
  
  
  II.1. Objectifs du stage
&lt;/h4&gt;

&lt;p&gt;Pour mon stage, j'ai pour objectif:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Réaliser une version simple d'une application permettant à une organisation de tracker les visites faites dans ses locaux&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faire 2 pull requests sur des projets open source &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Animer quelques sessions d'info gratuites offertes sur HTML et CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Publier 3 articles, les 2 premiers portant sur des sujets de notre choix et le dernier portant sur mon parcours chez KADEA&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  II.2. Outils de travail
&lt;/h4&gt;

&lt;p&gt;Voici les outils qu'on a eu à utiliser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slack:&lt;/strong&gt; pour la communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git &amp;amp; GitHub:&lt;/strong&gt; pour la le versioning du code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code:&lt;/strong&gt; pour l'implémentation du code et le développement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trello:&lt;/strong&gt; pour le planning des activités de développement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Figma:&lt;/strong&gt; pour le design de la plateforme&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  III. Présentation du projet de stage
&lt;/h3&gt;

&lt;p&gt;Le projet sur lequel nous avons eu a travailler le temps de notre stage est  VisiTrack.&lt;/p&gt;

&lt;p&gt;Visitrack est une application web qui permet aux entreprises de retracer l’historique des visites qui ont été faites dans leurs locaux. Les utilisateurs, une fois connectés, enregistrent quotidiennement toutes les visites en enregistrant le nom et postnom du visiteur, la raison de sa visite, l’heure d'arrivée et celle de départ.&lt;/p&gt;

&lt;h4&gt;
  
  
  III.1. Liens
&lt;/h4&gt;

&lt;p&gt;Live: &lt;a href="https://visitrack.vercel.app" rel="noopener noreferrer"&gt;https://visitrack.vercel.app&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://https://github.com/e-idrissa/visitrack-app" rel="noopener noreferrer"&gt;https://https://github.com/e-idrissa/visitrack-app&lt;/a&gt;&lt;br&gt;
Figma: &lt;a href="https://www.figma.com/design/QyPYvqPlk36AkPClnSn0tV/Visitrack?node-id=0-1&amp;amp;node-type=canvas&amp;amp;t=jqfozwbfVIfoRyKO-0" rel="noopener noreferrer"&gt;https://www.figma.com/design/QyPYvqPlk36AkPClnSn0tV/Visitrack?node-id=0-1&amp;amp;node-type=canvas&amp;amp;t=jqfozwbfVIfoRyKO-0&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  III.2. Fonctionnement
&lt;/h4&gt;

&lt;p&gt;Pour utiliser VisiTrack, l'utilisateur se rend sur la page web et s'inscrit s'il n'a pas encore de compte ou alors s'authentifie s'il est déjà inscrit.&lt;br&gt;
Une fois connecté, l'utilisateur pourra à on aise créer des visites, les modifier ou les supprimer.&lt;/p&gt;

&lt;h4&gt;
  
  
  III.3. Améliorations
&lt;/h4&gt;

&lt;p&gt;Ce projet n'étant qu'une première version d'une application possiblement commercialisable, voici les améliorations qu'il est possible de lui apporter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ajouter un compte administrateur pour ne pas permettre a tout le monde d'accéder a la plateforme.&lt;/li&gt;
&lt;li&gt;Implémenter une application mobile pour une meilleur portabilité&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  IV. Contributions open source
&lt;/h3&gt;

&lt;p&gt;Les contributions open source que nous avons accomplies, étant aussi les toutes premières que nous ayons eu à faire sont les suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kaliacad/bible-tracker/pull/32" rel="noopener noreferrer"&gt;https://github.com/kaliacad/bible-tracker/pull/32&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kaliacad/bible-tracker/pull/34" rel="noopener noreferrer"&gt;https://github.com/kaliacad/bible-tracker/pull/34&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  V. Articles
&lt;/h3&gt;

&lt;p&gt;Mise à part celui-ci, nous avons aussi publié nos deux premiers articles sur dev.to pendant le stage: un &lt;a href="https://dev.to/kaliacad/open-source-contribution-first-pull-request-l3a"&gt;article sur la contribution open source&lt;/a&gt; et un &lt;a href="https://dev.to/kaliacad/project-management-in-software-engineering-4i0d"&gt;article sur la gestion des projets en software engineering&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Appréciations
&lt;/h2&gt;

&lt;p&gt;Le stage s'est en soit très bien déroulé et dans un environnement convivial, calme et favorisant l'apprentissage.&lt;/p&gt;

&lt;p&gt;Les coachs nous ont offert une bonne expérience et un bel aperçu du travail auquel on s'attend en tant qu'informaticien ; la convivialité, la rigueur, la discipline et la flexibilité dans le travail.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>HTML ( HyperText Markup Language )</title>
      <dc:creator>Stephanie Chekwubechukwu</dc:creator>
      <pubDate>Wed, 27 Nov 2024 12:53:49 +0000</pubDate>
      <link>https://forem.com/kaliacad/html-hypertext-markup-language--2h1g</link>
      <guid>https://forem.com/kaliacad/html-hypertext-markup-language--2h1g</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;WHAT IS HTML&lt;/em&gt;&lt;/strong&gt; ?&lt;br&gt;
    HTML stands for HyperText Markup Language. HTML is the standard markup language for creating Web pages. It allows the creation and structure of sections, paragraphs, and links using HTML elements (the building blocks of a web page) such as tags and attributes. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;HISTORY OF HTML&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
    The first version of HTML was written by &lt;a href="https://www.google.com/url?sa=i&amp;amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FTim_Berners-Lee&amp;amp;psig=AOvVaw2odAuyHSlujeALqyxKJdbr&amp;amp;ust=1732798324603000&amp;amp;source=images&amp;amp;cd=vfe&amp;amp;opi=89978449&amp;amp;ved=0CBQQjRxqFwoTCIC7hs6k_YkDFQAAAAAdAAAAABAE" rel="noopener noreferrer"&gt;Tim-Berners-Lee &lt;/a&gt;  in 1993. Since then, there have been many different versions of HTML. The most widely used version throughout the 2000's was HTML 4.01, which became an official standard in December 1999. Another version, XHTML, was a rewrite of HTML as an XML language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;HTML has a lot of use cases, namely:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Web development. Developers use HTML code to design how a browser displays web page elements, such as text, hyperlinks, and media files. &lt;br&gt;
Internet navigation. Users can easily navigate and insert links between related pages and websites as HTML is heavily used to embed hyperlinks. &lt;br&gt;
Web documentation. HTML makes it possible to organize and format documents, similarly to Microsoft Word.&lt;br&gt;
STRUCTURE OF HTML&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;!DOCTYPE&amp;gt; &amp;lt;html&amp;gt; , &amp;lt;head&amp;gt; , &amp;lt;title&amp;gt; and &amp;lt;body&amp;gt; .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;COMMON TAGS IN HTML&lt;/em&gt;&lt;/strong&gt;&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;p&amp;gt;: Used for paragraphs of text.
&amp;lt;h1&amp;gt; to &amp;lt;h6&amp;gt;: Used for headings of different sizes.
&amp;lt;a&amp;gt;: Used for hyperlinks.
&amp;lt;img&amp;gt;: Used for displaying images.
&amp;lt;ul&amp;gt; and &amp;lt;ol&amp;gt;: Used for creating unordered and ordered lists.
&amp;lt;div&amp;gt;: Used for grouping and styling elements.
&amp;lt;input&amp;gt;: Used for creating input fields.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;The basic elements of an HTML page are:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A text header, denoted using the &amp;lt;h1&amp;gt;, &amp;lt;h2&amp;gt;, &amp;lt;h3&amp;gt;, &amp;lt;h4&amp;gt;, &amp;lt;h5&amp;gt;, &amp;lt;h6&amp;gt; tags.
A paragraph, denoted using the &amp;lt;p&amp;gt; tag.
A horizontal ruler, denoted using the &amp;lt;hr&amp;gt; tag.
A link, denoted using the &amp;lt;a&amp;gt; (anchor) tag.
A list, denoted using the &amp;lt;ul&amp;gt; (unordered list), &amp;lt;ol&amp;gt; (ordered list) and &amp;lt;li&amp;gt; (list element) tags.
An image, denoted using the &amp;lt;img&amp;gt; tag
A divider, denoted using the &amp;lt;div&amp;gt; tag
A text span, denoted using the &amp;lt;span&amp;gt; tag
The next few pages will give an overview of these basic HTML elements.
Each element can also have attributes - each element has a different set of attributes relevant to the element. There are a few global elements, the most common of them are:
id - Denotes the unique ID of an element in a page. Used for locating elements by using links, JavaScript, and more.
class - Denotes the CSS class of an element. Explained in the CSS Basics tutorial.
style - Denotes the CSS styles to apply to an element. Explained in the CSS Basics tutorial.
data-x attributes - A general prefix for attributes that store raw information for programmatic purposes. Explained in detailed in the Data Attributes section.
Text headers and paragraphs
There are six different types of text header you can choose from, h1 being the topmost heading with the largest text, and h6 being the most inner heading with the smallest text. In general, you should have only one h1 tag with a page, since it should be the primary description of the HTML page.
As we've seen in the last example, a paragraph is a block of text separated from the rest of the text around it.
&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;Let's see an example of the &amp;lt;h1&amp;gt;, &amp;lt;h2&amp;gt; and &amp;lt;p&amp;gt; tags in action:
&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;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;My First Page&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;This is my first page.&amp;lt;/p&amp;gt;
        &amp;lt;h2&amp;gt;A secondary header.&amp;lt;/h2&amp;gt;
        &amp;lt;p&amp;gt;Some more text.&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Horizontal rulers&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A horizontal ruler &amp;lt;hr&amp;gt; tag acts as a simple separator between page sections.
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;My First Page&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;This is my first page.&amp;lt;/p&amp;gt;
        &amp;lt;hr&amp;gt;
        &amp;lt;p&amp;gt;This is the footer - all rights are reserved to me.&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;CONCLUSION&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
HTML remains the foundation of web development, providing the structure, semantics, and functionality necessary for creating modern websites. Its integration with CSS allows for attractive and responsive designs, while its support for multimedia and interactive content enhances user engagement. Moreover, HTML's emphasis on accessibility and SEO ensures that web pages are inclusive and easily discoverable. As web technologies continue to evolve, HTML continues to be a vital tool for developers, enabling them to build dynamic and accessible web experiences for users across the globe.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>CSS: Crafting the Visual Brilliance of the Web</title>
      <dc:creator>Onyedika Eze</dc:creator>
      <pubDate>Wed, 27 Nov 2024 09:10:39 +0000</pubDate>
      <link>https://forem.com/kaliacad/css-crafting-the-visual-brilliance-of-the-web-1mo</link>
      <guid>https://forem.com/kaliacad/css-crafting-the-visual-brilliance-of-the-web-1mo</guid>
      <description>&lt;p&gt;In the world of web development, HTML and JavaScript often steal the spotlight, but it's CSS (Cascading Style Sheets) that brings the visual magic to web pages. CSS is the language that allows you to style, layout, and design your web pages, ensuring that the user experience is both aesthetically pleasing and functional. Let's dive into the essentials of CSS and understand why it is an indispensable tool for web developers.&lt;br&gt;
&lt;strong&gt;What is CSS?&lt;/strong&gt;&lt;br&gt;
CSS is a stylesheet language used for describing the presentation of a document written in HTML or XML. It separates the content of the web page (HTML) from its presentation (CSS), enabling developers to apply consistent styling across multiple pages with ease. By defining how elements should be displayed on the screen, CSS transforms plain HTML into a visually engaging experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Concepts of CSS&lt;/strong&gt;&lt;br&gt;
Selectors and Properties CSS uses selectors to target HTML elements and apply styles to them. Properties define the specific styles to be applied. &lt;br&gt;
For example:&lt;br&gt;
CSS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&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 rule targets all &lt;/p&gt;
&lt;p&gt; elements, setting their text color to blue and font size to 16 pixels.&lt;br&gt;
The Cascade The 'Cascading' part of CSS refers to the way styles cascade from the top of the document to the bottom, with the most specific rules taking precedence. This allows developers to layer styles and create complex designs with minimal code.&lt;br&gt;
Box Model Every element in CSS is considered a box. The box model describes the space an element occupies on a page, including content, padding, border, and margin. Understanding the box model is crucial for creating layouts.&lt;br&gt;
plaintext&lt;/p&gt;

&lt;p&gt;+-------------------+&lt;br&gt;
|    Margin         |&lt;br&gt;
|  +------------+   |&lt;br&gt;
|  |  Border    |   |&lt;br&gt;
|  |+---------+ |   |&lt;br&gt;
|  || Padding | |   |&lt;br&gt;
|  || Content | |   |&lt;br&gt;
|  |+---------+ |   |&lt;br&gt;
|  +------------+   |&lt;br&gt;
+-------------------+&lt;/p&gt;

&lt;p&gt;Layouts and Positioning CSS provides various techniques for laying out elements, such as flexbox, grid, and positioning. Flexbox and grid are modern layout models that offer more control and flexibility compared to traditional methods like float and table-based layouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.container {&lt;br&gt;
    display: flex;&lt;br&gt;
    justify-content: space-between;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why CSS is Critical for Web Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Separation of Concerns By keeping HTML focused on structure and CSS on presentation, developers can maintain cleaner, more manageable code. This separation simplifies updates and ensures a consistent look and feel across an entire website.&lt;br&gt;
Responsive Design CSS is essential for creating responsive designs that work well on various devices and screen sizes. Media queries allow developers to apply different styles based on the viewport, ensuring an optimal user experience on desktops, tablets, and smartphones.&lt;/p&gt;

&lt;p&gt;CSS&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/media"&gt;@media&lt;/a&gt; (max-width: 768px) {&lt;br&gt;
    .container {&lt;br&gt;
        flex-direction: column;&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Performance and Accessibility Well-written CSS can enhance website performance by reducing the amount of code processed by the browser. Additionally, CSS aids in accessibility by enabling high-contrast modes, large text, and other styles that improve usability for individuals with disabilities.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;CSS is more than just a tool for beautifying web pages; it's a powerful language that enhances the structure, functionality, and user experience of web applications. As the web continues to evolve, mastering CSS remains a crucial skill for any web developer aiming to create visually stunning and highly functional websites. Whether you're styling a single page or an entire web application, CSS is your best ally in crafting the visual brilliance of the web.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Project Management in Software Engineering</title>
      <dc:creator>Idrissa HEMEDY</dc:creator>
      <pubDate>Mon, 09 Sep 2024 07:59:17 +0000</pubDate>
      <link>https://forem.com/kaliacad/project-management-in-software-engineering-4i0d</link>
      <guid>https://forem.com/kaliacad/project-management-in-software-engineering-4i0d</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As developers, we often chase after the next groundbreaking idea or seek opportunities to maximize our earnings through coding 🤑. However, before those dreams become reality, we frequently find ourselves working on team or personal projects. Many of us might not fully realize how crucial it is to properly structure and present these projects.&lt;/p&gt;

&lt;p&gt;A well-organized project structure and clear presentation are essential. They not only provide a comprehensive view of what we’re building but also contribute to maintaining clean and efficient code 🧑‍💻.&lt;/p&gt;

&lt;p&gt;Achieving a solid project structure and effective presentation is possible with a robust project plan and diligent project management. By focusing on these aspects, we set ourselves up for success, both in realizing our current projects and in reaching our broader career goals.&lt;/p&gt;

&lt;p&gt;In this article, we’ll explore the fundamentals of project management in software engineering. &lt;/p&gt;

&lt;h2&gt;
  
  
  Project management and Project plan
&lt;/h2&gt;

&lt;p&gt;We previously talked about project management and project plan if we want to achieve a solid project structure. What is the difference between them?&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a project management?
&lt;/h3&gt;

&lt;p&gt;Project management involves leading and directing a project from start to finish. It includes applying knowledge, skills, tools, and techniques to ensure that the project meets its requirements and achieves its goals.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is project plan?
&lt;/h3&gt;

&lt;p&gt;A project plan is a comprehensive document that outlines the scope, objectives, tasks, timeline, resources, and budget of a project. It serves as a roadmap for the project team, ensuring everyone is aligned and working towards a common goal.&lt;/p&gt;

&lt;p&gt;In summary, the project plan is a comprehensive document that outlines the details of a project, while project management is the overall process of planning, executing, and controlling the project to achieve its goals. Both are essential for successful project outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project management in Software engineering
&lt;/h2&gt;

&lt;p&gt;Project management in software engineering is a systematic approach to planning, organizing, and controlling the development of software projects. It ensures that projects are completed on time, within budget, and meet the specified quality standards.&lt;/p&gt;

&lt;p&gt;Key considerations in software project management include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Timeliness&lt;/strong&gt;: Projects must be completed within agreed-upon deadlines to meet customer expectations and avoid delays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget&lt;/strong&gt;: Projects are allocated a fixed amount of resources, including human, financial, and material resources. Adhering to the budget is crucial to avoid cost overruns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality&lt;/strong&gt;: Software must meet specific functional and non-functional requirements to deliver value to users. Ensuring quality throughout the development process is essential.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ignoring any of these three factors can lead to project failures or suboptimal outcomes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Approach
&lt;/h3&gt;

&lt;p&gt;In software engineering, there are 2 main approaches when it comes to project management:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Agile&lt;/strong&gt;: This iterative approach emphasizes flexibility, collaboration, and continuous improvement. It involves breaking down the project into smaller increments (sprints) and delivering working software at the end of each sprint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Waterfall&lt;/strong&gt;: This traditional approach follows a linear sequence of phases &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Choosing the right project management approach depends on the project's characteristics. If the project involves frequent changes, uncertain requirements, or a need for continuous feedback, an Agile approach is often suitable. Else if the project has well-defined requirements, a stable scope, and a predictable timeline, a Waterfall approach might be more appropriate. Waterfall methodologies follow a sequential process, moving from one phase to the next.&lt;br&gt;
It's important to note that hybrid approaches, combining elements of Agile and Waterfall, can also be effective in certain situations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Planning and Scheduling
&lt;/h3&gt;

&lt;p&gt;there are 3 principal alternatives :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Work Breakdown Structure (WBS):&lt;/strong&gt; Divides the project into smaller, manageable tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gantt Charts&lt;/strong&gt;: Visualize the project schedule, showing task dependencies and deadlines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critical Path Method (CPM)&lt;/strong&gt;: Identifies the longest path through the project network and highlights critical tasks that must be completed on time to avoid delays.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Risk management
&lt;/h3&gt;

&lt;p&gt;This process involves three key steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Risk Identification&lt;/strong&gt;: Identifying potential threats or challenges that could negatively impact the project's success.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk Assessment&lt;/strong&gt;: Evaluating the likelihood and severity of each identified risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk Mitigation&lt;/strong&gt;: Developing strategies to reduce or eliminate the identified risks, or to create contingency plans to address them if they occur.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quality Assurance and Testing
&lt;/h3&gt;

&lt;p&gt;Quality assurance (QA) and testing are crucial for ensuring software works as expected. Here's a breakdown:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unit Testing&lt;/strong&gt;: Check individual parts of the software.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration Testing&lt;/strong&gt;: See how different parts work together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Testing&lt;/strong&gt;: Test the whole software to make sure it works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acceptance Testing&lt;/strong&gt;: Make sure the software meets the customer's needs.
By doing these tests, software teams can find and fix problems early, making the software better.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Configuration Management
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Version Control&lt;/strong&gt;: Keep track of changes to the software's code and documentation. This helps you see what has been changed and when, making it easier to collaborate and manage different versions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change Management&lt;/strong&gt;: Manage changes to the project's goals, what it needs to do, or how it's designed. This ensures that everyone is on the same page and that changes are made systematically.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Communication and Collaboration
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stakeholder Management&lt;/strong&gt;:  Make sure everyone understands what's expected and communicates clearly. This includes customers, developers, and managers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Collaboration&lt;/strong&gt;: Encourage teamwork and open communication within the development team. This helps everyone work together effectively and solve problems.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Project Monitoring and Control
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Progress Tracking&lt;/strong&gt;: Check how the project is going compared to the plan and budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue Tracking&lt;/strong&gt;: Look for any issues that might slow down the project and fix them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Evaluation&lt;/strong&gt;: See how the team is working and make changes if needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Tools and Technologies
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Project Management Software&lt;/strong&gt;: Use tools like Jira, Trello, or Asana to manage tasks, track progress, and work together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version Control Systems&lt;/strong&gt;: Use Git, SVN, or Mercurial to keep track of changes to the software's code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue Tracking Tools&lt;/strong&gt;: Use Bugzilla or GitHub Issues to find and fix problems.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Main Activities
&lt;/h2&gt;

&lt;p&gt;Software project management involves a wide range of activities, such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initiation&lt;/strong&gt;: Define what the project is about, its goals, and if it's possible to do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planning&lt;/strong&gt;: Create a detailed plan for the project, including all the important parts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executing&lt;/strong&gt;: Follow the plan and do the work needed for the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring and Controlling&lt;/strong&gt;: Watch how the project is going, find any problems, and fix them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closing&lt;/strong&gt;: Complete the project, deliver the final product, and see how well it went.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Effective project management is the key to successful software development. By implementing a comprehensive project plan and utilizing the right tools and strategies, you can streamline your development process, mitigate risks, and deliver high-quality software on time and within budget. The techniques outlined in this article, including project planning, risk management, communication, and quality assurance, provide a solid foundation for achieving project success. Remember, a well-structured project and effective leadership are essential for delivering exceptional results.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>management</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Open source Contribution, First Pull Request</title>
      <dc:creator>Idrissa HEMEDY</dc:creator>
      <pubDate>Mon, 09 Sep 2024 07:55:07 +0000</pubDate>
      <link>https://forem.com/kaliacad/open-source-contribution-first-pull-request-l3a</link>
      <guid>https://forem.com/kaliacad/open-source-contribution-first-pull-request-l3a</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As newcomers to web development, we often believe that the only way to improve our skills is by working on our own projects. But what happens when you run out of project ideas or don't have a team to collaborate with? Should you close your code editor and put your ambitions on hold? This is where &lt;strong&gt;Open Source Contributions&lt;/strong&gt; can make a significant difference. By contributing to open source, you not only hone your coding skills but also become part of a global community that builds and maintains software used by millions. Whether it's your first pull request or your hundredth, open source offers endless opportunities for learning, collaboration, and growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an Open source Contribution?
&lt;/h2&gt;

&lt;p&gt;An open source contribution refers to the act of participating in the development or improvement of open source software. Open source software is software that is &lt;strong&gt;freely available for anyone to use, modify, and distribute.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open source contributions are typically made through platforms like &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, where developers can submit changes via &lt;code&gt;pull requests&lt;/code&gt; that are reviewed and potentially merged into the main project by the maintainers.&lt;/p&gt;

&lt;h3&gt;
  
  
  What can I contribute on?
&lt;/h3&gt;

&lt;p&gt;Contributions can come in various forms, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Contributions&lt;/strong&gt;: Writing new features, fixing bugs, or improving existing code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; Creating or improving documentation to help others understand how to use the software, how it works, or how to contribute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design:&lt;/strong&gt; Contributing to the visual design, user interface, or user experience of the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; Writing tests, reporting bugs, or helping to ensure the software works as intended across different environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Translation:&lt;/strong&gt; Translating the software and its documentation into different languages to make it accessible to a broader audience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Support:&lt;/strong&gt; Helping other users and contributors by answering questions, providing guidance, or reviewing pull requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Open source project ideas
&lt;/h3&gt;

&lt;p&gt;Here is some beginner friendly open source projects you can look on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/firstcontributions/first-contributions" rel="noopener noreferrer"&gt;First Contributions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/EddieHubCommunity" rel="noopener noreferrer"&gt;EddieHub Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;Public APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HabitRPG/habitica" rel="noopener noreferrer"&gt;Habitica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/exercism" rel="noopener noreferrer"&gt;Exrecism&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pull Request
&lt;/h2&gt;

&lt;p&gt;As discussed earlier, pull requests (PRs) are the primary method developers use to submit their changes to open source projects. When a developer opens a PR, it signals to the project maintainers that new code is ready for review. The maintainers carefully evaluate the PR, ensuring that the changes contribute value to the project without introducing any issues or breaking existing functionality. If the PR meets these criteria, it is merged into the main codebase, becoming part of the official project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step by Step guide to your First PR
&lt;/h3&gt;

&lt;p&gt;We assume that you are already familiar with Git and GitHub, and have them set up on your machine. If not, refer to this article on &lt;a href="https://dev.to/victor1890/install-git-on-windows-35bm"&gt;how to install Git on Windows&lt;/a&gt; and &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-contribute-to-open-source-getting-started-with-git" rel="noopener noreferrer"&gt;How to set it up&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you have everything set up and have chosen the project you want to contribute to, follow these steps to make your first PR&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Create a copy of the repository
&lt;/h4&gt;

&lt;p&gt;A repository, or "repo," is essentially the main folder where a project is stored on GitHub. To start working on an open-source project, you first need to create your own copy of the repository. This process involves &lt;strong&gt;forking&lt;/strong&gt; the repository to create a copy under your GitHub account and then &lt;strong&gt;cloning&lt;/strong&gt; it to your local machine, giving you a working version of the project that you can modify and experiment with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a. Forking&lt;/strong&gt;&lt;br&gt;
When you’re on the main page for the repository, a &lt;strong&gt;Fork&lt;/strong&gt; button will be displayed on your upper right-hand side of the page, underneath your user icon:&lt;/p&gt;

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

&lt;p&gt;Follow the process and end with the forking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;b. Cloning&lt;/strong&gt;&lt;br&gt;
You can copy the URL by using the green “⤓ Code” button from your repository page that you forked from the original repository page. Once you click the button, you’ll be able to copy the URL by clicking the clipboard button next to the URL. Open your terminal. navigate to the folder you want to clone the project to and clone it using this Git command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone --copied-link
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, navigate to the cloned folder by taping:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Create new branch and start modifications
&lt;/h4&gt;

&lt;p&gt;Before you begin working on the code and making changes, it's important to create a new branch. This branch will serve as a separate workspace for your code modifications, keeping them isolated from the main codebase. Your changes will be saved and reviewed on this branch before they are potentially merged into the project. To create a new branch and switch to it, open your terminal and enter the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b --your-branch-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉 You're done. You can now make changes and save them.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Save local changes and commit
&lt;/h4&gt;

&lt;p&gt;After working on your changes, you'll need to save them locally by doing:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;And then commit your changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "Custom commit message"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Update local repository
&lt;/h4&gt;

&lt;p&gt;When working on a project with other contributors, it’s crucial to keep your local repository up-to-date to avoid conflicts when making a pull request. To do this, you need to sync changes regularly.&lt;/p&gt;

&lt;p&gt;First, we'll cover how to configure a remote for your fork, then how to sync it with the original repository&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a. Configure a remote&lt;/strong&gt;&lt;br&gt;
Let’s first check which remote servers you have configured. From the directory of the repository in our terminal window, let’s use the &lt;code&gt;git remote&lt;/code&gt; command along with the &lt;code&gt;-v&lt;/code&gt; flag to display the URLs that Git has stored along with the relevant remote&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Next, we’ll specify a new remote upstream repository for us to sync with the fork. This will be the original repository that we forked from. We’ll do this with the &lt;code&gt;git remote add&lt;/code&gt; command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add upstream --original-repo-link
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can verify that our remote pointer to the upstream repository was properly added by using the &lt;code&gt;git remote -v&lt;/code&gt; command again from the repository directory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;b. Sync the fork&lt;/strong&gt;&lt;br&gt;
To sync our fork, from the directory of our local repository in a terminal window, we’ll use the git fetch command. Since we used the shortname “upstream” to refer to the upstream repository, we’ll pass that to the command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Now, commits to the main branch will be stored in a local branch called &lt;code&gt;upstream/main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let’s switch to the local main branch of our repository:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;And merge our changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git merge upstream/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your fork’s main branch is now in sync with the upstream repository, and any local changes you made were not lost.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Create a PR
&lt;/h4&gt;

&lt;p&gt;At this point, you are ready to make a pull request to the original repository.&lt;/p&gt;

&lt;p&gt;You should navigate to your forked repository, and press the New pull request button on your left-hand side of the page.&lt;/p&gt;

&lt;p&gt;Follow the steps and there we go, your first Open source Contribution is live and you achieve your first PR.&lt;br&gt;
🎉🎉 Congratulations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Contributing to open source through your first pull request is a rewarding experience that accelerates your growth as a developer. It’s not just about improving your coding skills, but also about collaborating with a global community, learning best practices, and making a meaningful impact. By following these steps, you’re not just submitting code—you’re joining a movement that powers countless projects around the world. Dive in, contribute, and watch your skills and confidence soar.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>github</category>
      <category>git</category>
    </item>
    <item>
      <title>Understanding TypeScript: A Friendly Guide</title>
      <dc:creator>Birusha Ndegeya</dc:creator>
      <pubDate>Thu, 08 Aug 2024 10:03:07 +0000</pubDate>
      <link>https://forem.com/kaliacad/understanding-typescript-a-friendly-guide-3pal</link>
      <guid>https://forem.com/kaliacad/understanding-typescript-a-friendly-guide-3pal</guid>
      <description>&lt;h1&gt;
  
  
  Understanding TypeScript: A Friendly Guide
&lt;/h1&gt;

&lt;p&gt;Hi there! I’m Birusha Ndegeya, a software developer passionate about building robust and maintainable applications. Today, I want to share some insights into TypeScript, a powerful tool that can transform the way you write JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is TypeScript?
&lt;/h2&gt;

&lt;p&gt;TypeScript is a superset of JavaScript that adds optional static typing. This means you can add type annotations to your code, which helps you catch errors early and makes your code more readable and maintainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does TypeScript Work?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compilation&lt;/strong&gt;: TypeScript code isn’t directly executed by browsers. Instead, it’s compiled into plain JavaScript using a compiler like &lt;code&gt;tsc&lt;/code&gt;. This compiler checks for type errors and generates JavaScript code that browsers can run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Type System&lt;/strong&gt;: The core of TypeScript is its type system. Types help define what kind of data a variable can hold. Some common types include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;number&lt;/strong&gt;: Represents numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;string&lt;/strong&gt;: Represents text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;boolean&lt;/strong&gt;: Represents true or false values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;array&lt;/strong&gt;: Represents a list of values of a specific type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;object&lt;/strong&gt;: Represents a collection of key-value pairs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Type Inference&lt;/strong&gt;: TypeScript is smart enough to infer types in many cases, so you don’t always need to explicitly specify them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interfaces &amp;amp; Classes&lt;/strong&gt;: TypeScript provides interfaces to define the structure of an object and classes to create reusable components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generics&lt;/strong&gt;: TypeScript allows you to create reusable components that can work with different types, making your code more flexible and efficient.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  When to Use TypeScript
&lt;/h2&gt;

&lt;p&gt;While TypeScript is a powerful tool, it’s not always the right choice. Here’s when you should consider using it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large Projects&lt;/strong&gt;: TypeScript is ideal for large and complex projects where maintainability and code quality are crucial. The type system helps prevent bugs and makes the code easier to understand and modify.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams&lt;/strong&gt;: When working in a team, TypeScript improves collaboration by enforcing consistent coding styles and ensuring everyone understands the codebase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Reusability&lt;/strong&gt;: TypeScript encourages code reuse through interfaces and generics, making it easier to build modular and maintainable applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved IDE Support&lt;/strong&gt;: TypeScript integrates well with IDEs, providing features like autocompletion, type checking, and code navigation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Alternatives to TypeScript
&lt;/h2&gt;

&lt;p&gt;While TypeScript is popular, other alternatives exist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flow&lt;/strong&gt;: A static type checker for JavaScript that aims to provide similar benefits to TypeScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ReasonML&lt;/strong&gt;: A functional language that compiles to JavaScript and provides strong typing and other features like immutability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PureScript&lt;/strong&gt;: A functional language that compiles to JavaScript and focuses on immutability and strong types.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Importance of TypeScript
&lt;/h2&gt;

&lt;p&gt;Using TypeScript offers significant advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Improved Code Quality&lt;/strong&gt;: Type checking helps catch errors before runtime, reducing bugs and improving code reliability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased Maintainability&lt;/strong&gt;: TypeScript’s strong typing makes code easier to understand and maintain, especially in large projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better Developer Experience&lt;/strong&gt;: IDEs provide enhanced features like autocompletion and type checking, leading to faster development cycles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Collaboration&lt;/strong&gt;: TypeScript enforces consistent coding styles and makes it easier for teams to work together.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When Not to Use TypeScript
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small, Simple Projects&lt;/strong&gt;: The overhead of writing type annotations may not be worth it for small, simple scripts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects with Tight Deadlines&lt;/strong&gt;: The additional compilation step can slightly increase development time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects with Limited Resources&lt;/strong&gt;: TypeScript requires a steeper learning curve and may require additional tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;TypeScript is a powerful tool for building robust, maintainable, and scalable applications. However, it’s important to carefully consider the pros and cons before adopting it for your project. If you’re working on a large or complex application, or if you value code quality and maintainability, TypeScript can be a valuable asset. Ultimately, the decision to use TypeScript depends on the specific needs and constraints of your project. Carefully evaluate the pros and cons to make the best choice for your development environment.&lt;/p&gt;

&lt;p&gt;I hope this guide helps you understand the basics of TypeScript and its benefits. Happy coding!&lt;/p&gt;

&lt;p&gt;Feel free to reach out if you have any questions or need further clarification. I'm always here to help fellow developers on their coding journey!&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>SUR LE CHEMIN DU HACKING ! Kali Academy, trois mois d’initiation 👺</title>
      <dc:creator>Tacite WAKILONGO</dc:creator>
      <pubDate>Fri, 14 Jun 2024 22:20:06 +0000</pubDate>
      <link>https://forem.com/kaliacad/sur-le-chemin-du-hacking-kali-academy-trois-mois-dinitiation-1k9m</link>
      <guid>https://forem.com/kaliacad/sur-le-chemin-du-hacking-kali-academy-trois-mois-dinitiation-1k9m</guid>
      <description>&lt;p&gt;Et oui 🙂 vous ne rêvez pas ! Je dis dis bien hacking ! Avant tout, mettons-nous d'accord sur la terminologie “Hacking”. Les médias nous ont menti sur le hacking, ils confondent le hacking au cracking. Richard Stallman, un fervent défenseur du logiciel libre et fondateur du mouvement du logiciel libre, définit un hacker comme quelqu'un qui aime jouer avec des systèmes, comprendre leur fonctionnement interne et les améliorer. Le hacking, dans ce contexte, est un acte de créativité, d'innovation et de résolution de problèmes, souvent associé à la programmation informatique. C’est une part de vérité, le hacking est bien plus que cette définition, il est en soi un état d’esprit, une manière de penser… Je vous conseille de lire cet ouvrage pour en savoir plus sur cette littérature : “Hackers and Painters: Big Ideas from the Computer Age” de Paul Graham.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Dans cet article, je vais vous parler du parcours que propose Kali Academy aux jeunes développeurs pour les initier au Hacking. Kali Academy est une académie qui vise à promouvoir les valeurs de l'open source dans les régions les moins représentées notamment en Afrique, voir &lt;a href="https://kaliacademy.org/" rel="noopener noreferrer"&gt;le site de Kali Academy&lt;/a&gt;. J’ai personnellement été parmi les 10 stagiaires retenus pour la cohorte 2024 et c’est fut une énorme opportunité pour ma carrière de développeur, je me sens dans l’obligation de partager avec cette expérience assez passionnante. Avant d’entrer dans le vif du sujet, je tiens a préciser que je ne me considère pas hacker, et je ne me considérerai jamais hacker, c’est la pertinence de mon travail qui pourra me procurer ce titre.&lt;/p&gt;

&lt;p&gt;Le parcours de stage chez Kali Academy est subdivisé en 3 parties : &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;les fondamentaux&lt;/li&gt;
&lt;li&gt;la spécialisation Wikimédia et&lt;/li&gt;
&lt;li&gt;le projet de fin de stage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mais avant de décortiquer ce programme apparemment, commençons par nous poser les bonnes questions en guise de fondamentaux 🙂. Qui construit et entretient l'infrastructure numérique sur laquelle nous nous appuyons au quotidien ? Quels sont les défis et les obstacles rencontrés par ceux qui travaillent à la construction et à la maintenance de cette infrastructure ? Quelles sont les implications sociales, politiques et économiques de la manière dont l'infrastructure numérique est construite et gérée ? Comment les décisions prises en matière d'infrastructure numérique affectent-elles la vie quotidienne des gens ? Quels sont les modèles de financement et de gouvernance de l'infrastructure numérique, et comment peuvent-ils être améliorés ? Comment pouvons-nous garantir que l'infrastructure numérique reste ouverte, accessible et équitable pour tous ? Ces questions semblent peut-être basiques, mais elles poussent à une très grande réflexion si on y consacre un peu d'attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sur quoi est basé notre infrastructure numérique ?
&lt;/h2&gt;

&lt;p&gt;Selon Nadia Eghba, dans son livre (essaie)  "Roads and Bridges: The Unseen Labor Behind Our Digital Infrastructure", il nous rappelle que toute notre infrastructure numérique est basée sur l’open source. Personnellement, lorsque j’ai lu ce passage, la première question je me suis demandé qui est derrière les projets open source, comment gagne-t-il sa vie…. C’est à ce moment que j'ai compris l’importance d’une contribution, même aussi petite soit-elle. Nous posons des questions sur des forums tels que stack overflow, mais est-ce qu’on se demande qui nous répond, ni même pourquoi il nous répond ? Nous lisons des articles sur ce site, et nous savons que leurs auteurs ne perçoivent rien comme droit d’auteur mais nous écrivent quand-même. C’est avec ces genres des questions qu’on devient hacker. Etes-vous toujours prêt à le devenir ? Si oui, demandes-toi quelle est ta part dans tout ça, combien de fois as-tu contribué dans un projet open source ou même partager publiquement et gratuitement tes connaissances ? L’open source ce n’est pas seulement dans l’informatique, la liberté d'être bien informé ne peut être garantie que si l’information est open source (souvenez-vous de l’affaire Wikileaks ayant conduit à l’arrestation de Julian Assange et Chelsea Manning), la connaissance ne peut-être universelle que si elle a été partagée (les brevets publiques) ! Voyons notre part dans tout ça, bien que minime soit-elle mais elle est là. C’est de cette manière que Kali Academy m’a amené à voir les choses, consacrer un peu de mon temps à faire découvrir aux autres ce que nous avons appris dans le but de faire évoluer la connaissance et de la démocratiser 🗽.&lt;/p&gt;

&lt;h2&gt;
  
  
  GNU/Linux, l'OS des Hackers
&lt;/h2&gt;

&lt;p&gt;Maintenant que nous avons découvert que toute notre infrastructure numérique est grandement basée sur de l’open source, rentrons dans le technique. GNU/Linux, savez-vous de quel animal s’agit-il ? 😂 On a souvent tendance à ne dire que Linux et laisser GNU, pourtant Linux n’est que le noyau. GNU est un projet de logiciel libre lancé par Richard Stallman en 1983. Le nom "GNU" est un acronyme récursif qui signifie "GNU's Not Unix", ce qui souligne que bien que GNU soit compatible avec Unix, il n'est pas dérivé de celui-ci. Le projet GNU a pour objectif de fournir un système d'exploitation libre, complet et cohérent composé entièrement de logiciels libres. GNU/Linux est le résultat de l'effort combiné de deux projets : le projet GNU, qui a fourni les outils et les utilitaires, et le noyau Linux, développé par Linus Torvalds. Cette collaboration a produit un système d'exploitation puissant, flexible et libre, qui a eu un impact significatif sur l'industrie informatique et la culture technologique mondiale. Dans mon parcours à Kali Academy, j’ai découvert qu’il est important pour un hackeur d’avoir une idée sur l'architecture d’un système d’exploitation, surtout GNU/Linux car il est open source, on peut se challenger à toucher dans son code et produire notre propre distribution, ce qui est du hacking au sens pur 🙂, ensuite il faut savoir l’installer sans assistance, manipuler bien la ligne de commande, construire des petits scripts bash, automatiser certaines tâches, manipuler l’environnement bureau…&lt;/p&gt;

&lt;h2&gt;
  
  
  Git, la collaboration facilitée
&lt;/h2&gt;

&lt;p&gt;Ensuite, il faut savoir très bien manipuler git, car c’est la base de la collaboration dans une équipe de développeurs, j’ai récemment commencé à publier une série d’article à sujet je vous invite à aller y jeter un coup d'œil. La plupart des plateformes collaboratives sont basées sur git. Git a pas mal évolué mais il reste intuitif de l’utiliser en CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  les licences opens sources, le droit en ingénierie
&lt;/h2&gt;

&lt;p&gt;Lorsque vous installez un logiciel open ou non, vous devez d'abord avoir accepter les termes de la licence. C’est un cas que vous avez déjà rencontré au moins une fois, mais si on n’est pas suffisamment informé, on néglige cette partie, ce qui nous amène à violer les licences. Pour moi, la plus grande victime c’est Microsoft, en tout cas dans le contexte de ma région, sur 1000 personnes que je connais, 900 utilisent Windows, et seulement 100 ont une licence, 50 l’ont payé et les autres ont des craques 😂. C'est triste, mais c’est ça la réalité, pourtant il y a un GNU/Linux gratuit et open source, le seul motif qu’on c’est que Linux est complexe, c’est qui une pure invention de ses concurrents. Cette situation a conduit Kali Academy à nous initier à la lecture des licences open source. Cette lecture nous a mis dans un grande confusion: un logiciel peut être open source mais pas libre, gratuit mais pas libre, libre mais avec une version payante, gratuit mais pas open source 😴. C’est embêtant non ! Mais ce qu’il faut retenir, c’est qu’une licence d'un logiciel est un contrat entre l'éditeur du logiciel et l'utilisateur qui définit les conditions d'utilisation du logiciel. Cette licence précise notamment si l'utilisateur est autorisé à installer le logiciel sur un ou plusieurs appareils, s'il peut le partager avec d'autres personnes, s'il peut le modifier, etc. En échange du respect de ces conditions, l'utilisateur est autorisé à utiliser le logiciel de manière légale.&lt;/p&gt;

&lt;p&gt;Voyons maintenant la différence entre un logiciel Open source et un logiciel libre.&lt;br&gt;
Les critères d'un logiciel libre, selon la Free Software Foundation (FSF, initiée par Richard Stallman) , sont les quatre libertés :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Liberté d'exécution :
 Exemple de Licence : GNU General Public License (GPL)
 La GPL permet aux utilisateurs d'exécuter le programme pour 
 n'importe quel usage.&lt;/li&gt;
&lt;li&gt;Liberté d'étude :
 Exemple de Licence : GNU General Public License (GPL)
 La GPL garantit l'accès au code source, permettant aux utilisateurs 
 d'étudier et de modifier le programme.&lt;/li&gt;
&lt;li&gt;Liberté de redistribution :
 Exemple de Licence : GNU General Public License (GPL)
 La GPL permet aux utilisateurs de redistribuer des copies du 
 programme, que ce soit en version originale ou modifiée.&lt;/li&gt;
&lt;li&gt;Liberté de distribution des versions modifiées :
 Exemple de Licence : GNU General Public License (GPL)
 La GPL permet aux utilisateurs de distribuer des copies de leurs 
 versions modifiées, tout en conservant les mêmes libertés pour les 
 autres utilisateurs.
Les critères d'un logiciel open source, selon l'Open Source Initiative (OSI), incluent les éléments suivants :&lt;/li&gt;
&lt;li&gt;Libre redistribution :
 Exemple de Licence : MIT License
 La MIT License permet la distribution du logiciel sans restriction.&lt;/li&gt;
&lt;li&gt;Code source :
 Exemple de Licence : Apache License 2.0
 La licence Apache 2.0 exige que le code source soit disponible.&lt;/li&gt;
&lt;li&gt;Travaux dérivés :
 Exemple de Licence : BSD License
 La BSD License permet la modification et la distribution de travaux 
 dérivés sous les mêmes conditions.&lt;/li&gt;
&lt;li&gt;Intégrité du code source de l'auteur :
 Exemple de Licence : Mozilla Public License 2.0
 La MPL 2.0 permet les modifications tout en exigeant que les 
 fichiers modifiés soient redistribués sous la même licence.&lt;/li&gt;
&lt;li&gt;Pas de discrimination contre des personnes ou des groupes :
 Exemple de Licence : MIT License
 La MIT License ne discrimine personne.&lt;/li&gt;
&lt;li&gt;Pas de discrimination contre des domaines d'application :
 Exemple de Licence : Apache License 2.0
 La licence Apache 2.0 ne limite pas l'utilisation du logiciel à 
 certains domaines.&lt;/li&gt;
&lt;li&gt;Distribution de la licence :
 Exemple de Licence : GNU General Public License (GPL)
 La GPL assure que les droits sont transférés à tous les 
 destinataires du programme.&lt;/li&gt;
&lt;li&gt;Licence non spécifique à un produit :
 Exemple de Licence : BSD License
 La BSD License n'exige pas que le programme soit partie intégrante 
 d'un produit spécifique.&lt;/li&gt;
&lt;li&gt;Licence non restrictive pour d'autres logiciels :
 Exemple de Licence : Apache License 2.0
 La licence Apache 2.0 ne pose pas de restrictions sur les logiciels 
 distribués avec le programme.&lt;/li&gt;
&lt;li&gt;Licence technologiquement neutre :
 Exemple de Licence : MIT License
 La MIT License ne fait pas référence à une technologie spécifique.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mais ce qu’il faut retenir c’est que tout logiciel libre est open source mais tout logiciel open source n’est pas libre, il y a aussi des gratuiciels (logiciel gratuit mais pas open source). Je vous recommande de mettre, en commentaire, des exemples d'applications ayant telle ou telle autre licence précitée.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wikimédia, écosystème open source par excellence
&lt;/h2&gt;

&lt;p&gt;C’est dans cela que nous avons passé la majeure partie du premier mois, on avait autant d’ouvrages à consulter, des documentations à parcourir et des ateliers à suivre et parfois partager quand bien même on n’a pas bien assimilé la leçon, bref c'était très intense. Ces connaissances acquises ne pouvaient nous aider en rien si on n’avait pas une bonne communauté où les expérimenter. Il est bien d’avoir une houe, mais il encore mieux de l’essayer au champ 🙂, c’est pourquoi dans le deuxième moi de mon stage chez Kali Academy, nous nous sommes maintenant intéressés aux projets open source, nous avons d’abord cherché de nous même, je me souviens j’avais forké un repo de “awesome” où j’ai eu trop de mal à contribuer et mon PR n’avait même pas été validé, mais mon coach m’a consolé en disant “le plus important c’est que tu as réussi à cloner le projet, à runer le projet et à résoudre l’issue, peut importe que ton PR soit mergé ou pas”, et c'est une des leçons que je garde à cœur. Ensuite, Kali nous a proposé d’approcher l’écosystème Wikimédia qui est de nos jours un des plus grands projets open sources avec son MediaWiki qui est le moteur qui propulse Wikipédia et son projet frères ainsi que d’autres wiki. C’était comme une forte immersion arrivée soudainement. Nous avions d’abord participé à un événement de code que Wikimédia a choisi de nommer “Wishathon”, au cours duquel il fallait corriger quelques bogues et résoudre certains issues dans les projets ciblés dans l’écosystème, c’était très intenses pour nous étant donné que c’était une première fois de nous retrouver dans ces genres d’événement, encore que c’était un événement mondial, je m'étais retrouvé en train de travailler avec un turc aussi débutant que moi en Anglais 😂, mais c’était wow. Ensuite, pour comprendre un peu comment faire mes premières contributions sur Wikipédia, Wikidata, wiki Common …. j’ai postulé à une bourse de la fondation Moleskine laquelle m’a permis de suivre tout cela en seulement 5 séances intenses. J’ai appris à installer MediaWiki de différentes façons, à créer des thèmes, des extensions …. C’était vraiment chouette cette aventure. Ouf ! 😣J’ai oublié de vous révéler une petite confidence, au cours du Wishathon j’ai reçu un gift venu expressément des USA, c’était un moment très émouvant !&lt;/p&gt;

&lt;h2&gt;
  
  
  Initier un projet open source
&lt;/h2&gt;

&lt;p&gt;Normalement l’initiation à l’open source devrait s’achever là, mais Kali Academy a souhaité que nous puissions initier aussi des projets open source sur lesquels d’autres personnes vont aussi contribuer. Dans ce cadre, j’ai été mis dans une équipe où on était à trois, moi, mon ami que j’appelle toujours beau frère Firmin NGANDULI et le petit Christian BIREGO, un très bon geek. Ensemble, on a travaillé sur une application nommée LeaderBoard qui compare les contributions des bénévoles sur les projets Wikimédia et les classes en fonction du nombre des contributions. Voici le lien de l’application déployée &lt;a href="https://wikileaderboard.netlify.app/" rel="noopener noreferrer"&gt;ici&lt;/a&gt; et de la documentation &lt;a href="https://meta.wikimedia.org/wiki/Documentation_LeaderBoard" rel="noopener noreferrer"&gt;ici&lt;/a&gt;… Si vous êtes intéressé par ce projet, dites-le moi aussi en commentaire.&lt;/p&gt;

&lt;p&gt;En bref, c’est à ça qu'à ressemblé mon parcours de stage chez Kali Academy, c'était une expérience extrêmement passionnante, j’ai goûté un peu au code professionnel, à l’expertise des grands développeurs open source de Wikimédia… Je remercie Kali Academy pour m’avoir offert cette opportunité, malgré mon niveau et mes faiblesses, je remercie également tous mes collègues avec lesquels on a fait ce parcours ainsi que vous tous qui avez lu cet article jusqu’ici, je vous prie de me faire des corrections en privé s’il en y a 🙂. Ainsi commence mon parcours d’apprenti hacker, à nous revoir dans le future 🙂, étant déjà hackeur 😂&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Trois mois à Kali Academy : Une Immersion dans l'Open Source.</title>
      <dc:creator>Patrice Kalwira</dc:creator>
      <pubDate>Fri, 14 Jun 2024 20:23:14 +0000</pubDate>
      <link>https://forem.com/kaliacad/resume-de-mon-stage-a-kali-academy-une-immersion-dans-lopen-source-2ok3</link>
      <guid>https://forem.com/kaliacad/resume-de-mon-stage-a-kali-academy-une-immersion-dans-lopen-source-2ok3</guid>
      <description>&lt;p&gt;Je m'appelle Patrice Kalwira et je suis un développeur web fullstack.&lt;br&gt;
Cet article est un condensé sur mon parcours en tant que stagiaire au sein de l'organisation Open Source Kali Academy, basée à Goma, à l'Est de la République Démocratique du Congo.&lt;br&gt;
Durant trois mois, j'ai eu l'opportunité exceptionnelle de participer à un stage intensif au sein de Kali Academy, une organisation dynamique spécialisée dans l'open. Cette expérience enrichissante m'a permis de plonger dans les profondeurs de l'open source, de découvrir Kali Academy, ses différents projets et programmes. Plus encore, c'était une immersion totale dans le monde de la Wikimedia Foundation et ses projets mais aussi y apporter ma modeste contribution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C'est quoi Kali Academy ?&lt;/strong&gt;&lt;br&gt;
Kali Academy est une académie qui vise à promouvoir les valeurs de l'open source dans les régions les moins représentées notament en Afrique. Les valeurs clés de l'open source sont le partage, la collaboration et bien sûr aussi la contribution. Son cible majeur est les étudiants ainsi que les récents diplômés. Mais il n'oublie pas aussi toute la communauté qui doit être aussi sensibilisée sur l'open source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programme de stage&lt;/strong&gt;&lt;br&gt;
Notre stage a duré trois mois et pour chaque mois nous avions une concentration pricipale particulière&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Premier mois : Hacking, Linux et projets de Kali Academy&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comment devenir un bon hacker&lt;/strong&gt;&lt;br&gt;
Comme on aspirait de dévenir tous des hachers, notre voyage a commencé par la formation sur comment devenir un hacker (bien que la plupart des gens confondent hacker et cracker). Nous avons appris les attitudes à adopter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Introduction au système Linux&lt;/strong&gt;&lt;br&gt;
La plupart des vrais hackers utilisent Linux comme système d'exploitation. D'où même si on ne va pas forcement utiliser Linux quotidiennement on est sensé avoir en tête quelques commandes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Présentation des projets de Kali Academy&lt;/strong&gt;&lt;br&gt;
Nous avons eu des séances sur comment trouver un projet open source passionnant et comment faire pour y contribuer. Notre premier exercice en ce terme était d'aller sur &lt;a href="https://github.com/kaliacad/" rel="noopener noreferrer"&gt;le github de Kali Academy&lt;/a&gt; et y choisir quelques issues à travailler.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Deuxième mois : Hacking avec MediaWiki&lt;/strong&gt;&lt;br&gt;
Ce mois visait prémièrement à familiariser les stagiaires au moteur Mediawiki qui propulse la quasi totalité des applications de Wikimedia. &lt;br&gt;
Cette partie a été très capitale car elle nous a permis de commencer à faire des contributions techniques (écriture des codes) directement sur les projets de Wikimedia.&lt;br&gt;
Les projets sur lesquels nous avons passé trop de temps sont Wikipédia et Wikidata. Il y en a eu plusieurs mais ces deux méritent d'être mentionnés ici.&lt;br&gt;
Durant ce mois, nous avons créé &lt;a href="https://github.com/kaliacad/WD-Vanila" rel="noopener noreferrer"&gt;un petit moteur &lt;/a&gt;de recherche qui récupère des données à partir de Wikidata en utilisant l'API de Wikidata. Ce projet nous a permis de mettre en pratique c'est que nous avons appris dans un événement en ligne qui parlait de Wikidata.&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%2Fzthormknkzu2cu46f1r8.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%2Fzthormknkzu2cu46f1r8.jpg" alt="Kali Academy" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Troisième mois : Projet final&lt;/strong&gt;&lt;br&gt;
Après ces deux mois d'apprentissage, le dernier mois visait à concrétiser tout ce qu'on avait déjà appris en créant des applications.&lt;br&gt;
Pour notre projet final, dans un groupe de 4, nous avons développeé &lt;a href="https://github.com/kaliacad/wikidataqueriIA" rel="noopener noreferrer"&gt;une application qui utilise l'intelligence artificielle&lt;/a&gt; pour générer les requêtes SPARQL en utilisant le langage humain.&lt;br&gt;
Le projet est évidemment open source et si ça vous tente, contribuez sans modération.&lt;/p&gt;

&lt;p&gt;L'un des points forts de ce stage a été notre participation active à divers hackathons et ateliers organisés par la Wikimedia Foundation, Kiwix, ... Ces événements étaient des occasions idéales pour appliquer les compétences acquises dans des contextes pratiques et collaboratifs. Nous avons travaillé sur des projets divers, allant de l'amélioration des outils existants de Wikimedia à la création de nouvelles applications innovantes. Ces hackathons nous ont également permis de réseauter avec des professionnels de l'industrie et de recevoir des conseils précieux pour notre développement personnel et professionnel.&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%2F6tkmv3jly653lqd5ngg3.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%2F6tkmv3jly653lqd5ngg3.jpg" alt="Kali Academy" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Voici une liste non exhaustive d'activités dans lequelles nous avons eu l'honneur de participer : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://meta.wikimedia.org/wiki/Event:WishathonMarch2024" rel="noopener noreferrer"&gt;Wishaton March 2024&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.wikidata.org/wiki/Wikidata:Events/Leveling_Up_Days_2024" rel="noopener noreferrer"&gt;Wikidata Leveling Up 2024&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://meta.wikimedia.org/wiki/Event:WMA-MediaWiki_101:Becoming_a_MediaWiki_Hacker" rel="noopener noreferrer"&gt;WMA-MediaWiki 101:Becoming a MediaWiki Hacker&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Beacoup d'activités organisées par Wikimedia RDC&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Ce stage à Kali Academy a été une expérience transformative, offrant une immersion profonde dans le monde de l'open source, des compétences techniques solides, et l'opportunité de travailler sur des projets innovants avec des applications réelles. Les connaissances et les compétences acquises pendant ces trois mois sont inestimables et ouvrent de nombreuses portes pour des opportunités futures. Kali Academy a fourni un environnement d'apprentissage exceptionnel qui nous a préparés à devenir des contributeurs actifs et innovants dans le domaine de l'open source.&lt;br&gt;
Il y avait beacoup de choses à écrire mais j'ai fait juste un bref résumé. Si vous avez des questions, n'hésitez pas à les poser dans les commentaires&lt;br&gt;
Je remercie toute l'administration de Kali Academy, tous mes collègues stagiaires et tous les contributeurs à l'open source en général quel que soit le projet.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>Rapport de Stage chez Kali Academy</title>
      <dc:creator>Gérard Cubaka</dc:creator>
      <pubDate>Fri, 14 Jun 2024 17:36:32 +0000</pubDate>
      <link>https://forem.com/kaliacad/rapport-de-stage-chez-kali-academy-2gn4</link>
      <guid>https://forem.com/kaliacad/rapport-de-stage-chez-kali-academy-2gn4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Remerciements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Je tiens à remercier monsieur Abel Mbula CEO de Kali Academy madame Patience Kavira pour l'opportunité de participer à ce stage, ainsi que les formateurs monsieur Delord Wayire et les collegues de la cohort Mars 2024 de Kali Academy spétialement mon binome Firmin Finva et mes coéquipiers du projet Wikidata Query AI, Landry Bitege, Patrice Kalwira et Espoir Birusha pour leur collaboration, leur soutien et leur partage de connaissances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ce rapport présente mon expérience de stage chez Kali Academy à Goma, en République Démocratique du Congo. Le stage s'est déroulé du 11 mars au 14 Juin 2024 et a été l'occasion de découvrir l'univers du développement open-source et de la culture hacker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Première leçon : L'attitude hacker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le premier mois du stage a été consacré à la présentation du concept de hacker, en s'appuyant sur le texte "What is the Hacker &amp;amp; Hacker Attitude" d'Eric Steven Raymond. Ce texte a permis de comprendre la distinction fondamentale entre les hackers et les crackers. Les hackers sont des passionnés de technologie qui construisent et partagent des outils et des ressources, tandis que les crackers sont des individus motivés par des intentions malveillantes.&lt;/p&gt;

&lt;p&gt;L'attitude hacker est basée sur cinq principes clés :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Le monde regorge de problèmes fascinants qui attendent d'être résolus.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aucun problème ne devrait jamais devoir être résolu deux fois.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L'ennui et la corvée sont mauvais.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La liberté est une bonne chose.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L'attitude ne remplace pas la compétence.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En adoptant ces principes, les hackers développent une approche proactive et créative pour résoudre des problèmes et contribuer à l'avancement technologique.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn In Public&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le deuxième mois du stage a été consacré au concept de "Learn In Public". Ce concept encourage à partager ses connaissances et à apprendre en permanence en créant du contenu éducatif et en participant à des événements. L'objectif est de ne pas se focaliser sur la reconnaissance extérieure, mais plutôt sur l'amélioration personnelle et l'aide aux autres.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contribuer sur un issue sur GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le dernier mois du stage a été consacré à l'apprentissage des étapes à suivre pour contribuer à un problème (issue) sur GitHub. Les étapes clés sont les suivantes :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;S'assurer que l'issue est toujours ouverte&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lire les instructions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fork le dépôt&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloner le dépôt en local&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Créer une branche locale&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effectuer les modifications nécessaires&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commit et push&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Créer une Pull Request (PR)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suivre les commentaires et effectuer les modifications nécessaires&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attendre la validation et fusion&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En suivant ces étapes, les contributeurs peuvent apporter des modifications aux projets open-source et participer à leur développement.&lt;/p&gt;

&lt;p&gt;Ce stage chez Kali Academy a été une expérience enrichissante qui m'a permis de découvrir la culture hacker et les principes du développement open-source. J'ai également appris à partager mes connaissances et à contribuer à des projets collaboratifs. Je suis reconnaissant envers les formateurs et les membres de la communauté Kali Academy pour leur accueil et leur partage de connaissances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prochaines étapes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Je compte mettre en pratique les connaissances acquises lors de ce stage en continuant à apprendre sur le développement open-source et en contribuant à des projets qui me passionnent. Je souhaite également partager mes connaissances avec d'autres personnes en créant du contenu éducatif et en participant à des événements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deuxième leçon : Choisir un projet open-source et apprendre les bases de Git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le deuxième jour du stage a été consacré à deux thématiques importantes :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Choisir un projet open-source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La sélection d'un projet open-source sur lequel contribuer est une étape cruciale pour s'impliquer dans la communauté open-source. Pour faire un choix éclairé, il est recommandé de prendre en compte les points suivants :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intérêts personnels:&lt;/strong&gt; Orienter le choix vers un projet en adéquation avec ses centres d'intérêt, qu'il s'agisse d'un domaine technologique spécifique, d'un langage de programmation apprécié ou d'une cause qui tient à cœur.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Niveau de compétence:&lt;/strong&gt; Sélectionner un projet correspondant à son niveau de compétences. Certains projets s'adressent davantage aux débutants, tandis que d'autres exigent des compétences plus avancées.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Taille du projet:&lt;/strong&gt; Considérer la taille du projet et de sa communauté. Les projets plus petits peuvent offrir une expérience plus collaborative, tandis que les projets plus importants peuvent présenter des opportunités d'apprentissage et de contribution à plus grande échelle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Problèmes ouverts:&lt;/strong&gt; Explorer la liste des problèmes ouverts (issues) sur GitHub pour identifier des tâches à réaliser. Certains projets signalent les problèmes adaptés aux nouveaux contributeurs, ce qui peut constituer un bon point de départ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ressources pour trouver des projets open-source:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Explore:&lt;/strong&gt; Explorer la section "Explore" sur GitHub pour découvrir des projets populaires et en vogue dans divers domaines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Topics:&lt;/strong&gt; Utiliser la fonction "Topics" sur GitHub pour rechercher des projets par catégorie, langage de programmation ou technologie.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hacktoberfest:&lt;/strong&gt; Participer à des événements comme Hacktoberfest qui encouragent la contribution à des projets open-source pendant le mois d'octobre.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sites Web dédiés:&lt;/strong&gt; Consulter des sites web comme Open Source Friday, Up For Grabs, CodeTriage ou First Timers Only qui répertorient des projets open-source accueillant les nouveaux contributeurs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Réseaux sociaux et forums:&lt;/strong&gt; Suivre des comptes et des communautés liés à l'open-source sur les réseaux sociaux, et participer à des forums comme Reddit r/opensource pour découvrir des projets intéressants.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Apprendre les bases de Git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Git est un système de contrôle de version essentiel pour le développement open-source. Il permet de suivre les modifications apportées aux fichiers, de collaborer avec d'autres contributeurs et de gérer différentes versions du code. Le stage a permis d'acquérir les connaissances fondamentales pour utiliser Git, notamment :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Création d'un branch:&lt;/strong&gt; &lt;code&gt;git checkout -b nom_de_la_branche&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigation dans les fichiers et répertoires:&lt;/strong&gt; &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Création, copie, déplacement et suppression de fichiers et répertoires:&lt;/strong&gt; &lt;code&gt;touch&lt;/code&gt;, &lt;code&gt;mkdir&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Affichage du contenu des fichiers:&lt;/strong&gt; &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;more&lt;/code&gt;, &lt;code&gt;less&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recherche de fichiers:&lt;/strong&gt; &lt;code&gt;find&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changement des permissions des fichiers:&lt;/strong&gt; &lt;code&gt;chmod&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commandes utiles:&lt;/strong&gt; &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;wc&lt;/code&gt;, &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utilisation de l'éditeur Nano:&lt;/strong&gt; &lt;code&gt;nano&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utilisation de l'éditeur Vim:&lt;/strong&gt; &lt;code&gt;vim&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ressources pour apprendre Git:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/news/git-and-github-for-beginners/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/news/git-and-github-for-beginners/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.gitlab.com/ee/ci/migration/github_actions.html" rel="noopener noreferrer"&gt;https://docs.gitlab.com/ee/ci/migration/github_actions.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.atlassian.com/jira-cloud-administration/docs/link-github-workflows-and-deployments-to-jira-issues/" rel="noopener noreferrer"&gt;https://support.atlassian.com/jira-cloud-administration/docs/link-github-workflows-and-deployments-to-jira-issues/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/git/tutorials/comparing-workflows" rel="noopener noreferrer"&gt;https://www.atlassian.com/git/tutorials/comparing-workflows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/RGOj5yH7evk" rel="noopener noreferrer"&gt;https://youtu.be/RGOj5yH7evk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les deux premiers mois du stage ont permis de découvrir les principes fondamentaux du développement open-source, l'importance de la contribution à des projets existants et les outils essentiels pour s'impliquer dans la communauté. Le choix d'un projet adapté et l'apprentissage des bases de Git constituent des étapes préalables importantes pour débuter en tant que contributeur open-source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Troisième mois : Contribution à un projet open-source et apprentissage de Wikidata&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le troisième mois du stage ont été consacrés à la mise en pratique des connaissances acquises. Les stagiaires ont eu l'opportunité de :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Contribuer à un projet open-source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En se basant sur les notions apprises les deux premiers jours, les stagiaires ont choisi un projet open-source auquel ils souhaitaient contribuer. Ils ont suivi les étapes suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forker le projet:&lt;/strong&gt; Ils ont créé une copie du projet sur leur propre compte GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloner le projet en local:&lt;/strong&gt; Ils ont téléchargé le projet sur leur ordinateur.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Effectuer les modifications:&lt;/strong&gt; Ils ont apporté des modifications au code du projet en suivant les directives et les besoins du projet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tester les modifications:&lt;/strong&gt; Ils ont testé leurs modifications pour s'assurer qu'elles ne causaient pas de problèmes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pusher les modifications:&lt;/strong&gt; Ils ont envoyé leurs modifications vers leur fork sur GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Créer une Pull Request:&lt;/strong&gt; Ils ont soumis une demande de fusion pour que leurs modifications soient intégrées au projet original.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Apprendre les bases de Wikidata&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wikidata est une base de données collaborative permettant de stocker et d'interroger des informations structurées. Les stagiaires ont découvert :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La structure de Wikidata:&lt;/strong&gt; Ils ont compris comment les données sont organisées en triplets sujet-prédicat-objet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le langage SPARQL:&lt;/strong&gt; Ils ont appris à utiliser SPARQL pour interroger les données de Wikidata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Des exemples de requêtes SPARQL:&lt;/strong&gt; Ils ont pratiqué la formulation de requêtes pour récupérer des informations spécifiques de Wikidata.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ressources pour apprendre Wikidata:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://query.wikidata.org/" rel="noopener noreferrer"&gt;https://query.wikidata.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial" rel="noopener noreferrer"&gt;https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wikidata.org/wiki/Q31386861" rel="noopener noreferrer"&gt;https://www.wikidata.org/wiki/Q31386861&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le stage chez Kali Academy a permis aux participants d'acquérir des connaissances fondamentales sur le développement open-source et l'utilisation de Wikidata. Ils ont pu mettre en pratique leurs acquis en contribuant à un projet open-source et en explorant les requêtes SPARQL. Ce stage a constitué une expérience enrichissante et motivante pour les stagiaires, les encourageant à s'impliquer davantage dans la communauté open-source et à poursuivre leur apprentissage dans ce domaine.&lt;/p&gt;

&lt;p&gt;Gérard Cubaka Bisimwa&lt;br&gt;
&lt;a href="https://ger-cub.github.io/portfoliogerard/" rel="noopener noreferrer"&gt;https://ger-cub.github.io/portfoliogerard/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>react</category>
      <category>wikipedia</category>
    </item>
    <item>
      <title>My Journey Internship at Kali Academy</title>
      <dc:creator>Birusha Ndegeya</dc:creator>
      <pubDate>Fri, 14 Jun 2024 08:08:55 +0000</pubDate>
      <link>https://forem.com/kaliacad/my-journey-internship-at-kali-academy-5bng</link>
      <guid>https://forem.com/kaliacad/my-journey-internship-at-kali-academy-5bng</guid>
      <description>&lt;p&gt;I am Birusha Ndegeya, a student software developer specializing in web and mobile apps at Kadea Academy in Goma. During my three-month training at Kali Academy, I dedicated myself to an open-source project and was accepted to dive into the fascinating world of open source.&lt;/p&gt;

&lt;p&gt;The internship started on May 11 and ended on June 11 in Goma, North-Kivu, Democratic Republic of Congo. The goal of this internship was to provide practical experience through concrete projects and to train participants on how to contribute to open-source projects and behave within a community.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Progress of My Internship
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The First Month: The Foundation
&lt;/h3&gt;

&lt;p&gt;The first month of our internship was focused on establishing solid foundations. We followed a structured program to become "real" hackers, which included learning in public, using the Linux system, and mastering the command line interface (CLI). We also reviewed Git and GitHub, essential tools for any open-source developer. A highlight of this period was reading the book "Roads and Bridges: The Unseen Labor Behind Our Digital Infrastructure," which profoundly enlightened us about the importance and philosophy of open source.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Second Month: Specialization in Wikimedia
&lt;/h3&gt;

&lt;p&gt;The second month immersed us in the fascinating world of Wikimedia. We had a quick introduction to Wikipedia and Wikidata and learned how to customize Wikipedia by modifying themes, gadgets, and beta features. We deepened our skills in Wikicode and advanced editing, working on models and templates. We also learned how to create and use Wikidata tools such as the Wikidata REST APIs and SPARQL. This month was crucial for understanding how to effectively contribute to Wikimedia projects and become Mediawiki experts.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Third Month: Final Projects
&lt;/h3&gt;

&lt;p&gt;In the last month, we were divided into two groups to work on final internship projects. I had the opportunity to participate in an exciting project called "Wiki Data Query AI." This open-source software is designed to help users perform queries on Wikidata without needing to know the SPARQL language. Working on this project allowed me to apply all the skills acquired during the first two months and contribute to a truly innovative tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Impact and Reflection
&lt;/h3&gt;

&lt;p&gt;This internship at Kali Academy was a transformative experience. I not only acquired valuable technical skills but also gained a better understanding of the importance of open source. Collaboration with my fellow interns and our mentors also helped me develop essential interpersonal skills, such as teamwork and communication.&lt;/p&gt;

&lt;p&gt;I personally thank our mentors Abel Mbula, Delord, and other mentors for dedicating their time and efforts to our training. Along the way, I am truly grateful to my friends who were there to answer my questions. It was a great experience to be among those students. I truly thank them and am ready for other exciting challenges.&lt;/p&gt;

</description>
      <category>career</category>
      <category>opensource</category>
      <category>programming</category>
      <category>coding</category>
    </item>
    <item>
      <title>Mon aventure en tant que stagiaire chez Kali Academy : Une immersion dans l'open source</title>
      <dc:creator>Landry Bitege</dc:creator>
      <pubDate>Fri, 14 Jun 2024 06:42:49 +0000</pubDate>
      <link>https://forem.com/kaliacad/mon-aventure-en-tant-que-stagiaire-chez-kali-academy-une-immersion-dans-lopen-source-1an</link>
      <guid>https://forem.com/kaliacad/mon-aventure-en-tant-que-stagiaire-chez-kali-academy-une-immersion-dans-lopen-source-1an</guid>
      <description>&lt;p&gt;Je m'appelle &lt;strong&gt;Landry Bitege&lt;/strong&gt; et je suis étudiant en développement web et mobile à &lt;strong&gt;&lt;a href="https://www.kadea.academy/" rel="noopener noreferrer"&gt;Kadea Academy/Goma&lt;/a&gt;&lt;/strong&gt;. Au cours de ma formation, une opportunité exceptionnelle s'est présentée : un stage professionnel de trois mois avec &lt;a href="https://kaliacademy.org/" rel="noopener noreferrer"&gt;Kali Academy&lt;/a&gt;, une organisation dédiée à l'open source. Attiré par le développement logiciel, mais sans expérience préalable dans l'open source, j'ai décidé de relever le défi et de postuler. À ma grande joie, j'ai été accepté, rejoignant une équipe de dix stagiaires prêts à plonger dans cet univers fascinant.&lt;/p&gt;

&lt;p&gt;Ce stage, qui s'est déroulé du 11 mars au 11 juin, au sein des installations de &lt;a href="https://goma-innovation.com/" rel="noopener noreferrer"&gt;GO INNOVATION&lt;/a&gt;, situées sur le Boulevard Kanya Mulanga à Goma, Nord-Kivu, avait pour objectif de nous initier aux pratiques de l'open source et de nous permettre de contribuer à des projets concrets. Ce fut bien plus qu'une simple introduction : une véritable aventure enrichissante, tant sur le plan professionnel que personnel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le déroulement de mon stage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Le premier mois : La Fondation
&lt;/h3&gt;

&lt;p&gt;Le premier mois de notre stage était axé sur l'établissement de bases solides. Nous avons suivi un programme structuré pour devenir des "vrais" hackers, comprenant l'apprentissage en public, l'utilisation du système Linux, et la maîtrise de la ligne de commande (CLI). Nous avons également révisé Git et GitHub, des outils essentiels pour tout développeur open source. Un des moments forts de cette période fut la lecture du livre "&lt;a href="https://www.fordfoundation.org/work/learning/research-reports/roads-and-bridges-the-unseen-labor-behind-our-digital-infrastructure/" rel="noopener noreferrer"&gt;Roads and Bridges: The Unseen Labor Behind Our Digital Infrastructure&lt;/a&gt;", qui nous a profondément éclairés sur l'importance et la philosophie de l'open source.&lt;/p&gt;

&lt;h3&gt;
  
  
  Le deuxième mois : Spécialisation Wikimedia
&lt;/h3&gt;

&lt;p&gt;Le deuxième mois nous a plongés dans l'univers fascinant de Wikimedia. Nous avons eu une introduction rapide à Wikipedia et &lt;a href="https://www.wikimedia.org/" rel="noopener noreferrer"&gt;Wikidata&lt;/a&gt;, et avons appris à personnaliser &lt;a href="https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt; en modifiant les thèmes, gadgets, et fonctionnalités bêta. Nous avons approfondi nos compétences en &lt;a href="https://www.mediawiki.org/wiki/Help:Formatting/fr" rel="noopener noreferrer"&gt;Wikicode&lt;/a&gt; et l'édition avancée, en travaillant sur des modèles et des templates. Nous avons également appris à créer et utiliser des outils des &lt;a href="https://www.wikidata.org/wiki/Wikidata:Main_Page" rel="noopener noreferrer"&gt;Wikidata&lt;/a&gt; comme les API REST de wikidata et les SPARQL. Ce mois était crucial pour comprendre comment contribuer efficacement à des projets Wikimedia et devenir des experts Mediawiki.&lt;/p&gt;

&lt;h3&gt;
  
  
  Le troisième mois : Projets de Fin de Stage
&lt;/h3&gt;

&lt;p&gt;Pour le dernier mois, nous avons été divisés en deux groupes pour travailler sur des projets de fin de stage. J'ai eu l'opportunité de participer à un projet passionnant nommé "Wiki Data Query AI". Ce logiciel open source est conçu pour aider les utilisateurs à effectuer des requêtes sur Wikidata query sans avoir besoin de connaître le langage SPARQL. Travailler sur ce projet m'a permis d'appliquer toutes les compétences acquises durant les deux premiers mois et de contribuer à un outil véritablement innovant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact et Réflexion
&lt;/h2&gt;

&lt;p&gt;Ce stage chez Kali Academy a été une expérience transformative. J'ai non seulement acquis des compétences techniques précieuses mais aussi une meilleure compréhension de l'importance de l'open source. La collaboration avec mes collègues stagiaires et nos mentors m'a également aidé à développer des compétences interpersonnelles essentielles, telles que le travail en équipe et la communication efficace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Je tiens à remercier particulièrement mes mentors et collègues pour leur soutien et leurs conseils tout au long de cette aventure. À ceux qui envisagent de suivre ce chemin, je recommande de s'immerger pleinement dans l'expérience, de ne pas hésiter à poser des questions et de toujours chercher à apprendre et à contribuer.&lt;/p&gt;

&lt;p&gt;En somme, ce stage a été une expérience inestimable qui a profondément marqué mon parcours personnel et professionnel. J'en ressors enrichi et prêt à relever de nouveaux défis.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>career</category>
      <category>coding</category>
    </item>
    <item>
      <title>Meilleures pratiques pour créer une application Express.js</title>
      <dc:creator>Landry Bitege</dc:creator>
      <pubDate>Thu, 13 Jun 2024 14:07:54 +0000</pubDate>
      <link>https://forem.com/kaliacad/meilleures-pratiques-pour-creer-une-application-expressjs-1e5b</link>
      <guid>https://forem.com/kaliacad/meilleures-pratiques-pour-creer-une-application-expressjs-1e5b</guid>
      <description>&lt;h1&gt;
  
  
  Partie 2 : Meilleures pratiques et fonctionnalités avancées pour créer une application Express.js
&lt;/h1&gt;

&lt;h4&gt;
  
  
  Introduction
&lt;/h4&gt;

&lt;p&gt;Pour la 1ère partie, je vous invite à visité l'article où j'ai parler de &lt;a href="https://dev.to/land-bit/meilleures-pratiques-pour-creer-une-application-expressjs-583g"&gt;l'introduction d'express et ses concepts fondamentaux&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Si c'est déjà fait, ici on va voir des notion un peu avancer.&lt;/p&gt;

&lt;p&gt;Dans le monde du développement web, il existe une multitude de bibliothèques et de frameworks disponibles pour résoudre une variété de problèmes. Bien que nous abordions certaines des options populaires dans cet article, l'objectif n'est pas de vous prescrire des solutions spécifiques, mais de vous montrer les bonnes pratiques et les concepts qui peuvent être appliqués avec différentes technologies selon vos préférences et vos besoins. Que vous choisissiez Mongoose ou un autre ODM, Passport.js ou une autre solution d'authentification, l'important est de comprendre comment intégrer et utiliser efficacement ces outils pour créer des applications Express.js robustes et évolutives. Explorons maintenant comment structurer et améliorer vos applications Express.js.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Structurer une application Express.js de manière organisée et évolutive
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Architecture MVC (Model-View-Controller)
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Modèles :&lt;/strong&gt; Les modèles définissent les schémas de données et les interactions avec la base de données. Utilisez &lt;a href="https://mongoosejs.com/" rel="noopener noreferrer"&gt;Mongoose&lt;/a&gt; pour &lt;a href="https://www.mongodb.com/" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;, par exemple.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// models/User.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Schema&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="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userSchema&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Vues :&lt;/strong&gt; Les vues gèrent les templates et le rendu des pages. Utilisez un moteur de templates comme &lt;a href="https://ejs.co/" rel="noopener noreferrer"&gt;EJS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;HTML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- views/index.ejs --&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Home&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome, &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;user.name&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contrôleurs :&lt;/strong&gt; Les contrôleurs contiennent la logique des routes et des actions de l'application.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// controllers/userController.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../models/User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;user&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;h5&gt;
  
  
  Organisation des fichiers et dossiers
&lt;/h5&gt;

&lt;p&gt;Organisez vos fichiers et dossiers de manière structurée pour maintenir la clarté et la facilité de maintenance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myapp/
├── config/
│   └── config.js
├── controllers/
│   └── userController.js
├── middlewares/
│   └── auth.js
├── models/
│   └── User.js
├── routes/
│   └── userRoutes.js
├── views/
│   └── index.ejs
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Utilisation d'un outil de scaffolding
&lt;/h5&gt;

&lt;p&gt;Utilisez des générateurs comme &lt;a href="https://yeoman.io/" rel="noopener noreferrer"&gt;Yeoman&lt;/a&gt; pour créer la structure de base de l'application.&lt;/p&gt;

&lt;p&gt;Shell&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; yo generator-express
yo express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Utiliser des modules et des bibliothèques tierces pour étendre les fonctionnalités d'Express
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Mongoose pour MongoDB
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://mongoosejs.com/" rel="noopener noreferrer"&gt;Mongoose&lt;/a&gt; est un ODM (Object Data Modeling) pour &lt;a href="https://www.mongodb.com/" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt; et &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongodb://localhost:27017/myapp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;useNewUrlParser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;useUnifiedTopology&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Passport.js pour l'authentification
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.passportjs.org/" rel="noopener noreferrer"&gt;Passport.js&lt;/a&gt; permet d'implémenter facilement des stratégies d'authentification.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// config/passport.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passport&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;passport&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LocalStrategy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;passport-local&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;Strategy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../models/User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;passport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LocalStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;done&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Incorrect username.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validPassword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;done&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Incorrect password.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;done&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&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;h5&gt;
  
  
  Socket.io pour les communications en temps réel
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://socket.io/" rel="noopener noreferrer"&gt;Socket.io&lt;/a&gt; ajoute des fonctionnalités de &lt;strong&gt;WebSockets&lt;/strong&gt; pour les applications en temps réel.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;socketIo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;socket.io&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;io&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;socketIo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;connection&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a user connected&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;disconnect&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user disconnected&lt;/span&gt;&lt;span class="dl"&gt;'&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;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;listening on *:3000&lt;/span&gt;&lt;span class="dl"&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;h5&gt;
  
  
  Helmet pour la sécurité
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://helmetjs.github.io/" rel="noopener noreferrer"&gt;Helmet&lt;/a&gt; aide à sécuriser l'application en configurant divers en-têtes HTTP.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;helmet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;helmet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;helmet&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Morgan pour la journalisation
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/morgan" rel="noopener noreferrer"&gt;Morgan&lt;/a&gt; est un middleware de journalisation des requêtes HTTP.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;morgan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;morgan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;morgan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;combined&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Gérer la sécurité des applications Express.js
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Protection contre les attaques courantes
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Injection SQL :&lt;/strong&gt; Utilisez des ORM/ODM sécurisés et des requêtes paramétrées.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Using Mongoose to avoid SQL injection&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cross-Site Scripting (XSS) :&lt;/strong&gt; Échappez les données de l'utilisateur et utilisez des bibliothèques comme &lt;code&gt;[xss-clean](https://www.npmjs.com/package/xss-clean)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;xss&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xss-clean&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;xss&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cross-Site Request Forgery (CSRF) :&lt;/strong&gt; Utilisez des &lt;a href="https://dearsikandarkhan.medium.com/csrf-tokens-in-expressjs-node-js-web-framework-cc331069de2d" rel="noopener noreferrer"&gt;tokens CSRF&lt;/a&gt; pour protéger les formulaires.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;csrf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;csurf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;csrfProtection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;csrf&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;csrfProtection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// In your route&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/form&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;send&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;csrfToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;csrfToken&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;h5&gt;
  
  
  Mise à jour des dépendances
&lt;/h5&gt;

&lt;p&gt;Utilisez &lt;code&gt;npm audit&lt;/code&gt; et &lt;code&gt;nsp&lt;/code&gt; pour vérifier et corriger les vulnérabilités.&lt;/p&gt;

&lt;p&gt;Shell&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Configurer HTTPS
&lt;/h5&gt;

&lt;p&gt;Utilisez &lt;a href="https://letsencrypt.org/" rel="noopener noreferrer"&gt;Let's Encrypt&lt;/a&gt; pour obtenir des certificats &lt;a href="https://www.ssl.com/fr/certificats/gratuit/" rel="noopener noreferrer"&gt;SSL/TLS&lt;/a&gt; gratuits.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/path/to/key.pem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;cert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/path/to/cert.pem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Déployer et mettre à l'échelle une application Express.js
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Héberger sur des plateformes cloud
&lt;/h5&gt;

&lt;p&gt;Des plateformes comme &lt;a href="https://render.com/" rel="noopener noreferrer"&gt;Render&lt;/a&gt;, &lt;a href="https://aws.amazon.com/fr/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;, &lt;a href="https://www.heroku.com/" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;, et &lt;a href="https://try.digitalocean.com/developerbrand/?_campaign=emea_brand_kw_en_cpc&amp;amp;_adgroup=digitalocean_exact_exact&amp;amp;_keyword=digitalocean&amp;amp;_device=c&amp;amp;_adposition=&amp;amp;_content=conversion&amp;amp;_medium=cpc&amp;amp;_source=bing&amp;amp;msclkid=f31cfe1fac4c12ea6f9498755d8d44f6&amp;amp;utm_source=bing&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=emea_brand_kw_en_cpc&amp;amp;utm_term=digitalocean&amp;amp;utm_content=DigitalOcean%20Exact_Exact" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; facilitent le déploiement.&lt;/p&gt;

&lt;p&gt;Shell&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Exemple de déploiement sur Heroku&lt;/span&gt;
heroku create
git push heroku master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Utilisation de &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;
&lt;/h5&gt;

&lt;p&gt;Conteneurisez l'application pour un déploiement portable et reproductible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Dockerfile&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:14&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "app.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Load balancing et scaling
&lt;/h5&gt;

&lt;p&gt;Configurez un load balancer pour répartir le trafic et utilisez des outils comme &lt;a href="https://pm2.io/" rel="noopener noreferrer"&gt;PM2&lt;/a&gt; pour gérer les processus Node.js.&lt;/p&gt;

&lt;p&gt;Shell&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# PM2&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;pm2 &lt;span class="nt"&gt;-g&lt;/span&gt;
pm2 start app.js &lt;span class="nt"&gt;-i&lt;/span&gt; max
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Bonnes pratiques pour le développement avec Express.js
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Tests unitaires et d'intégration
&lt;/h5&gt;

&lt;p&gt;Utilisez &lt;a href="https://mochajs.org/" rel="noopener noreferrer"&gt;Mocha&lt;/a&gt;, &lt;a href="https://www.chaijs.com/" rel="noopener noreferrer"&gt;Chai&lt;/a&gt; et &lt;a href="https://www.npmjs.com/package/supertest" rel="noopener noreferrer"&gt;Supertest&lt;/a&gt; pour écrire et exécuter des tests.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// test/user.test.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;supertest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET /user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;responds with json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Accept&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="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sr"&gt;/json/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;done&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;h5&gt;
  
  
  Documentation
&lt;/h5&gt;

&lt;p&gt;Utilisez des outils comme &lt;a href="https://swagger.io/" rel="noopener noreferrer"&gt;Swagger&lt;/a&gt; pour documenter les API.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;swaggerUi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;swagger-ui-express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;swaggerDocument&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./swagger.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api-docs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;swaggerUi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;swaggerUi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;swaggerDocument&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Optimisation des performances
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Mise en cache avec &lt;a href="https://redis.io/" rel="noopener noreferrer"&gt;Redis&lt;/a&gt; ou &lt;a href="https://www.memcached.org/" rel="noopener noreferrer"&gt;Memcached&lt;/a&gt; :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Fetch data from database&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetchDataFromDatabase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newData&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;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Optimiser les requêtes à la base de données :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Assurez-vous que vos requêtes sont optimisées et utilisez des index là où c'est nécessaire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Utiliser des middlewares de compression comme &lt;code&gt;[compression](https://www.npmjs.com/package/express-compression)&lt;/code&gt; :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;compression&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;compression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;compression&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;En suivant ces bonnes pratiques et en utilisant des fonctionnalités avancées, vous pouvez créer des applications Express.js robustes, sécurisées et évolutives. La structuration de votre code, l'utilisation de modules tiers, la gestion de la sécurité, le déploiement efficace et les tests rigoureux sont essentiels pour développer des applications performantes et maintenables. Continuez à explorer et à intégrer ces pratiques dans vos projets pour améliorer constamment la qualité de vos applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voici quelques ressources supplémentaires qui pourraient vous aidez à continuer votre apprentissage :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://expressjs.com/en/advanced/best-practice-security.html" rel="noopener noreferrer"&gt;La documentation officielle d'Express.js sur les bonne pratiques de la securité en production&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tutoriels et articles sur Express.js :&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/Introduction" rel="noopener noreferrer"&gt;MDN : Introduction à Express.js&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=JBbyMn7dNys" rel="noopener noreferrer"&gt;Déployer une application Node.js avec Kinsta&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.freecodecamp.org/news/free-8-hour-node-express-course/" rel="noopener noreferrer"&gt;Learn Node.js and Express with This Free 8-hour Back End Development Course&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Livres sur Express.js :&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;"Learning Express" de Carlos Rios&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;"Building Node.js Applications" de Ryan Tozier et Ashish Goel&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Rejoignez la communauté Express.js :&lt;/strong&gt; Participez à des forums et des groupes en ligne pour poser des questions, partager vos expériences et apprendre des autres développeurs.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Construisez vos propres applications :&lt;/strong&gt; La meilleure façon d'apprendre est de mettre la main à la pâte. Commencez par créer des applications simples et progressez vers des projets plus complexes.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;N'oubliez jamais que l'apprentissage est un processus continu. Restez curieux, explorez et créez, et vous deviendrez un maître du développement d'applications Express.js !&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>backend</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
