<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Patrick, Auteur à CYBERDEV s.p.r.l.</title>
	<atom:link href="https://cyberdev.be/new/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>https://cyberdev.be/new/author/admin/</link>
	<description></description>
	<lastBuildDate>Tue, 10 Mar 2026 19:37:28 +0000</lastBuildDate>
	<language>fr-BE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Les principaux &#8220;Driven Development&#8221;</title>
		<link>https://cyberdev.be/new/les-principaux-driven-development/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 19:37:27 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=682</guid>

					<description><![CDATA[<p>1️⃣ Test‑Driven Development (TDD) On écrit les tests avant le code. Cycle classique : Cycle appelé Red → Green → Refactor Avantages : Outils : 2️⃣ Behavior‑Driven Development (BDD) Extension [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/les-principaux-driven-development/">Les principaux &#8220;Driven Development&#8221;</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">1️⃣ Test‑Driven Development (TDD)</h2>



<p>On écrit <strong>les tests avant le code</strong>.</p>



<p>Cycle classique :</p>



<ol class="wp-block-list">
<li>écrire un test qui échoue</li>



<li>écrire le code minimum pour le faire passer</li>



<li>refactoriser</li>
</ol>



<p>Cycle appelé <strong>Red → Green → Refactor</strong></p>



<p>Avantages :</p>



<ul class="wp-block-list">
<li>code très testable</li>



<li>moins de bugs</li>



<li>architecture plus propre</li>
</ul>



<p>Outils :</p>



<ul class="wp-block-list">
<li>Python : <code>pytest</code></li>



<li>C# : <code>xUnit</code>, <code>NUnit</code></li>



<li>JS : <code>Jest</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2️⃣ Behavior‑Driven Development (BDD)</h2>



<p>Extension du TDD orientée <strong>comportement utilisateur</strong>.</p>



<p>On décrit le comportement avec un langage quasi naturel.</p>



<p>Exemple :</p>



<pre class="wp-block-code"><code>Given user is logged in
When user clicks checkout
Then order is created
</code></pre>



<p>Outils :</p>



<ul class="wp-block-list">
<li><code>Cucumber</code></li>



<li><code>SpecFlow</code> (.NET)</li>



<li><code>Behave</code> (Python)</li>
</ul>



<p>Format <strong>Gherkin</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3️⃣ Acceptance Test‑Driven Development (ATDD)</h2>



<p>Variante du BDD.</p>



<p>Les <strong>tests d&#8217;acceptation métier</strong> sont écrits <strong>avant le développement</strong>.</p>



<p>Participants :</p>



<ul class="wp-block-list">
<li>développeurs</li>



<li>QA</li>



<li>métier</li>
</ul>



<p>But : s&#8217;assurer que la fonctionnalité correspond au besoin métier.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4️⃣ Domain‑Driven Development (DDD)</h2>



<p>Approche architecturale.</p>



<p>On conçoit le logiciel autour du <strong>domaine métier</strong>.</p>



<p>Concepts :</p>



<ul class="wp-block-list">
<li>Entities</li>



<li>Value Objects</li>



<li>Aggregates</li>



<li>Repositories</li>



<li>Bounded Context</li>
</ul>



<p>Très utilisé pour :</p>



<ul class="wp-block-list">
<li>microservices</li>



<li>architectures complexes</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5️⃣ Model‑Driven Development (MDD)</h2>



<p>On part de <strong>modèles UML ou abstractions</strong>, puis on génère le code.</p>



<p>Exemple :</p>



<pre class="wp-block-code"><code>UML → génération code Java / C#
</code></pre>



<p>Utilisé dans :</p>



<ul class="wp-block-list">
<li>systèmes industriels</li>



<li>systèmes embarqués</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6️⃣ Specification‑Driven Development (SDD)</h2>



<p>Le développement est guidé par une <strong>spécification formelle</strong>.</p>



<p>Exemple :</p>



<ul class="wp-block-list">
<li>OpenAPI</li>



<li>contrats d&#8217;API</li>



<li>interface contract</li>
</ul>



<p>Exemple API :</p>



<pre class="wp-block-code"><code>OpenAPI → génération client + serveur
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7️⃣ API‑Driven Development</h2>



<p>Très utilisé pour les <strong>microservices</strong>.</p>



<p>On commence par définir l&#8217;API :</p>



<pre class="wp-block-code"><code>OpenAPI / Swagger
</code></pre>



<p>Ensuite :</p>



<ul class="wp-block-list">
<li>front</li>



<li>backend</li>
</ul>



<p>s&#8217;alignent dessus.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8️⃣ Contract‑Driven Development</h2>



<p>Basé sur des <strong>contrats entre services</strong>.</p>



<p>Exemple :</p>



<pre class="wp-block-code"><code>Consumer → définit contrat
Provider → doit respecter contrat
</code></pre>



<p>Outils :</p>



<ul class="wp-block-list">
<li>Pact</li>



<li>Spring Cloud Contract</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9️⃣ Security‑Driven Development</h2>



<p>La sécurité guide le design.</p>



<p>On part de :</p>



<ul class="wp-block-list">
<li>threat model</li>



<li>attaques possibles</li>
</ul>



<p>Puis on code.</p>



<p>Très utilisé pour :</p>



<ul class="wp-block-list">
<li>fintech</li>



<li>défense</li>



<li>blockchain</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🔟 Data‑Driven Development</h2>



<p>Les décisions sont prises <strong>à partir des données</strong>.</p>



<p>Exemple :</p>



<ul class="wp-block-list">
<li>A/B testing</li>



<li>analytics</li>



<li>télémétrie</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">Autres variantes</h1>



<p>On rencontre aussi :</p>



<ul class="wp-block-list">
<li><strong>UI‑Driven Development</strong></li>



<li><strong>UX‑Driven Development</strong></li>



<li><strong>Feature‑Driven Development (FDD)</strong></li>



<li><strong>Performance‑Driven Development</strong></li>



<li><strong>Event‑Driven Development</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">Les plus utilisés en pratique</h1>



<p>Les 5 plus répandus :</p>



<ol class="wp-block-list">
<li><strong>TDD</strong></li>



<li><strong>BDD</strong></li>



<li><strong>DDD</strong></li>



<li><strong>API‑Driven Development</strong></li>



<li><strong>Contract‑Driven Development</strong></li>
</ol>
<p>Cet article <a href="https://cyberdev.be/new/les-principaux-driven-development/">Les principaux &#8220;Driven Development&#8221;</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sécurité des Clés d&#8217;API et des Comptes de Service Google Cloud : Bonnes Pratiques</title>
		<link>https://cyberdev.be/new/securite-des-cles-dapi-et-des-comptes-de-service-google-cloud-bonnes-pratiques/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Sat, 14 Feb 2026 07:25:03 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=678</guid>

					<description><![CDATA[<p>Google Cloud a récemment envoyé un email aux utilisateurs pour les alerter sur les risques liés à une mauvaise gestion des clés d&#8217;API et des comptes de service. Les tendances [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/securite-des-cles-dapi-et-des-comptes-de-service-google-cloud-bonnes-pratiques/">Sécurité des Clés d&#8217;API et des Comptes de Service Google Cloud : Bonnes Pratiques</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Google Cloud a récemment envoyé un email aux utilisateurs pour les alerter sur les risques liés à une mauvaise gestion des <strong>clés d&#8217;API</strong> et des <strong>comptes de service</strong>. Les tendances récentes en matière de cybersécurité montrent que les <strong>identifiants à longue durée de vie</strong> et les <strong>mauvaises pratiques de sécurité</strong> restent une <strong>menace majeure</strong> pour les environnements cloud.</p>



<p>Dans cet article, nous allons détailler les <strong>recommandations de Google</strong> pour sécuriser vos clés d&#8217;API et comptes de service, ainsi que les <strong>bonnes pratiques</strong> à adopter pour éviter les compromissions.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>1. Sécuriser le Cycle de Vie des Identifiants</strong></h2>



<h3 class="wp-block-heading"><strong>✅ Ne jamais stocker les clés dans le code ou le contrôle de version</strong></h3>



<ul class="wp-block-list">
<li><strong>Problème</strong> : Les clés d&#8217;API et les clés de compte de service <strong>ne doivent jamais</strong> être commitées dans un dépôt Git (GitHub, GitLab, Bitbucket, etc.).</li>



<li><strong>Solution</strong> :
<ul class="wp-block-list">
<li>Utiliser <strong>Google Secret Manager</strong> pour injecter les identifiants <strong>uniquement à l&#8217;exécution</strong>.</li>



<li>Configurer des <strong>variables d&#8217;environnement</strong> sécurisées dans votre CI/CD (GitHub Actions, GitLab CI, Cloud Build).</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>✅ Désactiver les clés dormantes</strong></h3>



<ul class="wp-block-list">
<li><strong>Problème</strong> : Les clés inutilisées depuis plus de <strong>30 jours</strong> représentent un risque inutile.</li>



<li><strong>Solution</strong> :
<ul class="wp-block-list">
<li><strong>Auditer régulièrement</strong> les clés actives via <strong>Google Cloud Console</strong> ou <strong>gcloud CLI</strong>.</li>



<li><strong>Supprimer</strong> les clés inutilisées pour réduire la surface d&#8217;attaque.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>✅ Restreindre les clés d&#8217;API</strong></h3>



<ul class="wp-block-list">
<li><strong>Problème</strong> : Une clé d&#8217;API <strong>non restreinte</strong> peut être utilisée pour appeler <strong>n&#8217;importe quelle API Google Cloud</strong>, ce qui augmente les risques en cas de fuite.</li>



<li><strong>Solution</strong> :
<ul class="wp-block-list">
<li><strong>Limiter les API autorisées</strong> (ex : uniquement <strong>Maps JavaScript API</strong>).</li>



<li><strong>Appliquer des restrictions d&#8217;environnement</strong> :
<ul class="wp-block-list">
<li><strong>Adresses IP</strong> (autoriser uniquement certaines plages).</li>



<li><strong>Référents HTTP</strong> (limiter aux domaines autorisés).</li>



<li><strong>Bundle IDs</strong> (pour les applications mobiles).</li>
</ul>
</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>✅ Appliquer le principe du moindre privilège</strong></h3>



<ul class="wp-block-list">
<li><strong>Problème</strong> : Les comptes de service avec des <strong>permissions excessives</strong> augmentent les risques en cas de compromission.</li>



<li><strong>Solution</strong> :
<ul class="wp-block-list">
<li>Utiliser <strong>IAM Recommender</strong> pour identifier et supprimer les permissions inutilisées.</li>



<li><strong>Ne jamais attribuer</strong> le rôle <strong>Owner</strong> ou <strong>Editor</strong> à un compte de service, sauf si absolument nécessaire.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>✅ Imposer une rotation automatique des clés</strong></h3>



<ul class="wp-block-list">
<li><strong>Problème</strong> : Les clés statiques <strong>peuvent être compromises</strong> sans que vous le sachiez.</li>



<li><strong>Solution</strong> :
<ul class="wp-block-list">
<li>Configurer la politique <strong><code>iam.serviceAccountKeyExpiryHours</code></strong> pour imposer une <strong>durée de vie maximale</strong> (ex : 90 jours).</li>



<li>Si possible, <strong>désactiver la création de nouvelles clés</strong> avec <strong><code>iam.managed.disableServiceAccountKeyCreation</code></strong>.</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>2. Renforcer les Sauvegardes Opérationnelles</strong></h2>



<h3 class="wp-block-heading"><strong>✅ Mettre à jour les contacts essentiels</strong></h3>



<ul class="wp-block-list">
<li><strong>Problème</strong> : En cas d&#8217;incident de sécurité, Google doit pouvoir <strong>contacter rapidement</strong> les bonnes personnes.</li>



<li><strong>Solution</strong> :
<ul class="wp-block-list">
<li>Vérifier et mettre à jour les <strong>contacts essentiels</strong> dans <strong>Google Cloud Console</strong> (IAM &amp; Admin > Essential Contacts).</li>



<li>S&#8217;assurer que les <strong>alertes critiques</strong> (sécurité, facturation) sont envoyées aux bonnes adresses email.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>✅ Configurer des alertes de facturation et d&#8217;anomalies</strong></h3>



<ul class="wp-block-list">
<li><strong>Problème</strong> : Une <strong>hausse soudaine de consommation</strong> peut indiquer une <strong>compromission de clé</strong>.</li>



<li><strong>Solution</strong> :
<ul class="wp-block-list">
<li>Activer les <strong>alertes de budget</strong> dans <strong>Google Cloud Billing</strong>.</li>



<li>Configurer des <strong>alertes d&#8217;anomalies</strong> pour détecter les pics d&#8217;utilisation inhabituels.</li>



<li>Utiliser <strong>Cloud Monitoring</strong> pour surveiller les activités suspectes.</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>3. Outils et Commandes Utiles</strong></h2>



<h3 class="wp-block-heading"><strong>🔧 Auditer les clés de compte de service</strong></h3>



<pre class="wp-block-code"><code># Lister les clés de compte de service
gcloud iam service-accounts keys list --iam-account=SA_EMAIL@PROJECT_ID.iam.gserviceaccount.com

# Supprimer une clé
gcloud iam service-accounts keys delete KEY_ID --iam-account=SA_EMAIL@PROJECT_ID.iam.gserviceaccount.com
</code></pre>



<h3 class="wp-block-heading"><strong>🔧 Vérifier les restrictions d&#8217;une clé d&#8217;API</strong></h3>



<pre class="wp-block-code"><code># Lister les clés d'API
gcloud alpha services api-keys list

# Voir les restrictions d'une clé
gcloud alpha services api-keys get-key-string API_KEY
</code></pre>



<h3 class="wp-block-heading"><strong>🔧 Configurer une politique de rotation des clés</strong></h3>



<pre class="wp-block-code"><code># Définir une durée de vie maximale (ex : 90 jours)
gcloud resource-manager org-policies enable-enforce \
    iam.serviceAccountKeyExpiryHours --organization=ORG_ID --duration=2160h
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Conclusion : Adopter une Approche Zero Trust</strong></h2>



<p>Google insiste sur l&#8217;importance d&#8217;une <strong>stratégie de sécurité unifiée</strong> pour protéger vos identifiants cloud. En suivant ces bonnes pratiques, vous réduisez considérablement les risques de <strong>fuites de clés, d&#8217;accès non autorisés et de compromissions</strong>.</p>



<h3 class="wp-block-heading"><strong>🔹 Checklist de Sécurité</strong></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Action</strong></th><th><strong>Statut</strong></th></tr></thead><tbody><tr><td>❌ Ne jamais commiter les clés dans Git</td><td>✅/❌</td></tr><tr><td>🔄 Désactiver les clés inutilisées (&gt;30 jours)</td><td>✅/❌</td></tr><tr><td>🔒 Restreindre les clés d&#8217;API (IP, API, référents)</td><td>✅/❌</td></tr><tr><td>🛡️ Appliquer le moindre privilège (IAM Recommender)</td><td>✅/❌</td></tr><tr><td>🔄 Imposer une rotation automatique des clés</td><td>✅/❌</td></tr><tr><td>📧 Mettre à jour les contacts essentiels</td><td>✅/❌</td></tr><tr><td>💰 Configurer des alertes de budget et anomalies</td><td>✅/❌</td></tr></tbody></table></figure>
<p>Cet article <a href="https://cyberdev.be/new/securite-des-cles-dapi-et-des-comptes-de-service-google-cloud-bonnes-pratiques/">Sécurité des Clés d&#8217;API et des Comptes de Service Google Cloud : Bonnes Pratiques</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Samsung DeX</title>
		<link>https://cyberdev.be/new/samsung-dex/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Sun, 30 Nov 2025 09:46:56 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=668</guid>

					<description><![CDATA[<p>Samsung DeX, c’est : On peut voir ça comme : “Android + interface façon PC”, pas “un téléphone qui devient un vrai PC Windows”. 2️⃣ Pourquoi cette techno n’a pas [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/samsung-dex/">Samsung DeX</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Samsung DeX, c’est :</p>



<ul class="wp-block-list">
<li>Tu branches ton téléphone ou tablette Samsung à un écran externe (HDMI/USB‑C ou via dock/Hub).<br>Tu peux connecter clavier + souris.</li>



<li>L’interface passe en mode “bureau” : fenêtres, barre des tâches, raccourcis, etc.<br>Mais ce n’est PAS Windows :<br>
<ul class="wp-block-list">
<li>Ça reste Android, avec une surcouche “desktop”.</li>



<li>Ce sont les applications Android qui tournent, pas des applis Windows classiques (.exe).</li>
</ul>
</li>
</ul>



<p>On peut voir ça comme :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“Android + interface façon PC”, pas “un téléphone qui devient un vrai PC Windows”.</p>
</blockquote>



<p>2️⃣ Pourquoi cette techno n’a pas pris plus d’ampleur ?</p>



<p>Il y a plusieurs raisons, techniques mais surtout… économiques et d’usage.</p>



<p>a) Les applis ne sont pas pensées pour un vrai “bureau”</p>



<p>Même si l’interface DeX ressemble à un PC :</p>



<p>La plupart des applis Android sont pensées pour :</p>



<ul class="wp-block-list">
<li> écran tactile, format vertical,<br>usage “mobile”, pas multi-fenêtres intensif.<br>Sur DeX :<br></li>



<li>Certaines applis gèrent mal la fenêtrisation, beaucoup ne sont pas optimisées pour clavier/souris,<br>Certaines refusent de s’ouvrir (apps de streaming, banque, etc.).</li>
</ul>



<p>Résultat : pour un usage pro/productivité sérieux, tu te heurtes vite à des limites.<br>Un “vrai” PC reste meilleur en bureautique avancée, dev, graphisme, etc.</p>



<p>b) Cas d’usage trop “niche” pour le grand public</p>



<p>DeX est surtout intéressant pour :</p>



<ul class="wp-block-list">
<li>des pros en déplacement,</li>



<li>des travailleurs en “hot desk” (un écran sur chaque bureau, tu poses ton tel et tu bosses),</li>



<li>des gens qui veulent remplacer un PC basique (web, mail, bureautique simple).</li>
</ul>



<p>Mais le grand public :</p>



<p>a déjà souvent un ordinateur portable à la maison,<br>ou ne ressent tout simplement pas le besoin de brancher le téléphone à un écran.</p>



<p>Ça crée un décalage :</p>



<ul class="wp-block-list">
<li>Techniquement, c’est cool.<br></li>



<li>Commercialement, ce n’est pas un besoin massif → donc peu de mise en avant, peu d’investissement.</li>
</ul>



<p>c) Le coût et les accessoires : pas si “magique” que ça</p>



<p>Sur le papier : “Un seul appareil pour tout faire, ton téléphone devient ton PC”.</p>



<p>En pratique :</p>



<p>Il faut :</p>



<ul class="wp-block-list">
<li>un téléphone haut de gamme (Samsung S / Note / certains A récents),<br></li>



<li>un ou plusieurs écrans compatibles,<br></li>



<li>souvent un dock ou un hub USB‑C, un clavier, une souris.<br></li>



<li>Un PC portable d’entrée/milieu de gamme ne coûte pas beaucoup plus cher qu’un smartphone haut de gamme seul.</li>
</ul>



<p>Du point de vue d’un utilisateur moyen :</p>



<p>Acheter un PC + un téléphone moyen est souvent plus logique qu&#8217;acheter un téléphone très cher + tout un setup écran/dock.</p>



<p>d) Limites techniques (surtout au début)</p>



<p>Aujourd’hui, les SoC mobiles sont très puissants, mais longtemps :</p>



<p>Performances OK pour la bureautique, mais :</p>



<ul class="wp-block-list">
<li>limitées pour le multitâche lourd, throttling (chauffe → baisse de fréquence),stockage et RAM plus limités qu’un PC.<br>Et surtout :</li>



<li>Samsung ne peut pas faire tourner des apps Windows nativement sur Android/ARM.<br>DeX n’est qu’un mode d’affichage, pas un changement de système.</li>
</ul>



<p>Pour transformer un téléphone en “vrai PC”, il faudrait :</p>



<p>soit de la virtualisation (Windows en VM, bureau à distance…),<br>soit que les gens se contentent d’applis 100 % web/cloud (ce que certains font déjà).</p>



<p>e) Intérêt économique limité pour les gros acteurs</p>



<p>Un point important que les gens oublient souvent :</p>



<p>Les constructeurs (Samsung, Apple, etc.) gagnent de l’argent en te vendant :</p>



<ul class="wp-block-list">
<li>un téléphone<br></li>



<li>un PC / Mac / tablette<br></li>



<li>des accessoires.<br>Si ton téléphone remplace ton PC, ça peut réduire les ventes de laptops.</li>
</ul>



<p>Donc :</p>



<p>Samsung garde DeX comme fonction “plus” pour se différencier, surtout côté pro,<br>mais ce n’est pas leur cheval de bataille n°1 auprès du grand public.</p>



<p>Et côté Google/Android :</p>



<p>Il existe un “desktop mode” expérimental dans Android, mais Google ne le pousse quasiment pas.<br>Ils poussent beaucoup plus ChromeOS (Chromebooks) pour le rôle de “PC léger”.</p>



<p>3️⃣ Vraiment aucune concurrence ? En fait, si, mais discrète</p>



<p>En réalité, Samsung n’est pas totalement seul sur ce terrain, mais :</p>



<p>Les concurrents sont moins connus, certains sont réservés à certains marchés (Chine, etc.), d’autres ont été abandonnés.</p>



<p>Quelques exemples :</p>



<p>✅ Ce qui existe / a existé :</p>



<ul class="wp-block-list">
<li>Huawei Easy Projection / EMUI Desktop<br></li>



<li>Fonction très proche de DeX : tu branches ton Huawei à un écran, tu as un bureau façon PC.<br>Problème : l’embargo US a fortement freiné Huawei hors de Chine.</li>
</ul>



<p>Motorola Ready For<br>Sur certains Moto (Edge, etc.) : bureau Android sur écran externe, très similaire à DeX.</p>



<p>Mode bureau d’Android (expérimental)<br>Inclut dans Android depuis Android 10, mais :</p>



<pre class="wp-block-code"><code>   non activé par défaut,
   peu poli, peu mis en avant par Google.</code></pre>



<p>Anciennes tentatives “téléphone = PC” :</p>



<pre class="wp-block-code"><code>   Motorola Atrix (2011) avec son Lapdock,
   Ubuntu Touch / Ubuntu Convergence (Ubuntu Phone),
   Windows 10 Mobile Continuum (Microsoft : ton téléphone Lumia devenait une sorte de PC Windows simplifié).

Toutes ces tentatives se sont cassé les dents soit par manque d’applis, soit par échec de la plateforme complète (Windows Mobile, Ubuntu Phone…).</code></pre>



<p>🔄 Alternatives “proches mais pas identiques”</p>



<p>Ce n’est pas la même approche, mais ça répond à un besoin similaire “un appareil léger pour faire du PC” :</p>



<ul class="wp-block-list">
<li>Chromebooks (ChromeOS + apps Android) : Laptops très légers, pas basés sur ton téléphone, mais très liés au cloud Google.<br></li>



<li>iPad + clavier + souris + Stage Manager : Apple pousse l’iPad comme “remplacement potentiel du PC” mais ne propose pas un vrai mode bureau à partir de l’iPhone.</li>



<li>Bureau à distance / Cloud PC : Tu utilises ton téléphone ou ta tablette comme “terminal” pour te connecter à un vrai PC dans le cloud (Remote Desktop, Shadow, etc.).</li>
</ul>



<p>4️⃣ En résumé</p>



<p>Samsung DeX est une super démo technologique, très pratique dans certains contextes (pros, nomades, voyages, postes partagés).<br>Mais ça n’a pas explosé car :</p>



<ul class="wp-block-list">
<li>les applis Android ne sont pas conçues comme des applis PC,<br></li>



<li>le besoin grand public est limité,<br></li>



<li>PC portables bon marché restent plus simples à comprendre pour tout le monde,les gros acteurs n’ont pas d’intérêt économique énorme à pousser fort ce concept.<br></li>



<li>Il existe de la concurrence, mais très peu visible (Huawei, Motorola, modes bureau cachés d’Android, anciennes tentatives de Microsoft/Ubuntu).</li>
</ul>
<p>Cet article <a href="https://cyberdev.be/new/samsung-dex/">Samsung DeX</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JPEGmini : Le secret pour réduire vos images</title>
		<link>https://cyberdev.be/new/jpegmini-le-secret-pour-reduire-vos-images/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 13:12:16 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=666</guid>

					<description><![CDATA[<p>La vitesse de chargement d&#8217;un site web dépend énormément du poids des images. C&#8217;est là qu&#8217;intervient JPEGmini. Cette technologie est devenue une référence pour les photographes et les développeurs web [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/jpegmini-le-secret-pour-reduire-vos-images/">JPEGmini : Le secret pour réduire vos images</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>La vitesse de chargement d&#8217;un site web dépend énormément du poids des images. C&#8217;est là qu&#8217;intervient JPEGmini. Cette technologie est devenue une référence pour les photographes et les développeurs web soucieux de la performance.</p>



<p>Mais qu&#8217;est-ce que c&#8217;est exactement, et surtout, existe-t-il des alternatives gratuites pour nous, développeurs ?</p>



<h2 class="wp-block-heading">C&#8217;est quoi JPEGmini ?</h2>



<p>JPEGmini est une technologie de compression d&#8217;image brevetée qui permet de réduire la taille des fichiers JPEG (souvent jusqu&#8217;à 80 %) sans affecter la qualité perceptuelle.</p>



<p>Contrairement aux compresseurs classiques qui appliquent une compression mathématique uniforme, JPEGmini utilise un algorithme qui imite le système visuel humain. Il analyse l&#8217;image zone par zone pour déterminer combien de &#8220;détails&#8221; peuvent être supprimés avant que l&#8217;œil humain ne remarque une différence.</p>



<p>Le résultat ? Une image qui pèse beaucoup moins lourd, mais qui semble identique à l&#8217;originale à l&#8217;œil nu.</p>



<h2 class="wp-block-heading">Alternatives Open-Source et Gratuites</h2>



<p>Bien que JPEGmini soit très performant, c&#8217;est un logiciel propriétaire et payant. Si vous cherchez des solutions similaires pour vos serveurs ou vos pipelines de développement sans passer à la caisse, voici les meilleures alternatives :</p>



<p>MozJPEG (par Mozilla) : Probablement le meilleur compromis actuel. C&#8217;est un encodeur JPEG amélioré qui produit des fichiers plus petits que la libjpeg standard, tout en restant compatible avec tous les navigateurs.<br>Guetzli (par Google) : Un encodeur perceptuel qui vise une qualité visuelle irréprochable. Attention cependant, il est très lent à l&#8217;encodage (gourmand en CPU), à réserver pour du traitement hors ligne.<br>ImageMagick : Le &#8220;couteau suisse&#8221; de la manipulation d&#8217;images. Avec une commande simple (convert -quality 85 input.jpg output.jpg), on obtient des résultats décents, bien que moins optimisés que MozJPEG.<br>TinyPNG / TinyJPG : Un service en ligne très populaire (avec une API gratuite limitée) qui compresse intelligemment les PNG et JPEG.</p>



<h2 class="wp-block-heading">Comment l&#8217;intégrer dans vos scripts Python ?</h2>



<p>En tant que développeur, vous n&#8217;avez pas toujours envie d&#8217;installer des binaires complexes. Voici comment automatiser la compression d&#8217;images directement dans vos scripts Python.</p>



<p>1. La méthode native avec Pillow (PIL)</p>



<p>C&#8217;est la méthode la plus simple. La librairie Pillow permet de sauvegarder une image en activant l&#8217;option d&#8217;optimisation des tables de Huffman.</p>



<pre class="wp-block-code"><code>from PIL import Image

def compresserimage(inputpath, outputpath):
    try:
        img = Image.open(inputpath)
         'optimize=True' force l'encodeur à faire une passe supplémentaire
         'quality=85' est le "sweet spot" entre poids et qualité visuelle
        img.save(outputpath, "JPEG", quality=85, optimize=True)
        print(f"Image sauvegardée : {outputpath}")
    except Exception as e:
        print(f"Erreur : {e}")

compresserimage("monimage.jpg", "monimageopt.jpg")</code></pre>



<p>2. Utiliser MozJPEG via subprocess</p>



<p>Si vous avez besoin d&#8217;une compression plus agressive type &#8220;production&#8221;, le mieux est d&#8217;installer l&#8217;exécutable mozjpeg (ou cjpeg) sur votre machine et de l&#8217;appeler via Python.</p>



<pre class="wp-block-code"><code>import subprocess

subprocess.run(&#91;"cjpeg", "-quality", "85", "-outfile", "output.jpg", "input.jpg"])</code></pre>



<p>3. Via une API (JPEGmini ou TinyPNG)</p>



<p>Si vous avez un compte (clé API), vous pouvez envoyer l&#8217;image à traiter sur leurs serveurs via la librairie requests. C&#8217;est utile si vous ne voulez pas gérer la charge CPU de la compression sur votre propre serveur.</p>



<ol class="wp-block-list">
<li>Le concept clé : La &#8220;Quantification Adaptative&#8221;</li>
</ol>



<p>Le format JPEG divise l&#8217;image en blocs de 8&#215;8 pixels. Pour chaque bloc, il applique une transformation (DCT &#8211; Discrete Cosine Transform) puis supprime des détails (Quantification).</p>



<pre class="wp-block-code"><code>JPEG standard : Applique la même force de compression sur toute l'image.
Ton logiciel (type JPEGmini) : Doit analyser chaque zone de l'image.
    Zone de ciel bleu (faible fréquence) : L'œil voit très bien les défauts -&gt; Faible compression.
    Zone de forêt dense (haute fréquence) : L'œil est distrait par le chaos -&gt; Forte compression (masquage visuel).</code></pre>



<ol class="wp-block-list" start="2">
<li>Les briques techniques à assembler</li>
</ol>



<p>Si tu veux le coder, tu ne vas pas réécrire l&#8217;encodeur JPEG bit par bit (trop complexe et lent en Python/C pur). Tu vas plutôt écrire un optimiseur qui pilote un encodeur existant.</p>



<p>Voici les étapes logiques : A. Le changement d&#8217;espace colorimétrique (Luminance vs Chrominance)</p>



<p>L&#8217;œil humain est très sensible à la luminosité (Luma), mais peu à la couleur (Chroma).</p>



<pre class="wp-block-code"><code>Action : Convertir RGB en YCbCr.
Technique : Appliquer un sous-échantillonnage (Chroma Subsampling) en 4:2:0. Cela divise déjà le poids des couleurs par 2 sans perte visible.</code></pre>



<p>B. La métrique de qualité &#8220;Humaine&#8221; (Le juge)</p>



<p>C&#8217;est le cœur du système. Tu ne peux pas utiliser le MSE (Mean Squared Error). Tu as besoin d&#8217;une métrique qui &#8220;voit&#8221; comme un humain.</p>



<pre class="wp-block-code"><code>SSIM (Structural Similarity Index) : Compare la structure (contours) plutôt que les pixels bruts.
Butteraugli (par Google) : C'est la métrique utilisée par l'encodeur Guetzli. Elle simule précisément la psychophysique de la vision humaine.
DSSIM : Une variation du SSIM orientée vers la perception de la distance visuelle.</code></pre>



<p>C. La boucle d&#8217;optimisation (L&#8217;algorithme)</p>



<p>Ton code doit trouver le seuil de compression maximal (Q) avant que la métrique (SSIM ou Butteraugli) ne chute en dessous d&#8217;un seuil acceptable.</p>



<p>Algorithme simplifié :</p>



<pre class="wp-block-code"><code>Prendre une image source.
Encoder l'image avec une qualité JPEG de 95 (très haute).
Calculer le score SSIM entre la source et la version compressée.
Si le score est &gt; 0.98 (indiscernable), baisser la qualité à 90.
Répéter (recherche dichotomique) jusqu'à trouver la qualité la plus basse où le SSIM reste acceptable.</code></pre>



<p>Conclusion</p>



<p>JPEGmini reste un outil incroyable pour sa simplicité &#8220;drag-and-drop&#8221;, mais pour un développeur, combiner Python et MozJPEG (ou simplement Pillow bien configuré) permet souvent d&#8217;atteindre des résultats très proches gratuitement.</p>
<p>Cet article <a href="https://cyberdev.be/new/jpegmini-le-secret-pour-reduire-vos-images/">JPEGmini : Le secret pour réduire vos images</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Schéma basique d&#8217;une API au niveau de l&#8217;infrastructure</title>
		<link>https://cyberdev.be/new/schema-basique-dune-api-au-niveau-de-linfrastructure/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Sat, 25 Oct 2025 13:20:38 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=654</guid>

					<description><![CDATA[<p>C’est un diagramme de séquence représentant le flux d’une requête dans une infrastructure web sécurisée, avec monitoring et logging. Voici les étapes clés :</p>
<p>Cet article <a href="https://cyberdev.be/new/schema-basique-dune-api-au-niveau-de-linfrastructure/">Schéma basique d&#8217;une API au niveau de l&#8217;infrastructure</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://cyberdev.be/new/wp-content/uploads/2025/10/schema_API.jpg"><img fetchpriority="high" decoding="async" width="1024" height="563" src="https://cyberdev.be/new/wp-content/uploads/2025/10/schema_API-1024x563.jpg" alt="" class="wp-image-655" srcset="https://cyberdev.be/new/wp-content/uploads/2025/10/schema_API-1024x563.jpg 1024w, https://cyberdev.be/new/wp-content/uploads/2025/10/schema_API-300x165.jpg 300w, https://cyberdev.be/new/wp-content/uploads/2025/10/schema_API-768x422.jpg 768w, https://cyberdev.be/new/wp-content/uploads/2025/10/schema_API.jpg 1030w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>C’est un <strong>diagramme de séquence</strong> représentant le flux d’une requête dans une infrastructure web sécurisée, avec monitoring et logging. Voici les étapes clés :</p>



<ol class="wp-block-list">
<li><strong>Couche Sécurité (Firewall)</strong> :
<ul class="wp-block-list">
<li><strong>Vérifications</strong> : Filtrage géographique (<em>geo-fencing</em>), restriction par IP, limitation du nombre d’appels (<em>rate limiting</em>), et <strong>logging</strong> des tentatives.</li>



<li><strong>Action</strong> : Si la requête est autorisée, elle est transmise au <strong>Load Balancer</strong>.</li>
</ul>
</li>



<li><strong>Load Balancer</strong> :
<ul class="wp-block-list">
<li><strong>Health Checks</strong> : Vérifie régulièrement la disponibilité des serveurs <strong>IIS</strong> (via des requêtes de type <code>healthchecks/monitor</code>).</li>



<li><strong>Sécurité</strong> : Ajoute son propre logging (ex : journalisation des requêtes entrantes/sortantes).</li>



<li><strong>Routing</strong> : Achemine la requête vers un serveur <strong>IIS</strong> disponible.</li>
</ul>
</li>



<li><strong>Serveur IIS</strong> (Application Web) :
<ul class="wp-block-list">
<li><strong>Traitement</strong> : Reçoit la requête, génère des <strong>logs</strong> envoyés à <strong>Graylog</strong> (centralisation des logs).</li>



<li><strong>Base de données</strong> : Stocke un nouveau message (ex : données métier comme un ticket de transport).</li>



<li><strong>Metrics</strong> : <strong>Grafana</strong> interroge <strong>IIS</strong> (via <strong>Prometheus</strong>, un outil de collecte de métriques) pour récupérer des <strong>statistiques</strong> (ex : temps de réponse, erreurs, trafic). <em>Note</em> : Le schéma suggère que IIS expose des métriques au format compatible avec Prometheus (ex : endpoint <code>/metrics</code>).</li>
</ul>
</li>



<li><strong>Outils de Monitoring</strong> :
<ul class="wp-block-list">
<li><strong>Graylog</strong> : Agrège les logs pour analyse (ex : détection d’anomalies).</li>



<li><strong>Grafana + Prometheus</strong> : Visualise les performances en temps réel (dashboard).</li>
</ul>
</li>
</ol>
<p>Cet article <a href="https://cyberdev.be/new/schema-basique-dune-api-au-niveau-de-linfrastructure/">Schéma basique d&#8217;une API au niveau de l&#8217;infrastructure</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Schéma basique d&#8217;un plan CI/CD</title>
		<link>https://cyberdev.be/new/schema-basique-dun-plan-ci-cd/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Wed, 17 Sep 2025 09:54:03 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=657</guid>

					<description><![CDATA[<p>Vue d’ensemble Ce diagramme décrit un pipeline CI/CD automatisé depuis la récupération du code jusqu’au déploiement sur un backend server, avec génération de documentation, analyse de qualité, gestion des secrets [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/schema-basique-dun-plan-ci-cd/">Schéma basique d&#8217;un plan CI/CD</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://cyberdev.be/new/wp-content/uploads/2025/10/CICD.png"><img decoding="async" width="1024" height="640" src="https://cyberdev.be/new/wp-content/uploads/2025/10/CICD-1024x640.png" alt="" class="wp-image-658" srcset="https://cyberdev.be/new/wp-content/uploads/2025/10/CICD-1024x640.png 1024w, https://cyberdev.be/new/wp-content/uploads/2025/10/CICD-300x187.png 300w, https://cyberdev.be/new/wp-content/uploads/2025/10/CICD-768x480.png 768w, https://cyberdev.be/new/wp-content/uploads/2025/10/CICD.png 1045w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Vue d’ensemble</h3>



<p>Ce diagramme décrit un pipeline CI/CD automatisé depuis la récupération du code jusqu’au déploiement sur un backend server, avec génération de documentation, analyse de qualité, gestion des secrets et publication d’artefacts.</p>



<p>Objectifs:</p>



<ul class="wp-block-list">
<li>Standardiser la compilation et le déploiement.</li>



<li>Garantir la qualité (SonarQube) et la traçabilité (Nexus, dokuwiki).</li>



<li>Sécuriser les secrets et prérequis avant déploiement.</li>
</ul>



<p>KPIs/SLAs (suggestion):</p>



<ul class="wp-block-list">
<li>Durée pipeline: ≤ 15 min sur branche main.</li>



<li>Taux d’échec étape “quality gate”: &lt; 5%.</li>



<li>Taux de déploiement test réussi: > 98%.</li>



<li>MTTR incident de déploiement: &lt; 30 min.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Légende et conventions</h3>



<ul class="wp-block-list">
<li>Acteurs:</li>



<li>Jenkins: orchestrateur de pipeline.</li>



<li>Jenkins agent: exécuteur (PowerShell) sur nœud build/deploy.</li>



<li>Gitea: SCM hébergeant le code source.</li>



<li>SonarQube: analyse qualité + quality gate.</li>



<li>dokuwiki: publication documentation générée.</li>



<li>Nexus: registry d’artefacts (binaire/versionné).</li>



<li>Secret server: coffre-fort (secrets/credentials/certificats).</li>



<li>Database server: cible des migrations.</li>



<li>backend server: cible du déploiement applicatif.</li>



<li>Flux:</li>



<li>→ demande/commande.</li>



<li>→→ interaction réseau HTTP(S)/API, SSH, ou protocole dédié.</li>



<li>Étapes “Jenkins agent -> Jenkins agent”: traitements locaux (scripts).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Description détaillée du flux</h3>



<p>1) Orchestration/checkout</p>



<ul class="wp-block-list">
<li>Jenkins déclenche l’agent avec un job qui orchestre compilation et déploiement (PowerShell).</li>



<li>L’agent récupère le code depuis Gitea (checkout, branch/tag selon paramètre).</li>



<li>Gitea renvoie l’état du repo (réponse à la requête clone/fetch).</li>
</ul>



<p>2) Documentation automatique</p>



<ul class="wp-block-list">
<li>L’agent génère la doc (ex: DocFX, MkDocs, Doxygen) à partir des sources.</li>



<li>Publication vers dokuwiki (API/CLI) pour centraliser la doc de version.</li>
</ul>



<p>3) Qualité du code</p>



<ul class="wp-block-list">
<li>L’agent envoie le code à SonarQube (scanner).</li>



<li>SonarQube retourne un score/quality gate (Pass/Fail). Le pipeline s’arrête en cas d’échec.</li>
</ul>



<p>4) Build et artefact</p>



<ul class="wp-block-list">
<li>Compilation locale (PowerShell/MSBuild/Gradle/etc.).</li>



<li>Push de l’artefact versionné vers Nexus (groupId/artifactId/version).</li>
</ul>



<p>5) Déploiement en environnement de test</p>



<ul class="wp-block-list">
<li>Jenkins ordonne à l’agent de déployer.</li>



<li>L’agent tire l’artefact exact depuis Nexus (checksum).</li>



<li>Contrôles préalables sur backend server: certificats installés/valides, espace disque, ports ouverts, services requis.</li>



<li>Récupération des secrets depuis Secret server (en lecture, jeton court).</li>



<li>Mise à jour des fichiers de configuration avec secrets/variables d’environnement.</li>



<li>Migrations sur Database server (idempotentes, versionnées).</li>



<li>Déploiement de l’artefact sur backend server (service stop/update/start + healthcheck).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Pré-requis techniques</h3>



<ul class="wp-block-list">
<li>Jenkins:</li>



<li>Agent avec droits limités, labels appropriés (windows/linux selon build).</li>



<li>Credentials Binding pour Gitea/Nexus/SonarQube/Secret server.</li>



<li>SCM (Gitea):</li>



<li>Branch protection pour main.</li>



<li>Webhooks optionnels si déclenchement auto.</li>



<li>SonarQube:</li>



<li>Quality gate défini (coverage, bugs, code smells, vulnérabilités).</li>



<li>Nexus:</li>



<li>Repository format conforme (maven/npm/nuget/docker). Rétention et snapshot policy.</li>



<li>Secret server:</li>



<li>Accès par rôle (RBAC), secrets rotatifs, audit.</li>



<li>Backend/DB:</li>



<li>Comptes de déploiement et de migration distincts.</li>



<li>Politique de backup avant migration (RPO/RTO fixés).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Sécurité et conformité (RGPD/IT Sec)</h3>



<ul class="wp-block-list">
<li>Secrets:</li>



<li>Jamais en clair dans logs/artefacts; masquage activé dans Jenkins.</li>



<li>Jetons courts TTL; rotation automatique; principe du moindre privilège.</li>



<li>Chaîne d’intégrité:</li>



<li>Checksum/SHA256 de l’artefact Nexus avant déploiement.</li>



<li>Signature d’artefacts recommandée (GPG).</li>



<li>Trafic:</li>



<li>TLS obligatoire vers Gitea, SonarQube, Nexus, dokuwiki et Secret server (mTLS conseillé).</li>



<li>Traçabilité:</li>



<li>Lier buildId ↔ commit ↔ artefact ↔ déploiement (annotations Nexus, release notes dokuwiki).</li>



<li>Données personnelles:</li>



<li>Si le code traite des données RGPD, s’assurer que les environnements de test sont anonymisés.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Runbook opératoire (résumé)</h3>



<ul class="wp-block-list">
<li>Déclenchement:</li>



<li>Manuel via Jenkins avec paramètres (branche, version, env) ou webhook sur push/tag.</li>



<li>Garde-fous:</li>



<li>Stop pipeline si quality gate Fail.</li>



<li>Stop si vérifs prérequis KO (disque/certificats/ports).</li>



<li>Stop si migrations échouent (rollback).</li>



<li>Validation:</li>



<li>Healthcheck applicatif (HTTP 200/ready), tests fumée post-deploy.</li>



<li>Publication:</li>



<li>Doc versionnée sur dokuwiki; artefact publié Nexus; ticket change mis à jour.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Gestion des incidents (checklist)</h3>



<ul class="wp-block-list">
<li>Échec checkout Gitea:</li>



<li>Vérifier credentials, ACL repo, disponibilité Gitea.</li>



<li>Échec SonarQube:</li>



<li>Consulter quality gate; corriger règles bloquantes; relancer job.</li>



<li>Échec push/pull Nexus:</li>



<li>Vérifier repo cible, quota, URL/credentials; retenter avec checksum.</li>



<li>Prérequis backend KO:</li>



<li>Certificats expirés? Espace disque? Ports/pare-feu? Rétablir puis relancer étape.</li>



<li>Secrets indisponibles:</li>



<li>Jeton expiré/ACL; régénérer; vérifier rotation automatique.</li>



<li>Migration DB échouée:</li>



<li>Identifier migration N; restaurer backup; corriger script idempotent; rejouer.</li>



<li>Déploiement KO:</li>



<li>Logs service, revert à version précédente depuis Nexus (promote/rollback).</li>
</ul>



<p>MTTR cible: &lt; 30 min; escalade au-delà.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Monitoring et métriques</h3>



<ul class="wp-block-list">
<li>Jenkins: durée par stage, taux de réussite, queue time.</li>



<li>SonarQube: debt ratio, coverage, vulnérabilités critiques.</li>



<li>Nexus: téléchargements par artefact/version, space usage.</li>



<li>Backend: CPU/RAM, temps de réponse, taux d’erreur, logs applicatifs.</li>



<li>DB: temps de migration, verrous, temps requêtes clés.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">RACI synthétique</h3>



<ul class="wp-block-list">
<li>Dév: qualité code, tests, versionning, doc auto.</li>



<li>IT CI/CD: Jenkins, agents, credentials, gabarits pipeline, intégrations.</li>



<li>SecOps: politiques secrets, certificats, scans vulnérabilités.</li>



<li>DBA: scripts de migration, sauvegardes, restauration.</li>



<li>Ops/Prod: systèmes backend, supervision, déploiements et rollback.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Améliorations recommandées</h3>



<ul class="wp-block-list">
<li>Signature et attestation d’artefacts (SLSA niveau 2+).</li>



<li>Environnements éphémères par PR pour tests.</li>



<li>Blue/Green ou Canary sur backend server pour zéro-downtime.</li>



<li>Tests smoke automatisés après déploiement et gate sur healthcheck.</li>



<li>Promotion d’artefacts (test → preprod → prod) via le même binaire.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Glossaire</h3>



<ul class="wp-block-list">
<li>Artefact: binaire ou bundle déployable produit par le build.</li>



<li>Quality gate: seuils bloquants de qualité SonarQube.</li>



<li>Idempotent: exécution répétée sans effets indésirables supplémentaires.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>



<p>Il faut encore ajouter les gestions des certificats, le loadbalancer, le dns et la conteneurisation.</p>



<p></p>
<p>Cet article <a href="https://cyberdev.be/new/schema-basique-dun-plan-ci-cd/">Schéma basique d&#8217;un plan CI/CD</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Les WebSockets : Une Technologie de Communication en Temps Réel</title>
		<link>https://cyberdev.be/new/les-websockets-une-technologie-de-communication-en-temps-reel/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Tue, 01 Apr 2025 05:34:35 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=649</guid>

					<description><![CDATA[<p>Les WebSockets sont une technologie qui permet une communication bidirectionnelle en temps réel entre un client (généralement un navigateur web) et un serveur. Cette technologie a révolutionné la façon dont [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/les-websockets-une-technologie-de-communication-en-temps-reel/">Les WebSockets : Une Technologie de Communication en Temps Réel</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>Les WebSockets sont une technologie qui permet une communication bidirectionnelle en temps réel entre un client (généralement un navigateur web) et un serveur. Cette technologie a révolutionné la façon dont les applications web fonctionnent, permettant des interactions plus fluides et plus interactives.</p>



<p><strong>Un peu d&#8217;histoire</strong></p>



<p>Les WebSockets ont été introduits pour la première fois en 2008 par Ian Hickson, un développeur web connu pour son travail sur les standards web. La spécification WebSocket a été publiée en 2011 et a rapidement été adoptée par les principaux navigateurs web.</p>



<p><strong>Comment ça marche ?</strong></p>



<p>Les WebSockets fonctionnent en établissant une connexion persistante entre le client et le serveur. Une fois la connexion établie, les deux parties peuvent envoyer des messages à l&#8217;autre en temps réel. Les WebSockets utilisent le protocole TCP/IP pour établir la connexion et permettent une communication full-duplex, c&#8217;est-à-dire que les deux parties peuvent envoyer et recevoir des messages simultanément.</p>



<p><strong>Exemple de code</strong></p>



<p>Voici un exemple de code Python qui utilise la bibliothèque <code>websockets</code> pour créer un serveur WebSocket simple :</p>



<pre class="wp-block-code"><code>import asyncio
import websockets

async def handle_connection(websocket):
    while True:
        try:
            message = await websocket.recv()
            print(f"Reçu : {message}")
            await websocket.send(f"Écho : {message}")
        except websockets.ConnectionClosed:
            print("Connexion fermée")
            break

async def main():
    async with websockets.serve(handle_connection, "localhost", 8765):
        print("Serveur démarré sur le port 8765")
        await asyncio.Future()  # Exécuter indéfiniment

asyncio.run(main())</code></pre>



<p>Ce code crée un serveur WebSocket qui écoute sur le port 8765 et répond aux messages en écho.</p>



<p><strong>Exemple d&#8217;utilisation</strong></p>



<p>Les WebSockets sont utilisés dans de nombreuses applications, notamment :</p>



<ul class="wp-block-list">
<li>Les applications de chat en temps réel</li>



<li>Les jeux en ligne multijoueurs</li>



<li>Les applications de collaboration en temps réel (par exemple, les éditeurs de documents en ligne)</li>



<li>Les systèmes de notification en temps réel</li>
</ul>



<p>Dans l&#8217;exemple que j&#8217;ai donné plus haut, les WebSockets sont utilisés pour créer une application de contrôle à distance. Lorsqu&#8217;un message est reçu par le serveur, il peut déclencher une action spécifique, comme ouvrir une page web ou lancer une application.</p>



<p>En résumé, les WebSockets sont une technologie puissante qui permet une communication en temps réel entre les clients et les serveurs. Ils sont utilisés dans de nombreuses applications et offrent une grande flexibilité et une grande interactivité. Si vous souhaitez en savoir plus sur les WebSockets, je vous encourage à explorer les ressources disponibles en ligne et à expérimenter avec cette technologie.</p>
<p>Cet article <a href="https://cyberdev.be/new/les-websockets-une-technologie-de-communication-en-temps-reel/">Les WebSockets : Une Technologie de Communication en Temps Réel</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sauvegarder vos pilotes avec Double Driver : une précaution indispensable avant une réinstallation d&#8217;OS</title>
		<link>https://cyberdev.be/new/sauvegarder-vos-pilotes-avec-double-driver-une-precaution-indispensable-avant-une-reinstallation-dos/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Sat, 01 Mar 2025 05:38:19 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=651</guid>

					<description><![CDATA[<p>Lorsque vous envisagez de réinstaller votre système d&#8217;exploitation (OS), il est essentiel de prendre certaines précautions pour éviter les problèmes potentiels. L&#8217;une des étapes les plus importantes consiste à sauvegarder [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/sauvegarder-vos-pilotes-avec-double-driver-une-precaution-indispensable-avant-une-reinstallation-dos/">Sauvegarder vos pilotes avec Double Driver : une précaution indispensable avant une réinstallation d&#8217;OS</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Lorsque vous envisagez de réinstaller votre système d&#8217;exploitation (OS), il est essentiel de prendre certaines précautions pour éviter les problèmes potentiels. L&#8217;une des étapes les plus importantes consiste à sauvegarder vos pilotes de périphériques, également appelés &#8220;drivers&#8221;. C&#8217;est là que Double Driver intervient.</p>



<p><strong>Qu&#8217;est-ce que Double Driver ?</strong></p>



<p>Double Driver est un logiciel gratuit et open-source qui permet de sauvegarder et de restaurer vos pilotes de périphériques. Il est conçu pour fonctionner sous Windows et est compatible avec les versions 32 et 64 bits.</p>



<p><strong>Pourquoi sauvegarder vos pilotes ?</strong></p>



<p>Lorsque vous réinstallez votre OS, vous risquez de perdre les pilotes de vos périphériques, ce qui peut entraîner des problèmes de fonctionnement. En sauvegardant vos pilotes avant la réinstallation, vous pouvez les restaurer rapidement et facilement après l&#8217;installation, ce qui vous permettra de retrouver vos périphériques fonctionnels.</p>



<p><strong>Les avantages de sauvegarder vos pilotes avec Double Driver</strong></p>



<p>Double Driver offre plusieurs avantages :</p>



<ul class="wp-block-list">
<li><strong>Sauvegarde facile et rapide</strong> : Double Driver permet de sauvegarder vos pilotes en quelques clics. Il analyse votre système et identifie les pilotes installés, puis les sauvegarde dans un emplacement de votre choix.</li>



<li><strong>Restauration simplifiée</strong> : Après avoir réinstallé votre OS, vous pouvez restaurer vos pilotes sauvegardés à l&#8217;aide de Double Driver. Le logiciel réinstalle les pilotes et vous permet de retrouver vos périphériques fonctionnels.</li>



<li><strong>Génération de listes de pilotes</strong> : Double Driver peut générer une liste de vos pilotes installés, ce qui vous permet de vérifier les versions et les fabricants des pilotes.</li>



<li><strong>Compatibilité avec différentes versions de Windows</strong> : Double Driver est compatible avec les versions récentes de Windows, ce qui en fait un outil polyvalent pour les utilisateurs de différentes versions du système d&#8217;exploitation.</li>
</ul>



<p><strong>Comment utiliser Double Driver ?</strong></p>



<p>L&#8217;utilisation de Double Driver est simple :</p>



<ol class="wp-block-list">
<li>Téléchargez et installez Double Driver sur votre système.</li>



<li>Lancez le logiciel et cliquez sur &#8220;Sauvegarder&#8221; pour sauvegarder vos pilotes.</li>



<li>Choisissez l&#8217;emplacement où vous souhaitez sauvegarder vos pilotes.</li>



<li>En cas de réinstallation de votre OS, lancez Double Driver et cliquez sur &#8220;Restaurer&#8221; pour restaurer vos pilotes sauvegardés.</li>
</ol>



<p>En résumé, sauvegarder vos pilotes avec Double Driver est une précaution essentielle avant une réinstallation d&#8217;OS. Ce logiciel gratuit et facile à utiliser vous permet de sauvegarder et de restaurer vos pilotes de périphériques, ce qui vous évite les problèmes potentiels liés à la perte de vos pilotes. En prenant quelques minutes pour sauvegarder vos pilotes, vous pouvez vous assurer que vos périphériques fonctionneront correctement après la réinstallation de votre OS.</p>
<p>Cet article <a href="https://cyberdev.be/new/sauvegarder-vos-pilotes-avec-double-driver-une-precaution-indispensable-avant-une-reinstallation-dos/">Sauvegarder vos pilotes avec Double Driver : une précaution indispensable avant une réinstallation d&#8217;OS</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Le Craftsmanship : L&#8217;art de coder avec passion et excellence</title>
		<link>https://cyberdev.be/new/le-craftsmanship-lart-de-coder-avec-passion-et-excellence/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Thu, 19 Dec 2024 15:41:46 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=646</guid>

					<description><![CDATA[<p>Le Craftsmanship : L&#8217;art de coder avec passion et excellence Dans le monde du développement logiciel, le terme craftsmanship (ou artisanat du code) est souvent associé à une philosophie qui [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/le-craftsmanship-lart-de-coder-avec-passion-et-excellence/">Le Craftsmanship : L&#8217;art de coder avec passion et excellence</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Le Craftsmanship : L&#8217;art de coder avec passion et excellence</strong></p>



<p>Dans le monde du développement logiciel, le terme <em>craftsmanship</em> (ou artisanat du code) est souvent associé à une philosophie qui va bien au-delà de la simple écriture de lignes de code. Il s&#8217;agit d&#8217;une approche qui met l&#8217;accent sur l&#8217;excellence, la qualité et la passion dans le travail du développeur. Inspiré par les métiers artisanaux traditionnels, le craftsmanship prône une attention méticuleuse aux détails, une amélioration continue et une fierté dans le travail bien fait. Dans cet article, nous allons explorer ce qu&#8217;est le craftsmanship et vous donner quelques exemples concrets pour illustrer cette philosophie.</p>



<h3 class="wp-block-heading">Qu&#8217;est-ce que le craftsmanship ?</h3>



<p>Le craftsmanship, dans le contexte du développement logiciel, repose sur plusieurs principes fondamentaux :</p>



<ol class="wp-block-list">
<li><strong>La qualité avant tout</strong> : Un artisan du code ne se contente pas de faire fonctionner un programme. Il s&#8217;assure que le code est propre, maintenable et performant.</li>



<li><strong>L&#8217;amélioration continue</strong> : Les artisans cherchent constamment à améliorer leurs compétences, à apprendre de nouvelles technologies et à affiner leur maîtrise des outils existants.</li>



<li><strong>La collaboration</strong> : Le craftsmanship valorise le travail en équipe, les retours constructifs et le partage des connaissances.</li>



<li><strong>La fierté du travail bien fait</strong> : Un artisan prend du plaisir à coder et ressent une satisfaction profonde lorsqu&#8217;il livre un produit de qualité.</li>
</ol>



<h3 class="wp-block-heading">Quelques exemples de craftsmanship en action</h3>



<ol class="wp-block-list">
<li><strong>Le refactoring constant</strong><br>Imaginons un développeur travaillant sur une application web. Il remarque qu&#8217;une fonctionnalité, bien que fonctionnelle, est difficile à maintenir en raison d&#8217;un code mal structuré. Plutôt que de laisser ce problème pour plus tard, il prend le temps de refactoriser le code, en le rendant plus lisible et modulaire. Par exemple, il pourrait transformer un bloc de code spaghetti comme ceci :</li>
</ol>



<pre class="wp-block-code"><code>   if (condition) { doSomething(); } else { doSomethingElse(); }</code></pre>



<p>en une structure plus claire :</p>



<pre class="wp-block-code"><code>   function handleCondition(condition) {
       return condition ? doSomething() : doSomethingElse();
   }</code></pre>



<p>Ce type de travail, bien que parfois invisible pour l&#8217;utilisateur final, est au cœur du craftsmanship.</p>



<ol class="wp-block-list" start="2">
<li><strong>L&#8217;écriture de tests unitaires</strong><br>Un autre exemple concret est l&#8217;adoption rigoureuse des tests unitaires. Un artisan du code ne se contente pas de vérifier que son programme fonctionne manuellement. Il écrit des tests automatisés pour chaque composant, garantissant ainsi que le code reste stable même après des modifications futures. Par exemple, pour une fonction simple comme une calculatrice, un test unitaire pourrait ressembler à ceci :</li>
</ol>



<pre class="wp-block-code"><code>   def test_addition():
       assert add(2, 3) == 5</code></pre>



<p>Cette pratique reflète l&#8217;engagement envers la qualité et la prévention des bugs.</p>



<ol class="wp-block-list" start="3">
<li><strong>La documentation claire et concise</strong><br>Un artisan ne néglige pas non plus la documentation. Lorsqu&#8217;il écrit une fonction complexe, il s&#8217;assure d&#8217;inclure des commentaires clairs et des docstrings informatives. Par exemple, pour une fonction Python :</li>
</ol>



<pre class="wp-block-code"><code>   def calculate_discount(price, discount_rate):
       """
       Calcule le prix après application d'une remise.

       :param price: Le prix initial (float)
       :param discount_rate: Le taux de remise (float entre 0 et 1)
       :return: Le prix après remise (float)
       """
       return price * (1 - discount_rate)</code></pre>



<p>Cette attention aux détails facilite la compréhension et la maintenance du code par d&#8217;autres développeurs.</p>



<ol class="wp-block-list" start="4">
<li><strong>L&#8217;utilisation des principes SOLID</strong><br>Les artisans du code adhèrent souvent aux principes SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) pour concevoir des systèmes modulaires et extensibles. Par exemple, au lieu d&#8217;écrire une classe monolithique, un artisan pourrait diviser la logique en plusieurs classes respectant le principe de responsabilité unique (Single Responsibility Principle).</li>
</ol>



<h3 class="wp-block-heading">Pourquoi adopter le craftsmanship ?</h3>



<p>Adopter le craftsmanship, c&#8217;est s&#8217;engager dans une démarche qui valorise non seulement le produit final, mais aussi le processus de création. Cela peut sembler exigeant, mais les bénéfices sont nombreux :</p>



<ul class="wp-block-list">
<li>Des logiciels plus robustes et moins sujets aux bugs.</li>



<li>Une meilleure collaboration au sein des équipes.</li>



<li>Une satisfaction personnelle accrue pour les développeurs.</li>



<li>Une réduction des coûts à long terme grâce à une meilleure maintenabilité.</li>
</ul>



<h3 class="wp-block-heading">Conclusion</h3>



<p>Le craftsmanship n&#8217;est pas une simple tendance, mais une philosophie qui peut transformer la manière dont nous abordons le développement logiciel. En mettant l&#8217;accent sur la qualité, l&#8217;amélioration continue et la fierté du travail bien fait, les artisans du code contribuent à créer des logiciels qui non seulement fonctionnent, mais qui sont également durables et agréables à utiliser. Alors, pourquoi ne pas essayer d&#8217;intégrer quelques pratiques de craftsmanship dans vos projets ? Vous pourriez être surpris par les résultats !</p>



<p>N&#8217;hésitez pas à partager vos propres expériences ou exemples de craftsmanship dans les commentaires !</p>
<p>Cet article <a href="https://cyberdev.be/new/le-craftsmanship-lart-de-coder-avec-passion-et-excellence/">Le Craftsmanship : L&#8217;art de coder avec passion et excellence</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Interaction avec une base de données Oracle à l&#8217;aide de PowerShell</title>
		<link>https://cyberdev.be/new/interaction-avec-une-base-de-donnees-oracle-a-laide-de-powershell/</link>
		
		<dc:creator><![CDATA[Patrick]]></dc:creator>
		<pubDate>Thu, 20 Jun 2024 11:49:41 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://cyberdev.be/new/?p=620</guid>

					<description><![CDATA[<p>Dans cet article, nous explorons un script PowerShell qui établit une connexion à une base de données Oracle, exécute une requête SQL et traite les potentielles erreurs. Ce script est [&#8230;]</p>
<p>Cet article <a href="https://cyberdev.be/new/interaction-avec-une-base-de-donnees-oracle-a-laide-de-powershell/">Interaction avec une base de données Oracle à l&#8217;aide de PowerShell</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Dans cet article, nous explorons un script PowerShell qui établit une connexion à une base de données Oracle, exécute une requête SQL et traite les potentielles erreurs. Ce script est parfait pour les administrateurs de base de données ou les développeurs qui ont besoin d&#8217;automatiser la gestion et la récupération de données Oracle.</p>



<p><strong>Chargement de l&#8217;assemblage OracleClient</strong></p>



<p>Le script débute par tenter de charger l&#8217;assemblage nécessaire pour interagir avec Oracle, <code>System.Data.OracleClient</code>, en utilisant la méthode <code>LoadWithPartialName</code>. Cette méthode est obsolète et il est recommandé d&#8217;utiliser <code>Add-Type</code> avec le chemin complet de l&#8217;assembly pour les versions actuelles de PowerShell. Si l&#8217;assemblage est chargé avec succès, un message de confirmation s&#8217;affiche. Dans le cas contraire, un message d&#8217;erreur est affiché et le script se termine avec <code>Exit 1</code>, indiquant une sortie anormale.</p>



<pre class="wp-block-code"><code>$Assembly = &#91;System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")

if ( $Assembly ) {
    Write-Host "System.Data.OracleClient Loaded!"
}
else {
    Write-Host "System.Data.OracleClient could not be loaded! Exiting..."
    Exit 1
}
</code></pre>



<p><strong>Configuration de la chaîne de connexion</strong></p>



<p>Ensuite, le script configure une chaîne de connexion à la base de données Oracle. Cette chaîne contient l&#8217;identifiant utilisateur, le mot de passe et la source de données, qui sont des éléments cruciaux pour établir une connexion sécurisée.</p>



<pre class="wp-block-code"><code>$OracleConnectionString = "user id=#####;password=#######;data source=######"
</code></pre>



<p><strong>Connexion à la base de données Oracle</strong></p>



<p>Avec la chaîne de connexion définie, le script crée un nouvel objet <code>OracleConnection</code> et ouvre la connexion à la base de données.</p>



<pre class="wp-block-code"><code>$OracleConnection = New-Object System.Data.OracleClient.OracleConnection($OracleConnectionString);
$OracleConnection.Open()
</code></pre>



<p><strong>Exécution d&#8217;une requête SQL</strong></p>



<p>Dans un bloc <code>try</code>, le script prépare une commande SQL pour interroger le nombre d&#8217;enregistrements dans une table donnée où la colonne <code>IS_DISABLED</code> est égale à 0.</p>



<pre class="wp-block-code"><code>$OracleSQLQuery = "select count (*) from d_d where IS_DISABLED = 0"
</code></pre>



<p><strong>Création et exécution de la commande</strong></p>



<p>Un objet <code>OracleCommand</code> est créé et configuré avec la requête SQL et la connexion à la base de données. La commande est de type texte.</p>



<pre class="wp-block-code"><code>$SelectCommand1 = New-Object System.Data.OracleClient.OracleCommand;
$SelectCommand1.Connection = $OracleConnection
$SelectCommand1.CommandText = $OracleSQLQuery
$SelectCommand1.CommandType = &#91;System.Data.CommandType]::Text
</code></pre>



<p><strong>Récupération des résultats</strong></p>



<p>Les résultats de la requête sont chargés dans un objet <code>DataTable</code> en utilisant <code>ExecuteReader</code> sur l&#8217;objet commande.</p>



<pre class="wp-block-code"><code>$SelectDataTable = New-Object System.Data.DataTable
$SelectDataTable.Load($SelectCommand1.ExecuteReader())
</code></pre>



<p><strong>Gestion des erreurs</strong></p>



<p>Si une erreur survient pendant l&#8217;exécution de la requête, le script capture l&#8217;exception et affiche un message d&#8217;erreur. Cela permet d&#8217;identifier facilement les problèmes sans interrompre brusquement le script.</p>



<pre class="wp-block-code"><code><code>catch {
    Write-Host "Error while retrieving data!"
}
</code></code></pre>



<p><strong>Conclusion</strong></p>



<p>Ce script PowerShell est un outil simple mais puissant pour automatiser la récupération de données d&#8217;une base de données Oracle. Il est essentiel de remplacer les marqueurs de position pour l&#8217;identifiant utilisateur, le mot de passe et la source de données par des valeurs réelles pour assurer le bon fonctionnement du script. De plus, une gestion des erreurs robuste garantit que le script peut traiter les imprévus de manière élégante et informative.</p>
<p>Cet article <a href="https://cyberdev.be/new/interaction-avec-une-base-de-donnees-oracle-a-laide-de-powershell/">Interaction avec une base de données Oracle à l&#8217;aide de PowerShell</a> est apparu en premier sur <a href="https://cyberdev.be/new">CYBERDEV s.p.r.l.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
