<?xml version="1.0"?>
<rss version="2.0"><channel><title>Programmation et Lignes de code Latest Topics</title><link>https://forum.nextinpact.com/forum/45-programmation-et-lignes-de-code/</link><description>Programmation et Lignes de code Latest Topics</description><language>en</language><item><title>Debloater Windows 11 dans un environnement Professionnel - style Matrix</title><link>https://forum.nextinpact.com/topic/199031-debloater-windows-11-dans-un-environnement-professionnel-style-matrix/</link><description><![CDATA[<p>Miaou,<br><br>J'ai fait un script que je lance lors d'installation de nouveau poste dans un environnement d'entreprise. D'abord, je lance mon .bat (en admin) qui va faire un bypass et qui va lancer le script en powershell.<br>Attention : les deux fichiers doivent être dans le même dossier.</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>Run-Win11-Clean.bat@echo off
title MATRIX - Win11 Enterprise Clean
color 0A
mode con: cols=95 lines=30
cd /d "%~dp0"
echo.
echo #############################################################
echo # WIN11 ENTERPRISE CLEAN - MATRIX LAUNCHER #
echo #############################################################
echo.
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0Win11-Enterprise-Clean.ps1"
echo.
echo Termine. Appuie sur une touche pour fermer.
pause &gt;nul</code></pre><p>Et le script power shell Win11-Enterprise-Clean<br></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>#requires -RunAsAdministrator
&lt;#
Win11 Enterprise Clean - Matrix Mode
- Ne supprime PAS OneDrive
- Ne touche PAS Copilot
- Réduit télémétrie / suggestions / CEIP
- Restaure le clic droit classique Windows 10
#&gt;
$Host.UI.RawUI.BackgroundColor = "Black"
$Host.UI.RawUI.ForegroundColor = "Green"
Clear-Host
function Matrix-Line {
param([string]$Text)
Write-Host "[MATRIX] $Text" -ForegroundColor Green
Start-Sleep -Milliseconds 250
}
function Step {
param([string]$Text)
Write-Host ""
Write-Host "[&gt;&gt;] $Text" -ForegroundColor Green
Start-Sleep -Milliseconds 300
}
function Ok {
param([string]$Text)
Write-Host "[OK] $Text" -ForegroundColor DarkGreen
}
function Warn {
param([string]$Text)
Write-Host "[!!] $Text" -ForegroundColor Yellow
}
function Fail {
param([string]$Text)
Write-Host "[ERREUR] $Text" -ForegroundColor Red
}
function Progress-Matrix {
param(
[string]$Activity,
[int]$Seconds = 1
)
for ($i = 1; $i -le 100; $i += 10) {
Write-Progress -Activity $Activity -Status "$i% complete" -PercentComplete $i
Start-Sleep -Milliseconds ($Seconds * 80)
}
Write-Progress -Activity $Activity -Completed
}
Write-Host ""
Write-Host "============================================================" -ForegroundColor Green
Write-Host " WIN11 ENTERPRISE CLEAN - MATRIX MODE" -ForegroundColor Green
Write-Host "============================================================" -ForegroundColor Green
Write-Host ""
Matrix-Line "Wake up, admin..."
Matrix-Line "The system has you..."
Matrix-Line "Applying enterprise-safe privacy tweaks..."
Write-Host ""
# --- Deblocage temporaire ---
Step "Deblocage temporaire PowerShell pour cette session"
try {
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
Ok "ExecutionPolicy temporaire definie sur Bypass"
} catch {
Warn "Impossible de modifier ExecutionPolicy. Une GPO domaine peut bloquer cette action."
}
try {
Unblock-File -Path $PSCommandPath -ErrorAction SilentlyContinue
Ok "Fichier script debloque avec Unblock-File"
} catch {
Warn "Unblock-File impossible ou non necessaire"
}
Progress-Matrix "Initialisation" 1
# --- Diagnostic data ---
Step "Configuration de la telemetrie au minimum"
try {
New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Force | Out-Null
Set-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" `
-Name "AllowTelemetry" -Type DWord -Value 1
Ok "Telemetrie configuree sur Required / Basic"
} catch {
Fail "Erreur pendant la configuration de la telemetrie"
}
Progress-Matrix "Telemetrie" 1
# --- Experiences personnalisees ---
Step "Desactivation des experiences personnalisees"
try {
New-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\Privacy" -Force | Out-Null
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Privacy" `
-Name "TailoredExperiencesWithDiagnosticDataEnabled" -Type DWord -Value 0
Ok "Experiences personnalisees desactivees"
} catch {
Fail "Erreur pendant la desactivation des experiences personnalisees"
}
# --- Advertising ID ---
Step "Desactivation de l'Advertising ID"
try {
New-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo" -Force | Out-Null
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo" `
-Name "Enabled" -Type DWord -Value 0
Ok "Advertising ID desactive"
} catch {
Fail "Erreur pendant la desactivation de l'Advertising ID"
}
Progress-Matrix "Confidentialite utilisateur" 1
# --- Suggestions Windows ---
Step "Desactivation des suggestions Windows et contenus sponsorises"
try {
$cdm = "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
New-Item $cdm -Force | Out-Null
$cdmValues = @{
"ContentDeliveryAllowed" = 0
"OemPreInstalledAppsEnabled" = 0
"PreInstalledAppsEnabled" = 0
"PreInstalledAppsEverEnabled" = 0
"SilentInstalledAppsEnabled" = 0
"SoftLandingEnabled" = 0
"SystemPaneSuggestionsEnabled" = 0
"SubscribedContent-310093Enabled" = 0
"SubscribedContent-338388Enabled" = 0
"SubscribedContent-338389Enabled" = 0
"SubscribedContent-338393Enabled" = 0
"SubscribedContent-353694Enabled" = 0
"SubscribedContent-353696Enabled" = 0
"SubscribedContent-353698Enabled" = 0
}
foreach ($name in $cdmValues.Keys) {
Set-ItemProperty $cdm -Name $name -Type DWord -Value $cdmValues[$name]
}
Ok "Suggestions, apps promues et contenus sponsorises desactives"
} catch {
Fail "Erreur pendant la desactivation des suggestions Windows"
}
Progress-Matrix "Suggestions Windows" 1
# --- Consumer Features ---
Step "Desactivation des Windows Consumer Features"
try {
New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Force | Out-Null
Set-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" `
-Name "DisableWindowsConsumerFeatures" -Type DWord -Value 1
Ok "Windows Consumer Features desactivees"
} catch {
Fail "Erreur pendant la configuration des Consumer Features"
}
# --- Feedback prompts ---
Step "Desactivation des demandes de feedback"
try {
New-Item "HKCU:\Software\Microsoft\Siuf\Rules" -Force | Out-Null
Set-ItemProperty "HKCU:\Software\Microsoft\Siuf\Rules" `
-Name "NumberOfSIUFInPeriod" -Type DWord -Value 0
Set-ItemProperty "HKCU:\Software\Microsoft\Siuf\Rules" `
-Name "PeriodInNanoSeconds" -Type DWord -Value 0
Ok "Demandes de feedback desactivees"
} catch {
Fail "Erreur pendant la desactivation des feedback prompts"
}
Progress-Matrix "Feedback" 1
# --- CEIP scheduled tasks ---
Step "Desactivation des taches CEIP compatibles entreprise"
$tasks = @(
"\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser",
"\Microsoft\Windows\Application Experience\ProgramDataUpdater",
"\Microsoft\Windows\Customer Experience Improvement Program\Consolidator",
"\Microsoft\Windows\Customer Experience Improvement Program\UsbCeip"
)
foreach ($task in $tasks) {
try {
schtasks /Change /TN $task /Disable 2&gt;$null | Out-Null
Ok "Tache desactivee : $task"
} catch {
Warn "Impossible de desactiver : $task"
}
}
Progress-Matrix "Taches CEIP" 1
# --- Menu clic droit classique ---
Step "Restauration du menu clic droit classique Windows 10"
try {
$classicMenuPath = "HKCU:\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"
New-Item $classicMenuPath -Force | Out-Null
Set-ItemProperty $classicMenuPath -Name "(default)" -Value ""
Ok "Menu contextuel classique active"
} catch {
Fail "Erreur pendant l'activation du menu contextuel classique"
}
Progress-Matrix "Menu contextuel" 1
# --- Redemarrage Explorer ---
Step "Redemarrage d'Explorer"
try {
Stop-Process -Name explorer -Force
Ok "Explorer redemarre"
} catch {
Warn "Impossible de redemarrer Explorer automatiquement"
}
Write-Host ""
Write-Host "============================================================" -ForegroundColor Green
Write-Host " OPERATION TERMINEE" -ForegroundColor Green
Write-Host "============================================================" -ForegroundColor Green
Write-Host ""
Ok "OneDrive non modifie"
Ok "Copilot non modifie"
Ok "Compatible environnement de travail / M365"
Warn "Redemarrage du PC conseille pour appliquer tous les changements"
Write-Host ""
Write-Host "Follow the white rabbit..." -ForegroundColor DarkGreen
Write-Host ""</code></pre><p><a class="ipsAttachLink" data-fileid="5258" data-fileext="ps1" data-extension="ps1" href="https://forum.nextinpact.com/applications/core/interface/file/attachment.php?id=5258&amp;key=98ef07a8f740925f7e20df81d5f52704" rel="">Win11-Enterprise-Clean.ps1</a> <a class="ipsAttachLink" data-fileid="5259" data-fileext="bat" data-extension="bat" href="https://forum.nextinpact.com/applications/core/interface/file/attachment.php?id=5259&amp;key=7144d95a1f4919b4415056cb0b5bb28a" rel="">Run-Win11-Clean.bat</a></p>]]></description><guid isPermaLink="false">199031</guid><pubDate>Tue, 05 May 2026 13:38:02 +0000</pubDate></item><item><title>Neofetch devient Fastfetch</title><link>https://forum.nextinpact.com/topic/198981-neofetch-devient-fastfetch/</link><description><![CDATA[<p>Bonsoir,</p><p>Au revoir <strong>Neofetch</strong>, bonjour <a rel="external nofollow" href="https://github.com/fastfetch-cli/fastfetch"><strong>Fastfetch</strong></a><strong>.</strong></p><p>Depuis la sortie de la 25.04 d'ubuntu et la version 13 de debian, Neofetch n'est plus.</p><p>Et les autres distributions gnu/linux sont aussi concernées ainsi que macOS.</p><p>Il vous faudra passer par <strong>Fastfetch.</strong></p>]]></description><guid isPermaLink="false">198981</guid><pubDate>Thu, 30 Apr 2026 22:47:22 +0000</pubDate></item><item><title>Jouer avec Qwen3 TTS sans carte NVidia</title><link>https://forum.nextinpact.com/topic/198476-jouer-avec-qwen3-tts-sans-carte-nvidia/</link><description><![CDATA[<ul><li><p>Les sources Qwen3-TTS: <a rel="external nofollow" href="https://github.com/QwenLM/Qwen3-TTS">https://github.com/QwenLM/Qwen3-TTS</a></p></li><li><p>Je suis sous Debian 13 Trixie</p></li><li><p>Sur un portable Intel (Core-i3 6100U)</p></li></ul><p>Méthode:</p><ul><li><p></p><details class="ipsRichTextBox ipsRichTextBox--expandable"><summary class="ipsRichTextBox__title"><p>Créer un répertoire, un venv et l'activer</p></summary><p>mkdir ~/Projets/Qwen3 &amp;&amp; cd ~/Projets/Qwen3</p><p>python -m venv .</p><p>source ./bin/activate</p></details></li></ul><p></p><details class="ipsRichTextBox ipsRichTextBox--expandable"><summary class="ipsRichTextBox__title"><p>Installer les dépendances pour les exemples Qwen, mais en remplaçant torch et tensorflow par la version CPU</p></summary><p>pip install torch torchvision torchaudio --index-url <a rel="external nofollow" href="https://download.pytorch.org/whl/cpu">https://download.pytorch.org/whl/cpu</a><br>pip uninstall -y tensorflow &amp;&amp; pip install tensorflow-cpu<br>pip install -U qwen-tts</p><p><strong>NE PAS INSTALLER flash_attn!</strong></p></details><p></p><details class="ipsRichTextBox ipsRichTextBox--expandable"><summary class="ipsRichTextBox__title"><p>Adapter les exemples qui sont liés à une device "cuda:0" et à flash_attn. Replace bfloat16 par float peut aider.</p></summary><p>Dans les codes sources proposés par Alibaba, remplacer:</p><ul><li><p>device_map="cuda:0" par device_map="cpu"</p></li><li><p>dtype=torch.bfloat16 par dtype=torch.float (perfs x2 :) )</p></li><li><p>supprimer attn_implementation</p></li></ul><p>Exemple:</p><ul><li><p>AVANT</p><p>model = Qwen3TTSModel.from_pretrained(<br>"Qwen/Qwen3-TTS-12Hz-0.6B-Base",<br><strong>device_map="cuda:0",</strong><br><strong> dtype=torch.bfloat16,</strong><br><strong>attn_implementation="flash_attention_2",</strong></p><p>)</p></li></ul><ul><li><p>APRES</p><p>model = Qwen3TTSModel.from_pretrained(<br>"Qwen/Qwen3-TTS-12Hz-0.6B-Base",<br>device_map="cpu",<br><strong> dtype=torch.float,</strong><br><strong> # attn_implementation="flash_attention_2",</strong></p><p>)</p></li></ul></details><p>Il y aura un petit avertissement certainement concernant AVX2/FMA, pour le faire sauter il faudra recompiler tensorflow avec le support de ces instructions,</p>]]></description><guid isPermaLink="false">198476</guid><pubDate>Tue, 27 Jan 2026 21:07:36 +0000</pubDate></item><item><title>"Hello World!" dans tous les langages</title><link>https://forum.nextinpact.com/topic/23103-hello-world-dans-tous-les-langages/</link><description><![CDATA[<p>Voilà ça serait marrant dans ce sujet de rassembler les façons d'écrire à l'écran "Hello World!" dans tous les languages de programmation existants.</p>
<p>Pour rappel:</p>
<blockquote data-ipsquote="" class="ipsQuote" data-ipsquote-contentapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentid="23103" data-ipsquote-contentclass="forums_Topic"><div>Quand un anglo-saxon débute en programmation ou touche pour la première fois à un langage particulier, il fait un petit programme qui dit bonjour à tout le monde. L'expression " Hello, world ! " déigne ainsi quelque chose d'élémentaire.</div></blockquote>
<p>Je tiendrais ce post à jour si vous suivez le délire <img src="https://forum.nextinpact.com/uploads/emoticons/default_icon_rolleyes.gif" alt=":roll:"></p>
<p>Je commence donc:</p>
<p>---------------------------------------------------------------------------------------------------</p>
<p><strong>ABAP (langage SAP)</strong></p>
<p></p>
<pre class="ipsCode">REPORT ZSHELLO01.

START-OF-SELECTION.

FORMAT INTENSIFIED OFF.
WRITE : /5 'Hello World !!'.
FORMAT RESET.</pre>
<div></div>
<p></p>
<p><strong>ActionScript</strong></p>
<p></p>
<pre class="ipsCode">stop();
trace("Hello World");</pre>
<div></div>
<p></p>
<p></p>
<pre class="ipsCode">import mx.transitions.Tween;
import mx.transitions.easing.*;


var helloClip_mc :MovieClip = this.createEmptyMovieClip("helloClip_mc",1);
var sayHello_txt :TextField = this.helloClip_mc.createTextField("sayHello_txt",2,0,0,0,0);
var formatHello_fmt  :TextFormat = new TextFormat();

with(formatHello_fmt) {
color = 0x000000;
size = 50;
font = "Arial";
}

with(helloClip_mc.sayHello_txt) {
autoSize = "left";
text = "Hello World";
setTextFormat(formatHello_fmt);
_x=(Stage.width-this._width)/2;
_y=(Stage.height-this._height)/2;
}

var helloTween : Tween = new Tween(helloClip_mc, "_y", Bounce.easeOut, Stage.height+helloClip_mc.sayHello_txt._height, 0, 1, true);</pre>
<div></div>
<p></p>
<p><strong>ADA83 / ADA95</strong></p>
<p></p>
<pre class="ipsCode">With STANDARD_IO;
Use STANDARD_IO;
Procedure HELLO_WORLD is
begin
Put("Hello world!");
End HELLO_WORLD;</pre>
<div></div>
<p></p>
<p><strong>AppleScript</strong></p>
<p></p>
<pre class="ipsCode">display dialog "hello world"</pre>
<div></div>
<p></p>
<p><strong>ASSEMBLEUR x86, compilateur TASM</strong></p>
<p></p>
<pre class="ipsCode">.model small
.stack 100h

.data
hello  db  "Hello the World !$"

.code
main  proc

MOV  AX,@data
MOV  DS,AX

MOV  DX,offset hello
MOV  AX,0900h
INT  21h

MOV  AX,4C00h		  
INT  21h

main endp
end main</pre>
<div></div>
<p></p>
<p><strong>ASSEMBLEUR Z80 (ça rajeuni pas ça </strong><img src="https://forum.nextinpact.com/uploads/emoticons/default_transpi.gif" alt=":transpi:"><strong> )</strong></p>
<p></p>
<pre class="ipsCode">;mettre ici tous les includes nécessaires en fonction de la machine utilisée plus les routines utilisées plus bas
start:
bcall(_clrlcdf)
ld hl,helloworld
bcall(_puts)
ret
helloworld:
db "Hello world",0
.end</pre>
<div></div>
<p></p>
<p><strong>BASIC</strong></p>
<p></p>
<pre class="ipsCode">10 print "Hello World!"</pre>
<div></div>
<p></p>
<p><strong>C/C++/C# (pour le dernier , prononcez "C Sharp", la classe xD)</strong> </p>
<p></p>
<pre class="ipsCode"> include &lt;iostream.h&gt;
main() {cout &lt;&lt; "HELLO WORLD";}</pre>
<div></div>
<p></p>
<p></p>
<pre class="ipsCode">include #stdio.h
main() {
printf("Hello world, Sarvok is Now the Best");
return 0;
}</pre>
<div></div>
<p></p>
<p></p>
<pre class="ipsCode">class INpactApp {
  public static void Main() {
   System.Console.WriteLine("Hello world !");
  }
}</pre>
<div></div>
<p></p>
<p><strong>CAML</strong></p>
<p></p>
<pre class="ipsCode">let = print_endline "Hello world !";;</pre>
<div></div>
<p></p>
<p><strong>COBOL</strong></p>
<p></p>
<pre class="ipsCode">IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORLD.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "Hello world !".
STOP RUN.</pre>
<div></div>
<p></p>
<p><strong>COLDFUSION</strong></p>
<p></p>
<pre class="ipsCode">&lt;cfset hello = "Hello World !"&gt;
&lt;cfoutput&gt;#hello#&lt;/cfoutput&gt;</pre>
<div></div>
<p></p>
<p><strong>DOS</strong></p>
<p></p>
<pre class="ipsCode">echo Hello World !</pre>
<div></div>
<p></p>
<p><strong>HTML</strong></p>
<p></p>
<pre class="ipsCode"> &lt;html&gt;
&lt;body&gt;
&lt;p&gt;Hello world&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<div></div>
<p></p>
<p><strong>IDL</strong></p>
<p></p>
<pre class="ipsCode">PRO hello
print,'Hello World!'
END</pre>
<div></div>
<p></p>
<p><strong>Installshield Script</strong></p>
<p></p>
<pre class="ipsCode">function PrintHello()
begin
	Sprintf(gsBuffer,"Hello World");
	MessageBox(gsBuffer,SEVERE);
end;</pre>
<div></div>
<p></p>
<p><strong>JAVA</strong></p>
<p></p>
<pre class="ipsCode">public Class Hello
{
public static void main(String[] args)
{
  System.out.println("Hello World !");
}
}</pre>
<div></div>
<p></p>
<p><strong>JAVASCRIPT</strong></p>
<p></p>
<pre class="ipsCode">&lt;script type="text/javascript"&gt;
&lt;!--
function hello()
{
alert("HelloWorld");
}
//--&gt;
&lt;/script&gt;</pre>
<div></div>
<p></p>
<p><strong>Lisaac</strong></p>
<p></p>
<pre class="ipsCode">Section Header
	  - name := HELLO_WORLD;

	Section Public
	  - main &lt;-
	  (
		"Hello world\n".print;
	  );</pre>
<div></div>
<p></p>
<p><strong>LolCode</strong></p>
<p></p>
<pre class="ipsCode">HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE</pre>
<div></div>
<p></p>
<p><strong>NEWBASIC</strong></p>
<p></p>
<pre class="ipsCode">{ function ("y")
{ raise ( * )
# "hello world!"; func(opennewwindow);
/function }
/raise }</pre>
<div></div>
<p></p>
<p><strong>ORACLE</strong></p>
<p></p>
<pre class="ipsCode">CREATE PROCEDURE hello AS
BEGIN
DBMS_OUTPUT.PRINT_LINE("Hello World!");
END;</pre>
<div></div>
<p></p>
<p><strong>PASCAL</strong></p>
<p></p>
<pre class="ipsCode">BEGIN
WriteLn('Hello World');
END.</pre>
<div></div>
<p></p>
<p><strong>PERL</strong></p>
<p></p>
<pre class="ipsCode">print "Hello world\n";</pre>
<div></div>
<p></p>
<p><strong>PHP</strong></p>
<p></p>
<pre class="ipsCode">&lt;?php
echo "Hello World!";
?&gt;</pre>
<div></div>
<p></p>
<p></p>
<pre class="ipsCode">&lt;?="Hello World";?&gt;</pre>
<div></div>
<p></p>
<p><strong>PYTHON</strong></p>
<p></p>
<pre class="ipsCode">print "Hello World!"</pre>
<div></div>
<p></p>
<p><strong>Ti basic</strong></p>
<p></p>
<pre class="ipsCode">Disp "HELLO WORLD"</pre>
<div></div>
<p></p>
<p><strong>VIRTUALBASIC</strong></p>
<p></p>
<pre class="ipsCode">Sub Main()
  MsgBox("Hello world!")
End Sub</pre>
<div></div>
<p></p>
<p>Je mettrais des greets plus tard, merci les gars  <img src="https://forum.nextinpact.com/uploads/emoticons/default_francais2.gif" alt=":francais:"></p>
<p> <img src="https://forum.nextinpact.com/uploads/emoticons/default_stop" alt=":arreterstop:"> @+</p>
]]></description><guid isPermaLink="false">23103</guid><pubDate>Sat, 03 Jul 2004 01:38:30 +0000</pubDate></item><item><title>Logiciel et p&#xE9;riph&#xE9;rique pour lire carte &#xE0; puce carte sim rfid et nfc</title><link>https://forum.nextinpact.com/topic/191824-logiciel-et-p%C3%A9riph%C3%A9rique-pour-lire-carte-%C3%A0-puce-carte-sim-rfid-et-nfc/</link><description><![CDATA[<p>
	Bonjour, je cherche un logiciel ainsi qu'un périphérique compatible pour lire le contenu d'une carte à puce, carte sim, recevoir des infos rfid et nfc.
</p>

<p>
	Pas besoin de modifier les données, c'est juste pour bidouiller : lire les données (en brut) et comprendre comment ça fonctionne.
</p>

<p>
	Avez-vous des pistes sur ce qui se fait ?
</p>
]]></description><guid isPermaLink="false">191824</guid><pubDate>Sat, 11 May 2024 12:31:13 +0000</pubDate></item><item><title>Probl&#xE8;me d'encodage lors d'une migration MARIADB</title><link>https://forum.nextinpact.com/topic/191636-probl%C3%A8me-dencodage-lors-dune-migration-mariadb/</link><description><![CDATA[<p>
	Bonjour,
</p>

<p>
	j'ai un vieux serveur avec XAMPP et l'application PHP ProjeQtor installée dessus. Après un audit de sécurité j'ai besoin de mettre à jour toute la stack applicative et je rencontre des difficultés pour mariaDB.<br />
	<br />
	J'ai décrit tout mon problème dans un post en anglais sur un autre forum, et je m'octroie le droit de simplement faire un lien plutot que tout retranscrire. 
</p>

<p>
	<a href="https://www.projeqtor.org/fr/kunena/5-ask-questions/13474-encoding-errors-after-mariadb-upgrade" rel="external nofollow">https://www.projeqtor.org/fr/kunena/5-ask-questions/13474-encoding-errors-after-mariadb-upgrade</a>
</p>

<p>
	Je suis preneur de toute aide que vous pourriez m'apporter ! 
</p>

<p>
	Merci d'avance la commu
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">191636</guid><pubDate>Wed, 10 Apr 2024 08:07:08 +0000</pubDate></item><item><title>Code source</title><link>https://forum.nextinpact.com/topic/191457-code-source/</link><description><![CDATA[<p>
	Bonjour à toutes et à tous,
</p>

<p>
	J'ai une question concernant un sujet pour la société pour lequel je travaille. Je ne sais pas si c'est le bonne catégorie du forum, mais bref.<br />
	<br />
	Mes dirigeants, ont signés un devis pour un développement d'une application android. 
</p>

<p>
	Cela se passe mal avec la société qui produit l'application. On aimerait récupérer le code source. On aimerait savoir a qui appartient ce code? A la société qui le produit où à nous, qui as payé pour ce produire ce code ?<br />
	<br />
	Le seul contrat, c'est le devis qu'on a signé pour dire les développement à faire.<br />
	<br />
	Pour ma part, j'ai dit qu'on l'avait dans "l'os". Car, cela n'est pas inscrit, noir sur blanc sur le contrat. Mais comme, je m'y connais pas plus... Je ne sais pas trop. Si vous pouvez m'aider à ce sujet.<br />
	<br />
	Je vous remercie beaucoup.
</p>
]]></description><guid isPermaLink="false">191457</guid><pubDate>Mon, 11 Mar 2024 14:30:07 +0000</pubDate></item><item><title>Premier projet ESPHome - IOT "facile"</title><link>https://forum.nextinpact.com/topic/190263-premier-projet-esphome-iot-facile/</link><description><![CDATA[<p>
	Bonjour,
</p>

<p>
	Un petit partage de mon expérience récente sur des ESP32.
</p>

<p>
	Tout d'abord: le projet. Le but est de lire les informations de mon onduleur (Sofar Solar ME3000) et de mon Linky, de les afficher et de les envoyer sur homeassistant.
</p>

<ul>
	<li>
		L'affichage: écran 2,4", 320x240, doit permettre en un coup d'oeil de voir si on importe ou exporte l'électricité
	</li>
	<li>
		Le lien homeassistant: en Wifi, MQTT
	</li>
	<li>
		Le lien Sofar solar: RS485
	</li>
	<li>
		Le lien linky: port série des familles
	</li>
</ul>

<p>
	Le choix du matériel:
</p>

<ul>
	<li>
		Un ESP32 (WROVER au début, puis ESP32-S2 ensuite)
	</li>
	<li>
		Un adaptateur RS485-TTL
	</li>
	<li>
		Une plaque Pitinfo pour le lien linky (je l'avais déjà)
	</li>
</ul>

<p>
	Le choix du logiciel:
</p>

<ul>
	<li>
		J'ai commencé en arduino, mais c'était long et durant le dev j'ai découvert le projet <a href="https://esphome.io/" rel="external nofollow">https://esphome.io/</a>
	</li>
	<li>
		Après 30 minutes de test de ESPHome - et de parcours de la doc, j'ai choisi ESPHome
	</li>
</ul>

<p>
	Le dev:
</p>

<ul>
	<li>
		ESPHome est un réel projet "low code": 80% de mon projet est de la configuration (à la louche, vous pouver fact-checker)
	</li>
	<li>
		ESPHome permet (et je le conseille fortement) de séparer les fichiers. J'ai donc comme fichiers
		<ul>
			<li>
				powerreporter-s2.yaml: la version ESP32-S2 - décrit la connexion entre les composants et les packages à utiliser
			</li>
			<li>
				powerreporter-wrover.yaml: la version ESP32 "classique" - abandonnée pour passer au S2 car j'ai choisi pour la carte WROVER un plus grand destin...
			</li>
			<li>
				secrets.yaml: contient les mots de passe et SSID du Wifi
			</li>
			<li>
				display.yaml: décrit la connexion de l'écran et l'affichage
			</li>
			<li>
				teleinfo.yaml: décrit la connexion RS232 et les mesures du linky à remonter dans homeassistant
			</li>
			<li>
				me3000.yaml: décrit la connexion RS485 et les mesures à remonter de l'onduleur
			</li>
		</ul>
	</li>
</ul>

<p>
	Les fichiers:
</p>

<ul>
	<li>
		powerreporter.yaml: contient les infos de config/compilation, les modules à charger et en paramètres des modules les pattes à utiliser
	</li>
</ul>

<pre class="ipsCode"># POWER REPORTER
#
# Sends data from Sofar Solar ME300 and Link to Homeassistant
#
# This is the ESP32-S2 mini version
# NOTE: to be able to use both UARTS, we NEED to disable logging (baudrate: 0)
#
esphome:
  name: powerreporter
  platformio_options:
    board_build.extra_flags:
      - "-DARDUINO_USB_CDC_ON_BOOT=0" # Allow boh UART to be used with arduino build chain

esp32:
  board: lolin_s2_mini
  framework:
    type: arduino
#    type: esp-idf # recommended for ESP32S2
#    version: recommended
#    # Custom sdkconfig options
#    sdkconfig_options:
#      COMPILER_OPTIMIZATION_SIZE: y
#    # Advanced tweaking options
#    advanced:
#      ignore_efuse_mac_crc: false

# Disable logging to ensure both IARTs are free to use.
logger:
  baud_rate: 0
#  level: NONE

# Enable Home Assistant API
api:
  password: !secret ha_api_password

ota:
  password: !secret esphome_ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: !secret fallback_ssid
    password: !secret fallback_password

captive_portal:

       
#
#  ILI TFT 2.2                                       MAX3485
#      
#           +5V --1- VCC                                    3V3 - VCC
#            0V --2- GND                                     0V - GND
#   ESP32S2.D34 --3- CS                              ESP.D16 RX - RO
#   ESP32S2.D40 --4- RESET                           ESP.D18    - RE/DE 
#   ESP32S2.D33 --5- DC/RS                           ESP.D17 TX - DI
#   ESP32S2.D35 --6- MOSI/SDI
#   ESP32S2.D36 --7- SCLK
#   ESP32S2.D38 --8- LED
#   ESP32S2.D37 --9- MISO/SDO
#
#
packages:
  me3000: !include
    file: powerreporter-packages/me3000.yaml
    vars:
      uart_rx: GPIO21
      uart_tx: GPIO16
      flow_control: GPIO18
      modbus_address: 0x01

  teleinfo: !include
    file: powerreporter-packages/teleinfo.yaml
    vars:
       linky_rx: GPIO9
       linky_tx: GPIO10
       linky_speed: 1200
       linky_histo: true

  display: !include
    file: powerreporter-packages/display.yaml
    vars:
       disp_clk_pin: GPIO36
       disp_mosi_pin: GPIO35
       disp_miso_pin: GPIO37
       disp_dc_pin: GPIO33
       disp_cs_pin: GPIO34
       disp_reset_pin: GPIO40
</pre>

<p>
	teleinfo.yaml (facile, il y a un module dans esphome):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">###############################################
#
# TELEINFO via Linky (ou Sagem)
#
#
###############################################
uart:
  - id: uart_linky
    rx_pin: ${linky_rx} # eh oui, c'est paramétrable!
    tx_pin: ${linky_tx} #
    baud_rate: ${linky_speed} # 1200/9600
    parity: EVEN
    data_bits: 7


teleinfo:
  id: myteleinfo
  uart_id: uart_linky
  update_interval: 12s
  historical_mode: ${linky_histo} # true/false

sensor:
  - platform: teleinfo
    tag_name: "HCHC"
    name: "hchc"
    device_class: "energy"
    state_class: "total"
    unit_of_measurement: "Wh"
    icon: mdi:flash
    teleinfo_id: myteleinfo
  - platform: teleinfo
    tag_name: "HCHP"
    name: "hchp"
    device_class: "energy"
    state_class: "total"
    unit_of_measurement: "Wh"
    icon: mdi:flash
    teleinfo_id: myteleinfo
  - platform: teleinfo
    tag_name: "PAPP"
    name: "papp"
    device_class: "power"
    state_class: "measurement"
    unit_of_measurement: "VA"
    icon: mdi:flash
    teleinfo_id: myteleinfo

text_sensor:
  - platform: teleinfo
    tag_name: "OPTARIF"
    name: "optarif"
    teleinfo_id: myteleinfo</span></pre>

<p>
	me3000.yaml (simplifié - seul le début est intéressant, puis quelques exemples de traduction des messages modbus):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">#################################################"
# SOFAR Solar ME3000 via Modbus
#--- Usage: 
# packages:
#   me3000: !include
#     file: me3000.yaml
#     vars: 
#       uart_rx: GPIO16
#       uart_tx: GPIO17
#       flow_control: GPIO5
#       modbus_address: 0x01

uart:
  - id: uart_modbus
    rx_pin: ${uart_rx}
    tx_pin: ${uart_tx}
    baud_rate: 9600
    stop_bits: 1
#    debug:

modbus:
  id: modbus_sofar
  flow_control_pin: ${flow_control} # GPIO05
  uart_id: uart_modbus

modbus_controller:
  - id: sofarME3000
    modbus_id: modbus_sofar
    address: ${modbus_address} #modbus device address
    update_interval: 30s # 30 seconds check
    setup_priority: -10
#    command_throttle: 100ms


#sensor:
# 0x0206 UINT16 Grid A voltage (0~1000V - 0.1V)
# 0x0208 SINT16 Grid A current (-20~20A - 0.01A)
# 0x0209 UINT16 Grid B voltage (0~1000V - 0.1V)
# 0x0208 SINT16 Grid B current (-20~20A - 0.01A)
# 0x020A UINT16 Grid C voltage (0~1000V - 0.1V)
# 0x020B SINT16 Grid C current (-20~20A - 0.01A)
# 0x020C UINT16 Grid frequency ( - 0.01Hz)
# 0x020D SINT16 Charge/discharge power (-10~10kW - 0.01kW)
# 0x020E UINT16 Battery voltage (0~100V - 0.1V)
# 0x020F SINT16 Battery charge/discharge current (-100~100A - 0.01A)
# 0x0210 UINT16 Residual battery capacity (0~100% - 1%)
# 0x0211 ? Battery temperature (?)
# 0x0212 SINT16 Feed in/out power (-10~10kW - 0.01kW)
# 0x0213 UINT16 Power of the load (0~10kW - 0.01kW)
# 0x0214 SINT16 Input/Output power (-10~10kW - 0.01kW)
# 0x0215 UINT16 Power of generation (0~10kW - 0.01kW)
# 0x0216 UINT16 EPS output voltage (0.1V)
# 0x0217 UINT16 EPS output power (0.01kW)
# 0x0218 UINT16 Generation of one day (0.01kW)
# 0x0219 UINT16 Power export to grid of today (0.01kW)
# 0x021A UINT16 Power import from grid of today (0.01kW)
# 0x021B UINT16 Today's power consumption (0.01kW)
# 0x021C UINT16*2 Power generation (1kWh)
# 0x021D 
# 0x021E UINT16*2 Total energy export (1kWh)
# 0x021F 
# 0x0220 UINT16*2 Total energy import (1kWh)
# 0x0221
# 0x0222 UINT16*2 Total consumption (1kWh)
# 0x0223
# 0x022A UINT16 Count down Time
# 0x022B UINT16 Inverter alert message
# 0x022C UINT16 Battery Cycle Time
# 0x022D UINT16 INV bus voltage
# 0x022E UINT16 LLC bus voltage
# 0x022F UINT16 Buck current
# 0x0230 UINT16 Grid R voltage (0.1V)
# 0x0231 UINT16 Grid R current (0.01A)
# 0x0232 UINT16 Grid S voltage (0.1V)
# 0x0233 UINT16 Grid S current (0.01A)
# 0x0234 UINT16 Grid T voltage (0.1V)
# 0x0235 UINT16 Grid T current (0.01A)
# 0x0236 UINT16 Generation current (0-100)
# 0x0237 SINT16 Battery power (reserved)
# 0x0238 SINT16 Inner Temperature (1°C -127~+127)
# 0x0239 SINT16 Heat sink Temperature (1°C -127~+127)
# 0x023A UINT16 Country code
# 0x0234
#  - platform: modbus_controller
#    modbus_controller_id: sofarME3000
#    id: inverter_charge_discharge_power
#    name: "inverter_charge_discharge_power"
#    address: 0x020D
#    unit_of_measurement: "W"
#    register_type: read
#    value_type: S_WORD
#    accuracy_decimalss: 1
#    skip_updates: 60
#    filters:
#      - multiply: 0.01
sensor:
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_charge_discharge_power
    name: "inverter_charge_discharge_power"
    device_class: "energy"
    address: 0x020D
    unit_of_measurement: "kW"
    register_type: holding
    value_type: S_WORD
    state_class: "measurement"
    filters:
      - multiply: 0.1
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_battery_voltage
    name: "inverter_battery_voltage"
    address: 0x020E
    unit_of_measurement: "V"
    accuracy_decimals: 1
    register_type: holding
    state_class: "measurement"
    value_type: U_WORD
    filters:
      - multiply: 0.1
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_battery_charge_discharge_current
    name: "inverter_battery_charge_discharge_current"
    address: 0x020F
    device_class: "current"
    unit_of_measurement: "A"
    accuracy_decimals: 2
    state_class: "measurement"
    register_type: holding
    value_type: S_WORD
    filters:
      - multiply: 0.01
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_battery_residual_power
    name: "inverter_battery_residual_power"
    device_class: "battery"
    address: 0x0210
    unit_of_measurement: "%"
    state_class: "measurement"
    register_type: holding
    value_type: U_WORD
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_battery_temperature
    name: "inverter_battery_temperature"
    device_class: "temperature"
    address: 0x0211
    unit_of_measurement: "°C"
    state_class: "measurement"
    register_type: holding
    value_type: S_WORD 
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_feed_in_out
    name: "inverter_feed_in_out"
    address: 0x0212
    device_class: "power"
    unit_of_measurement: "kW"
    accuracy_decimals: 2
    state_class: "measurement"
    register_type: holding
    value_type: S_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_load_power
    name: "inverter_load_power"
    address: 0x0213
    unit_of_measurement: "kW"
    device_class: "power"
    accuracy_decimals: 2
    state_class: "measurement"
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_input_output_power
    name: "inverter_input_output_power"
    address: 0x0214
    unit_of_measurement: "kW"
    device_class: "power"
    state_class: "measurement"
    accuracy_decimals: 2
    register_type: holding
    value_type: S_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_power_generation
    name: "inverter_power_generation"
    address: 0x0215
    unit_of_measurement: "kW"
    device_class: "power"
    state_class: "measurement"
    accuracy_decimals: 2
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_eps_output_voltage
    name: "inverter_esp_output_voltage"
    address: 0x0216
    unit_of_measurement: "V"
    state_class: "measurement"
    accuracy_decimals: 1
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.1
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_eps_output_power 
    name: "inverter_esp_output_power"
    address: 0x0217
    unit_of_measurement: "kW"
    device_class: "power"
    state_class: "measurement"
    accuracy_decimals: 2
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_today_generation
    name: "inverter_today_generation"
    address: 0x0218
    device_class: "energy"
    unit_of_measurement: "kWh"
    state_class: "total"
    accuracy_decimals: 2
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_today_export 
    name: "inverter_today_export"
    address: 0x0219
    device_class: "energy"
    unit_of_measurement: "kWh"
    state_class: "total"
    accuracy_decimals: 2
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_today_import 
    name: "inverter_today_import"
    address: 0x021A
    device_class: "energy"
    unit_of_measurement: "kWh"
    state_class: "total"
    accuracy_decimals: 2
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_today_load_consumption 
    name: "inverter_today_load_consumption"
    address: 0x021B
    device_class: "energy"
    unit_of_measurement: "kWh"
    state_class: "total"
    accuracy_decimals: 2
    register_type: holding
    value_type: U_WORD 
    filters:
      - multiply: 0.01
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_total_generation 
    name: "inverter_total_generation"
    address: 0x021C
    state_class: "total_increasing"
    device_class: "energy"
    unit_of_measurement: "kWh"
    register_type: holding
    value_type: U_DWORD 
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_total_export_power 
    name: "inverter_total_export_power"
    address: 0x021E
    device_class: "energy"
    unit_of_measurement: "kWh"
    state_class: "total_increasing"
    register_type: holding
    value_type: U_DWORD
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_total_import_power
    name: "inverter_total_import_power"
    address: 0x0220
    device_class: "energy"
    unit_of_measurement: "kWh"
    state_class: "total_increasing"
    register_type: holding
    value_type: U_DWORD
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_total_load_power
    name: "inverter_total_load_power"
    address: 0x0222
    device_class: "energy"
    unit_of_measurement: "kWh"
    state_class: "total_increasing"
    register_type: holding
    value_type: U_DWORD
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_generation_current
    name: "inverter_generation_current"
    address: 0x0236
    device_class: "current"
    unit_of_measurement: "A"
    state_class: "measurement"
    register_type: holding
    value_type: U_WORD 
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_inner_temperature 
    name: "inverter_inner_temperature"
    device_class: "temperature"
    address: 0x0238
    unit_of_measurement: "°C"
    state_class: "measurement"
    register_type: holding
    value_type: S_WORD 
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_heatsink_temperature 
    name: "inverter_heatsink_temperature"
    device_class: "temperature"
    address: 0x0239
    unit_of_measurement: "°C"
    state_class: "measurement"
    register_type: holding
    value_type: S_WORD
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_country 
    name: "inverter_country"
    address: 0x023A
    register_type: holding
    value_type: U_WORD
  - platform: modbus_controller  
    modbus_controller_id: sofarME3000
    id: inverter_dc_current 
    name: "inverter_dc_current"
    address: 0x023B
    device_class: "current"
    unit_of_measurement: "A"
    accuracy_decimals: 3
    state_class: "measurement"
    register_type: holding
    value_type: U_DWORD
    filters:
      - multiply: 0.001
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: inverter_dc_voltage
    name: "inverter_dc_voltage"
    address: 0x023C
    unit_of_measurement: "V"
    accuracy_decimals: 1
    state_class: "measurement"
    register_type: holding
    value_type: U_DWORD
    filters:
      - multiply: 0.1



##########################################################################
# BINARY sensors
#
# For the ME3000, binary sensors essentially are bits set for fault 
# and diagnostic messages
#
#########################################################################
binary_sensor:
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID01 Grid Over Voltage Protection
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x1
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID02 Grid Under Voltage Protection
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x2
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID03 Grid Over Frequency Protection
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x4
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID04 Grid Under Frequency Protection
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x8
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID05 Battery Over Voltage
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x10
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID06 RESERVED
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x20
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID07 RESERVED 
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x40
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID08 RESERVED 
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x80
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    name: ID09 LLCBus Over Voltage Hardware Protection
    entity_category: diagnostic
    device_class: problem
    register_type: read
    address: 0x201
    bitmask: 0x100




##########################################################################
# TEXT sensors
#
# For the ME3000, text sensors are states 
#
#########################################################################
text_sensor:
# 0x0200 
  - platform: modbus_controller
    modbus_controller_id: sofarME3000
    id: running_state
    bitmask: 0
    register_type: holding
    address: 0x200
    raw_encode: HEXBYTES
    name: running_state
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 0: return std::string("Wait");
        case 1: return std::string("Check");
        case 2: return std::string("Normal");
        case 3: return std::string("Check Discharge");
        case 4: return std::string("Discharge");
        case 5: return std::string("EPS");
        case 6: return std::string("Fault");
        case 7: return std::string("Permanent Fault");
        default: return std::string("Unknown state");
      }
      return x;</span></pre>

<p>
	et display.yaml (noter l'usage des couleurs, des images, tout est géré par esphome):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">###############################################################
#
#  TFT Display config
#
#   vars:
#     disp_clk_pin: GPIO18 / GPIO14
#     disp_mosi_pin: GPIO13 / GPIO23
#     disp_miso_pin: GPIO12 / GPIO29
#     disp_cs_pin:
#     disp_reset_pin:
#
###############################################################
spi:
  id: spi_display
  clk_pin: ${disp_clk_pin} # GPIO14 / VSPI-GPIO18
  mosi_pin: ${disp_mosi_pin} # GPIO13 / VSPI-GPIO23
  miso_pin: ${disp_miso_pin} # GPIO12 / VSPI-GPIO19

font:
  - file: "gfonts://Roboto"
    id: mono20
    size: 20
  - file: "gfonts://Roboto"
    id: mono16
    size: 16
  - file: "gfonts://Roboto"
    id: mono8
    size: 10


color:
  - id: text_alert
    red: 100%
    green: 70%
    blue: 10%
  - id: text_danger
    red: 100%
    green: 17%
    blue: 10%
  - id: text_info
    red: 80%
    green: 80%
    blue: 80%
  - id: text_success
    red: 10%
    green: 100%
    blue: 17%


sensor:
  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 30s
    entity_category: "diagnostic"
  - platform: copy # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"

image:
  - id: img_sun_on
    file: mdi:weather-sunny
    resize: 40x40
  - id: img_sun_off
    file: mdi:weather-sunny-off
    resize: 40x40
  - id: img_grid_power_on
    file: mdi:transmission-tower
    resize: 40x40
  - id: img_grid_power_off
    file: mdi:transmission-tower-off
    resize: 40x40
  - id: img_grid_power_import
    file: mdi:transmission-tower-import
    resize: 40x40
  - id: img_grid_power_export
    file: mdi:transmission-tower-export
    resize: 40x40
  - id: img_battery_high
    file: mdi:battery-high
    resize: 40x40
  - id: img_battery_medium
    file: mdi:battery-medium
    resize: 40x40
  - id: img_battery_low
    file: mdi:battery-low
    resize: 40x40
  - id: img_battery_empty
    file: mdi:battery-outline
    resize: 40x40
  - id: img_battery_off
    file: mdi:battery-off
    resize: 40x40
  - id: img_battery_unknown
    file: mdi:battery-unknown
    resize: 40x40
  - id: img_home_import_big
    file: mdi:home-import-outline
    resize: 80x80
  - id: img_home_export_big
    file: mdi:home-export-outline
    resize: 80x80
  - id: img_grid_power_big
    file: mdi:transmission-tower
    resize: 80x80


#
# Display is in 3 areas:
#  Upper area:   current battery level /sun production / total load
#
#  Center:  iconic represantation: grid to home or home to grid
#              Total energy 
#
#  Lower: page 1: totals
#         page 2: temperatures...
#
display:
  - platform: ili9xxx
    spi_id: spi_display
    model: ili9341 # MSSTACK, TFT 2.4, TFT 2.4R, S3BOX, S3BOX_LITE, ILI9341, ILI9342, ILI9481, ILI9486, ILI9488, ILI9488_A
    cs_pin: ${disp_cs_pin}
    dc_pin: ${disp_dc_pin}
    reset_pin: ${disp_reset_pin}
    rotation: 90 # 180, 270
#    data_rate: 20MHz
#    color_palette: GRAYSCALE
#    dimensions: 320x240
    lambda: |-
      it.fill(Color::BLACK);
      // UPPER AREA:
      // Left: battery status     Center: solar production        Right: total Load
      if (isnan(id(inverter_battery_residual_power).state))
      { 
          it.image(0,0,id(img_battery_unknown));
          it.printf(50,10,id(mono16),id(text_alert),"? %%");
      } else {
         if(id(inverter_battery_residual_power).state &gt; 80) 
            it.image(0,0,id(img_battery_high));
         else if(id(inverter_battery_residual_power).state &gt; 50) 
            it.image(0,0,id(img_battery_medium));
         else if(id(inverter_battery_residual_power).state &gt; 25) 
            it.image(0,0,id(img_battery_low));
         else 
            it.image(0,0,id(img_battery_empty));
         it.printf(50,10,id(mono16),id(text_success),"%.0f %%",id(inverter_battery_residual_power).state);
      }
      // solar production: if 0 or less: sun icon is dashed, else sun icon is bright
      if (id(inverter_power_generation).state &gt; 0)
      {  // generating photo voltaic
         it.image(100,0,id(img_sun_on));
         it.printf(150,10,id(mono16),id(text_success),"%.1f kWh",id(inverter_power_generation).state);
      } else {
         it.image(100,0,id(img_sun_off));
         it.printf(150,10,id(mono16),id(text_danger),"%.1f kWh",id(inverter_power_generation).state);
      }
      // total load
      if (id(inverter_load_power).state &gt; 0)
      {  // exporting 
         it.image(200,0,id(img_grid_power_import));
         it.printf(250,10,id(mono16),id(text_success)," %.1f kWh",id(inverter_load_power).state);
      } else {
         it.image(200,0,id(img_grid_power_export));
         it.printf(250,10,id(mono16),id(text_danger)," %.1f kWh",id(inverter_load_power).state);
      }
      // CENTER AREA
      //   Grid + Home + arrow
      if (id(inverter_feed_in_out).state &gt;= 0) {
         // Production !!!
         //it.image(40,50,id(img_grid_power_big)); // grid
         it.image(160-80/2,50,id(img_home_export_big)); // home
         it.image(320-40-80,50,id(img_grid_power_big)); // grid
         it.printf(160-80/2,140,id(mono20),id(text_info),"+ %.2f kWh",id(inverter_load_power).state);
      } else {
         // Production !!!
         it.image(40,50,id(img_grid_power_big)); // grid
         it.image(160-80/2,50,id(img_home_import_big)); // home
         //it.image(320-40-80,50,id(img_grid_power_big)); // grid
         it.printf(160-80/2,140,id(mono20),id(text_danger),"- %.2f kWh",id(inverter_load_power).state);
      }
      // Lower part
      it.printf(0,190,id(mono8),id(text_info),"Tot Exp°: %.0f kWh",id(inverter_today_export).state);
      it.printf(100,190,id(mono8),id(text_info),"Tot Sol°: %.0f kWh",id(inverter_today_generation).state);
      it.printf(200,190,id(mono8),id(text_info),"Tot Imp°: %.0f kWh",id(inverter_today_import).state);
      it.printf(0,215,id(mono8),id(text_info),"BAT T°: %.0f °C",id(inverter_battery_temperature).state);
      it.printf(100,215,id(mono8),id(text_info),"INN T°: %.0f °C",id(inverter_inner_temperature).state);
      it.printf(200,215,id(mono8),id(text_info),"HEA T°: %.0f °C",id(inverter_heatsink_temperature).state);</span></pre>

<p>
	 
</p>

<p>
	Au final:
</p>

<ul>
	<li>
		J'ai passé moins de 2 heures à noter tout ce que ESPHome allait m'apporter (gestion du RS485, module téléinfo, affichage)
	</li>
	<li>
		Implémenter les packages m'a pris en gros 2 heures
	</li>
	<li>
		A peu près 2h pour la mise au point de l'affichage (je suis revenu plusieurs fois sur mes idées)
	</li>
	<li>
		Et bonnes heures à débugguer à cause su choix du ESP32-S2 qui est limité niveau UART: préférez le ESP32 WROOM si possible
	</li>
	<li>
		80% du temps, on ajoute juste des lignes pour dire "activer ci, activer ça": il n'y a du code que dans l'affichage (et très répétitif) et dans un des sensors (que je n'utilise pas en plus)
	</li>
</ul>

<p>
	En conclusion: ESPHome est un super projet, compatible ESP32 et RPI pico, permettant de créer très rapidement des objets IOT connectés en MQTT et nativement détecté dans homeassistant.
</p>
]]></description><guid isPermaLink="false">190263</guid><pubDate>Sat, 25 Nov 2023 15:58:55 +0000</pubDate></item><item><title>Firefox Thunderbird Supprimer &#xE9;criture inclusive</title><link>https://forum.nextinpact.com/topic/189208-firefox-thunderbird-supprimer-%C3%A9criture-inclusive/</link><description><![CDATA[<p>
	<u><span style="color:#3498db;"><strong>Bonjour à tous,</strong></span></u>
</p>

<p>
	Depuis quelques temps déjà, j'observe un phénomène assez malaisant proliférer sur Internet : l'écriture inclusive.
</p>

<p>
	Avant de passer à la partie code, commençons donc par démontrer logiquement que cette écriture désigne les <strong>moutons</strong> et les <strong>malades mentaux</strong>.<br />
	<br />
	 
</p>

<p>
	<u><span style="color:#3498db;"><strong>Définition :</strong></span></u><br />
	Officiellement, le but de l'écriture inclusive est d'<strong>éviter de se sentir insulté lorsque son genre n'est pas représenté dans une phrase</strong>.<br />
	Cette définition pose de nombreux problèmes.
</p>

<p>
	 
</p>

<p>
	<strong><u>1 - Il est impossible de "se sentir insulté".</u></strong>
</p>

<p>
	Pour insulter, on utilise des <strong>mots précis</strong> : clairement référencés comme insultants dans le dictionnaire.<br />
	Des mots <span>:</span><br />
	- soit grossiers ou vulgaires (le plus souvent liés à la sexualité : con, pute, connard, enculé, etc.),<br />
	- soit faisant référence à une pathologie (mentale de préférence : débile, attardé, trisomique, hystérique, etc.),<br />
	- soit à un personnage historique décrié (Hitler le plus souvent),<br />
	- soit liés à un animal (chien, etc.),<br />
	- soit liés à un objet peu ragoûtant (ordure, etc.).
</p>

<p>
	Une langue est un ensemble de règles qui permettent de communiquer, donc ces règles ne doivent pas changer, sinon les gens ne parlent plus la même langue, donc se comprennent plus.<br />
	Certes une langue évolue, mais uniquement afin de devenir plus pratique dans son usage pour la majorité, pas en fonction d'une idéologie (sinon ça s'appelle la "novlangue").
</p>

<p>
	<span style="color:#2ecc71;">Si l'on commence à remettre en cause les règles d'une base aussi fondamentale que la langue, alors autant toutes les remettre en cause.<br />
	Dans ce cas autant rouler à gauche si vous êtes gaucher (ou anglais).<br />
	Après tout si vous ressentez que rouler à droite n'est pas naturel, si vous sentez oppressé, vous n'avez qu'à rouler comme vous voulez, en allant plus doucement et en faisant attention, ça devrait passer... non ?</span>
</p>

<p>
	Il ne faut pas confondre "l'insulte" (ou "l'injure" en droit) avec le fait d'être émotionnellement heurté.<br />
	L'insulte ne fonctionne pas "au feeling" <span>:</span> l'insulte est formulée avec des mots clairement établis dans chaque langue.<br />
	<br />
	<strong>Donc l'insulte est quelque chose de binaire : soit tu es insulté, soit tu ne l'es pas.</strong>
</p>

<p>
	Quelqu'un qui se "sent insulté" est quelqu'un qui ignore le sens des mots : il confond l'injure (l'insulte) avec le sentiment d'être blessé.<br />
	Il <strong>confond l'injure avec des mots qui heurtent ses émotions</strong>, le plus souvent juste parce qu'il n'est pas d'accord.<br />
	Ce qui n'est pas du tout la même chose.
</p>

<p>
	Si tu n'es pas d'accord, si des propos te choquent, c'est à toi de contre-argumenter pour te défendre.<br />
	Si tu ne peux rien répondre parce que tu es choqué, c'est que tu es un fragile (on dit aussi une "baltringue").<br />
	C'est-à-dire quelqu'un qui pense avec ses émotions plutôt que sa raison.
</p>

<p>
	Si tu ne supportes ni la contradiction ni la polémique, si tes émotions t'empêchent d'argumenter, c'est que tu ne les contrôles pas, donc que tu manques de maturité. Et dans ce cas c'est toi qui as tort, pas la langue française.
</p>

<p>
	 
</p>

<p>
	<strong><u>2 - Le but d'une langue est de faire passer une idée de manière simple.</u></strong>
</p>

<p>
	<strong>L'écriture n'est pas faite pour être agréable ou se sentir bien.</strong><br />
	Elle peut blesser et c'est une bonne chose : c'est comme ça qu'on évolue, qu'on grandit, qu'on gagne en maturité.
</p>

<p>
	C'est par la contradiction et la polémique que l'on réfléchit, si tu lis uniquement des choses qui vont dans ton sens, alors tu ne progresses pas.<br />
	Donc en écrivant, <strong>on ne se préoccupe du genre que quand c'est utile</strong>. Pas tout le temps, sinon c'est hors-sujet.
</p>

<p>
	<strong>Si tu te préoccupes du genre des mots en permanence</strong>, même lorsque c'est hors-sujet, c'est que le genre t'obsède.<br />
	Et si le genre t'obsède, <strong>c'est que le sexe t'obsède, donc que tu es "frustré"</strong> par définition.
</p>

<p>
	<span style="color:#2ecc71;">Exemple :<br />
	Le 9 janvier 2015, hyper-cacher porte de Vincennes, les terroristes entrent dans le bâtiment et tu as juste le temps d'envoyer un SMS.<br />
	Tu écris : "Au secours, on est attaqués par des terroristes !".<br />
	Tu n'as pas le temps de te préoccuper de ce qu'il y a dans la culotte des gens, c'est sans importance.<br />
	Si tu écris : "Au secours, on est attaqué·e·s par des terroristes !", si tu prends le temps d'écrire un truc aussi compliqué dans une telle situation, c'est que le genre t'obsède plus que ta propre survie, donc qu'il y a un grave problème de structure dans ta tête.</span>
</p>

<p>
	 
</p>

<p>
	<u><strong>3 - Le genre neutre invisibilise tout le monde.</strong></u>
</p>

<p>
	5ème Siècle : l'empire romain s'effondre. L'administration est désorganisée, les provinces de l'empire ne sont plus défendues.<br />
	Sans armée, la Gaule est livrée à elle-même. Les barbares passent les frontières, pillent, violent et massacrent.<br />
	Plusieurs langues sont alors parlées en Gaule : latin et grec (vestiges de l'empire romain), et les langues barbares.
</p>

<p>
	9ème Siècle, les barbares se sont regroupés, organisés, ils ont cessé d'être des barbares.<br />
	Une ancienne tribu barbare d'origine germanique, les "Francs" contrôle une grande partie du territoire.<br />
	Leur langue est le "francique" : un patois germain avec des composantes celtiques.
</p>

<p>
	Ces composantes celtiques donneront par exemple les nasales du français, si difficile à prononcer pour les autres peuples.<br />
	Demandez à un anglais de dire "en un on", vous allez bien rigoler...
</p>

<p>
	9ème Siècle : naissance de l'<strong>ancien français</strong> (le "vieux françois"), qui <strong>mélange principalement 3 langues : Latin + Grec + Francique</strong>.
</p>

<p>
	Latin et Grec sont des langues d'origine <strong>indo-européenne</strong>.<br />
	Comme toutes les langues indo-européennes, elles possèdent <strong>3 genres : masculin, féminin et neutre</strong>.
</p>

<p>
	<span style="color:#2ecc71;">He She It, It rains (anglais), Er Sie Es, Es regnet (allemand), Hij Zij Het, Het regent (néerlandais), Han Hun Det, Det regner (norvégien), Él Ella Eso, Eso llueve (espagnol), Lui Lei Esso, Esso piove (italien), Ele Ela Isso, Isso chove (portugais), Ille Illa Illud, Illud pluerit (latin) Αυτός Aυτή Aυτό, Aυτό bρέχει (grec), Hann Hún Það, Það rignir (islandais), அவன் அவள் அது, மழையது பெய்கிறது (tamoul), सः सा इदम्‌, वर्षा भवति (sanscrit)...</span><br />
	Il y a toujours une forme neutre... sauf en français.
</p>

<p>
	<span style="color:#e67e22;">Le latin contient 6 cas (nominatif, vocatif, accusatif, génitif, datif, ablatif), 2 nombres (singulier et pluriel), et 3 genres (masculin, féminin et neutre) auxquels s'appliquent 5 déclinaisons.<br />
	Ce qui fait 6 × 2 × 5 = 60 terminaisons de mots à retenir. Un cauchemar.</span>
</p>

<p>
	<span style="color:#e67e22;">Avantage : tant qu'on met la bonne terminaison aux mots, on peut changer leur ordre sans perdre le sens de la phrase.<br />
	Inconvénient : 5 tableaux de déclinaisons à savoir par cœur, et à la moindre erreur la phrase perd son sens.</span>
</p>

<p>
	<span style="color:#e67e22;">Le vieux français simplifie : on supprime les déclinaisons.<br />
	Avantage : Pas de tableau de déclinaisons, c'est beaucoup plus simple.<br />
	Inconvénient : On ne peut plus changer l'ordre de certains mots, sinon on perd le sens de la phrase.</span>
</p>

<p>
	<span style="color:#e67e22;">Anecdote : le français n'est pas la seule langue à faire des remaniements.<br />
	En anglais, le genre des mots est supprimé :<br />
	un homme, une femme =&gt; a man, a woman</span>
</p>

<p>
	<span style="color:#e67e22;">Plus tard, l'anglais va même supprimer la nuance hiérarchique.<br />
	Les langues indo-européennes contiennent habituellement 2 formes : le "tu" (absence de hiérarchie) et le "vous" (présence d'une hiérarchie, supérieure ou inférieure).<br />
	L'anglais va supprimer le "thou art" (tu es) pour mettre du "you are" (vous êtes) partout : les anglais se vouvoient en permanence.<br />
	Ironie, le "thou art" reviendra ensuite comme forme de politesse ultime (pour s'adresser à la royauté et à Dieu).</span>
</p>

<p>
	Le vieux français va aussi supprimer le genre neutre.<br />
	<span style="color:#2ecc71;">Le latin "Ille Illa Illud" devient "Il elle Il" en français.<br />
	He She It, It rains (anglais) =&gt; Il Elle Il, Il pleut (français)</span>
</p>

<p>
	<span style="color:#e67e22;">Il ne reste aussi que 2 cas, nominatif et accusatif.<br />
	Par exemple "copain" est la déclinaison au nominatif de "compagnon", à l'origine c'est le même mot.<br />
	Ces déclinaisons vont disparaître au 14ème Siècle.</span><br />
	Il reste finalement 2 nombres (singulier et pluriel), et 2 genres (masculin et féminin).
</p>

<p>
	<strong>Mais le neutre n'a pas complètement disparu, il en reste des résidus.</strong><br />
	Le pronom personnel neutre ("it") devient "il", mais le pronom démonstratif neutre ("this") devient "cela" (ou "ça").<br />
	<span style="color:#2ecc71;">"It is impossible to do this !" =&gt; "Il est impossible de faire ça !".</span><br />
	Le neutre n'a pas complètement fusionné avec le masculin, sinon<br />
	<span style="color:#2ecc71;">"This is it !" donnerait "C'est lui !" au lieu de "C'est ça !".</span>
</p>

<p>
	<strong>En réalité, le genre neutre n'a pas été "supprimé", il a été réparti entre masculin et féminin.</strong><br />
	<span style="color:#2ecc71;">Ainsi les mots "sein", "vagin" et "utérus" sont masculins, et ça n'a rien de sexiste.</span><br />
	<span style="color:#2ecc71;">Tout comme le mot "testicule" est féminin, et ça n'a rien de castrateur.</span><br />
	<span style="color:#2ecc71;">Une "horde" de barbares, le mot est féminin alors que les barbares sont masculins.<br />
	Le mot "intelligence" est féminin, et les hommes n'en font pas un scandale.</span>
</p>

<p>
	L'éducation nationale nous a appris que quand il y a 1 garçon dans un groupe de X filles, on accorde au masculin.<br />
	<strong>En réalité c'est faux : on accorde au neutre.</strong> Le pronom personnel neutre latin "Illud" est juste devenu "Il".<br />
	Pourquoi "Il" et pas "Elle" ? Pour des raisons d'économie de caractères, <strong>c'est plus court donc plus économique.</strong>
</p>

<p>
	L<strong>a formulation "le masculin l'emporte sur le féminin" est fausse, c'est une vulgarisation faite pour les gamins.<br />
	En réalité avec un groupe de genres divers, par commodité on écrit au plus court. Tout simplement.</strong>
</p>

<p>
	Les militants de l'écriture inclusive reprochent au genre masculin-neutre d'invisibiliser les femmes du groupe.<br />
	C'est faux : le genre neutre n'invisibilise pas que les femmes, <strong>il invisibilise tout.</strong>
</p>

<p>
	<span style="color:#2ecc71;">Quand on écrit "Chers lecteurs", on sait très bien qu'il peut y avoir des lecteurs, des lectrices, des transsexuels, des intersexuels, des non-binaires, des genders fluid, des IA, des anges, des démons, Dieu, absolument n'importe qui ou n'importe quoi.<br />
	Le neutre regroupe tout : les hommes, les femmes, les personnes, les objets, les indéfinis, etc.</span>
</p>

<p>
	 
</p>

<p>
	<u><strong>4 - L'écriture inclusive, la marque des intolérants.</strong></u>
</p>

<p>
	Quand on écrit "Cher·e·s lecteur·trice·s", on réduit le neutre au masculin.<br />
	Donc <strong>il ne peut plus y avoir que des hommes et des femmes</strong>, l'écriture inclusive nie l'existence de tout le reste.
</p>

<p>
	Donc par définition, l'écriture inclusive est <span style="color:#e74c3c;">transphobe et anti-LGBTQIA+</span>.<br />
	L'écriture inclusive est utilisée par des gens prétendant qu'il existe une multitude de genres, pourtant <strong>elle les réduit à seulement 2</strong>.<br />
	<strong>L'écriture inclusive est totalement binaire, mais utilisée par des gens qui prétendent que l'on peut être non-binaire.</strong>
</p>

<p>
	Celui qui écrit en inclusif considère non seulement qu'il y a uniquement 2 genres, mais en plus il se sent insulté lorsque son genre n'est pas représenté. Donc il met hommes et femmes en opposition.
</p>

<p>
	Il confond le genre des mots avec le genre des gens, et il considère que le genre de l'autre est une insulte.<br />
	<strong>L'écriture inclusive sert donc à ne surtout pas être confondu avec l'autre.<br />
	Par définition, ça s'appelle de "l'intolérance".</strong>
</p>

<p>
	<span style="color:#e74c3c;">C'est de la discrimination liée au sexe, donc du "sexisme".</span><br />
	<span style="color:#2ecc71;">Une femme qui utilise l'écriture inclusive sous-entend :<br />
	"je ne suis pas sexiste mais si on me confond avec un mec ça va chier !".<br />
	C'est l'équivalent de :<br />
	"je ne suis pas raciste mais si on me confond avec un bougnoule ça va chier !".</span>
</p>

<p>
	La plupart des gens qui écrivent en inclusif ne pensent pas à cela.<br />
	<strong>Ce sont juste des moutons adeptes de la secte du conformisme</strong>, dont le troupeau suit la direction donnée par les <strong>gourous de la propagande</strong>, sous la menace des <strong>chiens de garde militants</strong>.<br />
	La plupart des gens sont <strong>trop stupides pour réfléchir sur le sujet</strong>, et <strong>trop lâches pour s'opposer au militants</strong>.
</p>

<p>
	Le militant de l'écriture inclusive, lui, ne supporte pas l'idée d'être confondu avec le genre de l'autre,<br />
	pour lui c'est une blessure émotionnelle (qu'il prend pour une insulte).<br />
	Donc au lieu de gommer les oppositions avec le masculin-neutre pour rapprocher les gens,<br />
	il accentue les oppositions avec l'écriture inclusive pour diviser les gens.<br />
	Ce qui fait ressortir sa haine et sa peur de l'autre.
</p>

<p>
	 
</p>

<p>
	<u><strong>5 - L'écriture inclusive confond le fond et la forme.</strong></u>
</p>

<p>
	Ce n'est pas l'arme qui tue quelqu'un, c'est celui qui s'en sert.<br />
	<strong>Ce n'est pas la langue française (la forme) qui est sexiste, c'est l'utilisation qu'on en fait (le fond).</strong>
</p>

<p>
	<span style="color:#2ecc71;">Si j'écris "La·es femme·s doit·vent rester à sa·leur place, et la place de·la·des femme·s c'est à la cuisine", j'ai beau écrire en inclusif ça reste sexiste.</span>
</p>

<p>
	Si la langue rendait sexiste, alors il n'y aurait pas de sexistes dans les pays anglophones. Osez me dire qu'il n'y en a pas ?<br />
	<strong>Confondre le fond et la forme, on appelle ça avoir une pensée "destructurée".</strong>
</p>

<p>
	 
</p>

<p>
	<strong><u>6 - L'écriture inclusive, imprononçable, illisible, inutile, validiste, gauchiste, anti-écologique et illégale.</u></strong>
</p>

<p>
	- Avez-vous déjà essayé de prononcer de l'écriture inclusive à haute voix ? Impossible car c'est <span style="color:#e74c3c;">imprononçable</span>.<br />
	Et les militants de l'écriture inclusive le revendiquent, selon eux c'est pour le langage écrit uniquement.
</p>

<p>
	<span style="color:#e67e22;">À l'oral, on repère ces militants car ils se sentent systématiquement obligés de rajouter du féminin partout :<br />
	lecteurs ET LECTRICES, auteurs ET AUTRICES, joueurs ET JOUEUSES, agriculteurs ET AGRICULTRICES, conducteurs ET CONDUCTRICES, utilisateurs ET UTILISATRICES, mathématiciens ET MATHÉMATICIENNES, frères ET SŒURS, CELLES ET eux (systématiquement répété)... <strong>C'est tellement lourd.</strong></span>
</p>

<p>
	- Le but de l'écriture est de représenter une prononciation orale.<br />
	Donc une langue écrite qu'on ne peut pas prononcer ne sert à rien, elle est <span style="color:#e74c3c;">inutile</span>.
</p>

<p>
	- Avez-vous déjà essayé de mettre de l'écriture inclusive dans un synthétiseur vocal pour aveugles ? C'est incompréhensible.<br />
	Donc l'écriture inclusive est "<span style="color:#e74c3c;">validiste</span>" : elle exclue les handicapés.
</p>

<p>
	- L'écriture inclusive ne sert que pour le langage écrit.<br />
	C'est donc un truc de militants qui restent derrière leur ordinateur, qui ne vivent pas dans le monde réel, qui sont <span style="color:#e74c3c;">déconnectés de la réalité</span>.
</p>

<p>
	Des militants qui énoncent de grands dogmes universels de manière péremptoire, comme le feraient les fanatiques d'une secte obscurantiste, les idiots-utiles de la secte des "conformistes" (dont les gourous sont les médias mainstream).<br />
	Ils se bornent à la théorie, mais jamais ne sortent pour la confronter à la pratique. Et lorsque le réel contredit la théorie, ils font du déni de leurs échecs.
</p>

<p>
	Ces militants pseudo-intellectuels, <strong>Lénine les appelle des "gauchistes"</strong>, et il les qualifie de "<span style="color:#e74c3c;">malades mentaux</span>" dans son livre "La maladie infantile du communisme".<br />
	Ce sont souvent des petits bourgeois mal-éduqués par des parents aisés, car vivre déconnecté de la réalité a un certain coût, il faut pouvoir se le permettre.
</p>

<p>
	Par définition, la "folie" regroupe 2 composantes <span>:<br />
	- </span>une pensée qui semble incohérente<br />
	- et une auto-destruction (sur le plan biologique).<br />
	La seconde différencie le fou du génie : le génie réussit à avoir un conjoint et des enfants, et à les élever correctement pour avoir des petit-enfants.<br />
	Le fou ne réussit pas à trouver un conjoint ou à le garder, il n'a pas d'enfant ou de petit-enfant et sa lignée s'éteint : il a (biologiquement) raté sa vie.
</p>

<p>
	Le gauchiste possède ces 2 composantes : des contradictions à tous les niveaux et une vie ratée.<br />
	Par définition, <strong>le gauchisme est donc une "maladie mentale"</strong>, Lénine ne s'est pas trompé.
</p>

<p>
	- L'écriture inclusive rallonge considérablement les phrases, d'au moins 10%.
</p>

<p>
	<span style="color:#2ecc71;">Maître Corbeau sur un arbre perché, Tenait en son bec un fromage. Maître Renard, par l'odeur alléché, lui tint à peu près ce langage : Et bonjour, Monsieur du Corbeau. Que vous êtes joli ! que vous me semblez beau ! Sans mentir, si votre ramage se rapporte à votre plumage, vous êtes le Phénix des hôtes de ces bois. À ces mots, le Corbeau ne se sent pas de joie ; Et pour montrer sa belle voix, il ouvre un large bec, laisse tomber sa proie. Le Renard s'en saisit, et dit : Mon bon Monsieur, apprenez que tout flatteur vit aux dépens de celui qui l'écoute. Cette leçon vaut bien un fromage, sans doute. Le Corbeau honteux et confus jura, mais un peu tard, qu'on ne l'y prendrait plus.</span>
</p>

<p>
	<span style="color:#2ecc71;">Maître·sse corbe·au·lle sur un arbre perché, Tenait en son bec un fromage. Maître·sse Renard·e par l'odeur alléché·e lui tint à peu près ce langage : Et bonjour, Monsieur·Madame di Corb·au·lle ! Que vous êtes joli·e ! que vous me semblez be·au·lle ! Sans mentir, si votre ramage se rapporte à votre plumage, vous êtes li Phénix des hôte·sse·s de ces bois. À ces mots li Corbea·u·lle ne se sent pas de joie ; Et pour montrer sa belle voix, il·elle ouvre un large bec, et laisse tomber sa proie. Le·a Renard·e s'en saisit, et dit : Ma·on bon·ne Monsieur·Madame, apprenez que tout flatteu·r·ses vit aux dépens de celui·elle qui l'écoute. Cette leçon vaut bien un fromage sans doute. Le Corbe.au.lle honte.x.se et confus.e jura, mais un peu tard, qu'on ne l'y reprendrait plus.</span>
</p>

<p>
	<strong>C'est du gaspillage d'octets, d'encre et de papier.</strong> Par définition c'est <span style="color:#e74c3c;">anti-écologique</span>.
</p>

<p>
	- (Argument d'autorité) L'écriture inclusive est illégale car fermement rejetée par l'Académie française, qui la qualifie de "péril mortel pour la langue française" et "d'aberration".<br />
	<a href="https://www.academie-francaise.fr/actualites/declaration-de-lacademie-francaise-sur-lecriture-dite-inclusive" rel="external nofollow">https://www.academie-francaise.fr/actualites/declaration-de-lacademie-francaise-sur-lecriture-dite-inclusive</a>
</p>

<p>
	 
</p>

<p>
	<u><strong>7 - La marque de l'idiot utile du capitalisme néolibéral.</strong></u>
</p>

<p>
	Lorsque l'on analyse les financements de l'écriture inclusive, on découvre toute l'oligarchie qui œuvre pour détruire les États-nation et esclavagiser la population.
</p>

<p>
	Fortement rejetée par la population aussi bien que par les instances officielles, l'écriture inclusive est donc aujourd'hui ré-introduite par le biais de sociétés privées : Meta, WhatsApp, Mozilla, Wikipédia, etc.<br />
	Et comme un cancer, elle envahi petit à petit les instances officielles, même le site des impôts commence à s'y mettre.<br />
	<a href="https://www.impots.gouv.fr/particulier/questions/je-suis-assistante-maternelle-comment-dois-je-declarer-mes-revenus" rel="external nofollow">https://www.impots.gouv.fr/particulier/questions/je-suis-assistante-maternelle-comment-dois-je-declarer-mes-revenus</a>
</p>

<p>
	<strong>Nous avons donc des militants d'extrême gauche, censés combattre le capitalisme néolibéral, qui sont les idiots utiles de ce néolibéralisme.</strong>
</p>

<p>
	 
</p>

<p>
	<strong><u>8 - Une écriture exclusive de militants politiques mal-baisés, et surtout mal-aimés.</u></strong>
</p>

<p>
	Auparavant, quand on voulait appuyer que l'on pensait aussi à la gente féminine, on pouvait mettre des parenthèses : "Cher(e)s abonné(e)s".
</p>

<p>
	Avec l'écriture inclusive, cette forme pompeuse est poussée à l'extrême : elle marque désormais une opposition homme-femme en permanence.
</p>

<p>
	Le problème c'est que biologiquement, homme et femme sont complémentaires : l'un ne peut survivre sans l'autre.<br />
	Donc créer une opposition ne peut que détruire les deux.
</p>

<p>
	Ainsi, ceux qui inventent des oppositions homme-femme (les ultra-féministes par exemples) finissent leur vie frustrés et malheureux.
</p>

<p>
	Hélas nous vivons dans une société athée, donc une société où les valeurs morale, et donc la culture, et donc le niveau intellectuel s'effondrent.<br />
	Une société où ce sont des ratés de la vie qui dictent aux enfants comment vivre la leur.<br />
	Ce qui est finalement logique : <strong>celui qui se noie cherche souvent à entraîner les autres avec lui.</strong>
</p>

<p>
	L'une des conséquences de cet effondrement est la promotion de ces personnes hautement frustrées, rongées par un manque affectif.<br />
	Manque affectif venant du fait qu'elles n'ont jamais réfléchi à la définition de l'amour.<br />
	Des personnes dont les actions vont à l'opposé de ce qu'elles désirent : ce n'est pas en accusant les autres de nos problèmes qu'ils vont nous aimer.<br />
	<em>"Dieu se rit des Hommes qui se plaignent des conséquences dont ils chérissent les causes".<br />
	"Changer le monde commence par se changer soi-même".</em>
</p>

<p>
	Selon ces gens frustrés et malheureux, le problème vient forcément des autres, de la société, du système, de la langue française, certainement pas d'eux.<br />
	Donc il faut un combat politique pour changer tout cela.<br />
	Donc nous avons des gens malheureux, frustrés, dont la propagande fait la promotion, qui canalisent leur frustration dans un combat politique (d'extrême gauche).<br />
	Et l'écriture inclusive est un marqueur de leur appartenance à ce combat.
</p>

<p>
	Finalement l'écriture inclusive est en réalité <span style="color:#e74c3c;">exclusive</span> : <strong>elle exclue tous ceux qui ne partagent pas la frustration et le combat politique du rédacteur.</strong>
</p>

<p>
	 
</p>

<p>
	<u><strong>9 - Une écriture qui relève de la psychiatrie.</strong></u>
</p>

<p>
	Récapitulons : le militant de l'écriture inclusive se prétend<br />
	- socialiste, communiste, marxiste, léniniste ou trotskiste,<br />
	- lucide pour combattre le système,<br />
	- fort, mature, heureux, mentalement structuré,<br />
	- tolérant envers les femmes et les minorités,<br />
	- altruiste, modeste et à l'écoute,<br />
	- tourné vers l'environnement et l'écologie.
</p>

<p>
	En réalité, le militant de l'écriture inclusive est<br />
	- un <span style="color:#e74c3c;">gauchiste</span>, militant politique <span style="color:#e74c3c;">fanatique obscurantiste paumé</span> que Lénine qualifie de <span style="color:#e74c3c;">malade mental</span>,<br />
	- manipulé comme un <span style="color:#e74c3c;">idiot utile du système</span>,<br />
	- une <span style="color:#e74c3c;">baltringue immature frustrée et destructurée</span>,<br />
	- <span style="color:#e74c3c;">intolérant</span>, <span style="color:#e74c3c;">sexiste</span>, <span style="color:#e74c3c;">transphobe</span>, <span style="color:#e74c3c;">anti-LGBTQIA+</span>, <span style="color:#e74c3c;">validiste</span>,<br />
	- <span style="color:#e74c3c;">égoïste</span>, <span style="color:#e74c3c;">orgueilleux</span> et <span style="color:#e74c3c;">extrémiste</span>,<br />
	- tourné vers le <span style="color:#e74c3c;">gaspillage</span> et le <span style="color:#e74c3c;">green-washing</span>.<br />
	Et qui pour cela utilise une écriture <span style="color:#e74c3c;">hors-sujet</span>, <span style="color:#e74c3c;">trop longue</span>, <span style="color:#e74c3c;">trop compliquée</span>, <span style="color:#e74c3c;">imprononçable</span>, <span style="color:#e74c3c;">inutile</span>, <span style="color:#e74c3c;">illégale</span>... et <span style="color:#e74c3c;">exclusive</span>.
</p>

<p>
	Ces extrémistes sont si obsédés par leurs frustrations sexualo-affectives qu'à chaque petit mot qu'ils écrivent, ils pensent systématiquement à ce qu'il y a dans la culotte des autres.<br />
	Ça les obsède, ça tourne en boucle dans leur tête, la frustration les dévore de l'intérieur, ils ne pensent plus qu'à ça.<br />
	<strong>Ça les obsède tellement qu'ils ont créé une nouvelle façon d'écrire pour exprimer cette frustration.</strong>
</p>

<p>
	Le militant de l'écriture inclusive voudrait modifier la langue française pour qu'elle reflète son combat politique.<br />
	C'est exactement comme <span style="color:#2ecc71;">un militant platiste qui voudrait modifier Google Earth et les livres de géographie pour expliquer que la Terre est plate</span>,<br />
	ou <span style="color:#2ecc71;">un créationniste qui voudrait modifier les livres d'Histoire pour dire que Dieu a créé le monde en 7 jours il y a 2000 ans</span>,<br />
	ou <span style="color:#2ecc71;">un colonialiste qui voudrait modifier les livres d'Histoire pour dire que la colonisation n'a eu que de bons aspects</span>.
</p>

<p>
	Il s'agit de modifier la réalité pour qu'elle colle à une idéologie : <strong>c'est de l'extrémisme, donc de la folie</strong>.<br />
	Celui qui écrit en écriture inclusive a donc besoin d'un psychiatre : c'est un "<span style="color:#e74c3c;">fou</span>" par définition, un "<span style="color:#e74c3c;">malade mental</span>".
</p>

<p>
	Comme le disait Lénine, le gauchisme est une maladie mentale, et l'écriture inclusive est la marque des gens qui en sont gravement infectés.
</p>

<p>
	 
</p>

<p>
	<u><strong>10 - Les militants du politiquement correct de l'écriture inclusive, des nouveaux nazis.</strong></u>
</p>

<p>
	Historiquement, tous les groupes extrémistes ont inventé leur propre vocabulaire, leur propre novlangue.
</p>

<p>
	<span style="color:#2ecc71;">Par exemple, le camp de torture S-21 à Phnom Penh explique l'étrange vocabulaire des Khmers Rouges.<br />
	Leur novlangue leur permettait de s'identifier entre eux, et de dépister celui qui réfléchissait trop en dehors des dogmes.<br />
	Ce qui finissait toujours par arriver, ainsi les bourreaux finissaient toujours par se faire eux-mêmes torturer et tuer.</span>
</p>

<p>
	<span style="color:#2ecc71;">La même chose est arrivée pour Staline, Hitler et Mao Zedong : l'entourage se faisait progressivement soupçonner de trahison et tuer.<br />
	Les milices de Staline et les marcheurs de Mao Zedong utilisaient aussi leur novlangue.<br />
	Idem pour les nazis, leur novlangue est bien documentée dans un livre appelé "Lti, la langue du IIIème Reich" de Victor Klemperer.</span>
</p>

<p>
	Le même phénomène s'observe aujourd'hui avec les conformistes du politiquement correct (les wokes) : création d'une novlangue parallèle politisée.<br />
	Lorsque quelqu'un insiste sur le féminin, ou utilise l'écriture inclusive, ça veut dire :<br />
	<strong>"Regardez-moi je suis frustré(e), extrémiste, intolérant(e) et très mal dans ma tête".</strong>
</p>

<p>
	Normalement, l'utilisation d'une écriture aussi déviante devraient éveiller un sentiment de honte.<br />
	Mais <strong>l'abolition de la honte est l'un des principaux symptômes des maladies mentales.</strong>
</p>

<p>
	Aussi il est de mon devoir de m'opposer à cette écriture inclusive : il faut lutter contre l'extrémisme, <strong>c'est une question d'hygiène.</strong>
</p>

<p>
	<span style="color:#e67e22;">Naturellement, le militant de l'écriture inclusive est extrémiste, donc incapable d'argumenter, il ne répond que par la censure et l'insulte.</span>
</p>

<p>
	<span style="color:#e67e22;">Aussi je ne m'étonnerai pas que moult amoureux de la Liberté d'Expression, des Droits de l'Homme et de la Démocratie, qui en 2015 pleuraient du Voltaire en hurlant "Je suis Charlie !", ne harcèlent activement les modérateurs pour demander la censure de ce post.</span>
</p>

<p>
	<br />
	<br />
	<u><span style="color:#3498db;"><strong>Firefox et Thunderbird :</strong></span></u><br />
	<br />
	Habituellement, j'abandonne les applications écrites en inclusif.
</p>

<p>
	Les gauchistes étant toujours des parasites économiques, ils ont du temps à perdre pour pourrir Internet avec leur pensées malsaines.<br />
	La Fondation Mozilla a aussi été gangrenée par le wokisme et son gauchisme.<br />
	<br />
	Mais j'aime bien les logiciels Firefox et Thunderbird, donc je vais prendre un peu de temps pour faire autrement.
</p>

<p>
	<strong>Voici une méthode simple pour nettoyer ces logiciels de leur écriture inclusive.</strong>
</p>
]]></description><guid isPermaLink="false">189208</guid><pubDate>Fri, 07 Jul 2023 11:08:42 +0000</pubDate></item><item><title>gestion de projet web</title><link>https://forum.nextinpact.com/topic/189750-gestion-de-projet-web/</link><description><![CDATA[<p>
	bonjour,
</p>

<p>
	à mesure que je me professionnalise , mes projet d'applis web deviennent toujours plus complexe. Je cherche une méthode de gestion de projet.
</p>

<p>
	Je m'y perd avec les 12 trillions de méthode existante sur le web, dont beaucoup excitent mon bullshitometre.
</p>

<p>
	Pour l'instant j'ai commencer à faire un liste de toute les fonctions qu'aura mon applis. Je met en vrac mes besoins <span>:</span>
</p>

<p>
	<span>-</span>visualiser les relations de dépendance entre elles (cette fonction à besoin de la réalisation de celle ci)
</p>

<p>
	-pouvoir prévoir des étapes, des versions de publications, quand un certain nombre de fonction sont terminées,
</p>

<p>
	-pouvoir faire un suivie des fonctions terminée pour leur future mis à jour.
</p>

<p>
	-établir une liste de prérequis pour chaque fonctions (notamment l'apprentissage de certaines technique de programmation)
</p>

<p>
	-noter pour chaque fonctions une estimation du temps nécessaire et de la difficulté;
</p>

<p>
	-pouvoir avancer sur plusieurs fonction en parallèle, supprimer dynamiquement, ou ajouter, certaines fonctions
</p>

<p>
	-distinguer les fonctions indispensable, et les optionnelles (mais les réunir dans une version de publication)
</p>

<p>
	-mettre des sous étapes pour les fonctions (ex: faire un schéma d'affichage, créer l'uml, la doc, implémenter, debuguer, tester)
</p>

<p>
	Pour l'instant je développe seul, donc des méthodes type agile semble inadaptées, si j'ai bien compris , je pense partir sur du kanban. Qu'en pensez vous? pourriez vous me partager mon expérience, qu'utilisez vous ? merci.
</p>
]]></description><guid isPermaLink="false">189750</guid><pubDate>Fri, 08 Sep 2023 20:48:01 +0000</pubDate></item><item><title>Encore du powershell - ping et alerte mail</title><link>https://forum.nextinpact.com/topic/188543-encore-du-powershell-ping-et-alerte-mail/</link><description><![CDATA[<p>
	Bonjour à toutes et tous,
</p>

<p>
	J'ai comme projet (simple) d'envoyer un ping sur mon ip publique. J'ai 2 sites (A et B).<br />
	<br />
	Je fais un ping du site A vers le site B - et si le ping me répond un timedout --&gt; envoie du email. Et vice et versa B --&gt; A.<br />
	<br />
	Donc le script powershell <span>: </span>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">$ping = new-object System.Net.NetworkInformation.Ping
$ReponsePing = $ping.Send("mon ip")

if ($Reply.status –eq “Success”)
{
     Write-Host “Le PC est Démarré“
}
else
{
     Write-Host “Le PC est éteint“
}</span></pre>

<p>
	 
</p>

<p>
	sauf que j'ai cette réponse  <span>: </span>
</p>

<p>
	<img alt="7KX9o0I.png" class="ipsImage" data-ratio="33.51" height="125" width="373" src="https://i.imgur.com/7KX9o0I.png" /><br />
	 
</p>

<p>
	Pourtant, j'ai bien mon status en Success <span><span class="ipsEmoji">😕</span><br />
	Pour voir cela, j'ai fait ce code <span>: </span></span>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">$ping = new-object System.Net.NetworkInformation.Ping
$ping.Send("une ip")

if ($Reply.status –eq “Success”)
{
     Write-Host “Le PC est Démarré“
}
else
{
     Write-Host “Le PC est éteint“
}</span></pre>

<p>
	Vous avez une idée?<br />
	<br />
	Merci <span class="ipsEmoji">🙂</span>
</p>
]]></description><guid isPermaLink="false">188543</guid><pubDate>Mon, 27 Mar 2023 12:14:20 +0000</pubDate></item><item><title>CKEditor 4 , multiple configuration</title><link>https://forum.nextinpact.com/topic/188530-ckeditor-4-multiple-configuration/</link><description><![CDATA[<p>
	bonjour,<br />
	<br />
	je cherche le moyen de nommée plusieurs configuration dans le fichier config.js de ckeditor4 comment puis-je faire ?<br />
	<br />
	cordialement
</p>
]]></description><guid isPermaLink="false">188530</guid><pubDate>Sat, 25 Mar 2023 13:32:40 +0000</pubDate></item><item><title>PowerShell et STARTTLS</title><link>https://forum.nextinpact.com/topic/188356-powershell-et-starttls/</link><description><![CDATA[<p>
	Bonjour à toutes et à tous,
</p>

<p>
	J'essaie d'envoyer des emails pour l'expiration des MDP AD via un script power shell <span>:</span><br />
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">### Variables modifiables

# Nombre de jours avant l'expiration pour envoyer la notification
$DateThreshold = 31

#Configuration email TTLSSL
$password = "mon mdp"
$userName = "email expéditeur"
[SecureString]$securepassword = $password | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securepassword
[System.Net.ServicePointManager]::SecurityProtocol = 'Tls,TLS11,TLS12'

# Serveur SMTP - Nom du serveur
$SMTPServer = "smtp.office365.com"

# Serveur SMTP - Numéro de port
$SMTPPort = 567



# Serveur SMTP - Adresse e-mail de l'expéditeur
$SMTPSender =  "email expéditeur"

# Serveur SMTP - Encodage Email
$SMTPEncoding =[System.Text.Encoding]::UTF8

# Envoyer une synthèse aux administrateurs
[boolean]$SendReportAdmin = $true

# Adresse e-mail du destinataire pour la synthèse
$SendReportAdminEmail = "mon email"

### Fonctions
Function Send-MailMessageForUser{
    &lt;#
        .SYNOPSIS : Envoyer une notification à un utilisateur dont le mot de passe expire dans X jours (selon seuil)
    #&gt;

    Param([Parameter(Mandatory=$true)][string]$SendMailUserGivenName,
          [Parameter(Mandatory=$true)][string]$SendMailUserSurname,
          [Parameter(Mandatory=$true)][string]$SendMailUserEmail,
          [Parameter(Mandatory=$true)][string]$SendMailUserPrincipalName,
          [Parameter(Mandatory=$true)][string]$SendMailUserPasswordExpirationDate)

    # Corps de l'email pour les utilisateurs
    $SendMailBody=@"
</span><span class="tag">&lt;p&gt;</span><span class="pln">Bonjour $SendMailUserGivenName,</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln">Dans </span><span class="tag">&lt;b&gt;</span><span class="pln">moins de $DateThreshold jours</span><span class="tag">&lt;/b&gt;</span><span class="pln">, le mot de passe du compte </span><span class="tag">&lt;b&gt;</span><span class="pln">$SendMailUserPrincipalName</span><span class="tag">&lt;/b&gt;</span><span class="pln"> va expirer.</span><span class="tag">&lt;br&gt;</span><span class="pln">
</span><span class="tag">&lt;b&gt;</span><span class="pln">Pensez à le changer</span><span class="tag">&lt;/b&gt;</span><span class="pln"> avant qu'il arrive à expiration (date d'expiration : $SendMailUserPasswordExpirationDate)</span><span class="tag">&lt;/p&gt;</span><span class="pln">
Cordialement,</span><span class="tag">&lt;br&gt;</span><span class="pln">
Le service informatique
"@

    # Objet de l'e-mail pour les utilisateurs
    $SendMailObject="$SendMailUserGivenName $SendMailUserSurname : votre mot de passe arrive à expiration !"

    # Envoyer l'e-mail
    Send-MailMessage -UseSsl -Credential $credential -Verbose -SmtpServer $SMTPServer -Encoding $SMTPEncoding  `
        -From $SMTPSender -To $SendMailUserEmail `
        -Subject $SendMailObject `
        -Body $SendMailBody -BodyAsHtml -Port $SMTPPort

}

### Variables
# Date du jour (format FileTime)
$DateToday = (Get-Date).ToFileTime()

# Date de référence (date du jour + nombre jours avant expiration pour la notification)
$DateWithThreshold = (Get-Date).AddDays($DateThreshold).ToFileTime()

# Liste des utilisateurs Active Directory
$UsersInfos = Get-ADUser -Filter { (Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} –Properties "DisplayName", "mail", "msDS-UserPasswordExpiryTimeComputed" | 
                         Select-Object -Property  "GivenName", "Surname","mail", "UserPrincipalName", "msDS-UserPasswordExpiryTimeComputed"

# Initialiser l'objet avec la liste des utilisateurs
$UsersNotifList=@()

# Traiter chaque utilisateur
Foreach($User in $UsersInfos){
    
    if(($User."msDS-UserPasswordExpiryTimeComputed" -lt $DateWithThreshold) -and ($User."msDS-UserPasswordExpiryTimeComputed" -gt $DateToday)){
            
            $UserPasswordExpirationDate = [datetime]::FromFileTime($User."msDS-UserPasswordExpiryTimeComputed")
            $UserObj = New-Object System.Object
            $UserObj | Add-Member -Type NoteProperty -Name GivenName -Value $User.GivenName
            $UserObj | Add-Member -Type NoteProperty -Name Surname -Value $User.Surname
            $UserObj | Add-Member -Type NoteProperty -Name Email -Value $User.mail
            $UserObj | Add-Member -Type NoteProperty -Name UserPrincipalName -Value $User.UserPrincipalName
            $UserObj | Add-Member -Type NoteProperty -Name PasswordExpirationDate -Value ($UserPasswordExpirationDate).ToString('dd/MM/yyyy')

            $UsersNotifList+=$UserObj

            Send-MailMessageForUser -SendMailUserGivenName $User.GivenName -SendMailUserSurname $User.Surname -SendMailUserEmail $User.mail `
                                    -SendMailUserPrincipalName $User.UserPrincipalName -SendMailUserPasswordExpirationDate ($UserPasswordExpirationDate).ToString('d MMMM yyyy')
    }
}

# Faut-il envoyer une synthèse aux administrateurs ?
if(($SendReportAdmin -eq $true) -and ($UsersNotifList.Count -ne 0)){

    # Corps de l'e-mail (sous la forme d'un tableau)
    $SendMailAdminBody = $UsersNotifList | ConvertTo-HTML -PreContent "Bonjour,</span><span class="tag">&lt;br&gt;&lt;p&gt;</span><span class="pln">Voici la liste des comptes Active Directory dont le mot de passe expire dans moins de $DateThreshold jours.</span><span class="tag">&lt;/p&gt;</span><span class="pln">" | Out-String | ForEach-Object{
                                    $_  -replace "</span><span class="tag">&lt;table&gt;</span><span class="pln">","</span><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">'</span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid</span><span class="pun">;</span><span class="atv">'</span><span class="tag">&gt;</span><span class="pln">" `
                                        -replace "</span><span class="tag">&lt;th&gt;</span><span class="pln">","</span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">'</span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">background-color</span><span class="pun">:</span><span class="lit">#014B83</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">color</span><span class="pun">:</span><span class="lit">#fff</span><span class="pun">;</span><span class="atv">'</span><span class="tag">&gt;</span><span class="pln">" `
                                        -replace "</span><span class="tag">&lt;td&gt;</span><span class="pln">","</span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">'</span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="atv">'</span><span class="tag">&gt;</span><span class="pln">"
                                    }

    # Envoyer l'e-mail
    Send-MailMessage -Verbose -SmtpServer $SMTPServer -Encoding $SMTPEncoding - `
        -From $SMTPSender -To $SendReportAdminEmail `
        -Subject "Synthèse - Expiration des mots de passe AD - $(Get-Date -Format dd/MM/yyyy)" `
        -Body $SendMailAdminBody -BodyAsHtml -Port $SMTPPort
}</span></pre>

<p>
	Et voici l'erreur qui me retourne <span>:</span>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Send-MailMessage : Impossible de se connecter au serveur distant
Au caractère C:\***************\mdpexpi.ps1:73 : 5
+     Send-MailMessage -UseSsl -Credential $credential -Verbose -SmtpServer $SMTPS ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage</span></pre>

<p>
	Vous avez une idée?
</p>

<p>
	Différent sources utilisées : <a href="https://www.it-connect.fr/active-directory-notification-par-e-mail-pour-lexpiration-de-mot-de-passe/" rel="external nofollow">ici </a>et <a href="https://github.com/florianburnel/PowerShell/blob/master/AD-Send-ADPasswordExpirationNotifications/Send-ADPasswordExpirationNotifications.ps1" rel="external nofollow">ici </a><br />
	<br />
	Merci.
</p>
]]></description><guid isPermaLink="false">188356</guid><pubDate>Mon, 13 Feb 2023 12:58:07 +0000</pubDate></item><item><title>comment changer la date d'un serveur et la date &#xE0; nouveau de fa&#xE7;on synchrone?</title><link>https://forum.nextinpact.com/topic/187961-comment-changer-la-date-dun-serveur-et-la-date-%C3%A0-nouveau-de-fa%C3%A7on-synchrone/</link><description><![CDATA[<p>
	Bonjour,
</p>

<p>
	je souhaiterais savoir comment changer la date d'un serveur et la date à nouveau de façon synchrone
</p>

<p>
	sur le serveur app1 
</p>

<p>
	j'ai regardé le statut puis j'ai tapé une commande que je n'ai pas executée
</p>

<p>
	1) (prod)transcofi@app1:~$ timedatectl settimedatectl status<br />
	               Local time: jeu. 2023-01-05 12:16:15 CET<br />
	           Universal time: jeu. 2023-01-05 11:16:15 UTC<br />
	                 RTC time: jeu. 2023-01-05 11:16:15<br />
	                Time zone: Europe/Paris (CET, +0100)<br />
	System clock synchronized: yes<br />
	              NTP service: n/a<br />
	          RTC in local TZ: no
</p>

<p>
	 2) timedatectl set-time '2022-12-31 12:10:00' 
</p>

<p>
	 
</p>

<p>
	3) commande pour remettre le statut du 1)
</p>

<p>
	Merci pour votre retour.
</p>

<p>
	Cordialement,
</p>

<p>
	Jakol
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">187961</guid><pubDate>Thu, 05 Jan 2023 11:42:29 +0000</pubDate></item><item><title>Script pour inventaire Automatique vers GLPI et tests mat&#xE9;riel</title><link>https://forum.nextinpact.com/topic/187052-script-pour-inventaire-automatique-vers-glpi-et-tests-mat%C3%A9riel/</link><description><![CDATA[<p>
	Bonjour !
</p>

<p>
	Pour nos besoins internes (reconditionnement d'ordinateurs), nous avons une grande quantité d'ordinateurs à inventorier, mais sans avoir à les gérer (autre que leur état/origine/destination/usage) dans GLPI.
</p>

<p>
	Le plus long étant effacement des données, test RAM et Stockage, nous avons décider de les intégrer.
</p>

<p>
	On a donc fait un script qui s'exécute sur Debian Live afin de pouvoir faire des clés USB d'inventaire/test.
</p>

<p>
	Disponible ici -&gt; <a href="https://github.com/CoNext-Computer/CoNext-bot" rel="external nofollow">https://github.com/CoNext-Computer/CoNext-bot</a>
</p>

<p>
	 
</p>

<p>
	Voici un récap:
</p>

<pre class="ipsCode">Ce script, découpé en plusieurs fichiers permet d'utiliser un environnement d'inventorisation via un agent GLPI, effacer un/des disques via NWipe, de tester les disques durs et la RAM tout en consignant le résultat des opérations dans un répertoire réseau.

Il est étudié pour une installation sur une distribution Linux basée sur Debian (testé avec Debian-Live 11.5 sans interface graphique).

    init.sh Permet de récupérer automatiquement la dernière version de l'installateur du script (install.sh) depuis un chemin réseau / adresse web.

    main.conf Permet de configurer les différentes variables (chemins, options) nécessaires au bon fonctionnement du script.

    install.sh Permet d'installer l'agent GLPI, installe les paquets nécessaires à l'accès d'un serveur nfs, nwipe et télécharge le script général (script.sh), le script permettant le test des disques durs (smart.sh) ainsi que le logiciel de test de mémoire vive memtester.

    script.sh Permet à l'utilisateur final de saisir un numéro d'inventaire, correspondant ensuite au nom de l'ordinateur dans GLPI, d'éxecuter l'agent-glpi, monter un dossier partagé avec un serveur NFS afin d'y enregistrer les fichiers logs, éxecuter un test de mémoire vive, lancer l'effacement des disques ainsi qu'éxecuter un test rapide puis long des disques.

    smart.sh Créé par Meliorator (irc://irc.freenode.net/Meliorator) et amélioré par Ranpha, ce script permet de lister l'ensemble des stockages présents sur la machine et d'effectuer un test SMART short ou long suivant l'option choisie lors de son appel.

Merci à M3GHAN pour sa contribution à la partie nfs et à tous les tests effectués.
</pre>

<p>
	 
</p>

<p>
	Pour sa prochaine version (normalement semaine prochaine)
</p>

<p>
	- Paramétrage d'une identification Auth-Basic Apache pour le client GLPI
</p>

<p>
	- Envoi des logs sur un FTP
</p>

<p>
	 
</p>

<p>
	Si jamais des curieux veulent aller voir ce script et me faire un retour, ce serait volontiers, je ne suis pas dev et je ne pense pas avoir travaillé dans les règles de l'art ( Mais ça fonctionne <span class="ipsEmoji">😀</span> ).
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">187052</guid><pubDate>Fri, 11 Nov 2022 22:39:54 +0000</pubDate></item><item><title>Entra&#xEE;nement classifier Yolo</title><link>https://forum.nextinpact.com/topic/175222-entra%C3%AEnement-classifier-yolo/</link><description><![CDATA[<p>
	Bonjour,
</p>

<p>
	J'ai un petit projet d'expérimentation "YOLO" en ce moment. Je suis en train de construire un jeu de données pour un classifier qui doit distinguer plusieurs poses/postures.
</p>

<p>
	Question:
</p>

<ul>
	<li>
		Est-il intéressant que j'utilise plusieurs fois la même photo, mais une fois en normal, une fois avec le fond supprimé, une fois avec un fond totalement aléatoire pour aider l'algorithme d'apprentissage à sélectionner les zones intéressantes (c'est à dire moi et tout ceux qui prennent la pose)?
	</li>
	<li>
		Ou dois-je plutôt faire des photos avec la même pose en plein d'endroits différentes?
	</li>
	<li>
		Est-ce que je dois m'occuper de mettre des photos avec une zone intéressante de taille différente?
	</li>
</ul>
]]></description><guid isPermaLink="false">175222</guid><pubDate>Thu, 26 Nov 2020 16:59:52 +0000</pubDate></item><item><title>Fonction "recherche" effet globe application Appy Geek</title><link>https://forum.nextinpact.com/topic/186775-fonction-recherche-effet-globe-application-appy-geek/</link><description><![CDATA[<p>
	Bonjour à toutes et à tous,
</p>

<p>
	 
</p>

<p>
	Il y a quelques années, une application pour smartphone appelé <strong>Appy Geek</strong> possédait une fonction <u>recherche</u> assez sympa (voir photo)
</p>

<p style="text-align:center;">
	<br />
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="3996" data-ratio="165.33" width="199" alt="AppyGeek.png.c7416dde129437a722e4c5961ec469e8.png" src="https://forum.nextinpact.com/uploads/monthly_2022_10/AppyGeek.png.c7416dde129437a722e4c5961ec469e8.png" />
</p>

<p>
	Des mots qui tournaient ensemble pour créer un globe et qui nous permettait de choisir les thèmes des actualités que l'on voulait.<br />
	L'effet était assez cool pour une fonction recherche.<br />
	<br />
	L'application n'étant plus disponible, j'ai tout de même réussi à retrouver un fichier APK sur le net afin d'essayer d'examiner le code source mais sans réels résultats.
</p>

<p>
	Savez-vous comment je pourrai créer ce type de recherche afin de l'intégrer sur un site web ?<br />
	<br />
	Merci d'avance pour vos retours
</p>
]]></description><guid isPermaLink="false">186775</guid><pubDate>Wed, 19 Oct 2022 12:50:27 +0000</pubDate></item><item><title>Explorer une base de donn&#xE9;es sql express</title><link>https://forum.nextinpact.com/topic/185580-explorer-une-base-de-donn%C3%A9es-sql-express/</link><description><![CDATA[<p>
	Bonjour je travaille avec un logiciel de cao/fao qui a un pdm intégré. Les fichiers 3D sont donc dans le pdm mais on peut aussi y stocker des pdf, dxf, fichier word... Apparemment le pdm est en fait une base de données sql express. Elle n'est accessible que par le logiciel de cao/fao ou par un explorer vendu par l'éditeur du logiciel cao/fao. 
</p>

<p>
	Ma question : est il possible d'explorer et de consulter les fichiers stockés dans la base de données en passant par un explorateur de base données sql ? Est ce que ce genre d'explorateurs existe au moins ? De préférence en  version gratuite évidemment. ^^
</p>

<p>
	Merci
</p>
]]></description><guid isPermaLink="false">185580</guid><pubDate>Thu, 07 Jul 2022 18:57:39 +0000</pubDate></item><item><title>parall&#xE9;lisation des taches nodejs</title><link>https://forum.nextinpact.com/topic/177370-parall%C3%A9lisation-des-taches-nodejs/</link><description><![CDATA[<div>
	<div>
		<div>
			<div>
				<div>
					<div>
						<div>
							<div>
								<p>
									bonjour, je dispose d’un tableau d’objets js construit comme suis [{link:'https://some_url',text:"..."}].
								</p>

								<p>
									je cherche a validé les url afin de :
								</p>

								<ol>
									<li>
										vérifier que je dispose bien de l’url finale et si nécessaire la mettre a jour,
									</li>
									<li>
										supprimer du tableau les objets dont l’url finale est sans intérêt (celle dont le status code !=200, principalement)
									</li>
								</ol>

								<p>
									pour ce faire j’utilise 2 petites fonctions :
								</p>

								<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">async</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> validateURL</span><span class="pun">(</span><span class="pln">array</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">let</span><span class="pln"> elm </span><span class="kwd">of</span><span class="pln"> array</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">let</span><span class="pln"> finalURL </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">await</span><span class="pln"> terminalURL</span><span class="pun">(</span><span class="pln">elm</span><span class="pun">.</span><span class="pln">link</span><span class="pun">);</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">typeof</span><span class="pln"> finalURL </span><span class="pun">==</span><span class="pln"> </span><span class="str">'string'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            elm</span><span class="pun">.</span><span class="pln">link </span><span class="pun">=</span><span class="pln"> finalURL</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            array </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">.</span><span class="pln">filter</span><span class="pun">(</span><span class="pln">el </span><span class="pun">=&gt;</span><span class="pln"> el</span><span class="pun">.</span><span class="pln">link </span><span class="pun">!=</span><span class="pln"> elm</span><span class="pun">.</span><span class="pln">link</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="pln">array</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> array</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">async</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> terminalURL</span><span class="pun">(</span><span class="pln">url</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Promise</span><span class="pun">((</span><span class="pln">resolve</span><span class="pun">,</span><span class="pln"> reject</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        axios</span><span class="pun">({</span><span class="pln">
            method</span><span class="pun">:</span><span class="pln"> </span><span class="str">'get'</span><span class="pun">,</span><span class="pln">
            url</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">,</span><span class="pln">
            responseType</span><span class="pun">:</span><span class="pln"> </span><span class="str">'stream'</span><span class="pln">
        </span><span class="pun">}).</span><span class="pln">then</span><span class="pun">((</span><span class="pln">response</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">response</span><span class="pun">.</span><span class="pln">data</span><span class="pun">.</span><span class="pln">responseUrl</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                resolve</span><span class="pun">(</span><span class="pln">response</span><span class="pun">.</span><span class="pln">data</span><span class="pun">.</span><span class="pln">responseUrl</span><span class="pun">);</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">}).</span><span class="kwd">catch</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">error</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            reject</span><span class="pun">(</span><span class="pln">error</span><span class="pun">.</span><span class="pln">status</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">});</span><span class="pln">
    </span><span class="pun">}).</span><span class="kwd">catch</span><span class="pun">((</span><span class="pln">err</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="str">'some error'</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">});</span><span class="pln">
</span><span class="pun">}</span></pre>

								<pre>
 </pre>

								<p>
									ces fonction semble faire le job que j’attend, par contre je ne suis pas sur que mon code soit bien optimiser.
								</p>

								<p>
									De plus, de la façon dont j’ai structuré mon code, le traitement des url se fait de manière séquentielle, hors je souhaiterai que ce traitement ce fasse de manière parallèles. je m’explique :<br />
									L’appel à la fonction validateURL fait appel à la fonction terminalURL à qui elle passe l’url à contrôlé en paramètre.<br />
									En retour elle attend (await) de la fonction terminalURL l'url finale et modifie les valeurs de l’objet en fonction des résultats.
								</p>

								<p>
									Ce que je souhaiterai serait que la boucle for...of de la fonction validateURL lance mes différentes requêtes Axios en parallèle sans attendre les résultats de retour.<br />
									Et que, d’un autre coté, dés qu’une valeur est disponible, elle déclenche un évènement qui mette mon objet a jour.
								</p>

								<p>
									de quel coté dois je cherché ?
								</p>
							</div>

							<div>
								<div>
									 
								</div>
							</div>
						</div>
						 

						<div>
							 
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>

	<div>
		 
	</div>
</div>

<div>
	 
</div>

<div>
	 
</div>
]]></description><guid isPermaLink="false">177370</guid><pubDate>Fri, 12 Nov 2021 16:04:29 +0000</pubDate></item><item><title>[RESOLU] Site statique, pour un portfolio</title><link>https://forum.nextinpact.com/topic/176243-resolu-site-statique-pour-un-portfolio/</link><description><![CDATA[<p>
	Bonjour à tous,
</p>

<p>
	Je refais un vieux site-portfolio assez standard (CV, page de projets, page de contact, ...). Tout doit être statique (l'espace disque est minimal, donc pas de CMS à installer).
</p>

<p>
	J'ai longtemps lorgné sur Publii pour son coté "tout inclut" mais je coince sur deux points <span>:</span>
</p>

<ul>
	<li>
		<span>La gestion des tableaux assez "à l'arrache" (et pas sûr qu'on puisse définir des classes CSS là-dessus)</span>
	</li>
	<li>
		<span>Pas de formulaire de contact</span>
	</li>
</ul>

<p>
	 
</p>

<p>
	<span>J'ai regardé aussi Jekyll mais le problème est plus ou moins le même ...</span> Sans compter la pénibilité à installer 350 dépendances dans une VM pour pas pourrir la machine perso, VM qui sera utilisé 1 fois par an, etc ...
</p>

<p>
	 
</p>

<p>
	Bref, vous avez une idée sans pour autant installer une panoplie de framework, ça m'intéresse.
</p>

<p>
	Merci <span class="ipsEmoji">😉</span>
</p>

<p>
	 
</p>

<p>
	PS : pitié, pas NodeJS. <span><img alt=":transpi:" data-emoticon="" src="https://forum.nextinpact.com/uploads/emoticons/default_transpi.gif" title=":transpi:" loading="lazy"></span>
</p>
]]></description><guid isPermaLink="false">176243</guid><pubDate>Mon, 06 Sep 2021 13:32:01 +0000</pubDate></item><item><title>erreur ETIMEOUT nodejs</title><link>https://forum.nextinpact.com/topic/177257-erreur-etimeout-nodejs/</link><description><![CDATA[<p>
	bonjour, j'ai une requete http.get(url) qui retourne une erreur ETIMEOUT. le probleme c'est que cette erreur fait planter tout mon script... est-ce normal ?
</p>
]]></description><guid isPermaLink="false">177257</guid><pubDate>Sun, 07 Nov 2021 12:21:56 +0000</pubDate></item><item><title>Cryptage mdp sql</title><link>https://forum.nextinpact.com/topic/175590-cryptage-mdp-sql/</link><description><![CDATA[<p>
	Bonjour, j'ai une base de donnée mysql dont j'aimerais connaitre le type de cryptage utilisé pour les mdp d'utilisateur, comment puis-je trouver cela ?
</p>

<p>
	 
</p>

<p>
	En gros, nous n'avons plus que la bdd mysql et ne connaissons pas les mdp de l'utilisateur admin du siteweb.
</p>

<p>
	nous voudrions changer le mdp, cependant nous ne sommes pas en capacité d'avoir accès (pour le moment) au fichier du site.
</p>

<p>
	 
</p>

<p>
	le site tourne sous K-SUP développé par Kosmos (je dirais en java mais pas sur).
</p>

<p>
	 
</p>

<p>
	un des mots de passe est crypté ainsi :  rk8Mc0EBC+8bjO4Uxq/WHA== 
</p>

<p>
	ca vous dit quelque chose ?
</p>

<p>
	 
</p>

<p>
	merci d'avance.
</p>
]]></description><guid isPermaLink="false">175590</guid><pubDate>Fri, 18 Jun 2021 17:13:25 +0000</pubDate></item><item><title>Forcer la synchro GLPI FusionInventory &#xE0; chaque ouverture de session</title><link>https://forum.nextinpact.com/topic/175555-forcer-la-synchro-glpi-fusioninventory-%C3%A0-chaque-ouverture-de-session/</link><description><![CDATA[<p>
	Bonjour à tous.
</p>

<p>
	Je suis à la recherche d'un script pour créer un .bat ou autre qui se lancera automatiquement à l'ouverture de session.
</p>

<p>
	En gros, je vais pousser via PowerShell (et intune) un script sur chaque poste de mon parc informatique.
</p>

<p>
	il devra ouvrir en mode silencieux l'url suivante : http://localhost:62354/now à chaque ouverture de session de l'utilisateur.
</p>

<p>
	<br />
	Pouvez-vous m'aider ?
</p>
]]></description><guid isPermaLink="false">175555</guid><pubDate>Wed, 09 Jun 2021 06:38:48 +0000</pubDate></item><item><title>Shell unix: comment afficher le contenu d'un fichier txt dans le corps d'un mail?</title><link>https://forum.nextinpact.com/topic/175355-shell-unix-comment-afficher-le-contenu-dun-fichier-txt-dans-le-corps-dun-mail/</link><description><![CDATA[<p>
	Bonjour,
</p>

<p>
	Je souhaiterais savoir comment afficher le contenu d'un fichier .txt dans le corps d'un mail envoyé à partir d'un serveur unix.
</p>

<p>
	J'ai fait les commandes suivantes. Je peux envoyer le mail avec le fichier en pj.
</p>

<p>
	./init/appli status &gt;statutappli.txt &amp;&amp; cat statutappli.txt | mail -s "Statutappli" jakol@unix.fr
</p>

<p>
	Merci pour votre retour
</p>

<p>
	jakol
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">175355</guid><pubDate>Fri, 12 Mar 2021 08:23:46 +0000</pubDate></item><item><title>Base de donn&#xE9;es "inalterable" ?</title><link>https://forum.nextinpact.com/topic/175319-base-de-donn%C3%A9es-inalterable/</link><description><![CDATA[<p>
	Bonjour,<br />
	j'étudie comment créer un logiciel de facturation à code ouvert qui me servirait à moi-même (donc je suis dieu).<br />
	Pour respecter la loi je dois faire en sorte que les entrées de la base de données soient inaltérable (interdit de modifier ou supprimer une entrée).<br />
	Ma difficulté est qu'elle doit se protéger de moi-même.
</p>

<p>
	Je sais qu'on peux pas vraiment empêcher les modifications mais il existe certainement un moyen qui m'échappe pour qu'on ne puisse pas le faire sans que ça se sache (rendre la tâche suffisamment complexe pour que ça soit validable par l'AFNOR).
</p>

<p>
	Pour l'instant sur l'embryon je bosse sur sqlite (en python) mais les idées peuvent aussi être proposées pour PGSQL et MariaDB/MySQL.<br />
	Un mécanisme de la BDD ou un moyen cryptographique peut être ?<br />
	<br />
	J'ai songé créer la table et les triggers avec un compte admin à mot de passe aléatoire qui sera oublié après l'initialisation mais ça compliquerait légèrement la maintenance.<br />
	Hasher et signer servirait à rien puisque je suis dieu, j'aurais toutes les clés...
</p>

<p>
	Bref, je sèche <span class="ipsEmoji">😞</span>
</p>
]]></description><guid isPermaLink="false">175319</guid><pubDate>Fri, 12 Feb 2021 17:49:23 +0000</pubDate></item></channel></rss>
