Liste des Articles du Blog TECH
RechercheArticle
Cliquer sur une ligne pour avoir des détails
Mysql Activer l'AUTO_INCREMENT
MariaDB [jap]> desc note_tech; +---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | type | varchar(50) | YES | | NULL | | | titre | varchar(255) | YES | | NULL | | | contenu | text | YES | | NULL | | | image | varchar(255) | YES | | NULL | | | fichier | varchar(255) | YES | | NULL | | +---------+--------------+------+-----+---------+-------+ 6 rows in set (0.001 sec) MariaDB [jap]> ALTER TABLE note_tech MODIFY id INT(11) NOT NULL AUTO_INCREMENT; Query OK, 26 rows affected (0.049 sec) Records: 26 Duplicates: 0 Warnings: 0 MariaDB [jap]> desc note_tech; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | type | varchar(50) | YES | | NULL | | | titre | varchar(255) | YES | | NULL | | | contenu | text | YES | | NULL | | | image | varchar(255) | YES | | NULL | | | fichier | varchar(255) | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+ 6 rows in set (0.001 sec)
LINUX PM2 Surveillance et redémarrage de funigo
PM2 est conçu précisément pour surveiller tes processus et les redémarrer instantanément s'ils crashent, sans avoir besoin d'un script Cron externe. Voici comment configurer cela proprement sur ton Raspberry Pi : 1. La méthode recommandée : PM2 Autostart Au lieu de vérifier toutes les minutes avec Cron, laisse PM2 gérer le redémarrage au boot du Raspberry et la surveillance en temps réel. Lance ton application : Bash cd /var/www/funigo pm2 start server.js --name "funigo" Génère le script de démarrage automatique : Bash pm2 startup Cette commande va t'afficher une ligne de code commençant par sudo env PATH.... Copie et colle cette ligne dans ton terminal et valide. Sauvegarde la configuration actuelle : Bash pm2 save Désormais, si ton app crash, PM2 la relance immédiatement. Si ton Raspberry redémarre, PM2 relance funigo tout seul. Logs d'une application spécifique : pm2 logs <app_name_ou_id> Afficher seulement les dernières lignes (ex: 200) : pm2 logs --lines 200
powershell Compresser fichier JPG
PS C:\Fichiers_Users\funigo\doc\ps1> powershell -ExecutionPolicy Bypass -File .\Optimize-Jpg.ps1 -Path "C:\funigo fichier\photo_jpg_to_webp\Photo-shikoku" param ( [Parameter(Mandatory=$true)] [string]$Path, [int]$Quality = 75 # Qualité par défaut (75 est idéal pour le web) ) # 1. Localisation de ImageMagick (méthode robuste) $magickExe = Get-Command magick -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source if (-not $magickExe) { $defaultPath = "C:\Program Files\ImageMagick-7.1.2-Q16-HDRI\magick.exe" if (Test-Path $defaultPath) { $magickExe = $defaultPath } } if (-not $magickExe) { Write-Error "ImageMagick n'est pas détecté." return } # 2. Vérification du répertoire if (-not (Test-Path $Path)) { Write-Error "Le répertoire spécifié n'existe pas." return } # 3. Récupérer les fichiers JPG et JPEG $images = Get-ChildItem -Path $Path -File | Where-Object { $_.Extension -match "^\.(jpg|jpeg)$" } if ($images.Count -eq 0) { Write-Host "Aucun fichier .jpg ou .jpeg trouvé dans : $Path" -ForegroundColor Yellow return } Write-Host "Optimisation de $($images.Count) fichiers JPG (Qualité: $Quality%)..." -ForegroundColor Cyan foreach ($img in $images) { Write-Host "Traitement de : $($img.Name)..." -NoNewline # Calcul de la taille avant $oldSize = $img.Length / 1KB # Exécution de l'optimisation # -strip : enlève les métadonnées # -interlace Plane : crée un JPG progressif (mieux pour le web) # -sampling-factor 4:2:0 : standard de compression couleur & $magickExe "$($img.FullName)" -strip -quality $Quality -interlace Plane -sampling-factor 4:2:0 "$($img.FullName)" # Calcul de la taille après $newSize = (Get-Item $img.FullName).Length / 1KB $gain = [Math]::Round($oldSize - $newSize, 2) $percent = [Math]::Round(($gain / $oldSize) * 100, 1) Write-Host " Terminé (Gain: $gain KB / -$percent%)" -ForegroundColor Green } Write-Host "`nOptimisation terminée !" -ForegroundColor Cyan
PowerShell Compresser photos PNG
PS C:\Fichiers_Users\funigo\doc\ps1> powershell -ExecutionPolicy Bypass -File .\Optimize-Png.ps1 -Path "Nom du répertoire des photos à compresser"
Powershell Convertir JPG en webp
PS C:\Users\fredr\Downloads\photo_jpg_to_webp> powershell -ExecutionPolicy Bypass -File .\photo_jpg_to_webp.ps1 -Path "C:\Users\fredr\Downloads\photo_jpg_to_webp" Utilisation de : C:\Program Files\ImageMagick-7.1.2-Q16-HDRI\magick.exe Début de la conversion de 15 images... Conversion : Enoshima.JPG -> Enoshima.webp Conversion : Kamakura.JPG -> Kamakura.webp Conversion : Kobe5.JPG -> Kobe5.webp Conversion : Kyoto.jpg -> Kyoto.webp Conversion : Kyoto1.jpg -> Kyoto1.webp Conversion : Kyoto5.jpg -> Kyoto5.webp Conversion : Kyoto6.jpg -> Kyoto6.webp Conversion : Nara4.JPG -> Nara4.webp Conversion : Nara7.JPG -> Nara7.webp Conversion : Nikko8.JPG -> Nikko8.webp Conversion : Osaka5.JPG -> Osaka5.webp Conversion : Osaka6.JPG -> Osaka6.webp Conversion : sendai3.JPG -> sendai3.webp Conversion : sendai4.JPG -> sendai4.webp Conversion : sendai5.JPG -> sendai5.webp Terminé ! Vos images WebP sont prêtes.
Linux init git
git init hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch <name> hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m <name> Initialized empty Git repository in /var/www/funigo/.git/ ls -ltr /var/www/funigo/.git/ total 32 drwxrwxr-x 2 fred fred 4096 Feb 16 17:40 info drwxrwxr-x 2 fred fred 4096 Feb 16 17:40 hooks -rw-rw-r-- 1 fred fred 73 Feb 16 17:40 description drwxrwxr-x 2 fred fred 4096 Feb 16 17:40 branches drwxrwxr-x 4 fred fred 4096 Feb 16 17:40 refs drwxrwxr-x 4 fred fred 4096 Feb 16 17:40 objects -rw-rw-r-- 1 fred fred 23 Feb 16 17:40 HEAD -rw-rw-r-- 1 fred fred 92 Feb 16 17:40 config more /var/www/funigo/.git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/fredrob622/funigo_google_ai.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "main"] remote = origin merge = refs/heads/main git remote -v origin https://github.com/fredrob622/funigo_google_ai.git (fetch) origin https://github.com/fredrob622/funigo_google_ai.git (push) git add * git commit -m "202509141800 avec la documentation mise à jour" git branch -M main git push -u origin main git log --oneline
Windows Installation de ComfyUI
Installation de ComfyUI Étape 1 : Télécharger ComfyUI powershellcd C:\Users\fredr git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI Étape 2 : Installer PyTorch (CPU version) python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu Étape 3 : Installer les dépendances de ComfyUI python -m pip install -r requirements.txt Étape 4 : Installer torch-directml (pour Intel Arc) python -m pip install torch-directml Étape 5 : Lancer ComfyUI python main.py --directml
PowerShell Voir le CPU lamémoire et la carte graphic
Voir la mémoire --------------- $os = Get-CimInstance Win32_OperatingSystem [PSCustomObject]@{ 'RAM totale (GB)' = [math]::Round($os.TotalVisibleMemorySize/1MB,2) 'RAM libre (GB)' = [math]::Round($os.FreePhysicalMemory/1MB,2) 'RAM utilisée (%)' = [math]::Round((1 - ($os.FreePhysicalMemory/$os.TotalVisibleMemorySize))*100,2) } Voir le processeur et la mémoire -------------------------------- Get-ComputerInfo | Select-Object CsProcessors, CsTotalPhysicalMemory CsProcessors CsTotalPhysicalMemory ------------ --------------------- {Intel(R) Core(TM) Ultra 9 185H} 33863876608 PS C:\Users\fredr> Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer, Model Manufacturer Model ------------ ----- GEEKOM GT1 Mega PS C:\Users\fredr> Get-CimInstance Win32_VideoController | Select-Object Name, AdapterRAM Name AdapterRAM ---- ---------- Intel(R) Arc(TM) Graphics 2147479552
LINUX PROD nodejsd pm2
sudo npm install -g pm2 Démarrage: ---------- cd /var/www/funigo pm2 start server.js --name funigo Les commandes ------------- pm2 status pm2 logs funigo pm2 restart funigo pm2 stop funigo
LINUX Sauvegarde funigo sur USB
********************************************************************************** # Faire la sauvegarde sur la clé USB ********************************************************************************** Faire le tar compresser ----------------------- cd /var/www timestamp=$(date +%Y%m%d_%H%M%S) && \ sudo tar czf /media/fred/back_funigo/funigo_$timestamp.tgz \ --exclude='./funigo/node_modules' \ funigo Vérification ------------ fred@funigo:/var/www $ ls -lh /media/fred/back_funigo/fu* -rwxr-xr-x 1 root root 283M Feb 2 10:22 /media/fred/back_funigo/funigo_20260202_102234.tgz
Linux Apache configuration
fichier /etc/apache2/apache2.conf fred@funigo:~ $ sudo cat /etc/apache2/sites-available/funigo.conf # Redirection de HTTP vers HTTPS <VirtualHost *:80> ServerName www.funigo.fr ServerAlias funigo.fr # On redirige tout vers la version sécurisée Redirect permanent / https://www.funigo.fr/ </VirtualHost> # Configuration principale pour HTTPS (SSL) <VirtualHost *:443> ServerName www.funigo.fr ServerAlias funigo.fr # On adapte vos chemins Windows vers Linux SSLEngine on SSLCertificateFile "/etc/letsencrypt/live/funigo.fr/fullchain.pem" SSLCertificateKeyFile "/etc/letsencrypt/live/funigo.fr/privkey.pem" # Vos headers de sécurité [cite: 81, 82] Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" <IfModule mod_headers.c> Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'sha256-8AFl6gs2BjOGxU9eZtoVWi4wLFMR4DkrvF+TlMsKORc='; style-src 'self' https://cdnjs.cloudflare.com 'unsafe-inline'; connect-src 'self' https://api.open-meteo.com https://api.exchangerate-api.com https://worldtimeapi.org https://cdn.jsdelivr.net; img-src 'self' data:; font-src 'self' https://cdnjs.cloudflare.com data:;" Header set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options "nosniff" Header set Referrer-Policy "no-referrer-when-downgrade" </IfModule> # Configuration du Reverse Proxy vers Node.js ProxyPass /.well-known ! ProxyPreserveHost On ProxyRequests Off ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/ # Chemins des logs version Linux ErrorLog ${APACHE_LOG_DIR}/funigo-error.log CustomLog ${APACHE_LOG_DIR}/funigo-access.log common </VirtualHost> ******************************************************************************************************************************* Activer les modules Apache ******************************************************************************************************************************* 1. Préparer le terrain : Activer les modules Apache Sur Windows, vous activiez les modules avec des lignes LoadModule directement dans le fichier. Sur Raspberry Pi, c'est bien plus simple ! On utilise des commandes pour "allumer" les options. Ouvrez votre terminal et tapez ces commandes pour activer ce dont votre configuration a besoin: sudo a2enmod ssl (Pour le cadenas vert) sudo a2enmod proxy proxy_http (Pour parler à votre app Node.js) sudo a2enmod headers (Pour la sécurité renforcée) sudo a2enmod rewrite (Pour les redirections) sudo a2enmod ssl sudo a2enmod proxy proxy_http sudo a2enmod headers sudo a2enmod rewrite sudo systemctl restart apache2 fred@funigo:~ $ sudo a2ensite funigo.conf Enabling site funigo. To activate the new configuration, you need to run: systemctl reload apache2 On copie les fichiers .pem de window vers linux sudo cp ~/apache-file/*.pem /etc/letsencrypt/live/funigo.fr fred@funigo:~ $ sudo systemctl reload apache2
SQL Supprimer une vue
MariaDB [jap]> show FULL TABLES where table_type = 'view'; +---------------+------------+ | Tables_in_jap | Table_type | +---------------+------------+ | v_quiz_ora | VIEW | | vue_quiz_2 | VIEW | | vue_quiz_N2 | VIEW | | vue_quiz_N4 | VIEW | | vue_quiz_N5 | VIEW | | vue_quiz_n1 | VIEW | | vue_quiz_n2 | VIEW | | vue_quiz_n3 | VIEW | | vue_quiz_n4 | VIEW | +---------------+------------+ 9 rows in set (0.001 sec) MariaDB [jap]> drop view vue_quiz_N5; Query OK, 0 rows affected (0.006 sec)
mysql Mysql configuration du service MYSQL par modification de la clé
Ordinateur\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL ImagePath --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL
HTML Ouvrir un fichier dans un onglet
Ouvrir un fichier dans un onglet
CSS Faire clignoter un élément (ex paramètre)
Faire clignoter le paragraphe <p style="animation: blink 2s infinite;"><br>Cliquer sur une ligne pour avoir des détails<br></p> Blink est l’identifiant qui permet la définition du keyframe dans le css Dans le css définition de @keyframes blink { 0% { opacity: 1; } 20% { opacity: 0; } 100% { opacity: 1; } }
GIT Faire un commit
git add * git commit -m "202509141800 avec la documentation mise à jour" git branch -M main git push -u origin main git log --oneline History
SQL Inserer des données avec un retour à la ligne dans un champ
Pour insérer des retours à la ligne dans une colonne texte (comme ARTICLE ou CONTENU) dans MySQL, tu peux utiliser la séquence d’échappement qui représente un saut de ligne. Par exemple : INSERT INTO funigo_blog (TITRE, ARTICLE, DATE_CREAT, DATE_MODIF) VALUES ('Titre de l'article', 'Première ligne Deuxième ligne Troisième ligne', '2025-09-10', '2025-09-10'); Autre méthode avec la fonction CHAR() pour insérer un saut de ligne (code ASCII 10) : INSERT INTO funigo_blog (TITRE, ARTICLE, DATE_CREAT, DATE_MODIF) VALUES ('Titre', CONCAT('Première ligne', CHAR(10), 'Deuxième ligne', CHAR(10), 'Troisième ligne'), '2025-09-10', '2025-09-10');
SQL Voir l'année et le niveau intégré dans la table quiz
mysql> SELECT DISTINCT annee, niveau FROM quiz; +-------+-----------+ | annee | niveau | +-------+--------+ | 1991 | N3 | | 1991 | N4 | | 1993 | N4 | | 1992 | N3 | | 1992 | N4 | | 1991 | N2 | | 1993 | N3 | | 1994 | N4 | | 1992 | N2 | +-------+--------+
SQL Insérer des valeurs dans une table
INSERT INTO vocab_char (niveau, kana, kanji, francais) VALUES ('N5', 'つかう', '使う', 'employer, utiliser'); N5 つかう 使う employer, utiliser select * from vocab_char where kanji = '使う'; mysql> select * from vocab_char where kanji = '使う'; +------------+--------+-----------+--------+------------------------+ | voca_index | niveau | kana | kanji | francais | +------------+--------+-----------+--------+------------------------+ | 26312 | N5 | つかう | 使う | employer, utiliser | +------------+--------+-----------+--------+-------------------------+ 1 row in set (0.00 sec)
MYSQL Avoir les caractères japonais sous POWERSHELL
PS C:WINDOWSsystem32> mysql --default-character-set=utf8mb4 -u root -p Enter password: **********
SQL Renuméroter l'index d’une table
Créer une nouvelle table temporaire avec la même structure (sauf l'ID) : Nous allons créer une table temporaire pour y stocker les données avec les nouveaux IDs. CREATE TABLE quiz_new ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, ANNEE INT, NIVEAU VARCHAR(2), TEXTE TEXT, REP_OK TEXT, QUESTION TEXT, REP1 TEXT, REP2 TEXT, REP3 TEXT, REP4 TEXT ); Insérer toutes les données de l'ancienne table dans la nouvelle, en générant de nouveaux IDs consécutifs : C'est ici que nous utilisons une variable utilisateur pour assigner un id consécutif à chaque ligne lors de l'insertion. SET @row_number = 0; -- Initialiser le compteur INSERT INTO quiz_new (ANNEE, NIVEAU, TEXTE, REP_OK, QUESTION, REP1, REP2, REP3, REP4) SELECT ANNEE, NIVEAU, TEXTE, REP_OK, QUESTION, REP1, REP2, REP3, REP4 FROM quiz ORDER BY id; -- Il est important de trier pour que les nouveaux IDs reflètent un ordre logique si désiré Note : Nous ne spécifions pas la colonne id dans l'INSERT de quiz_new, car elle est AUTO_INCREMENT et générera automatiquement les IDs à partir de 1. ORDER BY id est important ici pour s'assurer que si vous aviez des IDs non consécutifs dans l'ancienne table, les nouvelles IDs suivent l'ordre des anciennes IDs. Supprimer l'ancienne table quiz : DROP TABLE quiz; Renommer la nouvelle table quiz_new en quiz : ALTER TABLE quiz_new RENAME TO quiz;
SQL Intégrer un fichier csv dans une table après DELETE
Réinitialiser le compteur sans vider la table (uniquement si la table est déjà vide mais le compteur est élevé) Si vous avez déjà vidé la table avec DELETE FROM mais que le compteur n'a pas été réinitialisé : SQL -- 1. Vérifiez que la table est bien vide : SELECT COUNT(*) FROM quiz; -- Doit retourner 0 -- 2. Réinitialiser le compteur AUTO_INCREMENT à 1 ALTER TABLE quiz AUTO_INCREMENT = 1; -- 3. Ensuite, chargez vos données LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/quiz.csv' INTO TABLE quiz FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- Ajustez cette ligne si vos champs ne sont pas entourés de guillemets LINES TERMINATED BY ' ' IGNORE 1 ROWS -- Ajustez cette ligne si votre CSV n'a pas d'en-tête ( @dummy_id, -- Lit le premier champ du CSV dans une variable temporaire non utilisée ANNEE, NIVEAU, TEXTE, REP_OK, QUESTION, REP1, REP2, REP3, REP4 );
SQL Modifier une colonne en TEXT
ALTER TABLE quiz MODIFY question TEXT;
SQL Importer les données d'un fichier csv dans une table
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/quiz.csv' INTO TABLE quiz FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ' IGNORE 1 ROWS;
SQL Effacer les données d'une table
DELETE FROM quiz; : Supprime toutes les lignes, mais ne réinitialise pas le compteur AUTO_INCREMENT. TRUNCATE TABLE quiz; : Supprime toutes les lignes et réinitialise le compteur AUTO_INCREMENT à sa valeur de départ (généralement 1). C'est beaucoup plus rapide pour vider une table.
SQL Extraire les données d'une table dans un fichier csv
SELECT * FROM quiz INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/quiz_20250907.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ';
MYSQL Voir le répertoire autorisé à charger
mysql> SHOW VARIABLES LIKE 'secure_file_priv'; +------------------+------------------------------------------------+ | Variable_name | Value | +------------------+------------------------------------------------+ | secure_file_priv | C:ProgramDataMySQLMySQL Server 8.0Uploads | +------------------+------------------------------------------------+ 1 row in set, 1 warning (0.00 sec)
MYSQL Avoir UTF8 dans Mysql 8.0 Command Line CLI
mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | cp850 | | character_set_connection | cp850 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | cp850 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | C:Program FilesMySQLMySQL Server 8.0sharecharsets | +--------------------------+---------------------------------------------------------+ 8 rows in set, 1 warning (0.01 sec) Se logger avec powershell Mysql -u root -p --default-character-set=utf8mb4